[스마트 컨트랙트] 2. 비트코인에서 스마트 컨트랙트

adc0612·2022년 10월 21일
0

스마트 컨트랙트

목록 보기
2/4

비트코인 스크립트(script)

  • 비트코인에서는 일반적인 프로그래밍 언어와 다르게 공식적인 문법이나 구문이 없는 간단한 연산목록으로 구성된 스크립트를 사용한다.
  • 스크립트에서 사용하는 연산들은 Opcode에 해당하며, 연산들은 c++로 작성되어 있다.
  • 네트워크의 모든 노드는 트랜잭션을 받을 때마다 자신의 로컬 컴퓨터에서 트랜잭션에 연결된 스크립트를 실행하며 이를 통해 비트코인이 송금된다. (i.e. 프로그래밍할 수 있는 화폐(Programmable Money)인 이유)
  • 트랜잭션은 블록체인에 한 번 올라가게 되면 위변조가 매우 어렵기 때문에, 모든 노드는 동일한 스크립트를 실행하고, 정확히 동일한 결과를 얻게 된다.

스크립트 원리

  • 스크립트는 역폴란드 표기법(Reverse Polish Notation)으로 작성된 스택 기반 튜링 불완전 언어이다.
  • 스크립트는 스택(FILO, First In Last Out)라고 부른다.
  • 스크립트 프로그램은 두 종류의 객체를 가지고 있다. 스크립트는 이 Opcode와 DATA를 일렬로 늘어놓은 것이다.
    • Opcode: 덧셈, 뺄샘, 곱셈과 같은 연산 작업을 나타낸다.
    • 데이터: Opcode가 아닌 모든 데이터는 원시 데이터로 해석되며, 스택에 들어가게된다.
  • 포인터(Pointer)는 일렬로 늘어진 Opcode와 데이터를 순서대로 하나씩 가리킨다. 가리킨 데이터를 스택에 넣고 Opcode를 카리키면 스택에서 데이터를 꺼낸다.
  • 노드가 네트워크로부터 새로운 트랜잭션을 받으면, ScriptSig와 ScriptPubkey 필드를 추출하여 연결하여 최종적으로 형태의 스크립트를 얻게 된다.
  • 노드는 이 스크립트와 빈 스택 하나를 사용해 스크립트를 실행하고, 실행이 완료되면 최상위 스택 요소가 1인지 확인한다. 1이면 트랜잭션이 유효하다고 간주하고 노드는 트랜잭션을 주변 노드들에게 전파한다.
  • 트랜잭션이 유효하지 않은 경우 트랜잭션을 보내지 않고, 이런 경우 주변 노드들에게 전파되지 않으므로 네트워크에 트랜잭션이 공유되지 않게 된다.
  • 트랜잭션은 네트워크에 있는 모든 노드가 받을 수 있기 때문에, 네트워크의 모든 노드는 전체 네트워크의 상태를 지키는 문지기 같은 역할을 하게 된다.

비트코인 스크립트가 스마트 컨트랙트인 이유

UTXO는 일종의 "계약"으로 정의될 수 있으며, 이 계약은 유효한 해제 조건이 주어지면 잠긴 비트코인을 이동시킨다.
오직 유효한 해제 조건이 주어져야만 코인을 송금할 수 있는 계약이다.
이 계약의 실행은 비트코인 네트워크가 보장하기 때문에 계약 이행을 강제하기 위한 중개자가 필요하지 않다.

0개의 댓글