스마트 컨트랙트는 블록체인에 저장된 프로그램으로, 트랜잭션이나 다른 컨트랙트가 호출하면 코드에 작성된 조건을 자동으로 실행합니다. 프로그램이란 컴퓨터 명령어의 집합입니다. 블록체인은 새로운 항목이 차례로 추가되는 공유 기록입니다. 트랜잭션은 블록체인으로 전송되는 요청입니다.
스마트 컨트랙트는 어디에 존재하나요?
스마트 컨트랙트는 블록체인상의 한 주소에 저장됩니다. 주소란 블록체인에서 사용자나 스마트 컨트랙트를 식별하는 값입니다. 컨트랙트의 코드와 그 코드가 보관하는 데이터는 해당 주소에 저장됩니다. 상태(state)란 스마트 컨트랙트가 보관하는 데이터로, 다음에 컨트랙트가 실행될 때도 그대로 남아 있는 데이터를 말합니다.
스마트 컨트랙트를 배포한다는 것은 코드를 담은 트랜잭션을 통해 해당 코드를 블록체인에 올려놓는 것을 의미합니다. 배포가 완료되면 컨트랙트는 트랜잭션을 받을 수 있는 주소를 갖게 됩니다.
스마트 컨트랙트는 어떻게 작동하나요?
스마트 컨트랙트는 트랜잭션이나 다른 컨트랙트가 자신의 함수 중 하나를 호출할 때 실행됩니다. 함수를 호출한다는 것은 컨트랙트에 그 함수를 실행해 달라고 요청하는 것입니다. 함수는 컨트랙트 코드 중 이름이 붙은 한 부분입니다. 컨트랙트 주소로 전송된 트랜잭션은 실행할 함수의 이름과, 그 함수에 필요한 데이터인 입력값을 함께 전달합니다.
블록체인 네트워크의 노드들이 스마트 컨트랙트의 코드를 실행합니다. 노드란 블록체인 네트워크의 소프트웨어를 실행하며 네트워크상의 다른 컴퓨터들과 연결되어 있는 컴퓨터를 말합니다. 코드가 컨트랙트의 상태를 변경하면, 그 변경 내용은 블록체인에 기록됩니다.
계정이란 주소와 잔액을 가진 블록체인상의 기록입니다. 잔액은 계정이 보유한 블록체인 네이티브 코인의 수량입니다. 네이티브 코인이란 비트코인의 BTC처럼 해당 블록체인 고유의 단위를 말합니다.
이더리움 공식 문서에 따르면, 이더리움에는 두 가지 종류의 계정이 있습니다. 사용자 계정은 개인 키를 가진 사람이 제어합니다. 개인 키란 트랜잭션에 서명하는 비밀 숫자입니다. 컨트랙트 계정은 코드를 보관하며, 스마트 컨트랙트는 컨트랙트 계정의 주소에 저장됩니다.
스마트 컨트랙트에 대한 호출은 사용자 계정이나 다른 컨트랙트로부터 옵니다. 이 글에서 "자동 실행(self-executing)"이라는 표현은 호출을 받으면 코드가 자신의 명령을 실행하는 컨트랙트를 가리킵니다. 이는 컨트랙트가 스스로 실행을 시작한다는 의미가 아닙니다. 컨트랙트 계정은 트랜잭션을 수신한 경우에만 메시지를 보낼 수 있기 때문입니다.
가상의 예시를 통해 하나의 호출 과정을 살펴보겠습니다. 실제 컨트랙트는 무엇을 보관하는지, 함수가 어떻게 작성되는지에 따라 다릅니다. 이 예시에서 컨트랙트는 두 주소 각각에 대해 보유 단위 수를 기록합니다. 단위(unit)란 컨트랙트가 관리하는 수량입니다. 주소 A는 100단위를, 주소 B는 20단위를 보유하고 있습니다.
- 사용자 계정이 컨트랙트의
transfer함수를 호출하는 트랜잭션을 보내, 주소 A에서 주소 B로 30단위를 이동해 달라고 요청합니다. - 노드들이 컨트랙트의 코드를 실행합니다.
- 코드는 주소 A가 최소 30단위를 보유하고 있는지 확인합니다.
- 코드는 주소 A를 70단위로 낮추고, 주소 B를 50단위로 올립니다.
- 이 변경 사항은 블록체인에 기록됩니다. 두 주소의 합계는 호출 전후 모두 120단위로 동일합니다.
스마트 컨트랙트는 무엇을 보유하고 무엇을 할 수 있나요?
스마트 컨트랙트는 사용자 계정과 마찬가지로 블록체인 네이티브 코인의 잔액을 보유할 수 있습니다. 또한 각 주소별 수량 등 여러 기록을 상태(state)에 보관할 수 있으며, 함수 호출을 통해 이러한 기록을 변경할 수 있습니다.
스마트 컨트랙트는 다른 컨트랙트를 호출할 수 있어, 한 컨트랙트의 코드가 다른 컨트랙트의 함수를 사용할 수 있게 해줍니다. 함수는 이벤트를 기록할 수 있는데, 이는 블록체인 외부의 소프트웨어가 감지할 수 있는 블록체인상의 알림입니다.
토큰 컨트랙트란 토큰을 생성하고 추적하는 스마트 컨트랙트입니다. 네이티브 코인과 달리, 토큰은 기존 블록체인에서 스마트 컨트랙트를 통해 발행되는 단위입니다. 토큰 표준이란 토큰 컨트랙트가 제공하는 함수와 이벤트에 대해 공개된 규격을 말합니다.
스마트 컨트랙트의 동작은 무엇으로 결정되며, 이후에도 변경될 수 있나요?
스마트 컨트랙트 주소에 저장된 코드가 그 컨트랙트의 동작을 결정합니다. 스마트 컨트랙트는 코드에 적힌 그대로 실행되며, 이는 작성자의 의도와 다를 수 있습니다. 컨트랙트가 배포된 이후 해당 주소의 코드 자체는 변하지 않지만, 실행되는 동작이 교체될 수 있도록 컨트랙트를 설계하는 것은 가능합니다.
스마트 컨트랙트는 동작을 교체할 수 있도록 설계될 수 있습니다. 한 컨트랙트가 두 번째 컨트랙트의 주소를 저장해 두고, 호출을 그쪽으로 전달하는 방식입니다. 첫 번째 컨트랙트가 저장된 주소를 변경할 수 있도록 설계되었다면, 첫 번째 컨트랙트의 주소는 그대로 유지하면서도 실행되는 동작은 바뀔 수 있습니다. 이런 방식으로 설계된 컨트랙트는 호출 대상 주소를 변경할 수 있는 계정도 함께 지정할 수 있습니다.
비트코인에는 스마트 컨트랙트에 해당하는 것이 있나요?
코인으로 BTC를 사용하는 암호화폐 네트워크인 비트코인에는 스크립트라는 대응 개념이 있습니다. 스크립트란 비트코인의 스크립트 언어로 작성된 규칙으로, 일정량의 BTC가 이동하기 전에 반드시 충족되어야 합니다. 2026년 10월 기준, 비트코인 공식 문서는 자사의 스크립트 언어를 의도적으로 제한된 기능만 갖추도록 설계했다고 설명합니다. BTCFi는 "비트코인 네이티브 금융(Bitcoin-native finance)"의 줄임말로, 스마트 컨트랙트를 비롯한 다양한 설계를 통해 BTC를 중심으로 구축되는 금융 활동을 가리키는 데 여러 주체가 사용하는 용어입니다.
스마트 컨트랙트의 코드 검토란 무엇인가요?
스마트 컨트랙트의 코드 검토는 작성자가 아닌 다른 사람들이 오류를 찾기 위해 해당 코드를 읽고 점검하는 과정입니다. 감사(audit)는 코드 검토를 수행하는 한 가지 방법입니다. 검토 과정에서도 오류를 놓칠 수 있기 때문에, 검토를 거쳤다고 해서 컨트랙트 코드에 오류가 없다는 것을 보장하지는 않습니다.
스마트 컨트랙트의 한계는 무엇인가요?
오라클이 없다면, 스마트 컨트랙트는 자신이 실행되는 블록체인상의 데이터만으로 작동합니다. 오라클이란 외부 데이터를 컨트랙트에 전달하는 서비스입니다. 외부 데이터란 해당 컨트랙트가 속한 블록체인에 저장되어 있지 않은 데이터로, 예를 들면 외부의 날짜 정보나 외부의 결과값 등을 말합니다.
이미 배포된 스마트 컨트랙트 코드에 오류가 있을 경우, 동작을 교체할 수 있도록 설계되어 있지 않은 한 그 오류는 그대로 남아 있을 수 있습니다.
2025년 11월 27일










