[译]BIP130发送消息头

概述

当添加一个新消息-“sendheaders”时,比起“inv”消息来,节点更喜欢经过 “headers” 消息来接收新块的广播。git

动机

自 0.10 引入“headers-first”下载块以来,假设块不可以链接到(有效)头文件链,块将不会被处理。所以,块中继工做一般以下:github

  1. 节点(N)用包含块 hash 的“inv”消息来广播新的提示
  2. 其余节点(P)用“getheaders”消息(请求 headers 直到有新的提示出现)和新提示自己的“getdata”消息来响应“inv”
  3. N 用一个“headers”消息(带有新 block 的 headers 以及任何前面的 headers,P 未知)和包含一个新 block 的“block”消息来响应

然而,在创建提示且其中一个新的 block 被广播的状况下,对于一个新区块这一般是更加高效的,就是这个节点 N 只广播block-header而不是去广播 block-hash 以及保存其余节点生成和传输的 getheaders 消息(和所需的块定位符)。翻译

在 reorg 的状况下,其中 1 个或多个 blocks 被断开链接,节点当前只是为新提示发送“inv”。在请求这些块以前,须要等到中间块的 headers 被交付,此时其余节点能够当即请求新的提示。 经过广播 headers,其余节点能够当即请求从上一个fork点开始到块公告中的新提示出现全部中间块。code

规范

  1. sendheaders消息被定义为一个空的消息,其中 pchCommand == “sendheaders”
  2. 收到“sendheaders”消息后,将容许节点(但不是必需)经过发送新块的block-header来通知新的blocks(为了块链接,节点所认为的对等点可能须要与其余的块一块儿)
  3. 经过检查协议 version >= 70012 来启用功能发现

附加限制

因为对sendheaders的支持是可选的,因此实现这一点的软件也能够选择性地施加其余的约束,例如只在创建链接后才去遵照sendheaders消息。ip

向后兼容

在这种变化以后,老客户端仍然彻底兼容而且能够互操做。get

实现

github.com/bitcoin/bit…hash

引用

原文连接:sendheaders messageit


本文由 copernicus团队 冉小龙 翻译,转载无需受权。io

原文连接: mp.weixin.qq.com/s/rq3HTa2k4…ast

相关文章
相关标签/搜索