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