【问题标题】:How do I test the Bitcoin alert message?如何测试比特币警报消息?
【发布时间】:2015-01-28 23:57:52
【问题描述】:

我正在开发一个比特币客户端,我想通过接收“警报”比特币消息来测试我的代码。但我不知道如何从比特币网络上的另一个节点请求此消息。通过阅读协议规范(如下),听起来这条消息只是为了响应一些恶意事件而发送的,我可能不想尝试和模仿(我不想让自己在 Testnet 上被列入黑名单 :)

https://en.bitcoin.it/wiki/Protocol_specification#alert

【问题讨论】:

  • 这可能是比特币stackexchange的问题。

标签: alert bitcoin


【解决方案1】:

概述

  1. 克隆比特币
  2. 添加 sendalert.cpp
  3. 修补警报功能
  4. 修补 Makefile 和 init.cpp
  5. 构建二进制文件
  6. 在相互连接的两个不同位置运行二进制文件。
  7. 等等。

克隆比特币

您需要做的第一件事是分叉 [bitcoin][bitcoinrepo] 存储库。在 github 上,您只需单击“Fork”,也可以克隆存储库并在本地进行所有更改。无论哪种方式,您都需要自己的比特币源代码副本。

添加 sendalert.cpp

这是在 [此处][sendalert] 中找到的要点的修改版本。您需要将 [this file][modsendalert] 放入 [src directory][bitcoinsrc]。

您可以选择编辑实际的警报属性,例如评论文本、状态栏文本、现在实际忽略的警报等。您可以在 [此处][alertspecification] 查看完整的警报规范。

修补警报功能

在 [src/alert.cpp][alertcpp] 中,使这些函数返回 true:

  • IsInEffect
  • AppliesToMe
  • CheckSignature

修补 Makefile 和 init.cpp

在[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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2020-05-30
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多