比特币网络连接、区块头获取与简化支付验证
1. 网络握手与区块头获取
在比特币网络中,与节点建立连接后,需要完成握手过程,只有在接收到 verack 和 version 消息后,握手才算完成。不过,我们并不知道这两个消息到达的顺序。
以下是一个关于编写 SimpleNode 握手方法的练习:
# 练习 5:编写 SimpleNode 的握手方法
# 代码待补充
连接到节点后,我们可以开始获取区块头。对于任何节点而言,首次连接到网络时,获取并验证区块头的数据至关重要。对于全节点来说,下载区块头可以让它们异步地从多个节点请求完整的区块,从而并行化区块的下载。对于轻客户端而言,下载区块头则可以验证每个区块的工作量证明。
获取区块头的命令是 getheaders ,其格式如下:
- 协议版本
- 区块头组的数量(若发生链分裂,该数量可能大于 1)
- 起始区块头
- 结束区块头
如果将结束区块指定为 000...000 ,则表示我们希望获取对方节点所能提供的尽可能多的区块头。我们最多可以获取 2000 个区块头,几乎相当于一个难度调整周期(2016 个区块)。
以下是 GetHeadersMessage 类的代码:
class Get
超级会员免费看
订阅专栏 解锁全文
33

被折叠的 条评论
为什么被折叠?



