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
400
【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
プロアクティブ秘密分散法
azuchi
0
3
v3トランザクションリレー
azuchi
0
8
ランポート署名
azuchi
0
33
BitVM
azuchi
0
46
Replacement Cycling Attack
azuchi
0
44
Bitcoinのタイムロックの仕組み
azuchi
0
33
Inner Product Argument
azuchi
0
72
Codex32
azuchi
0
27
PSBT
azuchi
0
66
Other Decks in Technology
See All in Technology
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
770
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
230
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
The Rise of LLMOps
asei
7
1.4k
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
130
いざ、BSC討伐の旅
nikinusu
2
780
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
SSMRunbook作成の勘所_20241120
koichiotomo
2
130
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.6k
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.6k
Lambdaと地方とコミュニティ
miu_crescent
2
370
Featured
See All Featured
Producing Creativity
orderedlist
PRO
341
39k
Automating Front-end Workflow
addyosmani
1366
200k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
The World Runs on Bad Software
bkeepers
PRO
65
11k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
The Cult of Friendly URLs
andyhume
78
6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
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を人が読める形式の情報として表示する