거래 출력 구축

거래 출력을 만드는 방법 - 수취인, 금액, 잠금 스크립트 정의. P2PKH, P2WPKH, 그리고 거스름돈 출력 포함.

0단계 ·

진행률 0/0

무엇을 배우는가

  • 거래 출력의 구조
  • P2PKH와 P2WPKH 잠금 스크립트가 작동하는 방식
  • 항상 거스름돈 출력이 필요한 이유

출력 구조

각 출력은 거래가 확정된 후 존재할 새 UTXO를 정의합니다. 두 개의 필드를 포함합니다:

필드크기설명
Value8 바이트사토시 단위 금액 (리틀 엔디안)
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

다음 단계

거래 수수료 계산으로 계속해서 거래가 즉시 확정되도록 올바른 수수료를 설정하는 방법을 이해하세요.