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
490
0
Share
【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
クラスターmempool
azuchi
0
22
W-OTS+
azuchi
0
27
Shorのアルゴリズム
azuchi
0
48
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
35
Fiat-Shamir変換と注意点
azuchi
0
200
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
47
BIP-374 離散対数の等価性証明
azuchi
0
65
BIP-353 DNS Payment Instructions
azuchi
0
81
OP_CAT and Schnorr Trick
azuchi
0
82
Other Decks in Technology
See All in Technology
コードレビューを制するチームがソフトウェアデリバリーのフローを制す / Beyond Code Review: Distributing Its Responsibilities Across the SDLC
mtx2s
1
340
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
130
ビジュアルプログラミングIoTLT vol.23
1ftseabass
PRO
0
150
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
290
layerx-fde-practices
cipepser
6
2.9k
組織の中で自分を経営する技術
shoota
0
210
A Harness for Behaviour: how to get AI to generate code that does what we intend, or "TDD in the age of AI"
xpmatteo
0
500
自称宇宙最速で不合格となったAIP-C01にリベンジを果たすべくAIで問題集アプリを作ってみた。
yama3133
0
230
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.7k
APIテストとは?
nagix
0
140
地元にいないローカルオーガナイザーの立ち回り
uvb_76
1
290
Anthropic AIネイティブ・スタートアップ構築のプレイブック を理解する
nagatsu
0
210
Featured
See All Featured
Building Adaptive Systems
keathley
44
3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Practical Orchestrator
shlominoach
191
11k
Thoughts on Productivity
jonyablonski
76
5.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
840
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
We Have a Design System, Now What?
morganepeng
55
8.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
150
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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を人が読める形式の情報として表示する