Slide 1

Slide 1 text

Ethereumを支える ネットワークの話 BLOCKCHAIN.TOKYO #10 2018.7.24 DMM.comラボ スマートコントラクト事業部 金志京

Slide 2

Slide 2 text

自己紹介 2016年9月 株式会社DMM.comラボ(現 合同会社DMM.com)入社 2017年まではWebRTCの人でした。が、2018年からはBlockchainの人です。 趣味: 育児、ロードバイク、最近はスニーカー 金 志京(きむ じぎょん) Twitter: @jkcomment

Slide 3

Slide 3 text

本日のアジェンダ ● ちょっとだけP2Pの話 ● Ethereumのネットワークの話 ● まとめ

Slide 4

Slide 4 text

入る前に ● 外部勉強会は初登壇です ● go-ethereumの実装&wikiベース(ほぼ) ● ソースコードと各プロトコルの 細かいスペックは出ません(ほぼ)

Slide 5

Slide 5 text

本日のゴール 1. ノードを生成して 2. どのように他のノードを探索して 3. どのように他のノードと接続して 4. どのようにデータのやり取り(同期とか)をするか ...をわかっていただければ

Slide 6

Slide 6 text

ちょっとだけP2Pの話 Ethereumのネットワークの話 まとめ Section01 Section02 Section03

Slide 7

Slide 7 text

P2Pとは Peer to Peer(ピア・トゥ・ピア または ピア・ツー・ピア)とは、 複数の端末間で通信を行う際のアーキテクチャのひとつで、 対等の者(Peer、ピア)同士が通信をすることを特徴とする通信方式、通信 モデル、あるいは通信技術の一分野を指す。   wikipediaより

Slide 8

Slide 8 text

P2Pの種類 - ① Hybrid ● Peerの位置情報およびデータ保存情報を Indexサーバに保存し、個別のPeerの接続を 管理する方式 ● メ: Indexサーバがノード探索を担当するため 設計と管理が安易 ● デ: Indexサーバが攻撃されると、 新規Nodeは参加できなくなる

Slide 9

Slide 9 text

P2Pの種類 - ② Pure ● ノード探索も、情報の保持もノード自分で 行う方式 ● メ: 耐障害性高さ ● デ: 実装が難しい、セキュリティ制御も難 しい

Slide 10

Slide 10 text

ちょっとだけP2Pの話 Ethereumのネットワークの話 まとめ Section01 Section02 Section03

Slide 11

Slide 11 text

EthereumのProtocol

Slide 12

Slide 12 text

EthereumのProtocol

Slide 13

Slide 13 text

EthereumのProtocol

Slide 14

Slide 14 text

ÐΞVp2p ● Transport Layer(Network Layer & Presentation Layer) ● Kademlia-like DHT ● 全てのデータはRLPでエンコードする(RLPx) ● データのやり取りはTCP、ネットワークの維持(探索・確認)はUDP ● 使用ポートは30303

Slide 15

Slide 15 text

ノード探索(Node Discovery)

Slide 16

Slide 16 text

ノード探索(Node Discovery) ● Kademliaベースのノード探索アルゴリズム ● Node ID = secp256k1 Public key ● Node間(n₁, n₂)の距離 = keccak256(n₁) XOR keccak256(n₂)

Slide 17

Slide 17 text

ノード探索(Node Discovery)

Slide 18

Slide 18 text

ノード探索(Node Discovery)

Slide 19

Slide 19 text

接続(RLPx Protocol)

Slide 20

Slide 20 text

接続(RLPx Protocol) 2種類のHandshakeを行う ● Encrypted handshake ● Protocol handshake

Slide 21

Slide 21 text

接続(RLPx Protocol) Encrypted handshake ● Node A ○ 認証メッセージの初期化(主に署名に関する処理) ■ メッセージの内容: ● 公開鍵、署名、Nonceなど ○ 認証メッセージをRLPでエンコード ○ Node Bの公開鍵で暗号化し、EIP8フォーマットのpacket に変換 ○ コネクションに書き込む(Write)

Slide 22

Slide 22 text

接続(RLPx Protocol) Encrypted handshake ● Node B ○ 受信したパケットを自分の秘密鍵で復号化し、 内容を検証 ○ Response用認証メッセージ生成 ■ メッセージ内容 ● 公開鍵、署名、Nonceなど ○ 認証メッセージをRLPでエンコード ○ Node Aの公開鍵で暗号化し、EIP8フォーマットのpacket に変換 ○ コネクションに書き込む(Write)

Slide 23

Slide 23 text

接続(RLPx Protocol) Protocol handshake ● Helloメッセージを送り合う ● Helloメッセージのやり取りが終わるまで packetの送・受信はできない ● Helloメッセージを送って、5秒以内に返信がな いとTimeOut処理が走る

Slide 24

Slide 24 text

Ethereum Wire Protocol

Slide 25

Slide 25 text

Ethereum Wire Protocol ● Application Layer ● Ethereum(eth)、Whisper(shh)、Swarm(bzz) etc. ● シンプルな識別コード

Slide 26

Slide 26 text

識別コード メッセージ 説明 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メッセージ一覧

Slide 27

Slide 27 text

ノード間同期処理 1. Node Aは、自分の状態情報を送信 (Total Difficulty, Block hash) 2. Node Bは、自分の状態情報を返信 3. TDとBlock hashを比較 4. Get Block Headers 5. Block Headers 6. 情報をダウンロード

Slide 28

Slide 28 text

ちょっとだけP2Pの話 Ethereumのネットワークの話 まとめ Section01 Section02 Section03

Slide 29

Slide 29 text

まとめ

Slide 30

Slide 30 text

まとめ ● EthereumにはÐΞVp2pプロトコルと Ethereum Wire Protocolがある。 ● ÐΞVp2pプロトコルでノード探索を行い、 P2Pオーバーレイネットワークを形成する。 ● Ethereum Wire Protocolで実際のブロックチェーンの データのやりとりを行う。(送・受信手段はRLPx)

Slide 31

Slide 31 text

● DMMでは様々な人材を募集しています ○ https://dmm-corp.com/recruit/top ● 遊びに来てね 最後に 

Slide 32

Slide 32 text

ご清聴ありがとうございました