Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【BIP-174】Partially Signed Bitcoin Transaction F...
Search
shigeyuki azuchi
September 06, 2018
Technology
0
450
【BIP-174】Partially Signed Bitcoin Transaction Format
Bitcoin meetup Tokyo 9/6のスライド
shigeyuki azuchi
September 06, 2018
Tweet
Share
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
2
Fiat-Shamir変換と注意点
azuchi
0
52
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
10
BIP-374 離散対数の等価性証明
azuchi
0
28
BIP-353 DNS Payment Instructions
azuchi
0
44
OP_CAT and Schnorr Trick
azuchi
0
43
Pay to Anchorと1P1Cリレー
azuchi
0
43
プロアクティブ秘密分散法
azuchi
0
62
v3トランザクションリレー
azuchi
0
59
Other Decks in Technology
See All in Technology
Amazon Athena で JSON・Parquet・Iceberg のデータを検索し、性能を比較してみた
shigeruoda
1
300
MCP サーバーの基礎から実践レベルの知識まで
azukiazusa1
5
1.2k
Databricks Free Editionで始めるMLflow
taka_aki
0
770
データエンジニアとして生存するために 〜界隈を盛り上げる「お祭り」が必要な理由〜 / data_summit_findy_Session_1
sansan_randd
1
920
어떤 개발자가 되고 싶은가?
arawn
1
420
dbtとAIエージェントを組み合わせて見えたデータ調査の新しい形
10xinc
7
1.8k
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
390
AIの個性を理解し、指揮する
shoota
3
620
ゼロコード計装導入後のカスタム計装でさらに可観測性を高めよう
sansantech
PRO
1
680
AWSが好きすぎて、41歳でエンジニアになり、AAIを経由してAWSパートナー企業に入った話
yama3133
2
230
戦えるAIエージェントの作り方
iwiwi
21
10k
現場の壁を乗り越えて、 「計装注入」が拓く オブザーバビリティ / Beyond the Field Barriers: Instrumentation Injection and the Future of Observability
aoto
PRO
1
900
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
The Language of Interfaces
destraynor
162
25k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
The Invisible Side of Design
smashingmag
302
51k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
192
56k
Statistics for Hackers
jakevdp
799
220k
Site-Speed That Sticks
csswizardry
13
940
Transcript
Copyright ©2018 chaintope, Inc. all rights reserved. Bitcoin Meetup 【BIP-174】
Partially Signed Bitcoin Transaction Format 2018/09/06 chaintope, Inc Shigeyuki Azuchi
Copyright ©2018 chaintope, Inc. all rights reserved. 自己紹介 • Shigeyuki
Azuchi • 株式会社chaintope CTO • BitcoinプロトコルのRuby実装「bitcoinrb」 • Open Assets ProtocolのRuby実装 「openassets-ruby」 • 共著 「ブロックチェーン・プログラミング 仮想通貨入門」 • ブログ「Develop with pleasure!」 https://techmedia-think.hatenablog.com/
Copyright ©2018 chaintope, Inc. all rights reserved. BIP-174 Partially Signed
Bitcoin Transaction Format(PSBT) https://github.com/bitcoin/bips/blob/master/bip-0174.medi awiki • 複数人による署名が必要なケースで、データ連携するた めの標準フォーマットを定義 • オフラインデバイスでも署名が可能なフォーマット
Copyright ©2018 chaintope, Inc. all rights reserved. PSBT format PSBTのデータ構造
key-value Mapのデータ構造 bytes name type value definition 4 Magic Bytes int32_t 0x70736274 “psbt”のASCII 1 sepalator char 0xff 1+ Global key-value Map 不明 Globalデータのkey-valueペア 1+ Input key-value Map 不明 インプットデータのkey-valueペア 1+ Output key-value Map 不明 アウトプットデータの key-valueペア name type key length Compact Size unsigned Integer key bytes value length Compact Size unsigned Integer value bytes key-value Map sepalator = 0x00 0x00 0x00 0x00
Copyright ©2018 chaintope, Inc. all rights reserved. グローバルデータには、署名対象のTxをセット PSBT Global
key-value Map type name key value 0x00 Unsigned Transaction N/A ネットワークのシリアライゼーションフォーマットでシリア ライズされたトランザクション。 scriptSig と witness は必ず空。 (required)
Copyright ©2018 chaintope, Inc. all rights reserved. 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
Copyright ©2018 chaintope, Inc. all rights reserved. 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 + 導出パス PSBTのデータフォーマットイメージ PSBTデータはバイナリ or Base64フォーマットで提供される {0x70736274}|{0xff}|{global key-value map}| {input key-value map}|...|{input key-value map}| {output key-value map}|...|{output key-value map}| ※ アウトプットのデータは署名者が意図した送信先かどうか判断するのに利用
Copyright ©2018 chaintope, Inc. all rights reserved. 注意事項 • Key
description https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#Appendi x_A_Data_types_and_their_specifications • Unknown Key type ソフトウェアやウォレットがサポート認識しない未知のKeyタイプが存在する 場合は、再度シリアライズ時にそれも含めてシリアライズする。 • Duplicate Key Handling Keyが重複したPSBTは無効。 複数のPSBTをマージする際に、Keyの重複が発生する場合は、使用するソ フトウェアに選択する値の決定が委ねられる。
Copyright ©2018 chaintope, Inc. all rights reserved. 【Workflow】Role • Creator
特定のインプットとアウトプットを持つトランザクションのPSBTを作成する • Updater PSBTのトランザクションの各インプットについて、必要な情報(UTXOの詳細 情報、redeem or witness script、SIGHASH typeなど)をセットする • Signer トランザクションとメタデータを確認し署名するか判断し、partial sigを作成 • Finalizer 各インプットに対して、partial sigやスクリプトからfinalize scriptSig or finalize witnessScriptを生成 • Combiner 異なるPSBTデータからメタデータをマージする • Extractor PSBTを有効なネットワークフォーマットのBitcoinトランザクションに変換
Copyright ©2018 chaintope, Inc. all rights reserved. 【Workflow】Coin Join Alice
Bob PSBT Tx Alice’s UTXO Alice’s address PSBT Tx Alice’s UTXO Bob’s address Bob’s UTXO Alice’s address PSBT Tx Alice’s UTXO Bob’s address Bob’s UTXO Carol’s address Carol’s UTXO Alice’s address Carol's finalize scriptSig Carol ① Aliceは自身のコインをセットした PSBTを作成し、Bobに送信 ② Bobは自身のコインを追加し、 Carolに送信 ③ Carolは自身のコインを追加、署名を作成し finalize scriptSigにセットし、ボブに送信 PSBT Tx Alice’s UTXO Bob’s address Bob’s UTXO Carol’s address Carol’s UTXO Alice’s address Bob's finalize scriptSig Carol's finalize scriptSig Bob ④ ボブは署名を作成し、 finalize scriptSigにセットしアリスに送信
Copyright ©2018 chaintope, Inc. all rights reserved. 【Workflow】Coin Join Alice
⑤ Aliceは署名を作成し、finalize scriptSigにセット PSBT Tx Alice’s UTXO Bob’s address Bob’s UTXO Carol’s address Carol’s UTXO Alice’s address Alice's finalize scriptSig Bob's finalize scriptSig Carol's finalize scriptSig ⑥PSBTからネットワークシリアライゼーションフォーマットでトランザクションを抽出 Tx Alice’s UTXO with Sig Bob’s address Bob’s UTXO with Sig Carol’s address Carol’s UTXO with Sig Alice’s address
Copyright ©2018 chaintope, Inc. all rights reserved. 【Workflow】2-of-3 multi-sig Alice,
Bob, Carolの2-of-3のマルチシグにロックされたコインを使用するケース Alice ① Aliceはマルチシグのコインをインプットとした PSBTを作成し、 BobとCarolに送る。 PSBT Tx 2-of-3 UTXO 送信先 Bob 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のインプットにセットする。
Copyright ©2018 chaintope, Inc. all rights reserved. 【Workflow】2-of-3 multi-sig Alice
③AliceはPSBTを集めマージする(2-of3なので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 送信先
Copyright ©2018 chaintope, Inc. all rights reserved. Bitcoin Core 0.17.0
supports PSBT • converttopsbt(Creator) 未署名のRAWトランザクションをPSBTに変換 • createpsbt(Creator) インプットとアウトプットのリストからPSBTを作成 • walletcreatefundedpsbt(Creator, Updater) 指定されたインプットとアウトプットを持つPSBTを作成(UTXOの関連メタ データを含む) • walletprocesspsbt(Updater, Signer, Finalizer) 指定されたPSBTに欠落しているスクリプトデータやpartial sigなどを追加
Copyright ©2018 chaintope, Inc. all rights reserved. Bitcoin Core 0.17.0
supports PSBT • finalizepsbt(Finalizer, Extractor) partial sigを確定。全てのインプットのpartial sigが確定している場合、完全 に署名済みのトランザクションを生成。 • combinepsbt(Combiner) 同じトランザクションに対する複数のPSBTをマージする • decodepsbt PSBTを人が読める形式の情報として表示する