mastering bitcoin ~network~

28
BITCOIN NETWORK 鈴木雄登

Upload: yuto-suzuki

Post on 21-Jan-2018

37 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Mastering Bitcoin ~network~

BITCOIN NETWORK 後半鈴木雄登

Page 2: Mastering Bitcoin ~network~

Agenda

SPVノード

BloomFilter

トランザクションプール

アラートメッセージ

Page 3: Mastering Bitcoin ~network~

おさらい

ネットワークノードには4つの機能

Wallet

Miner

Blockchain

Network Routing

Page 4: Mastering Bitcoin ~network~

SPVノード

Page 5: Mastering Bitcoin ~network~

SPVノード

Simplified Payment Verification

日本語だと「簡単決済認証」

一般的なウォレットはSPVノード

Page 6: Mastering Bitcoin ~network~

SPVノードとフルノードの違い

ブロックヘッダのみでトランザクションはDLしていない

結果1/1000の容量になる

使用可能な全てのUTXOは分からない

Page 7: Mastering Bitcoin ~network~

SPVノードとフルノードの違い

SPVノード

全てのブロックチェーン

SPVノードに関係あるトランザクション

フルノード

完全に検証されたブロックチェーン

全トランザクション

Page 8: Mastering Bitcoin ~network~

SPVノードの構成(おさらい)

WalletBitcoinアドレスと秘密鍵を格納するソフトウェア

Page 9: Mastering Bitcoin ~network~

SPVノードの構成(おさらい)

StratumでもSPVノードはあるStratum

・Bitcoin P2Pプロトコルとは別のプロトコル

Stratumサーバ・Stratumノードと

BitcoinP2Pノードの橋渡し

Page 10: Mastering Bitcoin ~network~

SPVノードのトランザクションの確認

1.代理ノードに対してmerkle path証明を要求

2.ブロックチェーンにあるPoWを検証

Page 11: Mastering Bitcoin ~network~

merkle path

merkle treeという二分木を使った経路探索

葉ノードはトランザクションデータをハッシュ化

詳しくはブロックチェーンの章で

Page 12: Mastering Bitcoin ~network~

SPVノードのブロックヘッダ同期

トランザクションの場合

request: getdata

response: tx

2000個以内のheaderを送る

Page 13: Mastering Bitcoin ~network~

プライバシー問題

SPVノードは特定のbitcoinアドレスに関するTXを要求

漏れてしまうので、特定されないようにする必要

BloomFilterを利用

Page 14: Mastering Bitcoin ~network~

BLOOM FILTER

Page 15: Mastering Bitcoin ~network~

Bloom Filterとは?

簡単に言うと、枝刈りの手法

考案は1970年

bitcoinの機能だけでなく、DBの探索などでも利用される

Page 16: Mastering Bitcoin ~network~

BloomFilterでできること

ある要素が集合のメンバーであるかどうかを見る

ただし偽陽性がある

要素があるかは不確実

要素がないことは確実

Page 17: Mastering Bitcoin ~network~

アルゴリズム

Page 18: Mastering Bitcoin ~network~

アルゴリズム

Page 19: Mastering Bitcoin ~network~

アルゴリズム

Page 20: Mastering Bitcoin ~network~

アルゴリズム

1 1

再度同じPatternAが来ても全てのbitが立っているので存在と判定できる

Page 21: Mastering Bitcoin ~network~

BloomFilterに似てるもの

ビット配列(入力が数値なら)

ハッシュテーブル(ハッシュ関数の数が1の場合と同じ。ただし衝突を考慮する必要あり)

Page 22: Mastering Bitcoin ~network~

SPVノードでは?

ウォレットに含んでいるBTCアドレスをハッシュ化

Node A Node B

filterload

getdata

merkleblock

tx

tx

filteradd

filterclear

bloom filter

の送信トランザクション

の取得

パターンの追加

Bloom filterの再作成

Page 23: Mastering Bitcoin ~network~

トランザクションプール

Page 24: Mastering Bitcoin ~network~

トランザクションプール

未検証トランザクションの一時リスト

ブロックチェーンに含まれていないTX

Orphanプールもある

TXプールはノード単位で持ってるので、ノードが落ちれば消えてしまう

Page 25: Mastering Bitcoin ~network~

UTXOプール

全ての未使用アウトプットの集合

常に開始当時からの全UTXOを保持

BTCネットワーク内で検証済みのもの

Page 26: Mastering Bitcoin ~network~

アラートメッセージ

Page 27: Mastering Bitcoin ~network~

機能

今まで数回しか使われたことがない

alertというメッセージで全BTCユーザに通知できる

GUIのクライアントではPUSH通知

すでに廃止された模様

Page 28: Mastering Bitcoin ~network~

フィールド一覧

ID :アラートを一意に指定するID

Expiration :アラートが失効するまでの時間

RelayUntil :アラートが中継されなくなるまでの時間

MinVer, MaxVer :アラートが適用されるBitcoinプロトコルバージョンの範囲

subVer :アラートが適用されるクライアントバージョン

Priority :アラートの優先レヘル、現在使用されていない