比特币和区块链(9):比特币网络的交互协议–交易与挖矿

飞总

比特币P2P网络的主要架构和加入方式

已经在上两节介绍了,

今天我们回答一个问题,

这个P2P网络实际上发挥了什么作用?

比特币的节点通过联系记录的上次邻近的节点,或者DNS种子连接,或者硬编码IP地址。一旦一个节点和比特币网络联通以后,这个网络就会用来进行比特币的记账功能。

一个节点连入到网络里,首先要和它的邻近节点进行握手操作。握手操作主要是相互问候一下,交换一些简单的信息,比如说互相换一下版本号,看是否能够互相兼容。握手成功以后,如果两者可以兼容的话,新节点就进入到了这个网络里。如果不兼容的话,取决于客户端的实现,客户可能会被提示更新客户端,或者汇报不兼容信息。

一个节点加入网络以后,新节点在整个P2P网络存活的过程中,都是会保留长连接。也就是说这个连接要一直保持不断开。具体来说,在比特币上有PING/PONG两种类型的消息。PING/PONG的消息是为了保持节点之间长连接的心跳而设计的。这个设计和其他服务里面常用的心跳协议并无区别。

新节点建立长连接以后,首先要做的工作是把自己的区块链同步更新到最新的共识。我们在比特币的账本数据结构中介绍过,比特币是一个单向链表结构,每个节点则是一个区块,里面包含了区块头和一个包含哈希值的二叉树Merkle Tree。根据比特币区块链账本数据结构的特性,账本数据结构的更新通常有两种方式:

1、Head First:区块链更新优先从表头更新开始,表头同步完以后再从其他节点那边更新其他的

2、Block First:简单粗暴的从其他节点那边更新所有的区块

比特币的客户端有全节点和简化支付节点。前者需要全部同步才可以开始工作,而后者往往只需要先同步区块链的头就可以参与交易,所以后者通常实现Head First。

比特币的交互协议里面有很多的请求命令,比如说可以获得对方节点的相邻节点列表,又比如说传输一段数据给对方。数据的传输,最主要的是两类数据。一类是交易数据,一类是挖矿挖到一个区块的广播。

比特币的交易,使用的是一种比特币自己定义的脚本语言。我们在讲述比特币交易模型的时候讲述过这是一个记录了若干输入到若干输出的交易过程。但是实际上比特币的整个交易模型更复杂一些,需要我们去理解这个脚本语言。这也是如果你希望深入到比特币最底层的学习细节里面比较难的一个方面。有关脚本语言就不展开讲了。有兴趣的可以参考: https://learnblockchain.cn/2017/11/10/bitcoin-script/

交互协议里面另外一类是挖矿信息。所谓挖矿信息就是比特币的某个节点把自己收到的一系列交易组合成一个区块,然后把这个区块广播出去的过程。当然为了广播出去这个区块,该节点必须证明自己的区块是合法的。合法的在比特币的世界里是所谓的比特币共识问题讨论的范围,比特币采用的解法是用Proof of Work。有关这两个概念我们会在下两个章节展开。

到此有关比特币的分布式系统结构相关的内容都讲完了。我为大家总结了一下几点:

1.比特币是个P2P分布式系统。其节点结构是半中心化的拓扑结构。在全节点之间采用泛洪算法传播。简化支付节点通过全节点代理和其他全节点通讯。

2.比特币的节点加入,如果是初次加入通过DNS种子或者硬编码IP地址方式加入。如果不是初次加入则先尝试自己上次记录的相邻节点。

3.和其他P2P系统一样,比特币支持UPnP方式让局域网节点加入到比特币的网络里来。

4.比特币节点加入以后,会首先进行握手协议验证兼容性问题。之后比特币节点通过PING/PONG心跳协议保持长连接。

5.比特币节点加入后会同步账本,一般简化支付节点会先同步头部节点,全节点则需要全部同步。

6.在比特币网络里面有很多的消息,但是最为主要的是两类:交易和挖矿消息。

极客社区:区块链极客社区起源于北美顶尖的工程师社群,核心成员来自于各大科技公司、顶尖学府。社区以打造世界级区块链生态为宗旨,以促进区块链技术的普及为己任,希望站在区块链时代的风口上将最优质的区块链资源分享给用户!在这里,你将获得最权威的区块链教程、最新鲜的区块链资讯,以及对接最顶级区块链生态圈的机会。

加入我们,与硅谷大牛、藤校学霸一起,把酒言欢,链上论道;

加入我们,拥抱区块链去中心化的朝阳,破旧立新,让思维碰撞,让智慧共享;

加入我们,肩负起区块链时代赋予我们的独特使命,不忘初心, 砥砺前行!

不割韭菜,只谈技术,专属于工程师的社区!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180906G029I900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券