블록체인/레벨 II · 작동 원리/2.2 트랜잭션/수업 2
입력과 출력
트랜잭션의 구조: 아웃포인트, 스크립트, 그리고 암묵적 수수료
준비물mempool.space나 blockchain.com과 같은 블록 탐색기사토시 값의 합을 구하는 계산기
호기심
- 한 트랜잭션이 다른 트랜잭션에 의해 생성된 가치를 지출할 권리가 있다는 것을 어떻게 증명하나요?
- 수수료에 대한 명시적인 항목이 없다면, 채굴자들은 자신들이 정확히 얼마를 받는지 어떻게 알 수 있을까요?
- 왜 모든 블록의 첫 번째 트랜잭션은 구조적으로 특이한가요?
탐구
- 비트코인 트랜잭션은 버전 번호와 nLockTime을 가진 데이터 구조이지만, 그 핵심은 입력과 출력입니다. 입력은 가치를 담고 있지 않고, 가치를 가리킬 뿐입니다. 각 입력은 아웃포인트(outpoint)를 통해 특정한 이전 출력을 참조합니다. 아웃포인트는 원본 트랜잭션의 32바이트 txid와, 그 트랜잭션에서 어느 출력이 사용되는지를 나타내는 4바이트 인덱스로 이루어집니다. 이 참조를 통해 트랜잭션들이 사슬처럼 연결됩니다.
- 모든 입력에는 잠금 해제 데이터와 nSequence 필드도 들어 있습니다. nSequence는 타임락과 RBF(replace-by-fee) 신호를 제어합니다. 레거시 트랜잭션에서는 scriptSig에, SegWit에서는 위트니스 영역에 저장되는 잠금 해제 데이터는 참조된 출력의 조건을 충족하는 데 필요한 암호학적 증명을 제공합니다. 개인 키의 서명이 바로 여기에 들어갑니다.
- 출력은 가치가 존재하는 곳입니다. 각 출력은 8바이트 정수로 사토시 단위의 금액을 지정하고, 나중에 누가 그것을 사용할 수 있는지 정의하는 잠금 스크립트(scriptPubKey)를 지정합니다. 하나의 트랜잭션에는 여러 입력과 출력이 있을 수 있지만, 입력의 합은 출력의 합 이상이어야 합니다.
- 수수료는 어디에도 저장되지 않습니다. 입력이 소비한 총 가치와 출력이 생성한 총 가치의 차이로 도출됩니다. 이 차액은 해당 트랜잭션을 블록에 포함한 채굴자에게 돌아갑니다. 두 합이 같으면 수수료는 0이고, 출력이 입력을 초과하면 트랜잭션은 유효하지 않습니다.
- 코인베이스 트랜잭션은 이 규칙을 오히려 확인시켜 주는 예외입니다. 이 트랜잭션에는 이전 아웃포인트가 없는 특별한 입력이 하나 있어, 사실상 무에서 새로운 가치를 만들어 냅니다. 그 출력에는 블록 보조금(현재 3.125 BTC)과 해당 블록의 다른 트랜잭션에서 걷은 모든 수수료가 담깁니다. 모든 트랜잭션의 txid는 위트니스 정보를 제외한 직렬화 데이터의 이중 SHA-256 해시입니다.
- 블록 탐색기를 열고 2009년 1월 12일에 채굴된 블록 170을 조회해 보세요. 이 블록에는 코인베이스 외에 트랜잭션이 하나 있습니다. 사토시 나카모토가 할 피니(Hal Finney)에게 10 BTC를 보낸 트랜잭션입니다. 이 트랜잭션의 유일한 입력은 블록 9의 50 BTC 코인베이스 출력을 사용합니다. 출력은 두 개로, 피니에게 가는 10 BTC와 사토시에게 돌아가는 40 BTC입니다. 입력과 출력의 합계가 모두 50 BTC이므로 수수료는 0입니다. 초기에는 블록 공간이 넉넉했기 때문에 수수료를 전혀 내지 않는 트랜잭션이 많았습니다.
핵심 사실
- 입력은 txid와 출력 인덱스로 이루어진 아웃포인트를 통해 이전 출력을 참조합니다.
- 트랜잭션 수수료는 입력 금액의 합과 출력 금액의 합의 차이입니다.
- 출력에는 사토시 단위의 8바이트 금액과 잠금 스크립트(scriptPubKey)가 들어 있습니다.
- 입력에는 잠금 해제 데이터(서명)와, 타임락이나 RBF 신호에 쓰이는 nSequence 필드가 들어 있습니다.
- 코인베이스 트랜잭션은 이전 아웃포인트가 없는 특별한 입력을 통해 새로운 비트코인을 생성합니다.
- txid는 위트니스 데이터를 제외한 직렬화된 트랜잭션의 이중 SHA-256 해시입니다.
연습 아홉, 여섯, 셋, 하나
9모으기블록 탐색기에서 최근 트랜잭션 9건을 살펴보세요. 각 트랜잭션의 입력 수, 출력 수, 사토시 단위 수수료를 기록하세요.
6묶기9건을 구조에 따라 6개 범주로 분류하세요: 1입력-1출력, 1입력-2출력, 다수 입력-1출력(통합), 1입력-다수 출력(일괄 지불), 다수 입력-다수 출력, 기타.
3추리기6개 범주를, 트랜잭션이 여러 입력이나 여러 출력을 갖는 3가지 이유로 압축하세요.
1결정화비트코인이 수수료를 명시하지 않고 암묵적으로 둘 수 있는 이유를 한 문장으로 쓰세요.
팩트 체크
날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.