거래 출력 구축
거래 출력을 만드는 방법 - 수취인, 금액, 잠금 스크립트 정의. P2PKH, P2WPKH, 그리고 거스름돈 출력 포함.
0단계 ·
무엇을 배우는가
- 거래 출력의 구조
- P2PKH와 P2WPKH 잠금 스크립트가 작동하는 방식
- 항상 거스름돈 출력이 필요한 이유
출력 구조
각 출력은 거래가 확정된 후 존재할 새 UTXO를 정의합니다. 두 개의 필드를 포함합니다:
| 필드 | 크기 | 설명 |
|---|---|---|
| Value | 8 바이트 | 사토시 단위 금액 (리틀 엔디안) |
| ScriptPubKey | 가변 | 잠금 스크립트 - 이 출력을 쓰기 위한 조건 |
단일 출력이 16진수로:
# Value: 100,000 satoshis (0.001 BTC), little-endian
a086010000000000
# ScriptPubKey Length
19
# ScriptPubKey (P2PKH)
76a91489abcdefabbaabbaabbaabbaabbaabbaabbaabba88ac
Value: 사토시 단위 금액
출력 값은 항상 8바이트 리틀 엔디안 정수로 사토시(1 BTC = 100,000,000 사토시) 단위로 표현됩니다.
0.001 BTC = 100,000 sats → a086010000000000
0.01 BTC = 1,000,000 sats → 40420f0000000000
1.0 BTC = 100,000,000 sats → 00e1f50500000000
리틀 엔디안 변환: 16진수 값을 받고, 16개 16진수 문자로 패딩하고, 바이트 쌍을 뒤집습니다. 100,000 (0x186A0)의 경우:
0x186A0 → 00000000000186A0 → A086010000000000
ScriptPubKey: 잠금 스크립트
ScriptPubKey는 누가 이 출력을 쓸 수 있는지를 정의합니다. 다른 스크립트 유형은 다른 지출 조건을 만듭니다.
P2PKH (Pay-to-Public-Key-Hash)
고전적인 비트코인 출력입니다. 공개키 해시(1로 시작하는 비트코인 주소)에 자금을 잠급니다:
OP_DUP OP_HASH160 <20-byte pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
16진수로:
76 a9 14 <20 bytes> 88 ac
│ │ │ │ └─ OP_CHECKSIG
│ │ │ └───── OP_EQUALVERIFY
│ │ └───────────────────── Push 20 bytes
│ └───────────────────────── OP_HASH160
└───────────────────────────── OP_DUP
이 출력을 쓰려면, 해시가 내장된 pubKeyHash와 일치하는 서명과 공개키를 제공해야 합니다.
P2WPKH (Pay-to-Witness-Public-Key-Hash)
현대적인 SegWit 출력입니다. 증인 공개키 해시(bc1q... 주소)에 자금을 잠급니다:
OP_0 <20-byte pubKeyHash>
16진수로:
00 14 <20 bytes>
│ │
│ └─── Push 20 bytes
└─────── OP_0 (witness version 0)
P2WPKH 스크립트는 더 짧으며, 이는 더 저렴한 수수료를 의미합니다. 해제 데이터는 ScriptSig 대신 증인 필드로 이동합니다 - 8단계에서 다룹니다.
거스름돈 출력
당신의 입력 UTXO가 보내려는 금액과 수수료에 정확히 합쳐지지 않는 한 - 거의 일어나지 않습니다 - 나머지를 자신에게 돌려보내는 거스름돈 출력이 필요합니다.
예시:
Input: 0.005 BTC (your UTXO)
Output: 0.003 BTC (to recipient)
Output: 0.0019 BTC (change, back to you)
Fee: 0.0001 BTC (implicit - not an output)
수수료는 암묵적입니다: 총 입력과 총 출력의 차이입니다. 거래에는 "수수료" 필드가 없습니다. 거스름돈 출력을 잊어버리면, 전체 차이가 채굴자 수수료가 됩니다 - 값비싼 실수입니다.
모범 사례: 거스름돈을 당신이 통제하는 새 주소로 보내세요. 주소 재사용은 당신의 거래들을 함께 연결해서 프라이버시를 약화시킵니다.
출력 순서
당신의 거래는 어떤 순서로든 출력을 가질 수 있습니다. 그러나 순서를 무작위화하면(항상 결제를 먼저, 거스름돈을 두 번째로 두는 대신) 프라이버시가 개선됩니다. 일부 지갑은 결정적 출력 순서를 위해 BIP69를 구현하지만, 이는 논쟁적입니다.
조합해보기
하나의 결제와 하나의 거스름돈 출력이 있는 우리 튜토리얼 거래:
# Output count
02
# Output 0: Payment (0.003 BTC to recipient's P2WPKH)
e093040000000000 # 300,000 satoshis
160014<20-byte-hash> # ScriptPubKey
# Output 1: Change (0.0019 BTC back to our P2WPKH)
b882020000000000 # 190,000 satoshis
160014<20-byte-hash> # ScriptPubKey
다음 단계
거래 수수료 계산으로 계속해서 거래가 즉시 확정되도록 올바른 수수료를 설정하는 방법을 이해하세요.