比特币源代码中的 BITCOIN_SEED_NONCE 到底是什么?

What exacly is BITCOIN_SEED_NONCE in Bitcoin Source code?

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

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

你们能帮我解决这个问题并指出比特币源代码中的正确位置并让我知道该十六进制数的确切用途吗?

它被 generic-seeder in it's PushVersion function 使用,它对应于新比特币节点之间握手时使用的“版本”消息。

From the bitcoin wiki:

nonce uint64_t: Node random nonce, randomly generated every time a version packet is sent. This nonce is used to detect connections to self.

The PeerManagerImpl::PushNodeVersion(CNode& pnode, int64_t nTime) routine is the equivalent routine in the Bitcoin source:

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));
<...>
}