为何感兴趣:

区块链从17年各种数字货币被炒上了天,一下成为了人们街头巷议的焦点,本文撇开数字货币的投资不说,仅仅从技术层面来剖析一下区块链各个部分的原理。

本文章将以比特币区块链作为学习的对象,这是所有区块链项目的始祖,也是学习区块链的最佳原材料。

区块链的本质是一个建立在P2P网络上的分布式数据库,所以P2P网络可以算得上是区块链的一块基石,我们就以P2P网络作为切入点来开始比特币源码的学习。本文将结合比特币源码,分析比特币P2P网络中的一个节点是如何发现其他节点并与之建立数据通信的通道。

名词解释:

区块链:

是一种特殊的分布式数据库。本质就是建立在P2P网络上的分布式数据库。用作中央记账系统,分布在无数个节点之上。

比特币协议规定:平均10分钟诞生一个区块,区块的大小只有1MB,最多只能包含2000多笔交易。也就是说,每10分钟,最多只能处理2000笔交易,换算一下,就是处理速度为 3~ 5笔/秒。

区块链由一个个区块(block)组成。

区块(block):

很像数据库的记录,每次写入数据,就是创造一个区块。每个区块包含两个部分:

  • 区块头:记录当前区块的特征值(生产时间,实际数据的哈希,上一个区块的哈希)
  • 区块体:实际数据(对于BTC来说,就是交易数据,A转账给B等等)

比特币P2P网络:

本质就是建立在P2P网络上的分布式数据库。然后采用 PoW 或者 PoS 等共识算法让网络上的节点对某件事情达成共识。

POW(Proof Of Work):

工作量证明。大多数加密货币迄今一直遵守的共识算法。意味着矿工通过专用硬件来进行挖矿的动作。

POS(Proof Of Stake):

权益证明。共识算法将整个采矿过程变得虚拟。在这个系统中,有验证者而不是矿工。

过程

原始代码可以在此下载:bitcoin source code

1,节点发现

一个新启动的节点是如何发现其他网络的节点呢?比特币采用两种方式:种子节点 或者 及节点推荐。

2,握手地址

当节点与对等节点建立好连接后,首先要做的就是握手。

3,地址广播及发现

完成握手之后,新节点会发送一条包含自己IP地址的 Addr 给对等端,对等端收到之后又向它相连接的相邻节点发送 addr 消息,这样新节点的 IP 地址就会在 P2P 网络中广播出去。此外新节点还可以发送 getAddr 消息,要求对等端把自己知道的节点IP地址发送过来。通过这种方式,新节点可以找到需要连接的对等节点。

节点必须连接到若干不同的对等节点才能在比特币网络中建立通向比特币网络的种类各异的路径。

References: