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
500
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【BIP-174】Partially Signed Bitcoin Transaction Format
Bitcoin meetup Tokyo 9/6のスライド
shigeyuki azuchi
September 06, 2018
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
FORS
azuchi
0
13
クラスターmempool
azuchi
0
32
W-OTS+
azuchi
0
36
Shorのアルゴリズム
azuchi
0
58
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
43
Fiat-Shamir変換と注意点
azuchi
0
230
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
55
BIP-374 離散対数の等価性証明
azuchi
0
74
BIP-353 DNS Payment Instructions
azuchi
0
90
Other Decks in Technology
See All in Technology
美しいコードを書くためにF#を学んでみた話
yud0uhu
1
450
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
870
「AIに依存している」と 「AIを使いこなしている」の違い
k8yasuma
0
110
Kaggleで成長するために意識したこと
prgckwb
2
410
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.4k
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
390
AIが実装を自走する時代の認知負債との戦い
lycorptech_jp
PRO
0
110
Network Firewallやっていき!
news_it_enj
0
170
アップデートで何が変わった?デモで学んで使いこなすIBM Bob2.0
muehara
0
110
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
390
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
1.4k
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
5k
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
11
38k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Skip the Path - Find Your Career Trail
mkilby
1
170
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
610
Site-Speed That Sticks
csswizardry
13
1.3k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
260
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Into the Great Unknown - MozCon
thekraken
41
2.6k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
180
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
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を人が読める形式の情報として表示する