本文对EthereumJ的DevP2P相关的代码做一个简单的介绍。
DevP2P
以太坊定义了自己的DevP2P协议(https://github.com/ethereum/devp2p)实现以太坊网络内各节点之间的block同步。
以太坊的网络协议大致可以分为三个层次:
l 网络层(https://github.com/ethereum/devp2p/blob/master/rlpx.md),定义了如何在网络里发现相邻的node,如何进行node之间的安全握手,如何把上层协议消息放入传输Frame里去,以及如何进行消息的流控。
l DEVP2P协议层(https://github.com/ethereum/wiki/wiki/%C3%90%CE%9EVp2p-Wire-Protocol),定义了建立以太坊node之间的P2P链接所需要的消息和消息交互的流程。
l Ethereum协议层(https://github.com/ethereum/wiki/wiki/Ethereum-Wire-Protocol),定义了如何在以太坊node之间获得blockHeaders,Blocks,Transactions等信息的消息和消息交互的流程。
EthereumJ Net
EthereumJ使用UDP协议来进行以太坊网络node的发现,使用TCP协议来进行以太坊网络node之间的block消息交互。
EthereumJ使用netty的NIO类库来处理底层的TCP协议和UDP协议,自己实现了以太坊DEVP2P定义的协议。
EthereumJ进行以太坊node discovery的模块主要包括以下Class。
l UDPListener