용어집 / 트랜잭션과 수수료
출력 인덱스
별칭은 vout입니다.
- 출력 인덱스란 무엇입니까?
- 출력 인덱스는 트랜잭션 안에서 하나의 출력이 차지하는 위치를 0부터 센 값이며, 코인이 txid:1 형식으로 표시될 때 콜론 뒤에 오는 숫자입니다.
트랜잭션은 한 번에 수십 명의 수취인에게 지급할 수 있으므로, 식별자만으로는 어느 지급이 본인의 것인지 결코 알 수 없습니다. 인덱스는 4바이트 숫자로 저장되며, 4,294,967,295까지의 값을 허용하므로 어떤 블록이 담을 수 있는 것보다 훨씬 많은 출력을 가리킬 수 있습니다. 트랜잭션 ID와 짝을 이루면 아웃포인트가 되며, 이는 원장 안에서 코인의 영구적인 주소입니다.
작동 방식
출력에는 순서가 있으며, 그 순서는 트랜잭션을 만든 사람이 직렬화한 그대로입니다. 첫 번째 출력은 인덱스 0이고, 두 번째는 인덱스 1이며, 번호는 빈틈없이 목록 끝까지 이어집니다. 인덱스는 출력의 금액, 수취인, 목적을 전혀 설명하지 않습니다. 그것은 위치일 뿐입니다.
모든 트랜잭션의 모든 입력에는 이 숫자가 하나씩 들어 있습니다. 입력은 36바이트 참조로 시작합니다. 32바이트의 트랜잭션 ID 뒤에 4바이트 리틀 엔디언 인덱스가 붙습니다. 지출이 어떤 코인을 소비하는지를 이렇게 표시하며, 노드가 체인 전체를 검색하지 않고도 지출을 검증할 수 있는 이유도 여기에 있습니다.
각 블록의 코인베이스 트랜잭션은 이 패턴을 의도적으로 깨뜨립니다. 소비할 코인이 없으므로, 그 하나뿐인 입력은 32바이트의 0으로 채워진 트랜잭션 ID를 가리키고 인덱스는 이 필드가 담을 수 있는 최댓값인 0xffffffff로 설정됩니다. 그 아웃포인트를 참조하는 것은 이체가 아니라 새로 발행된 화폐로 인식됩니다.
위치는 정보도 드러내므로, 지갑은 이를 프라이버시 설정으로 다룹니다. 거스름돈이 늘 인덱스 1에 놓인다면, 어떤 관찰자든 모든 트랜잭션의 거스름돈 출력을 즉시 표시할 수 있습니다. Bitcoin Core는 거스름돈 출력이 놓이는 위치를 무작위화하며, BIP69는 입력과 출력을 결정적인 사전순으로 정렬해 순서만으로는 아무것도 추론할 수 없게 하는 반대의 방식을 제안했습니다.
확인할 수 있는 곳
대부분의 사람은 그 이름을 모른 채 코인 컨트롤 화면에서 이 숫자를 처음 만납니다. Sparrow, Electrum, Bitcoin Core는 각각 코인을 트랜잭션 ID와 인덱스로 표시합니다. 같은 트랜잭션의 두 출력이 모두 본인의 것일 수 있고, 이를 구별하는 것은 인덱스뿐이기 때문입니다.
거래소의 일괄 처리는 이 숫자를 눈에 띄게 만듭니다. Kraken 또는 Binance가 한 트랜잭션으로 100건의 출금을 지급할 때, 본인의 코인은 일괄 처리 소프트웨어가 부여한 위치에 놓입니다. 따라서 본인의 자금이 120개의 출력 중 인덱스 87에 보이는 것은 지극히 정상이며, 무언가 잘못되었다는 신호가 아닙니다.
개발자 도구는 이를 직접 요구합니다. gettxout 명령은 트랜잭션 ID와 인덱스를 별도의 인수로 받고, PSBT 파일은 입력을 아웃포인트로 참조하며, 하드웨어 지갑은 지출을 승인하는 동안 화면에 "output 2 of 3"을 표시합니다. "txid와 vout"을 요청하는 지원 데스크도 같은 두 값을 요청하는 것입니다.
출력 인덱스 vs 아웃포인트
출력 인덱스는 그 자체로는 의미가 없습니다. 인덱스 0은 지금까지 만들어진 모든 트랜잭션에 존재하기 때문입니다. 아웃포인트는 트랜잭션 ID와 인덱스를 함께 묶은 쌍이며, 지금까지 존재한 모든 코인 가운데 정확히 하나의 코인을 식별합니다. 이 구별은 코인 컨트롤 입력란에나 지원 요청에 무언가를 붙여 넣는 순간 중요해집니다. 참조의 절반은 참조가 아닙니다.