PSBT v2는 미완성 Bitcoin 트랜잭션과 서명 자료를 교환하기 위한 BIP 370 형식입니다. 숫자는 PSBT 컨테이너의 버전이며, 트랜잭션 자체의 버전이나 새로운 네트워크 검증 방식을 자동으로 뜻하지 않습니다.
BIP 174의 PSBT v0에는 전역 미서명 트랜잭션이 들어 있습니다. BIP 370은 그 구성 데이터를 개별 필드로 옮깁니다. 따라서 참여자는 컨테이너를 만든 뒤에도 규칙에 따라 입력과 출력을 추가할 수 있습니다. 이미 서명된 부분을 마음대로 바꿀 수 있다는 뜻도, 파일 자체가 결제라는 뜻도 아닙니다. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format]
PSBT_GLOBAL_VERSION은 2여야 하고 PSBT_GLOBAL_UNSIGNED_TX는 없어야 합니다. 필수 필드 PSBT_GLOBAL_TX_VERSION은 생성할 트랜잭션의 버전을 별도로 지정하며, 전역 맵에는 입력 수와 출력 수도 포함됩니다. 기존 파일의 버전 번호만 고쳐서는 유효한 PSBT v2가 되지 않습니다. [BIP 370 — PSBT Version 2]
입력은 이전 TXID와 소비할 출력의 인덱스를 지정해야 합니다. 출력은 satoshi 단위 금액과 scriptPubKey를 포함해야 하며, 추가할 때 해당 전역 개수도 갱신합니다. 입력 sequence가 생략되면 0xffffffff로 간주합니다. 이 구성 데이터가 UTXO 자료나 서명 장치에 필요한 다른 정보의 검증을 대신하지는 않습니다. [BIP 370 — PSBT Version 2]
PSBT_GLOBAL_TX_MODIFIABLE의 비트 0은 입력 변경을, 비트 1은 출력 변경을 허용합니다. 비트 2는 SIGHASH_SINGLE 서명이 있음을 알리며, 해당 입력과 대응 인덱스의 출력 사이 짝을 유지해야 합니다. 구성자는 실제 서명을 살펴야 합니다. 플래그가 켜져 있다는 사실만으로 원래 무효인 변경이 안전해지지는 않습니다. [BIP 370 — PSBT Version 2]
nLockTime에는 모든 입력과 호환되는 요구 유형을 선택하고 그 최댓값을 사용합니다. 두 유형 모두 가능하면 블록 높이를 우선하며, 호환되지 않는 입력은 추가할 수 없습니다. 입력 요구가 없으면 전역 대체값을, 그것도 없으면 0을 사용합니다. 이미 서명이 있다면 새 입력으로 nLockTime을 바꾸면 안 됩니다. [BIP 370 — PSBT Version 2]
서명자는 SIGHASH에 따라 플래그를 갱신합니다. SIGHASH_ANYONECANPAY를 쓰지 않으면 입력 변경을, SIGHASH_NONE을 쓰지 않으면 출력 변경을 막고, SIGHASH_SINGLE이면 필요한 짝 관계를 표시합니다. 최종화 후 추출기는 필드로부터 네트워크 트랜잭션을 조립합니다. 전파와 네트워크 수락은 이후 단계이지 전달된 컨테이너의 속성이 아닙니다. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
PSBT v0와 v2는 직접 교환 가능한 형식이 아닙니다. v0로 변환하려면 미서명 트랜잭션을 구성하고 그 버전의 필드 규칙을 지켜야 합니다. BIP 371은 두 버전의 Taproot 자료를 별도로 정의합니다. 따라서 PSBT나 Taproot 지원만으로 지갑이 PSBT v2를 가져오고 서명하고 내보낼 수 있다고 입증되지는 않습니다. [BIP 370 — PSBT Version 2] [BIP 371 — Taproot Fields for PSBT]
신뢰할 수 있는 장치에서 수신자, 금액, 자신의 거스름돈 출력, 수수료를 원래 의도와 비교합니다. UTXO 자료, 스크립트, 사용된 SIGHASH를 검증해야 합니다. 키 파생 메타데이터만으로 출력 소유권을 입증할 수는 없습니다. 특정 조정자와 장치로 시험하는 것은 호환성 확인이며, 향후 모든 트랜잭션의 안전성 보장이 아닙니다. [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 PSBT, Hardware Wallet, Multisig, Taproot.