Ethereumを支えるネットワークの話

 Ethereumを支えるネットワークの話

blockchain.tokyo #10登壇資料

55e8251480e61d7f4a7f3f94233c6100?s=128

jkcomment

July 24, 2018
Tweet

Transcript

  1. 8.

    P2Pの種類 - ① Hybrid • Peerの位置情報およびデータ保存情報を Indexサーバに保存し、個別のPeerの接続を 管理する方式 • メ:

    Indexサーバがノード探索を担当するため 設計と管理が安易 • デ: Indexサーバが攻撃されると、 新規Nodeは参加できなくなる
  2. 14.

    ÐΞVp2p • Transport Layer(Network Layer & Presentation Layer) • Kademlia-like

    DHT • 全てのデータはRLPでエンコードする(RLPx) • データのやり取りはTCP、ネットワークの維持(探索・確認)はUDP • 使用ポートは30303
  3. 16.
  4. 21.

    接続(RLPx Protocol) Encrypted handshake • Node A ◦ 認証メッセージの初期化(主に署名に関する処理) ▪

    メッセージの内容: • 公開鍵、署名、Nonceなど ◦ 認証メッセージをRLPでエンコード ◦ Node Bの公開鍵で暗号化し、EIP8フォーマットのpacket に変換 ◦ コネクションに書き込む(Write)
  5. 22.

    接続(RLPx Protocol) Encrypted handshake • Node B ◦ 受信したパケットを自分の秘密鍵で復号化し、 内容を検証

    ◦ Response用認証メッセージ生成 ▪ メッセージ内容 • 公開鍵、署名、Nonceなど ◦ 認証メッセージをRLPでエンコード ◦ Node Aの公開鍵で暗号化し、EIP8フォーマットのpacket に変換 ◦ コネクションに書き込む(Write)
  6. 26.

    識別コード メッセージ 説明 0x00 Status Ethereum状態情報を伝送 0x01 NewBlockHashes 新しいブロックヘッダを伝送 0x02

    Transactions トランザクションを伝送 0x03 GetBlockHeaders ブロックヘッダ要求 0x04 BlockHeaders ブロックヘッダ応答 0x05 GetBlockBodies ブロックボディ要求 0x06 BlockBodies ブロックボディ応答 0x07 NewBlock 新しいブロックボディを伝送 0x08 BlockHashesFromNumber ブロックハッシュと番号を要求 0x0d GetNodeData ノードデータ要求 0x0e NodeData ノードデータ応答 0x0f GetReceipts レシート要求 0x10 Receipts レシート応答 Ethereum Wire Protocolメッセージ一覧
  7. 27.

    ノード間同期処理 1. Node Aは、自分の状態情報を送信 (Total Difficulty, Block hash) 2. Node

    Bは、自分の状態情報を返信 3. TDとBlock hashを比較 4. Get Block Headers 5. Block Headers 6. 情報をダウンロード
  8. 29.