BIP0010(BIP10)은 다중서명(M-of-N) 또는 오프라인 서명이 필요한 트랜잭션에서, “서명 전 제안 트랜잭션”을 참여자들에게 배포하고 서명을 모으기 위한 표준 인코딩(TxDP)을 설명합니다.
왜 필요했나요?
다중서명 트랜잭션은 “여러 당사자의 협업”이 필수입니다. 누군가가 지출안을 만들고(제안), 필요한 서명자들에게 전달해 서명을 수집한 뒤, 완성된 트랜잭션을 브로드캐스트해야 합니다. BIP10은 이 과정을 각 지갑/툴이 제각각 구현해 호환성이 깨지는 문제를 줄이기 위해, 서명 요청·수집·결합에 쓰는 표준 텍스트 포맷을 제안합니다.
TxDP(Distribution Proposal)란?
TxDP는 “서명 전(또는 일부 서명된) 트랜잭션 패킷”입니다. 준비자(preparer)가 원하는 지출 트랜잭션을 만들되, 입력(TxIn) 스크립트(서명 스크립트)는 비워 둔 상태로 직렬화합니다. 여기에 서명자가 검증에 필요한 정보까지 함께 담아, 블록체인 전체를 보지 못하는 오프라인 장치도 독립적으로 검토·서명할 수 있게 합니다.
오프라인에서도 검증 가능한 이유
TxDP에는 “사용하려는 UTXO가 포함된 이전 트랜잭션(전체 tx)”들을 함께 포함합니다. 서명자는 이를 통해 OutPoint 해시와 실제 이전 트랜잭션이 일치하는지 확인하고, 입력 금액(value)까지 검증할 수 있어 블록체인 접근 없이도 안전하게 서명 결정을 내릴 수 있습니다.
ID와 서명 수집/결합
TxDP에는 서명 전 트랜잭션(빈 스크립트)의 해시를 Base58로 표현한 “DP ID(Unsigned ID)”가 들어갑니다. 이는 최종 브로드캐스트 후 생기는 TxID(서명 포함 해시)와 구분하기 위한 것입니다(문서에서는 최종 TxID를 “Broadcast ID”로 부를 것을 권장). 또한 TxDP는 입력별로 (서명, 공개키/주소) 쌍을 누적해 담을 수 있고, 서로 다른 서명자가 만든 TxDP들을 쉽게 “병합(merge)”할 수 있어 한 사람이 모두에게 동시에 서명 요청을 보내고, 받은 응답을 합쳐 완성하는 방식이 가능합니다.
포맷(사람도 다룰 수 있는 ASCII 블록)
TxDP는 PGP/GPG 블록처럼 사람이 복사해 이메일/텍스트 파일로 주고받을 수 있는 ASCII 블록 형식을 사용합니다. 헤더/푸터 사이에 매직 문자열과 트랜잭션/이전 트랜잭션 직렬화(hex), 입력 값, 그리고 각 입력에 대한 _SIG_ 라인들이 들어가며, 파일로 저장할 땐 .txdp 또는 .btcdp 확장자를 권장합니다.