美文网首页
bitcoin网络协议交互

bitcoin网络协议交互

作者: 路之遥_其漫漫_ | 来源:发表于2018-05-20 16:48 被阅读0次

    sendheaders

    直接请求块头的公告。
    收到该消息后,节点被允许通过headers命令去通告新区块(而不是INV命令)。
    这个消息类型在协议版本 >= 70012 或 比特币版本 >= 0.12.0 支持。
    详细信息在BIP 130 中。
    这个消息不携带额外的 信息。

    getaddr

    getaddr消息向节点发送请求,询问有关已知活动节点的信息,以帮助查找网络中的潜在节点。 接收该消息的响应是来自活跃节点的数据库 一个或多个 活跃节点的 addr消息与。 典型的推测是,如果一个节点在最近三个小时内发送了一条消息,那么该节点可能是活跃的。

    此消息不会传输额外的数据

    headers

    Description Data type Comments
    count var_int 区块头数量
    headers block_header[] 所有的区块头

    该命令用来回复 getheaders请求,内容为区块头信息。
    payload:

    Description Data type Comments
    count var_int 区块头数量
    headers block_header[] 所有的区块头

    OnHeaders 消息

    OnHeaders : 接收到块头信息,将它连接到本地的块头信息上; 到达检查点后,向网络中请求这些区块的数据()。

    getblocks(请求)

    Filed Size Description Data Type Comments
    4 version uint32_t 协议版本
    1+ 哈希数量 var_int 定位器中包含的哈希数量
    32+ 定位器中的哈希 char[32] 块的定位器,(最远回到创世块)
    32 停止哈希 char[32] 截止区块的哈希。设置为全0,标识希望获取尽可能多的哈希。

    该消息中包含一个定位器对象,定位器对象中是一系列区块头哈希.(从当前Tip开始,最多至创世块;还有一个截止哈希。)
    该消息获取的返回信息是:当前激活链从定位器开始至结束哈希/最多500个 的区块。
    这些定位器的哈希,被接收节点以在收到的信息中出现的顺序进行处理。如果一个块哈希在接收节点的主链中含有,它的一系列后代区块则通过INV信息,传输给发送节点,无论是否达到请求的限制,剩下的定位器会被忽略。
    为了再次接收接下来的块,一个节点需要使用新的定位器再次发送getblocks 信息. 记住:如果这个定位器中包含的块哈希出现在他们的无效的分支上,一些客户端可能会提供一些无效的区块。
    该消息的payload:

    Filed Size Description Data Type Comments
    4 version uint32_t 协议版本
    1+ 哈希数量 var_int 定位器中包含的哈希数量
    32+ 定位器中的哈希 char[32] 块的定位器,(最远回到创世块)
    32 停止哈希 char[32] 截止区块的哈希。设置为全0,标识希望获取尽可能多的哈希。

    创建一个块定位器对象,从当前主链的Tip一直递推到创世块。从Tip递推10个区块后,接下来的步数就按照两倍的步数开始起跳。
    注意:这个消息允许定位器包含最少一个哈希。然而,块定位器的目的是在调用者的激活链上检测一个错误的分支。如果接收节点检测到你偏离了主链,它将发送比你已知的更早块哈希。所以如果你仅发送最后一个块哈希,并且这个块偏离了主链,则对等节点只能从1号块给你发送区块了。

    INV消息(InvTypeBlock类型;getblocks的应答)

    当一个节点收到getblocks 请求后,对这个消息作出的应答。
    getblocks请求中,会包含一个区块定位器和一个stophash.

    这个应答信息包含两种情况

    1. 定位器对象中包含的某个区块在当前节点的主链中找到,且stophash也在当前主链中找到,则返回 查找到的哈希的下一个区块至stophash 的所有区块哈希;
    2. 定位器对象中包含的某个区块在当前节点的主链中找到,但stophash 没有在当前主链中找到,则允许返回 查找到的区块后 最后最大的区块哈希数量/或至当前主链的Tip块。(软件系统中,硬编码为500)
    3. 如果找不到stophash,且没有提供定位器,则什么也不返回。

    OnVersion 放在syncmanager 来处理;
    全局时间戳,放在哪里。

    相关文章

      网友评论

          本文标题:bitcoin网络协议交互

          本文链接:https://www.haomeiwen.com/subject/uxetjftx.html