mastering bitcoin ~network~

Post on 21-Jan-2018

37 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 :アラートの優先レヘル、現在使用されていない

top related