$30 off During Our Annual Pro Sale. View Details »

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

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

blockchain.tokyo #10登壇資料

jkcomment

July 24, 2018
Tweet

More Decks by jkcomment

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. EthereumのProtocol

    View Slide

  12. EthereumのProtocol

    View Slide

  13. EthereumのProtocol

    View Slide

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

    View Slide

  15. ノード探索(Node Discovery)

    View Slide

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

    View Slide

  17. ノード探索(Node Discovery)

    View Slide

  18. ノード探索(Node Discovery)

    View Slide

  19. 接続(RLPx Protocol)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. Ethereum Wire Protocol

    View Slide

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

    View Slide

  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メッセージ一覧

    View Slide

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

    View Slide

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

    View Slide

  29. まとめ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide