Tech Lab2 min read

블록체인 코스 #6: 트랜잭션 구조·입출력·락타임·검증 가이드

비트코인 트랜잭션의 핵심(입력·출력·스크립트·락타임)과 검증 과정을 구조도·표·예시로 압축 정리. 개발·학습·문서화에 바로 쓰는 가이드.

#비트코인#트랜잭션#UTXO#ScriptSig#ScriptPubKey#Locktime

이 글을 통해 비트코인 트랜잭션의 데이터 구조와 검증 흐름을 빠르게 이해하고, 개발·분석에 바로 적용할 수 있습니다.

트랜잭션 입력 출력 구조

트랜잭션이란

  • 송금 요청을 온체인에 기록하는 데이터 단위입니다.
  • 트랜잭션은 이전 출력(UTXO)을 소모해 새 출력을 생성합니다.
  • 블록 구조가 궁금하다면 내부 문서 “블록 구조 가이드” 를 참고하세요. 블록 구조 가이드

핵심 필드 요약 표

구분필드/요소크기설명
공통버전(Version)4바이트직렬화 형식/프로토콜 신호
입력(Input)txid32바이트참조할 이전 트랜잭션 해시
입력vout(출력 인덱스)4바이트사용할 UTXO의 인덱스
입력scriptSig 길이/본체가변소유권 증명(서명·공개키 등)
입력시퀀스(Sequence)4바이트RBF/상대락(옵션)
출력(Output)value8바이트사토시 단위 금액
출력ScriptPubKey 길이/본체가변잠금 조건(수신자 제약)
공통locktime4바이트블록 높이/시간 기반 유효화

입력(Input): UTXO를 어떻게 쓰나

  • 입력은 이전 트랜잭션의 출력(UTXO) 를 가리킵니다.
  • scriptSig(세그윗 전통) 또는 witness 데이터(세그윗)는 소유권 증명을 담습니다.
  • 여러 입력을 모아 잔액을 합산할 수 있으며, 수수료는 입력 총액 - 출력 총액입니다.

P2PKH의 ScriptSig/ScriptPubKey 예시

# ScriptPubKey (락)
OP_DUP OP_HASH160 <RecipientPubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

# ScriptSig (해제)
<Signature> <PublicKey>

출력(Output): 누구에게, 얼마를 잠그나

출력은 금액(value)잠금 스크립트(ScriptPubKey) 로 구성됩니다. 일반 송금은 P2PKH/P2WPKH, 최신 스킴은 Taproot(P2TR)가 널리 사용됩니다. 거스름돈(Change) 은 송신자 지갑의 또 다른 주소로 별도 출력으로 보냅니다.

입력 UTXO들이 합쳐져 두 개의 출력

락타임(Locktime)과 시퀀스

locktime은 블록 높이 또는 UNIX 시간으로 유효 시점을 지정합니다. sequence는 RBF/상대 시간 락(OP_CHECKSEQUENCEVERIFY) 등과 함께 동작할 수 있습니다. 주의: 락 조건이 충족되기 전엔 노드가 트랜잭션을 확정 처리하지 않습니다.

검증 흐름 한눈에

노드는 각 입력의 서명·소유권을 확인하고 이중지불 방지를 검증합니다. 스크립트 실행 결과가 참이어야 하며, 수수료가 0 이상이어야 합니다. 정책/리밋(최소 수수료, 크기 제한 등)을 만족해야 mempool에 반영됩니다.

간단 JSON 예시

{
  "version": 1,
  "inputs": [
    {
      "txid": "abcd1234...",
      "vout": 0,
      "scriptSig": { "asm": "<signature> <public key>", "hex": "..." },
      "sequence": 4294967295
    }
  ],
  "outputs": [
    {
      "value": 0.01,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 <recipient's public key hash> OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "..."
      }
    }
  ],
  "locktime": 0
}

팁: 세그윗/탭루트 사용 비율이 높을수록 같은 블록에 더 많은 트랜잭션을 담을 수 있습니다.

참고 링크

다음으로 읽어볼 글