区块链实战:定义技术、社会与行业新格局
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 区块链运行逻辑

从本质上讲,区块链是一个通过自身分布式节点进行数据存储、验证、传递和交流的网络技术方案,任何人在任何时候都可以采用相同的技术标准生成信息并进行延伸。如果想对区块链有深入了解,首先要知道其运行逻辑,包括拜占庭将军问题、工作机制等。

1.2.1 拜占庭将军问题

区块链是一种分布式数据库,只要提到分布式,就会出现一个绕不开也躲不掉的问题——“拜占庭将军问题”。这个问题由著名的计算机科学家莱斯利·兰伯特提出,广泛存在于点对点通信中。为了让大家更好地理解“拜占庭将军问题”,莱斯利·兰伯特还编出了一个以拜占庭帝国时期为背景的故事,内容如下:

拜占庭帝国时期突然出现了一个像“怪兽”一样的敌人,于是,拜占庭国王就派出了9支军队与这个敌人对抗,并采用包围战术以提高胜利的概率,如图1-5所示。

图1-5 拜占庭帝国的包围战术

通过上图可以看出,拜占庭帝国的9支军队分散在敌人的四周。不过,敌人虽然比较小,但还是可以凭一己之力抵抗4支军队的力量。也就是说,任何1支军队都无法单独打败敌人。在这种情况下,要想真正打败敌人,就必须有5支以上的军队达成进攻共识。与此同时,还要有相应的通信兵在各个军队间传递由将军下达的防守或撤退的命令。因为9个军队的将军不能聚在一起,只要出现这种现象,敌人就很可能会逃跑。

但现在的问题是,这些将军无法确定他们中是不是有背叛者,一旦真的有背叛者,那这个背叛者就会向其他将军传递假的命令,从而促成一个不是所有将军都认可的行动。例如,当将军们都希望撤退时却促成进攻行动。

那么,各将军应该如何达成共识,从而顺利打败敌人呢?这便是困扰了计算机科学家们很多年的“拜占庭将军问题”。后来,计算机科学家们发现有两种办法可以解决这个问题:一种是口头解决;另一种是书面解决。

我们可以从这两种解决办法中得出结论:当背叛者的数量少于三分之一时,各将军能够达成共识。假设9个将军中有1个背叛者,那这个背叛者就可能给4个希望防守的将军传递防守命令,而给另外4个希望撤离的将军传递进攻命令。

不过,因为其他8个将军都是忠诚的,所以这8个将军在互相通信后还是能够达成共识的。也就是说,1个背叛者的干扰行为不会对最终的共识产生影响。当然,如果有2个背叛者,那么结果也是一样的。

假设有3个背叛者,这3个背叛者一面给希望防守的将军传递防守命令,一面给希望撤离的将军传递撤离命令,当3个希望防守的忠诚将军与3个希望撤离的忠诚将军通信后就会发现,分别有6个将军希望防守,6个将军希望撤离。这也就意味着,各将军之间没有达成共识,无法做出一致的防守或撤退的决定。当然,如果有3个以上背叛者,那么结果也是一样的。

由此可知,当背叛者的数量多于三分之一时,无论是口头解决,还是书面解决都将无济于事。那么,“拜占庭将军问题”究竟应该怎样解决呢?区块链似乎为这个问题提供了一些比较不错的办法,主要包括工作量证明、权益证明、委任权益证明等。

下面以工作量证明为例进行详细说明。工作量证明是一份用来确认已经做过一定量工作的证明。如果将其放在区块的生成过程中就变成我们俗称的“挖矿”。如果现在已经有矿工挖出了第1000个区块,但有的矿工还想挖第1001个区块,那与其他区块一样,这第1001个区块也是由区块头和区块体构成的,可以用来储存数据。

矿工通过改变区块头中的随机数,借助哈希函数计算输出一组哈希值。当有效的哈希值出现前,数十亿个无效的哈希值会被计算出来,整个过程需要花费大量的算力。计算出有效的哈希值的矿工可以抢到记账权并获得奖励,这便是工作量证明,如图1-6所示。

图1-6 “矿工”的“挖矿”过程

对应到上述拜占庭帝国的故事中,不仅通信兵传递命令需要时间,各将军对收到的命令进行验证和判断同样需要时间。在这个过程中,9个将军可以相互交流、沟通,当某个将军收集到正确且有效的命令并传递给其他将军验证后,这个将军就相当于做出了贡献,也就可以获得相应的奖励。

1.2.2 区块链的工作机制

随着时代的进步,大数据、人工智能、无人驾驶、物联网、4D打印、5G、基因工程、量子工程等技术开始融合。这些技术的融合少不了区块链的参与,现在也有越来越多的科技界人士已经认识到区块链的巨大价值。与其他技术相比,区块链的工作机制非常有特点。

区块链的工作机制主要分三步。第一步是账本公开,我们把区块链假设成一个封闭的区域,这个区域中的每户人家都是一个节点,每个节点都拥有记载着这个区域每一笔交易的账本,而且这个账本是公开的。只要这个账本的初始状态是确定的,并且每一笔交易的记录都是可靠而有序的,当前每个人持有的钱都是可以推算出来的。

