스마트 컨트랙트는 블록체인 네트워크에 저장된 자동 실행 코드로, 조건이 충족되면 중개자 없이 자동으로 계약을 이행합니다. 스마트 컨트랙트는 규칙을 투명하고 안정적으로 집행함으로써 앱, DeFi, NFT, DAO를 구동합니다. 스마트 컨트랙트는 특정 네트워크에만 국한되지 않으며, Ethereum과 기타 EVM 호환 블록체인, Solana, Cardano, Polkadot, Sui 모두 각자의 프로그래밍 언어와 실행 모델을 사용해 스마트 컨트랙트를 실행합니다. 스마트 컨트랙트는 온체인에 존재하기 때문에 중개자 없이 실행되고, 누구든 규칙을 확인할 수 있으며, 한 번 배포되면 일반적으로 변경이 불가능합니다. 스마트 컨트랙트는 DeFi 프로토콜, 스테이블코인, NFT, DAO를 포함한 대부분의 블록체인 앱의 핵심 구성 요소입니다.
면책 조항: 이 가이드는 교육 목적으로만 제공됩니다. 재정적 조언이 아니며, 권유도 아니고, 영국 독자를 대상으로 하지 않습니다. 스마트 컨트랙트와의 상호작용에는 위험이 따르며 모든 사용자에게 적합하지 않을 수 있습니다.
스마트 컨트랙트의 작동 방식
개발자가 컨트랙트를 작성하고 블록체인에 한 번 배포합니다. 그 이후부터는 누구나 이와 상호작용할 수 있으며, 조건이 충족될 때마다 로직이 실행됩니다. 예를 들어 결제가 수신되면 토큰을 지급하거나, 특정 블록 높이 이후에 사용자가 자금을 인출할 수 있게 합니다. 스마트 컨트랙트를 지원하는 모든 네트워크에서 두 가지 속성이 공통적으로 적용됩니다. 실행은 자동으로 이루어지며 중개자가 필요 없고, 코드는 기본적으로 불변이므로 업그레이드 가능하도록 설계되지 않은 한 버그가 영구적으로 남습니다.
스마트 컨트랙트를 실행하는 데는 비용이 발생합니다. 모든 네트워크는 컨트랙트가 사용하는 연산과 스토리지를 처리하기 위해 네트워크 수수료를 부과합니다. Ethereum과 대부분의 EVM 체인에서는 이를 "gas"라고 부르며, 다른 곳에서는 다른 명칭과 수수료 모델을 사용합니다(Solana의 트랜잭션별 수수료, Cardano의 트랜잭션별 수수료 및 스크립트 실행 단위, Polkadot의 가중치 기반 수수료). 방식은 다르지만 원칙은 동일합니다. 블록체인에서 코드를 실행하면 네트워크 리소스가 소비되며, 누군가가 그 비용을 부담해야 합니다.
스마트 컨트랙트의 간략한 역사
스마트 컨트랙트의 개념은 블록체인보다 앞서 등장했습니다. 컴퓨터 과학자이자 법학자인 Nick Szabo는 1994년에 "스마트 컨트랙트"라는 용어를 처음 만들었고, 1996년 에세이에서 이를 발전시켰습니다. 그는 계약 조건을 실행하는 전산화된 거래 프로토콜을 설명하며, 이 개념을 결제를 받으면 신뢰 없이도 상품을 안정적으로 제공하는 자판기에 비유했습니다(개념의 역사에서 참조된 Szabo의 원문). 당시에는 이러한 코드를 신뢰 최소화 방식으로 변조 불가능하게 실행할 수 있는 플랫폼이 존재하지 않았기 때문에, 이 아이디어는 약 20년간 대부분 이론으로만 남아 있었습니다.
2009년에 출시된 Bitcoin은 블록체인을 도입했지만 제한적인 스크립팅 언어(Bitcoin Script)만 지원했습니다. 이는 의도적으로 튜링 완전하지 않게 설계되어 다중 서명 요건이나 타임락 같은 지출 조건은 집행할 수 있지만, 임의의 범용 프로그램은 실행할 수 없습니다. Bitcoin Script는 기존 자금의 지출 방식을 제한하지만, 이후에 발생할 일에 대한 개방형 로직은 표현할 수 없습니다. 따라서 Bitcoin은 범용 스마트 컨트랙트 플랫폼으로 간주되지 않습니다.
2015년 7월 30일에 출시된 Ethereum은 범용 스마트 컨트랙트를 실행하기 위해 특별히 구축된 최초의 주요 블록체인으로, 모든 Ethereum 노드가 동일하게 실행하는 공유 런타임인 Ethereum Virtual Machine(EVM)을 통해 이를 구현했습니다(ethereum.org, Ethereum의 역사). 이를 통해 Ethereum은 이전 블록체인과 달리 프로그래밍이 가능해졌으며, 대부분의 스마트 컨트랙트 용어인 gas(네트워크 수수료), 컨트랙트 계정, Solidity가 여기서 유래한 이유이기도 합니다. 이후 수년간 다른 네트워크들도 각자의 언어와 실행 모델을 사용해 자체 스마트 컨트랙트 환경을 구축했습니다. Solana(2020), Cardano의 Plutus 스크립트(2021), Polkadot의 ink! 컨트랙트, Sui의 Move 기반 객체(2023) 등이 이 개념을 단일 네트워크를 훨씬 넘어 확장했습니다.
스마트 컨트랙트는 어디서 실행되나요?
스마트 컨트랙트가 사용하는 런타임과 언어는 배포되는 네트워크에 따라 완전히 달라집니다. 일부 네트워크는 컨트랙트가 읽고 쓰는 계정 잔액으로 상태를 추적하고(Ethereum의 계정 모델), 다른 네트워크는 개별적으로 지출 가능한 출력으로 상태를 추적하거나(Cardano의 eUTXO 모델, Bitcoin의 UTXO 모델의 확장), 개별적으로 소유된 객체로 추적합니다(Sui의 객체 중심 모델). 이러한 차이는 컨트랙트 작성 방식과 구성 방식에 영향을 미치지만, 기본적인 보장은 동일합니다. 코드는 자동으로 실행되며, 한 번 배포되면 변경이 어렵거나 불가능합니다.
네트워크 | 언어 | 실행 모델 | 주요 생태계 활용 |
Ethereum 및 EVM 네트워크 | Solidity; Vyper; EVM 바이트코드로 컴파일 | 계정 기반; 체인당 한 번에 하나의 컨트랙트 호출 실행 | DeFi; 스테이블코인; ERC-20 및 ERC-721 토큰 |
Solana | Rust, 주로 Anchor 프레임워크 사용 | Sealevel: 동일한 데이터를 건드리지 않는 트랜잭션을 병렬로 실행 | 고처리량 DeFi; NFT 마켓플레이스 |
Cardano | Plutus (Haskell 기반) | Extended UTXO (eUTXO): 제출 전에 트랜잭션 결과 검증 가능 | DeFi; 네이티브 토큰 발행 |
Polkadot (파라체인을 통해) | ink! (Rust 기반); Moonbeam 같은 EVM 파라체인은 Solidity도 실행 | Substrate 기반 파라체인 위에서 실행; 무허가 배포 | 파라체인 앱; 프로토타이핑 |
Sui | Move | 객체 중심: 트랜잭션이 소유 객체를 변경하여 병렬 처리 가능 | NFT; 게임; DeFi |
Bitcoin | Bitcoin Script | 제한적, 튜링 완전하지 않음; 지출 조건만 집행 | 다중 서명 지갑; 타임락; 레이어-2 프로토콜 |
출처: ethereum.org; Solana Sealevel; Cardano eUTXO; use.ink 문서; Sui Move 개념.
스마트 컨트랙트를 작성하고 사용하는 사람은 누구인가요?
개발자가 스마트 컨트랙트를 작성하고 배포합니다. 적절한 도구와 배포 비용을 충당할 만큼의 네트워크 네이티브 토큰만 있으면 누구든 할 수 있으며, 배포에 기반 네트워크의 허가는 필요하지 않습니다. 컨트랙트가 배포되면 누구나 이와 상호작용할 수 있으며, 보통 코드를 직접 작성하지 않고 앱의 인터페이스를 통해 이루어집니다. 토큰을 스왑하거나, NFT를 민팅하거나, DAO에서 투표하는 사람은 기반 언어나 런타임을 이해하지 않아도 스마트 컨트랙트 실행을 트리거하고 있는 것입니다.
토큰 표준
"토큰"으로 불리는 많은 자산은 공유 표준을 따르는 스마트 컨트랙트로, 지갑과 앱이 표준을 준수하는 모든 토큰과 동일한 방식으로 상호작용할 수 있게 합니다. Ethereum과 기타 EVM 체인에서 ERC-20은 대부분의 스테이블코인과 유틸리티 토큰을 포함한 대체 가능 토큰의 표준이며, ERC-721은 각 토큰이 고유한 NFT의 표준입니다. 다른 네트워크에도 각자의 실행 모델에 맞게 구축된 동등한 표준이 있습니다. 예를 들어 Solana의 SPL 토큰 표준이 있습니다.
스마트 컨트랙트는 무엇을 구동하나요?
생태계 전반에 걸쳐 스마트 컨트랙트는 앱의 핵심 엔진입니다. 대출, 차입, 거래를 위한 DeFi 프로토콜, NFT 및 디지털 자산 마켓플레이스, 그리고 거버넌스 규칙이 회사 내부 정책이 아닌 코드에 담긴 DAO가 이에 해당합니다. 구체적인 구현 방식은 네트워크마다 다르지만, 중개자 없이 계약을 집행하는 코드라는 기본 패턴은 일관됩니다.
스마트 컨트랙트는 왜 존재하나요?
스마트 컨트랙트는 계약을 집행하기 위해 신뢰할 수 있는 중개자에 대한 의존성을 제거하기 위해 존재합니다. 자금을 보관하고 규칙을 이행하기 위해 은행, 에스크로 에이전트, 플랫폼 운영자에 의존하는 대신, 규칙이 직접 코드로 인코딩되어 컨트랙트와 상호작용하는 모든 사람에게 동일하게 실행됩니다. 이것이 바로 어떤 네트워크가 코드를 호스팅하든 관계없이, 프로그래밍 가능한 자기 수탁 금융, 디지털 소유권, 블록체인 거버넌스를 대규모로 가능하게 하는 속성입니다.
토큰 승인 및 보안
앱을 사용할 때 스마트 컨트랙트에 토큰 승인을 부여하는 경우가 많습니다. 이는 특정 토큰을 사용자 대신 이동할 수 있는 권한입니다. 이는 일반적인 과정이지만, 악의적인 컨트랙트가 사용자가 의도한 것보다 더 많은 토큰을 이동할 수 있는 승인을 요청할 수 있기 때문에 흔한 공격 벡터이기도 합니다. 토큰 승인은 특정 금액으로 제한하거나 무제한으로 설정할 수 있습니다. MetaMask Extension은 서명 전에 컨트랙트 주소와 승인이 제한적인지 무제한인지 여부를 포함한 전체 토큰 승인 범위를 표시하여 사용자가 먼저 검토할 수 있게 합니다. 토큰 승인에 관한 가이드에서 검토 및 취소 방법을 확인하세요.
스마트 컨트랙트의 위험성
버그는 영구적입니다: 결함이 있는 불변 코드는 일반적으로 배포 후 패치할 수 없습니다.
감사는 위험을 줄이지만 완전히 제거하지는 못합니다: 감사를 받은 컨트랙트도 악용된 사례가 있습니다.
악의적인 컨트랙트는 특정 네트워크뿐만 아니라 스마트 컨트랙트를 지원하는 모든 네트워크에 존재합니다.
스마트 컨트랙트에 관한 자주 묻는 질문
스마트 컨트랙트는 블록체인 네트워크에 저장된 자동 실행 코드로, 중개자 없이 조건이 충족되면 자동으로 실행됩니다.
아니요. 이더리움은 2015년에 출시된 최초의 주요 범용 스마트 컨트랙트 플랫폼이지만, 현재 스마트 컨트랙트는 Solana, Cardano, Polkadot, Sui 등 다양한 네트워크에서 실행되며, 각 네트워크마다 고유한 언어와 실행 모델을 갖추고 있습니다.
블록체인 네트워크에 따라 스마트 컨트랙트 작성에 사용되는 프로그래밍 언어가 결정됩니다. 이더리움 및 기타 EVM 네트워크는 주로 Solidity 또는 Vyper를 사용하고, Solana는 Anchor 프레임워크와 함께 Rust를 사용하는 경우가 많습니다. Cardano는 Plutus(Haskell 기반)를 사용하고, Polkadot 파라체인은 ink!(Rust 기반)를 사용하며, Sui는 Move를 사용합니다.
기본적으로 그렇지 않습니다. 배포된 코드는 변경이 불가능합니다. 일부 컨트랙트는 업그레이드 메커니즘을 갖추도록 특별히 설계되기도 하지만, 그만큼 복잡성과 고유한 위험이 따릅니다.
이 기술은 여러 네트워크에서 이미 검증되었지만, 개별 컨트랙트에는 버그가 있거나 악의적인 경우도 있을 수 있습니다. 토큰 승인 내역을 주기적으로 검토하고 감사를 받은 앱만 사용하면 위험을 줄일 수 있습니다.
블록체인 네트워크에서 코드를 실행하면 네트워크의 검증자 또는 채굴자의 컴퓨팅 자원이 소비되므로, 네트워크는 이에 대한 네트워크 수수료를 부과합니다. 수수료 구조는 네트워크마다 다르지만, 사용한 연산에 대해 비용을 지불한다는 원칙은 모든 네트워크에 공통적으로 적용됩니다.