본문으로 건너뛰기
buybitcoinsmart

용어집 / 트랜잭션과 수수료

아웃포인트

아웃포인트란 무엇입니까?
아웃포인트는 정확히 하나의 트랜잭션 출력을 식별하는 36바이트 포인터로, 해당 출력을 만든 트랜잭션의 32바이트 ID와 그 출력의 위치를 나타내는 4바이트 인덱스를 결합한 것입니다.

비트코인에는 계좌 번호가 없으므로, 모든 지출은 어떤 코인을 지출하는지 정확히 밝혀야 합니다. 사람이 읽기 쉽게 쓰면 이 포인터는 트랜잭션 ID, 콜론, 숫자의 형태를 띠며, 모든 풀 노드가 유지하는 미사용 출력 데이터베이스 전체의 기본 키 역할을 합니다. 두 트랜잭션이 같은 아웃포인트를 가리키게 되면 그중 하나만 유효할 수 있으며, 바로 이 단일 규칙이 코인이 두 번 지출되는 것을 막습니다.

작동 방식

아웃포인트는 모든 트랜잭션 입력의 맨 앞에 위치하며, 노드가 지출이 허용되는지 확인할 때 가장 먼저 조회하는 항목입니다.

전송 형식에서는 구분자 없이 두 개의 필드로 이루어집니다. 32바이트의 트랜잭션 해시 다음에 리틀엔디언으로 저장된 4바이트 인덱스가 옵니다. 해시는 내부 바이트 순서로 기록되는데, 이는 블록 탐색기에서 보이는 순서의 역순이므로, 16진수로 된 원시 트랜잭션은 트랜잭션 ID가 거꾸로 적힌 것을 참조하는 것처럼 보입니다. 이는 원시 16진수를 처음 읽는 모든 사람을 헷갈리게 하며, 순전히 표시 규칙일 뿐 데이터의 차이는 아닙니다.

인덱스는 0부터 셉니다. 트랜잭션의 첫 번째 출력은 인덱스 0이고, 두 번째는 인덱스 1이며, :2로 끝난다고 표기된 코인은 세 번째 출력입니다. 이 필드는 4바이트이므로 이론상 상한은 4,294,967,295이며, 실제 트랜잭션은 이에 근접하지 않습니다.

한 가지 값은 예약되어 있습니다. 채굴업자에게 지급하는 코인베이스 트랜잭션은 입력이 하나뿐이며, 그 아웃포인트는 32바이트의 0과 인덱스가 모두 1인 0xffffffff로 이루어집니다. 이 조합은 아무것도 가리키지 않으며, 이 입력이 가치를 옮기는 것이 아니라 새로 만든다는 것을 나타냅니다.

고유성은 당연한 것으로 가정할 수 없어 규칙으로 강제해야 했습니다. 내용이 동일한 두 코인베이스 트랜잭션은 동일한 ID를 만들어 내고 따라서 아웃포인트가 중복되는데, 이는 비트코인 초기 역사에서 두 번 발생했습니다. BIP30은 이 패턴을 직접 금지했고, 이어서 BIP34는 모든 코인베이스가 입력 스크립트에 블록 높이를 포함하도록 요구하여 내용이 서로 다르도록 보장했습니다. BIP34는 2013년 3월의 블록 227,931에서 강제 적용되기 시작했습니다.

확인할 수 있는 곳

아웃포인트는 잔액이 아니라 특정 코인을 정확히 말할 때마다 다루게 되는 식별자입니다.

지갑의 코인 제어 화면은 보유 자산을 트랜잭션 ID와 인덱스로 표시합니다. Bitcoin Core의 RPC 인터페이스는 두 필드를 한 쌍으로 받습니다. listunspent는 이들을 반환하고, gettxout은 아웃포인트 하나를 조회하며, createrawtransaction은 이들을 요구합니다. 라이트닝 네트워크는 채널을 여는 트랜잭션의 아웃포인트를 채널의 영구 이름으로 사용하며, 노드 소프트웨어의 채널 식별자가 해시 뒤에 작은 숫자가 붙은 형태로 보이는 이유가 여기에 있습니다.

분쟁에서 인용해야 할 대상도 바로 이것입니다. 하나의 주소로 수십 번 입금받았을 수 있고 하나의 트랜잭션에 수십 개의 출력이 있을 수 있지만, 아웃포인트는 특정 시점의 특정 금액의 특정 입금 하나를 지목하며, 다툴 모호함이 없습니다. 거래소가 특정 입금을 입증하라고 요구한다면, 이 수준의 정밀도가 논의를 끝냅니다.

아웃포인트 vs 출력 인덱스

출력 인덱스는 아웃포인트 안의 한 필드일 뿐, 아웃포인트를 가리키는 짧은 이름이 아닙니다. 인덱스만으로는 아무런 정보도 담지 않습니다. 수천만 건의 트랜잭션이 인덱스 0에 출력을 하나씩 가지고 있고, 그 숫자는 어느 트랜잭션을 뜻하는지 전혀 알려주지 않기 때문입니다. 혼란은 블록 탐색기 인터페이스에서 비롯되는데, 이들은 인덱스를 "vout"으로 표시하고 눈에 띄게 보여주므로 사람들이 포인터 전체를 vout이라고 부르기 시작합니다. 기록할 때는 이 둘을 구분하십시오. 트랜잭션 ID는 어느 트랜잭션인지 말하고, 인덱스는 그 안에서 어느 출력인지 말하며, 둘이 함께 있어야만 하나의 코인을 식별합니다.

혼동하기 쉬운 용어

자주 묻는 질문

원시 트랜잭션에서 트랜잭션 ID가 거꾸로 쓰여 있는 이유는 무엇입니까?

아웃포인트는 해시를 내부 바이트 순서로 저장하는 반면, 블록 탐색기와 지갑은 이를 뒤집어 표시하기 때문입니다. 둘 다 같은 32바이트를 가리키며, 원시 트랜잭션을 다루는 모든 도구가 이 뒤집기를 대신 수행합니다.

해시 뒤에 콜론과 숫자가 붙은 형태로 표기된 코인은 무엇을 의미합니까?

아웃포인트입니다. 해시는 그 코인을 만든 트랜잭션을 식별하고, 숫자는 트랜잭션의 출력 목록에서 그 코인의 위치를 0부터 센 값입니다. 둘이 함께 있어야 특정 지출 가능 코인 하나를 지목합니다.

관련 용어

트랜잭션과 수수료 분야의 다른 용어

이 페이지를 영어로 읽기