【发布时间】:2015-01-28 23:57:52
【问题描述】:
我正在开发一个比特币客户端,我想通过接收“警报”比特币消息来测试我的代码。但我不知道如何从比特币网络上的另一个节点请求此消息。通过阅读协议规范(如下),听起来这条消息只是为了响应一些恶意事件而发送的,我可能不想尝试和模仿(我不想让自己在 Testnet 上被列入黑名单 :)
【问题讨论】:
-
这可能是比特币stackexchange的问题。
我正在开发一个比特币客户端,我想通过接收“警报”比特币消息来测试我的代码。但我不知道如何从比特币网络上的另一个节点请求此消息。通过阅读协议规范(如下),听起来这条消息只是为了响应一些恶意事件而发送的,我可能不想尝试和模仿(我不想让自己在 Testnet 上被列入黑名单 :)
【问题讨论】:
您需要做的第一件事是分叉 [bitcoin][bitcoinrepo] 存储库。在 github 上,您只需单击“Fork”,也可以克隆存储库并在本地进行所有更改。无论哪种方式,您都需要自己的比特币源代码副本。
这是在 [此处][sendalert] 中找到的要点的修改版本。您需要将 [this file][modsendalert] 放入 [src directory][bitcoinsrc]。
您可以选择编辑实际的警报属性,例如评论文本、状态栏文本、现在实际忽略的警报等。您可以在 [此处][alertspecification] 查看完整的警报规范。
在 [src/alert.cpp][alertcpp] 中,使这些函数返回 true:
IsInEffectAppliesToMeCheckSignature在[init.cpp][initcpp]的顶部附近,你需要把这段代码:
extern void ThreadSendAlert();
在文件末尾附近:
return !fRequestShutdown;
输入这一行:
threadGroup.create_thread(boost::bind(ThreadSendAlert));
您还需要通过将 sendalert.cpp 添加到 libbitcoin_server_a_SOURCES 列表来将 sendalert.cpp 添加到 [Makefile.am][makefile]。这可以在这一行之后完成:
txmempool.cpp \
并在后面添加这一行:
sendalert.cpp \
按照 [unix][buildinstructions] 或 [mac][buildinstructionsmac] 的说明进行操作。
您将需要两台机器,尽管可能只使用一台使用不同端口的机器,但我无法弄清楚这一点。您将需要每台机器的 IP 地址。假设您有机器 A 和 B。您希望机器 B 接收警报。
您需要从机器 A 运行:
./bitcoind -printtoconsole -sendalert -testnet -addnode=<ip of machine B>
您需要从机器 B 运行:
./bitcoind -printtoconsole -sendalert -testnet -addnode=<ip of machine A>
确保它们的启动相对较近(彼此相距不到 5 秒)。
启动后大约 1 分钟,您应该会在机器 B 的控制台中看到如下所示的警报:
ThreadSendAlert:
hash=14c7c1217b54b953a81b08e0be16b9a56a9365240169d808424d5e7dd5690769
vchMsg=010000003271cd5400000000c2ffdb5400000000150400002a000000021004000012040000721101007311010002102f5361746f7368693a302e31302e302f0f2f5361746f7368693a302e392e332f88130000177465737420636f6d6d656e742031343232373530303032165445535420414c4552543a203134323337303430303210746573742072657365727665642e2e2e
vchSig=304402204cf39bec79eb10ad056f7a1ca48cfda3d612444a22eead543f345ae5f9c483df02204fc13370a17c639b796061ed39f294dd145363b3b953b9b4475da3b40bcd3f0e
ThreadSendAlert() : Sending alert
attempting relay
ThreadSendAlert() : Sent alert to x.x.x.x:18333
attempting relay
ThreadSendAlert() : Sent alert to x.x.x.x:18333
attempting relay
ThreadSendAlert() : Sent alert to x.x.x.x:18333
attempting relay
ThreadSendAlert() : Sent alert to x.x.x.x:18333
attempting relay
ThreadSendAlert() : Sent alert to x.x.x.x:18333
ThreadSendAlert() : Alert sent to 5 nodes
在此处完成说明:https://gist.github.com/jimmysong/4c72d098255b217b4c8c
【讨论】: