0

我正在研究区块链,目前正在研究 DNS 种子节点如何工作。我知道爬虫通过魔法消息抓取节点,但我无法弄清楚比特币源代码中的一个值来自哪里以及它的用途。

#define BITCOIN_SEED_NONCE 0x0539a019ca550825ULL 程序来源:https ://github.com/team-exor/generic-seeder/blob/f6c33d59b9a56a677364fbcdb9b2e30c51fc4a89/bitcoin.cpp#L9

你们能帮我弄清楚这一点并指出比特币源中的正确位置并让我知道该十六进制数字的确切用途吗?

4

1 回答 1

1

它被generic-seeder 它的 PushVersion 函数使用,它对应于新比特币对等点之间的握手中使用的“版本”消息。

来自比特币维基:

nonce uint64_t:节点随机nonce,每次发送版本包时随机生成。此 nonce 用于检测与自身的连接。

PeerManagerImpl::PushNodeVersion(CNode& pnode, int64_t nTime) 例程是比特币源代码中的等效例程:

void PeerManagerImpl::PushNodeVersion(CNode& pnode, int64_t nTime)
{
<...>
    uint64_t nonce = pnode.GetLocalNonce();
<...>
    m_connman.PushMessage(&pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERSION, PROTOCOL_VERSION, (uint64_t)nLocalNodeServices, nTime, addrYou, addrMe,
            nonce, strSubVersion, nNodeStartingHeight, tx_relay));
<...>
}
于 2021-04-10T12:57:41.940 回答