bootnode -writeaddress命令的输出长度为64字节,而不是预期的128字节,为什么?

时间:2018-10-16 12:26:26

标签: go-ethereum geth

我想通过编译以太坊的源代码来获取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格式。

1 个答案:

答案 0 :(得分:1)

在此all: new p2p node representation #17643

中找到

自上次PR以来,代码已更改。

changed codes

它说:“某些软件包中还有其他更改,以解决节点ID不再是公共密钥这一事实。我已经尝试在单个提交中记录这些更改。”天哪。