前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >bitcoin网络协议交互

bitcoin网络协议交互

作者头像
路之遥
发布2022-09-26 16:56:31
3970
发布2022-09-26 16:56:31
举报
文章被收录于专栏:luzhiyaoluzhiyao

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 来处理; 全局时间戳,放在哪里。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sendheaders
  • getaddr
  • headers
  • OnHeaders 消息
  • getblocks(请求)
  • INV消息(InvTypeBlock类型;getblocks的应答)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档