블록체인 공부 - 비트코인 거래(transaction)의 구조

  비트코인 네트워크에서 거래들은 모여서 블록을 형성한다. 블록 내에 있는 거래들을 살펴보면 크게 거래의 버전, 입력값 카운터(입력값 개수), 입력 값, 출력 값 카운터(출력 값 개수), 잠금시간으로 나눌 수 있다. ‘카운터’라는 단어에서 알 수 있듯이 입력 값과 출력 값은 여러 개로 구성될 수 있다. 입력 값의 경우 필요한 액수보다 작으면서, 그 중에 가장 큰 utxo들을 greedy알고리즘으로 찾아내고 그 utxo들에 대한 정보를 모두 기록한다. 입력 값의 내부 구조를 살펴보면 자신이 그 utxo를 받았던 거래를 포인팅하는 거래 해시(그 거래를 받았음을 실제로 입증하기 위해 사용), 출력 값 인덱스(포인팅한 거래의 출력 값에서 몇 번째 utxo가 내가 받은 utxo인지), 해제 스크립트(공개키와 디지털 서명으로 구성) 등으로 구성되어 있다. 출력 값의 경우 출력 총액, 잠금 스크립트 크기, 잠금 스크립트(공개 키 해시와 스크립트 연산자 등으로 구성)로 구성되어 있다.

   거래가 승인되려면 입력 값에 적은 utxo가 유효한지(정말 송신자의 소유가 맞는지)를 가장 먼저 확인해야 한다. 먼저 입력 값의 거래 해시와 인덱스를 통해 그 utxo를 받은 것을 나타내는 출력 값의 잠금 스크립트를 찾고, 잠금 스크립트와 해제 스크립트를 concatenate한 후 비트코인 거래 스크립트에 의해 해당 거래가 유효함을 입증한다. 최종적으로 true값이 리턴되면 거래가 유효하다고 하는데, 이는 채굴자에 의해 계산된다. 유효함이 확인되면 거래를 구성한다. 이 때 입력 값의 utxo 총합은 출력 값보다 항상 작은데, 이 차액은 채굴자에게 수수료로 지급된다.  또 하나의 특징적인 점으로는 잠금 시간을 들 수 있는데, 잠금 시간은 예약된 거래와 같다. 값이 특정 값보다 작을 때는 몇 개 블록 이후에 결제 될 것인지 그 ‘몇 개’를 의미하고, 클 때는 유닉스 타임스탬프를 의미해 거래 성사까지의 시간을 나타낸다.

댓글

가장 많이 본 글