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. 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

  2. 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により拡張された他のフィールドも有り 

  3. 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 

  4. 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により拡張された他のフィールドも有り 

  5. 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により拡張された他のフィールドも有り 

  6. 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
  7. 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 
 送信先

  8. 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になる。 
 

  9. 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