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
Pay to Anchorと1P1Cリレー
azuchi
0
2
プロアクティブ秘密分散法
azuchi
0
6
v3トランザクションリレー
azuchi
0
13
ランポート署名
azuchi
0
40
BitVM
azuchi
0
51
Replacement Cycling Attack
azuchi
0
49
Bitcoinのタイムロックの仕組み
azuchi
0
37
Inner Product Argument
azuchi
0
77
Codex32
azuchi
0
30
Other Decks in Technology
See All in Technology
kargoの魅力について伝える
magisystem0408
0
200
Wantedly での Datadog 活用事例
bgpat
1
440
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
530
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
180
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
330
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
260
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
.NET 9 のパフォーマンス改善
nenonaninu
0
830
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
150
フロントエンド設計にモブ設計を導入してみた / 20241212_cloudsign_TechFrontMeetup
bengo4com
0
1.9k
UI State設計とテスト方針
rmakiyama
2
480
Featured
See All Featured
Statistics for Hackers
jakevdp
796
220k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
The Cost Of JavaScript in 2023
addyosmani
45
7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Six Lessons from altMBA
skipperchong
27
3.5k
Become a Pro
speakerdeck
PRO
26
5k
Adopting Sorbet at Scale
ufuk
73
9.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
Into the Great Unknown - MozCon
thekraken
33
1.5k
The Invisible Side of Design
smashingmag
298
50k
Docker and Python
trallard
42
3.1k
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を人が読める形式の情報として表示する