Download - Mastering Bitcoin ~network~
![Page 1: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/1.jpg)
BITCOIN NETWORK 後半鈴木雄登
![Page 2: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/2.jpg)
Agenda
SPVノード
BloomFilter
トランザクションプール
アラートメッセージ
![Page 3: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/3.jpg)
おさらい
ネットワークノードには4つの機能
Wallet
Miner
Blockchain
Network Routing
![Page 4: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/4.jpg)
SPVノード
![Page 5: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/5.jpg)
SPVノード
Simplified Payment Verification
日本語だと「簡単決済認証」
一般的なウォレットはSPVノード
![Page 6: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/6.jpg)
SPVノードとフルノードの違い
ブロックヘッダのみでトランザクションはDLしていない
結果1/1000の容量になる
使用可能な全てのUTXOは分からない
![Page 7: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/7.jpg)
SPVノードとフルノードの違い
SPVノード
全てのブロックチェーン
SPVノードに関係あるトランザクション
フルノード
完全に検証されたブロックチェーン
全トランザクション
![Page 8: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/8.jpg)
SPVノードの構成(おさらい)
WalletBitcoinアドレスと秘密鍵を格納するソフトウェア
![Page 9: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/9.jpg)
SPVノードの構成(おさらい)
StratumでもSPVノードはあるStratum
・Bitcoin P2Pプロトコルとは別のプロトコル
Stratumサーバ・Stratumノードと
BitcoinP2Pノードの橋渡し
![Page 10: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/10.jpg)
SPVノードのトランザクションの確認
1.代理ノードに対してmerkle path証明を要求
2.ブロックチェーンにあるPoWを検証
![Page 11: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/11.jpg)
merkle path
merkle treeという二分木を使った経路探索
葉ノードはトランザクションデータをハッシュ化
詳しくはブロックチェーンの章で
![Page 12: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/12.jpg)
SPVノードのブロックヘッダ同期
トランザクションの場合
request: getdata
response: tx
2000個以内のheaderを送る
![Page 13: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/13.jpg)
プライバシー問題
SPVノードは特定のbitcoinアドレスに関するTXを要求
漏れてしまうので、特定されないようにする必要
BloomFilterを利用
![Page 14: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/14.jpg)
BLOOM FILTER
![Page 15: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/15.jpg)
Bloom Filterとは?
簡単に言うと、枝刈りの手法
考案は1970年
bitcoinの機能だけでなく、DBの探索などでも利用される
![Page 16: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/16.jpg)
BloomFilterでできること
ある要素が集合のメンバーであるかどうかを見る
ただし偽陽性がある
要素があるかは不確実
要素がないことは確実
![Page 17: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/17.jpg)
アルゴリズム
![Page 18: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/18.jpg)
アルゴリズム
![Page 19: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/19.jpg)
アルゴリズム
![Page 20: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/20.jpg)
アルゴリズム
1 1
再度同じPatternAが来ても全てのbitが立っているので存在と判定できる
![Page 21: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/21.jpg)
BloomFilterに似てるもの
ビット配列(入力が数値なら)
ハッシュテーブル(ハッシュ関数の数が1の場合と同じ。ただし衝突を考慮する必要あり)
![Page 22: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/22.jpg)
SPVノードでは?
ウォレットに含んでいるBTCアドレスをハッシュ化
Node A Node B
filterload
getdata
merkleblock
tx
tx
filteradd
filterclear
bloom filter
の送信トランザクション
の取得
パターンの追加
Bloom filterの再作成
![Page 23: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/23.jpg)
トランザクションプール
![Page 24: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/24.jpg)
トランザクションプール
未検証トランザクションの一時リスト
ブロックチェーンに含まれていないTX
Orphanプールもある
TXプールはノード単位で持ってるので、ノードが落ちれば消えてしまう
![Page 25: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/25.jpg)
UTXOプール
全ての未使用アウトプットの集合
常に開始当時からの全UTXOを保持
BTCネットワーク内で検証済みのもの
![Page 26: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/26.jpg)
アラートメッセージ
![Page 27: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/27.jpg)
機能
今まで数回しか使われたことがない
alertというメッセージで全BTCユーザに通知できる
GUIのクライアントではPUSH通知
すでに廃止された模様
![Page 28: Mastering Bitcoin ~network~](https://reader031.vdocuments.mx/reader031/viewer/2022021508/5a649bd27f8b9a7c568b4da9/html5/thumbnails/28.jpg)
フィールド一覧
ID :アラートを一意に指定するID
Expiration :アラートが失効するまでの時間
RelayUntil :アラートが中継されなくなるまでの時間
MinVer, MaxVer :アラートが適用されるBitcoinプロトコルバージョンの範囲
subVer :アラートが適用されるクライアントバージョン
Priority :アラートの優先レヘル、現在使用されていない