本文是从头完整实现以太坊协议系列的第二部分。第一部分在这里。截至目前我们已经实现了以太坊的发现协议,因此我们可以在网络上的找到其他节点。发现协议是RLPx协议的UDP块,它明确了四种消息:PingNode,Pong,FindNeighbors和Neighbors。
前文我们已经可以发送PingNode给自己,今天我们将要尝试ping以太坊网络上的节点。
(延续昨天的代码)
尝试ping别的节点
我们发送ping消息的理想对象就是网络的引导节点。在连接到网络的wiki页写到:
初始启动的时候,geth使用一套其端点已经写入代码的引导节点。
geth是以太坊的go语言实现,代码在go-ethereum。在这个代码仓库里面,params/bootnodes.go文件包含了不同网络的引导节点列表:MainnetBootnodes,TestnetBootnodes,RinkebyBootnodes等等。所有的这些节点都以以太坊enode格式罗列:
public_key_hex@ip_address:port
主网络节点如下,16进制数据缩写成了[..pub_key..]:
var MainnetBootnodes = []string{
// Ethereum Foundation Go Bootnodes
"enode://[..pub_key..]@52.16.188.185:30303", // IE
"enode://[..pub_key..]@13.93.211.84:30303", // US-WEST
"enode://[..pub_key..]@1