1.1.4 模拟生成一个区块链

这个区块链演示网站的网址是https://blockchaindemo.io/,下面介绍生成一个模拟区块链的具体操作。

1)在浏览器中输入网址https://blockchaindemo.io/,打开该网站,可以看到其页面包括4个区域,左上角是区块链中的所有节点信息,右上角有一个“Add Peer”按钮可以往区块链中添加节点,中间部分是区块链中的区块信息,最下面的“ADD NEW BLOCK”按钮可以添加一个新区块。默认区块链中有一个节点“Satoshi”(中本聪的英文名)和一个创世区块,如图1-11所示。

图1-11 区块链演示网站的操作界面

这个模拟区块链的区块中,包括数据、父区块哈希值、当前区块哈希值、索引、时间戳、Nonce这6个字段,如图1-12所示。

图1-12 模拟区块的结构

其中创世区块的索引是0,这里没有显示索引值而是显示了“GENESIS BLOCK”;判定哈希值有效的标志是以000开头。下面再添加几个区块。

2)创建两个新的区块。两个区块中填写的数据分别是“The Second Block”和“The Third Block”,输入数据后单击数据下面的“ADD NEW BLOCK”按钮,该网站会为这两个新区块自动生成有效的哈希值并与之前的区块连接起来,如图1-13所示。

图1-13 新增两个区块

图中可以看到本区块的父区块哈希值(PREVIOUS HASH)即为上一个区块的哈希值,索引值依次增加。

3)修改区块信息使其无效。由于区块的哈希值由区块的数据、父区块哈希值、区块索引、时间戳、Nonce一起生成的,其中任何一个数据的改变都会导致哈希值改变,而哈希值改变会导致区块的无效,即哈希值不以000开头。比如将创世区块的内容后面加上“It changed.”,那么哈希值会变成无效的,区块的颜色也由绿色变成红色(绿色代表有效,红色代表无效),如图1-14所示。

图1-14 修改区块值导致区块无效

因为后面的区块用到了前面区块的哈希值,故一个无效区块也会导致连接在该区块后面的区块无效。若要修复这些区块,则需要单击每个区块右下角的修复按钮对每个区块再重新进行一遍计算,或者说“挖矿”,如图1-15所示。

修复后的区块又会变成绿色,恢复有效状态。这是添加和修复区块的方法。但当前区块链中只有一个节点,下面演示多个节点的情况。

4)增加新节点。单击右上角的“Add Peer”按钮生成一个新的节点,这样区块链中就有了两个节点,如图1-16所示。

图1-15 修复区块链

图1-16 创建新节点

想要切换节点只要单击相应的节点就可以了。节点有3种颜色显示,蓝色表示当前节点,绿色表示和当前节点相连,红色表示未和当前节点相连。红色的节点下面有一个按钮,用来进行连接,鼠标悬浮到这个按钮上显示绿色,单击此按钮进行连接。

5)连接节点。单击节点“Rita”下的连接按钮进行连接后,可以看到“Rita”节点颜色变成了绿色,表示已连接,并且节点下面多了一个按钮,即消息列表按钮,节点右上角的数字表示消息的个数,如图1-17所示。

图1-17 连接节点

单击消息列表按钮可以显示消息记录,如图1-18所示。消息列表中会显示每个连接、区块请求、区块发送等信息。

图1-18 消息列表

6)同步区块信息。节点之间会互相同步区块信息。单击“Rita”节点,可以看到“Rita”节点下也包含了“Satoshi”节点中的3个区块,如图1-19所示。

图1-19 同步区块信息

通过上述模拟生成区块链的过程,可以对区块链的运行原理和区块同步过程有很直观的认识。区块链中的节点始终都将最长的链条作为正确的链,并持续延长和维护这条链。当节点发现有更长的链条并且本身的链条不是最新时,就会使用最长的链条替换当前节点的链条。若一个节点判断出本身的区块链是最新的,再收到新的区块信息时,节点就会把新的区块添加到自身链条的最后。

值得注意的是,当一个区块链的节点掌握了整个区块链中51%以上的计算能力时,它就可以重写整个区块链。基于这个原因,区块链中的计算能力过度集中会很危险。只有一个庞大且均匀分布的区块链才比较安全。

通过模拟生成一个区块链,真实感受了区块链的特性之后,接下来介绍区块链的技术构成和逻辑架构。