但是,参与的用户必然不想让区域内所有人知道自己到底有多少钱。因此,在区块链中,交易是公开的,但参与的每个节点都是匿名的。节点之间不使用真实身份进行交易,而使用自己的唯一ID。当两个节点发生交易后,交易的报文中会显示此ID的数字签名,以确保交易是在双方之间展开的。

第二步是身份签名。假设老李和老王是区块链中的两个节点,老李的ID名为BLOCK,老王的ID名为CHAIN。如果老李要向老王支付1比特币,那么老李首先要询问老王的ID,这时区块链中就会产生一个交易:BLOCK要向CHAIN支付1比特币,老李要写一张交易单给老王。

在区块链中,为了追溯资金的来源,交易单上除了记载付款和收款信息,还要写上比特币的来源,如这个比特币来源于账本第一页。交易单写完后,老李还要加上自己的签名,即私钥,以便老王验证比特币的来源。老王收到签名后,会有老李的ID对其进行签名验证,以证明交易单是老李发的,如图1-7所示。

图1-7 老李与老王的交易过程

第三步是矿工挖矿。在一个中心化系统中,老李是否有足够的钱支付给老王,这个问题要通过第三方中介机构(如银行)确定。而在区块链系统中,确定这个问题的是矿工组织。当老李给老王发送交易单时,他们的交易信息会广播给矿工组织,而矿工组织的每个矿工小组在收到交易信息后会把交易补充到账本中。

矿工小组的具体工作就是生成账单,如图1-8所示。当矿工小组收到老李和老王的交易信息时,会在交易清单上记录这个交易;接着,矿工小组的成员找到当前账本的最后一页,将编号抄写在“上一账单的编号”一栏中;随后,矿工小组的成员会把交易清单、上一账单的编号及随机数通过哈希运算生成一个本账单编号。由于交易清单和上一账单的编号是不能改变的,因此,矿工小组必须不断变化随机数以生成符合规定的账单编号。

图1-8 矿工小组生成账单

此外,区块链会自动调整账单编号规则,使其在10分钟之内生成。矿工小组得到一张账本纸(区块)后,必须马上向其他小组确认自己的工作成果才能得到奖励。

其他小组在接到账本纸后必须立刻停下挖矿工作对账本进行确认:首先要将送来的账本纸放入编码生成器中,确认账本编号是否有效;然后将账本纸上的上一账单的编号和目前保存的有效账本的最后一页进行比对;最后要确认当前每笔交易的付款人有足够的余额支付这笔钱,以保证交易的有效性。

当完成了所有验证并通过后,矿工小组就认可了其他小组发来的账本纸有效。其他小组确认该区块有效后,这个区块就会进入主账本,后面的挖矿工作就会再基于这个更新后的账本进行。矿工小组如果收到其他小组送来的账本纸上的上一账单的编号是自己以前送去的账单,就表示已经有小组是基于他们交完账单后新生成的主账本工作了,这就表示他们的工作被其他小组认可了,而老李和老王看到大多数小组认可,就认为这个交易已经成功。

总结一下,区块链的工作机制是这样的:A利用自己的私钥对比特币的来源和下一位所有者B签署一个数字签名,并将签名附在交易单后面。这个交易单传播到全网,B和矿工小组都会收到这张交易单;矿工小组通过哈希运算解出对应的随机数,生成符合条件的哈希值,然后争取创建新区块并获得比特币奖励。

区块链中的节点会向全网通告区块记录的盖有时间戳的交易,并由其他节点核对。当其他节点核对区块并确认无误后,就会将该区块认定为合法,然后争取下一个区块,这样就形成了一个合法记账的区块链。

1.2.3 公有链VS私有链VS联盟链

区块链依据其节点的分布情况可以被划分为公有链(public blockchain)、联盟链(consortium blockchain)、私有链(private blockchain)三种类型。

(1)公有链的节点只需要遵守一个共同的协议便可获得区块链上的所有数据,而且不需要任何的身份验证。与联盟链和私有链相比,公有链的节点被某一主体控制的难度最大。

(2)联盟链主要面向某些特定的组织机构,正是因为如此,其运行只允许一些特定的节点与区块链连接,这也就不可避免地使区块链产生了一个潜在中心。

以数字证书认证节点的区块链的潜在中心是CA中心——证书授权中心(Certificate Authority);以IP地址认证节点的区块链的潜在中心是网络管理员。正如“擒贼先擒王”的道理,只要控制区块链的潜在中心,就有可能控制整个区块链。相比于公有链,联盟链被控制的难度要低得多,中心化程度也没有那么高。

(3)私有链的应用场景通常在企业的内部。从名称上看,私有链其实并不难理解,其特点之一就在于“私”——私密性。

私有链只在内部运行而不对外开放,而且只有少数用户可以使用,所有账本记录和认证的访问权限也只由某一机构组织单独控制。因此,相较于公有链和联盟链,私有链不具有明显的去中心化特征,只是拥有一个天然的中心化基因。

不同于公有链的广泛流行和使用,业界对私有链的存在价值具有颇多争议。有人认为私有链并无任何存在意义,因为它仅仅是一个分布式的数据库,容易被主体控制;也有人认为只要把私有链的应用建立在共识机制的基础上,它还是具有存在的意义的。