[블록체인] 비트코인 트랜잭션 모델

Donghun Seol·2022년 11월 15일
0

비트코인 트랜잭션 모델

비트코인 트랜잭션

UTXO

비트코인에서는 트랜잭션 수행시 신규블럭의 인풋이 마지막 블럭의 아웃풋을 소비한다. 아직 소비되지 않아 신규블럭에서 소비될 수 있는 트랜잭션의 아웃풋을 UTXO(Unspent Transaction Output)이라 한다.

소비되는 UTXO는 트랜잭션의 InputScript의 입력으로 들어가고, 트랜잭션이 완료되면 OuputScript를 통해 output을 뱉는다.

만약 10BTC 를 가지고 있는 A가 B에게 1 BTC를 송금한다면 다음과 같은 트랜잭션이 이루어진다.

  1. A는 자신이 10BTC를 받은 UTXO를 찾아서 전송 트랜잭션의 Input으로 활용한다.
  2. 해당 트랜잭션은 UTXO를 소비하고, output으로 새로운 UTXO를 생성한다.
  3. 새로운 UTXO는 각각 A에게 9BTC, B에게 1BTC를 전송하는 거래 내역이 담겨있다.
  4. 생성된 UTXO는 추후 거래에 소비될 수 있다.

트랜잭션 자체만으로는 해당 트랜잭션이 UTXO인지 판별 불가능하다. 따라서 전체 체인의 데이터를 보아야 UTXO 판별이 가능하다.

비트코인 스크립트의 세부 수행과정

인풋스크립트와 아웃풋 스크립트는 직렬화된 형태로 비트코인 가상머신위에서 동작한다. 인풋 스크립트에 포함된 <sig>, <PubK> 값과 아웃풋 스크립트에 포함된 DUP,HASH160, <PubKHash>, EQUALVERIFY , CHECKSIG 함수와 값이 단순한 스택머신 형태의 비트코인 가상머신 위에서 다음의 절차에 따라 동작한다.

비트코인 표준 스크립트 중 P2PKH(Pay to Public Key Hash)의 스크립트의 동작과정은 다음과 같다.

  1. sig값과 PubK 값을 스택에 푸쉬한다.
  2. DUP 명령어로 PubK를 복제해서 푸쉬한다.
  3. HASH160함수로 스택의 맨위에 있는 PubK를 해싱한 값으로 바꾼다.
  4. 아웃풋 스크립트의 PubKHash를 스택에 푸쉬한다.
  5. EQUALVERIFY함수로 두 해시값을 비교한다
  6. CHECKSIG로 sig값이 PubK와 유효한지 검증한다.
  7. 스택이 비워지며 스크립트가 정상 종료되고 인풋 스크립트가 아웃풋 스크립트를 소비한다.
  8. 해당 과정중 오류가 발생하면 스크립트는 종료된다.

비트코인 표준 스크립트

커스텀 스크립트도 일정 요건을 지켰을 경우 체인에서 수행가능하다.
해킹의 위험, 스크립트의 오류를 방지하기 위해 마이너들이 표준 스크립트를 만들었다. 블럭생성시 표준 스크립트에 맞는 트랜잭션이 우선적으로 블럭에 포함되므로 표준 스크립트에 맞춰서 스크립트를 작성하는 것이 권장된다.

profile
I'm going from failure to failure without losing enthusiasm

0개의 댓글