我想通过编译以太坊的源代码来获取enode url格式的第一部分,即十六进制节点ID,我用goland提供的私有密钥构建并运行cmd / bootnode /,命令是像这样:
bootnode -nodekeyhex 9069e5f4dd2fdc131c385b78d557b9154b82a0f6fc6f12a0ed0782364528fb1f -writeaddress
输出:
d65a3c0982f62cad6f12b4274faa74e9adade1708064357fcefe19cd3986fc86
根据源代码,只有64个字节,而不是128个字节:
if *writeAddr {
fmt.Printf("%v\n", enode.PubkeyToIDV4(&nodeKey.PublicKey))
os.Exit(0)
}
我检查了enode.PubkeyToIDV4
的返回类型,实际上是32个字节:type ID [32]byte
。转换为%v
时,输出长度为64。
但是根据how-to-produce-enode-from-node-key
,输出长度为128字节,请告诉我出了什么问题。如何获得正确的128字节的节点ID,以构造正确的URL格式。
答案 0 :(得分:1)
在此all: new p2p node representation #17643
中找到自上次PR以来,代码已更改。
它说:“某些软件包中还有其他更改,以解决节点ID不再是公共密钥这一事实。我已经尝试在单个提交中记录这些更改。”天哪。