본문으로 건너뛰기
buybitcoinsmart

용어집 / 지갑과 수탁

PSBT 버전 2

별칭은 PSBTv2입니다.

PSBT 버전 2란 무엇입니까?
PSBT 버전 2는 서명되지 않은 트랜잭션을 고정하지 않는 부분 서명 트랜잭션 형식으로, 파일이 만들어진 뒤에도 참여자가 입력과 출력을 추가할 수 있습니다.

BIP-370에 명시되어 있습니다.

버전 0은 생성 시점에 입력과 출력 집합을 고정합니다. 반면 버전 2는 모든 세부 정보를 입력별·출력별 맵으로 옮깁니다. BIP-370은 2021년 1월 14일에 배정되었고 번호 1을 건너뛰었습니다. BIP-174의 형식이 버전 0인데도 구어로 버전 1이라고 불렸기 때문입니다. 보유자에게 버전 2는 본인이 이미 시작한 트랜잭션에 다른 참여자가 코인을 추가하는 서명 세션에서만 중요합니다.

작동 방식

PSBT 버전 2는 BIP-174의 외부 컨테이너를 유지하고 그 안의 내용을 재배치합니다. 두 가지 규칙이 전환을 정의합니다. PSBT_GLOBAL_UNSIGNED_TX는 없어야 하고, PSBT_GLOBAL_VERSION은 있어야 하며 2로 설정되어야 합니다.

제거된 트랜잭션이 담던 내용은 열두 개의 새 필드로 분산됩니다. 다섯 개는 전역 필드입니다. 트랜잭션 버전(0x02), 대체 록타임(0x03), 입력 개수(0x04), 출력 개수(0x05), 수정 가능 플래그 바이트(0x06)입니다. 다섯 개는 각 입력에 있습니다. 32바이트 이전 txid(0x0e), 사용된 출력 인덱스(0x0f), 시퀀스 번호(0x10), 그리고 두 개의 필수 록타임, 즉 500000000 이상의 타임스탬프 기반 록타임(0x11)과 그보다 낮고 0보다 큰 높이 기반 록타임(0x12)입니다. 출력에는 두 개가 추가됩니다. 사토시 단위 금액을 나타내는 64비트 부호 있는 리틀 엔디언 정수(0x03)와 스크립트(0x04)입니다.

수정 가능 플래그 바이트가 실질적인 역할을 합니다. 비트 0은 입력을 여전히 추가하거나 제거할 수 있음을, 비트 1은 출력에 대해 같은 내용을, 비트 2는 일부 서명이 이미 SIGHASH_SINGLE로 확정되었으므로 해당 입력과 출력의 짝을 보존해야 함을 기록합니다. 서명자는 진행하면서 그 비트를 조여야 합니다. SIGHASH_ANYONECANPAY를 사용하지 않는 서명은 비트 0을 지우고, SIGHASH_NONE를 사용하지 않는 서명은 비트 1을 지웁니다. 계속 편집할 수 있는 권한은 다음 보유자의 예의에 기대지 않고 서명이 들어오는 대로 스스로 만료됩니다.

BIP-370은 사라진 트랜잭션이 남긴 두 가지 질문을 해결합니다. 록타임은 입력들이 합의하는 가장 큰 값이 되며, 없으면 전역 필드로, 그것도 없으면 0으로 대체되고, 높이 기반 요구 사항이 동률일 때 우선합니다. 식별자는 모든 시퀀스 번호를 0으로 강제해 필드를 조립했을 때 얻는 txid가 됩니다. 시퀀스는 나중에 여전히 편집될 수 있기 때문입니다.

사용되는 곳

PSBT 버전 2는 BIP-174에 대응하는 역할이 없는 Constructor을 도입합니다. Creator는 0개의 입력과 0개의 출력으로 파일을 열어 넘기고, Constructor은 수정 가능 플래그를 확인한 뒤 그것들을 추가합니다. 기여를 예상하는 Creator는 트랜잭션 버전도 최소 2로 설정해야 OP_CHECKSEQUENCEVERIFY처럼 그 버전에 종속된 기능을 계속 사용할 수 있습니다.

버전 2는 BIP-174의 직렬화를 재사용하므로 파일은 겉으로 볼 때 같아 보이며, 이 분리는 의도적입니다. BIP의 24개 유효하지 않은 테스트 벡터 중 13개는 위치가 잘못된 필드 하나나 버전 번호 때문에 거부되는 평범한 버전 0 파일입니다. 버전 2 파일은 자체 필드로부터 버전 0 파일로 재구성할 수 있으므로 변환은 한 방향입니다. 참조 구현은 Bitcoin Core의 풀 리퀘스트 21283이며, BIP 헤더는 상태를 Deployed로 기록합니다.

이 사이트의 지갑 리뷰 41개 중 두 개가 PSBT를 언급하며, Sparrow(평점 4.7)와 BlueWallet(평점 4.2)이고 둘 다 버전을 명시하지 않습니다. 소프트웨어가 달리 말하지 않는 한 버전 0으로 가정하고, 익숙하지 않은 도구는 나머지를 처리하기 전에 소액으로 시험해 보십시오.

PSBT 버전 2 vs 트랜잭션 버전 번호

PSBT 버전 2는 파일 형식에 번호를 매기고, 트랜잭션 버전 번호는 그 안에서 조립되는 트랜잭션에 번호를 매깁니다. 둘 다 같은 전역 맵에 있지만 BIP-370은 둘이 같은 필드가 아니라고 분명히 밝힙니다. 모든 버전 2 파일에서 PSBT_GLOBAL_VERSION은 2입니다. PSBT_GLOBAL_TX_VERSION은 만들어지는 트랜잭션에 대한 32비트 부호 있는 정수이며, BIP-370은 Creator가 기여를 예상할 때 이를 최소 2로 요구하므로 둘이 혼동됩니다. 첫 번째를 바꾸면 구형 파서가 파일을 거부합니다. 두 번째를 바꾸면 해당 지출을 판단하는 합의 규칙이 바뀝니다.

혼동하기 쉬운 용어

자주 묻는 질문

하드웨어 지갑을 사용하려면 PSBT 버전 2가 필요합니까?

아닙니다. BIP-174가 정의한 형식인 버전 0은 서명이 시작되기 전에 입력과 출력이 확정되는 일반적인 지출을 처리합니다. 버전 2는 본인이 이미 시작한 트랜잭션에 다른 참여자가 코인을 추가해야 할 때만 가치를 발휘합니다.

PSBT 버전 1은 왜 없습니까?

그 번호는 의도적으로 건너뛰었습니다. BIP-174의 형식은 버전 0이지만, BIP-370이 설계되던 동안 구어로 버전 1이라고 불렸기 때문에, 새 형식은 버전 1이라는 이름이 두 개 남는 대신 번호 2를 가져갔습니다.

버전 0 소프트웨어가 버전 2 파일을 열 수 있습니까?

현재로서는 아닙니다. BIP-370은 전역 버전 필드를 통해 두 형식을 의도적으로 호환되지 않게 만들었습니다. 다만 버전 2 파일은 자체 필드로부터 서명되지 않은 트랜잭션을 만들어 버전 0 파일로 변환할 수 있습니다.

다음에 읽을 글

출처

마지막 검토일은 2026년 9월 6일입니다.

관련 용어

지갑과 수탁 분야의 다른 용어

이 페이지를 영어로 읽기