거래 입력 구축

UTXO를 참조해서 거래 입력을 만드는 방법. 각 입력은 당신이 쓰려는 코인을 가리킵니다.

0단계 ·

진행률 0/0

무엇을 배우는가

  • 거래 입력의 구조
  • 입력이 이전 UTXO를 어떻게 참조하는지
  • ScriptSig와 시퀀스 번호의 역할

입력 구조

각 거래 입력은 네트워크에 이렇게 말합니다: "나는 이 특정 UTXO를 쓰고 싶다." 네 개의 필드를 포함합니다:

필드크기설명
이전 TX 해시32 바이트UTXO를 생성한 거래의 txid
출력 인덱스4 바이트그 거래의 몇 번째 출력인지 (vout)
ScriptSig가변해제 스크립트 (소유권 증명)
Sequence4 바이트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단계에서 다룰 실용적 고려사항입니다.

다음 단계

거래 출력 구축으로 계속해서 비트코인이 어디로 가는지 정의하는 방법을 배우세요.