Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PSBT

 PSBT

GBECの解説動画の資料です。
https://goblockchain.network/2023/09/psbt/

shigeyuki azuchi

October 17, 2023
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1
    PSBTとは?

    Partially Signed Bitcoin Transaction Format(PSBT)

    BIP-174:https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki


    複数人/複数のデバイスをまたいで協力してトランザクションを完成させるための

    トランザクションフォーマットの標準


    PSBT

    PSBT

    signed

    Hardware 

    Wallet Interface


    View full-size slide

  2. 2
    PSBTのフォーマット(v0=v1)

    bytes
 name
 type
 value
 definition

    4
 Magic Bytes
 int32_t
 0x70736274
 “psbt”のASCII

    1
 separator
 char
 0xff
 

    1+
 Global
 key-value Map
 不明
 Globalデータのkey-valueペア

    1+
 Input
 key-value Map
 不明
 インプットデータのkey-valueペア

    1+
 Output
 key-value Map
 不明
 アウトプットデータのkey-valueペア

    0x00
    0x00
    0x00
    name
 type

    key length
 Compact Size unsigned Integer

    key
 bytes

    value length
 Compact Size unsigned Integer

    value
 bytes

    各key-value Mapのseparator = 0x00


    View full-size slide

  3. 3
    PSBT Global key-value Map

    Keyは、Type + Keyで構成

    type
 name
 key
 value

    0x00
 Unsigned Transaction
 N/A

    ネットワークのシリアライゼーションフォーマットで

    シリアライズされたトランザクション。

    scriptSig と witness は必ず空。

    0x01
 Extended Public Key
 xpub

    BIP-32ベースのマスター公開鍵のfingerprintと公開鍵の導出パスを
    結合したデータ。

    Input/Outputで使用される公開鍵を導出するのに使用。

    0xfb
 PSBT Version
 N/A
 PSBTのバージョンを表す整数

    0xfc
 Proprietary Use Type
 bytes
 専用のユーザー型で、ユーザーが定義した値データを含む

    ※ ↑はBIP-174の定義値のみ、関連BIPにより拡張された他のフィールドも有り

    View full-size slide

  4. 4
    PSBT Input key-value Map

    type
 name
 key
 value

    0x00
 non-witness UTXO
 N/A
 インプットが参照するトランザクション(インプットが非segwitの場合にセット)

    0x01
 witness UTXO
 N/A

    インプットが参照するトランザクションアウトプット。

    インプットがsegwit(P2SHのネスト含む)の場合にセット。

    0x02
 partial sig
 pubkey
 scriptSigもしくはscriptWitnessからスタックにプッシュされる署名

    0x03
 sighash type
 N/A
 このインプットの署名に適用するSIGHASH TYPE。

    0x04
 redeem script
 N/A
 このインプットのredeem script。

    0x05
 witness script
 N/A
 このインプットのwitness script。

    0x06
 BIP32 derivation path
    
 pubkey
 この公開鍵の導出に使用したBIP32のマスター鍵のfingerprint + 導出パス

    0x07
 finalize scriptSig
 N/A
 署名が付与された完全なscriptSig

    0x08
 finalize scriptWitness
    
 N/A
 署名が付与された完全なscriptWitness

    View full-size slide

  5. 5
    PSBT Input key-value Map

    type
 name
 key
 value

    0x0a
 RIPEMD160 Preimage
    
 Hash value
 RIPEMD160ハッシュ値のプリイメージ

    0x0b
 SHA256 Preimage
 Hash value
 SHA256ハッシュ値のプリイメージ

    0x0c
 HASH160 Preimage
 Hash value
 HASH160ハッシュ値のプリイメージ

    0x0d
 HASH256 Preimage
 Hash value
 HASH256ハッシュ値のプリイメージ

    0xfc
 Proprietary Use Type
    
 bytes
 専用のユーザー型で、ユーザーが定義した値データを含む

    ※ ↑はBIP-174の定義値のみ、関連BIPにより拡張された他のフィールドも有り

    View full-size slide

  6. 6
    PSBT Output key-value Map

    type name key value
    0x00
 redeem script
 N/A
 このアウトプットのredeem script

    0x01
 witness script
 N/A
 このアウトプットのwitness script

    0x02
 BIP32 derivation path
 pubkey

    この公開鍵の導出に使用した

    BIP32のマスター鍵のfingerprint + 導出パス

    0xfc
 Proprietary Use Type
 bytes
 専用のユーザー型で、ユーザーが定義した値データを含む

    ※ ↑はBIP-174の定義値のみ、関連BIPにより拡張された他のフィールドも有り

    View full-size slide

  7. 7
    ワークフローの例(2-of-3マルチシグ)

    Alice
    ① AliceはマルチシグのコインをインプットとしたPSBTを作成し、 

      BobとCarolに送る 

    PSBT

    Tx

    2-of-3 UTXO
 送信先

    Carol
    PSBT

    Tx

    2-of-3 UTXO
 送信先

    Bob's partial sig

    PSBT

    Tx

    2-of-3 UTXO
 送信先

    Carol's partial sig

    Alice
    PSBT

    Tx

    2-of-3 UTXO
 送信先

    Alice's partial sig

    ②各自、署名を生成し、 PSBTのインプットにセットする
    Bob

    View full-size slide

  8. 8
    ワークフローの例(2-of-3マルチシグ)

    Alice
    ③ AliceはPSBTを集めマージする(2-of-3なので2つ集まればOK)
    PSBT

    Tx

    2-of-3 UTXO
 送信先

    Alice's partial sig

    Carols's partial sig

    PSBT

    Tx

    2-of-3 UTXO
 送信先

    final scriptSig

    ④マージしたPSBTからfinal scriptSigを生成
    ⑤ PSBTからネットワークシリアライゼーションフォーマットで
     トランザクションを抽出
    Tx

    2-of-3 UTXO with Sig
    
 送信先


    View full-size slide

  9. 9
    PSBTを利用したOrdinalのDEX

    OrdinalのNFTのDEX「OpenOrdex」

    https://github.com/orenyomtov/openordex












    https://techmedia-think.hatenablog.com/entry/2023/03/22/200632 

    Alice
    ① 購入したいNFTのBuy Inscriptionを押して

      購入者(Alice)のアドレスを入力すると

      ダミーUTXO(1,000 sat)を作成するPSBTが提供される↓

    ② ↑のPSBTをコピーし、Finalizeし、Txをブロードキャスト

    ③ 再度Buy Inscriptionを押すと、購入用のPSBTが

      表示されるので、これをFinalizeしてブロードキャスト

    【購入したNFTを販売する場合】

    ● 売値と受け取り用のアドレスを入力して、

    List Inscription for Saleボタンを押すと、

    販売用のPSBTが生成される

    ● PSBTに署名してPublishすると、

    販売者情報と署名済みPSBTが

    Nostrのリレーサーバーに配信される。

    ※ この署名済みPSBTが③のPSBTになる。


    View full-size slide

  10. 10
    関連BIP

    ● BIP-370:PSBT v2の仕様

    https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki

    ○ v1ではGLOBAL_TXの変更ができなかったので、

    Tx情報は各Input/OutputのKey-Valueマップで管理

    ○ Segwit Txにおける手数料奪取攻撃への対応

    https://techmedia-think.hatenablog.com/entry/2020/06/07/000500


    ● BIP-371:v1およびv2向けにTaproot関連のフィールドを拡張

    https://github.com/bitcoin/bips/blob/master/bip-0371.mediawiki


    ● BIP-372:Pay to Contract用の調整値フィールドを拡張

    https://github.com/bitcoin/bips/blob/master/bip-0372.mediawiki


    ● BIP-127:Proof of Reserveトランザクション用の拡張

    https://github.com/bitcoin/bips/blob/master/bip-0127.mediawiki

    View full-size slide