Tech Lab2 min read
블록체인 코스 #6: 트랜잭션 구조·입출력·락타임·검증 가이드
비트코인 트랜잭션의 핵심(입력·출력·스크립트·락타임)과 검증 과정을 구조도·표·예시로 압축 정리. 개발·학습·문서화에 바로 쓰는 가이드.
#비트코인#트랜잭션#UTXO#ScriptSig#ScriptPubKey#Locktime
이 글을 통해 비트코인 트랜잭션의 데이터 구조와 검증 흐름을 빠르게 이해하고, 개발·분석에 바로 적용할 수 있습니다.

트랜잭션이란
- 송금 요청을 온체인에 기록하는 데이터 단위입니다.
- 트랜잭션은 이전 출력(UTXO)을 소모해 새 출력을 생성합니다.
- 블록 구조가 궁금하다면 내부 문서 “블록 구조 가이드” 를 참고하세요. 블록 구조 가이드
핵심 필드 요약 표
| 구분 | 필드/요소 | 크기 | 설명 |
|---|---|---|---|
| 공통 | 버전(Version) | 4바이트 | 직렬화 형식/프로토콜 신호 |
| 입력(Input) | txid | 32바이트 | 참조할 이전 트랜잭션 해시 |
| 입력 | vout(출력 인덱스) | 4바이트 | 사용할 UTXO의 인덱스 |
| 입력 | scriptSig 길이/본체 | 가변 | 소유권 증명(서명·공개키 등) |
| 입력 | 시퀀스(Sequence) | 4바이트 | RBF/상대락(옵션) |
| 출력(Output) | value | 8바이트 | 사토시 단위 금액 |
| 출력 | ScriptPubKey 길이/본체 | 가변 | 잠금 조건(수신자 제약) |
| 공통 | locktime | 4바이트 | 블록 높이/시간 기반 유효화 |
입력(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) 은 송신자 지갑의 또 다른 주소로 별도 출력으로 보냅니다.

락타임(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
}
팁: 세그윗/탭루트 사용 비율이 높을수록 같은 블록에 더 많은 트랜잭션을 담을 수 있습니다.