Å signere en transaksjon trenger informasjon signeren kanskje ikke har: hvilke mynter som brukes, beløpene deres, scripter og nøkkelutledningsstier. En Partially Signed Bitcoin Transaction (PSBT), definert i BIP174 av Andrew Chow i 2017, er en standardbeholder for alt dette.
Formatet
En PSBT starter med magic-bytes 0x70 0x73 0x62 0x74 0xff («psbt» etterfulgt av 0xff). Den har en global seksjon, ett map per inndata og ett per utdata, hver med typede nøkkel–verdi-par. Den deles vanligvis som Base64 eller som en binær .psbt-fil.
Inndata kan bære den fulle forrige transaksjonen eller UTXOen som brukes, redeem- eller witness-scriptet, delsignaturer, sighash-typer og BIP32-utledningsstier. Utdata kan bære utledningsstier slik at en maskinvarelommebok kan verifisere hvilken utdata som er vekslepenger.
Rollene
- Creator: lager den usignerte transaksjonen.
- Updater: legger til UTXO-data, scripter og nøkkelstier.
- Signer: sjekker detaljene og legger til sin signatur.
- Combiner: slår sammen PSBT-er signert av ulike parter.
- Finalizer: bygger den endelige scriptSig og witness.
- Extractor: sender ut den klar-til-kringkasting-transaksjonen.
Én app kan gjøre flere roller, eller hver kan være en annen enhet, som en telefon, en laptop og to maskinvarelommebøker.
Hvorfor det betyr noe
- Luftgappet signering: PSBT-er kan flyttes via SD-kort eller QR-kode.
- Multisig: hver medsigner signerer uavhengig, deretter kombineres signaturene.
- Gebyrsikkerhet: fordi inndata-beløp er inkludert, kan en signer beregne gebyret før signering.
- Coinjoins og payjoins: flere personer bidrar med inndata til én transaksjon.
I Bitcoin Core
RPC-er inkluderer walletcreatefundedpsbt, walletprocesspsbt, combinepsbt, finalizepsbt og decodepsbt.
Versjon 2
BIP370 (PSBTv2) lar inndata og utdata legges til etter opprettelse, noe som hjelper interaktive protokoller. Taproot-felter ble lagt til av BIP371.
Regel: verifiser alltid adressene og beløpene på signeringsenhetens skjerm, ikke bare på datamaskinen.