거래 입력 구축
UTXO를 참조해서 거래 입력을 만드는 방법. 각 입력은 당신이 쓰려는 코인을 가리킵니다.
0단계 ·
무엇을 배우는가
- 거래 입력의 구조
- 입력이 이전 UTXO를 어떻게 참조하는지
- ScriptSig와 시퀀스 번호의 역할
입력 구조
각 거래 입력은 네트워크에 이렇게 말합니다: "나는 이 특정 UTXO를 쓰고 싶다." 네 개의 필드를 포함합니다:
| 필드 | 크기 | 설명 |
|---|---|---|
| 이전 TX 해시 | 32 바이트 | UTXO를 생성한 거래의 txid |
| 출력 인덱스 | 4 바이트 | 그 거래의 몇 번째 출력인지 (vout) |
| ScriptSig | 가변 | 해제 스크립트 (소유권 증명) |
| Sequence | 4 바이트 | RBF와 타임락에 사용 |
단일 입력이 16진수로 어떻게 생겼는지 보겠습니다 (주석 포함):
# Previous TX Hash (32 bytes, little-endian)
7b1eabe0209b1fe794124575ef807057c77ada2138ae4fa8d6c4de0398a14f3f
# Output Index (4 bytes, little-endian)
00000000
# ScriptSig Length
00
# ScriptSig (empty for now - filled during signing)
# Sequence
fdffffff
Previous TX Hash: 코인을 가리키기
Previous TX Hash는 쓰려는 출력을 만든 거래의 txid입니다. 한 가지 결정적인 세부사항: 직렬화된 거래에서 리틀 엔디안 바이트 순서여야 합니다.
블록 익스플로러가 표시하는 txid가 다음과 같다면:
3f4fa19803dec4d6a84fae3821da7ac7577080ef754512794e1f9b20e0ab1e7b
내부 표현을 얻기 위해 바이트를 뒤집습니다:
7b1eabe0209b1fe794124575ef807057c77ada2138ae4fa8d6c4de0398a14f3f
이것은 처음 거래를 만드는 사람에게 흔한 버그의 원천입니다.
출력 인덱스
Output Index는 참조하는 거래 내에서 어느 출력을 쓰고 있는지를 지정합니다. 거래는 여러 출력을 가질 수 있으므로, 정확히 어느 것인지 지정해야 합니다. 인덱스 0은 첫 번째 출력, 1은 두 번째, 등등.
이것은 4바이트 리틀 엔디안 정수로 인코딩됩니다:
0 → 00000000
1 → 01000000
2 → 02000000
ScriptSig: 해제 스크립트
ScriptSig는 당신이 이 UTXO를 쓸 권리가 있음을 증명하는 곳입니다. P2PKH 출력의 경우, ScriptSig는 당신의 서명과 공개키를 포함합니다:
<signature> <public_key>
노드가 거래를 검증할 때, UTXO의 ScriptPubKey에 대해 ScriptSig를 실행합니다. 실행이 성공하면(즉 true 반환), 지출이 승인됩니다.
중요: 서명을 위해 거래를 구성할 때, ScriptSig는 비어 있는 상태로 둡니다(길이 바이트 = 0x00). 서명 단계에서 채웁니다. 이것은 닭과 달걀 상황을 만듭니다 - 서명은 거래 데이터에 의존하지만, 거래는 서명을 포함합니다. 비트코인은 나중에 다룰 특정 서명 절차로 이를 해결합니다.
SegWit 입력(P2WPKH)의 경우, ScriptSig는 항상 비어 있습니다. 해제 데이터는 대신 증인(witness) 필드로 들어갑니다 - 8단계에서 다룹니다.
시퀀스 번호
4바이트 시퀀스 필드는 원래 채널 내 거래 교체를 위해 설계되었습니다(사토시가 가졌지만 완전히 구현하지 않은 아이디어). 오늘날 두 가지 목적에 사용됩니다:
- RBF 신호:
0xfffffffe미만의 시퀀스 값은 거래가 Replace-By-Fee(BIP125)를 통해 교체 가능함을 신호합니다 - 상대 타임락:
OP_CHECKSEQUENCEVERIFY(BIP112)와 함께 사용될 때, 입력이 쓰일 수 있기 전에 최소 나이를 강제합니다
일반적인 값:
ffffffff → Final (no RBF, no relative timelock)
fdffffff → RBF enabled, no relative timelock
우리 튜토리얼 거래를 위해서는 0xfffffffd(리틀 엔디안으로 fdffffff)를 사용해서 RBF를 활성화할 것입니다 - 필요 시 수수료를 올릴 수 있게 해주는 모범 사례입니다.
복수 입력
거래는 원하는 만큼의 입력을 가질 수 있습니다. UTXO가 작다면, 보내려는 금액을 커버하기 위해 여러 개가 필요할 수 있습니다. 각 입력은 거래 크기에 대략 41바이트(ScriptSig 제외)를 추가하며, 이는 더 많은 수수료를 의미합니다 - 5단계에서 다룰 실용적 고려사항입니다.
다음 단계
거래 출력 구축으로 계속해서 비트코인이 어디로 가는지 정의하는 방법을 배우세요.