我正在修补比特币源代码并尝试了解testnet
模式中对等体发现机制的确切工作情况,我已对其进行了以下更改:
禁用DNS种子发现,以强制bitcoind回退以连接到硬编码节点。
将默认的硬编码节点更改为我已知的4个地址,例如A,B,C和D,我确保它们始终在线。
现在,当我运行bitcoind客户端(称之为E)时,它连接到A,B,C或D中的一个,运行相同的bitcoind修改版本。它通过交换getaddr
和addr
消息从它首次连接的硬编码节点获取对等地址,但我不确定它之后是如何进行的。我有以下问题:
一个。如果一个节点回退到连接到硬编码节点,它是否应该只连接到其中一个硬编码节点,就像它在我的情况下发生一样,还是可以连接到多个硬编码节点?
湾通过addr
消息获取对等地址后,节点E何时开始连接到那些对等体?
如果可能,请指出相关的代码文件/部分。感谢
答案 0 :(得分:-1)
一个。没有“硬编码节点”只有节点的DNS种子,当您通过DNS请求运行它们时,您将获得每个请求的新节点。
B中。如果节点未连接到节点的最大容量(它是8个活动节点和125个非活动节点),它将尝试连接到新节点,第二个节点将获得addr
消息。
你可以在这里找到它们:
livenet:https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L102
testnet:https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L181