区块链原理、设计与应用(第2版)
上QQ阅读APP看书,第一时间看更新

2.1 定义与原理

1.定义

区块链技术自身仍在飞速发展中,相关规范和标准还待进一步成熟。

公认的最早关于区块链的描述性文献是中本聪所撰写的《比特币:一种点对点的电子现金系统》,但该文献的重点在于讨论比特币系统,并没有明确提出区块链的术语。在其中,将区块和链描述为用于记录比特币交易账目历史的数据结构。

另外,Wikipedia上给出的定义中,将区块链类比为一种分布式数据库技术,通过维护数据块的链式结构,可以维持持续增长的、不可篡改的数据记录。

笔者认为,区块链可以从狭义和广义两个层面来看待:

●狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前的交易历史进行校验,适合分布式记账场景下防篡改和可扩展性的需求。

●广义上,区块链指代基于区块链结构实现的分布式记账技术,包括分布式共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。

2.早期应用

早在1990年8月,Bellcore(1984年由AT&T拆分而来的研究机构)的Stuart Haber和W.Scott Stornetta在论文“How to Time-Stamp a Digital Document”中就提出利用链式结构来解决防篡改问题,其中新生成的时间证明需要包括之前证明的Hash值。这可以认为是区块链结构的最早雏形。

2005年7月,在Git等开源软件中,也使用了类似于区块链结构的机制来记录提交历史。区块链结构最早的大规模应用出现在2009年初上线的比特币项目中。在无集中式管理的情况下,比特币网络持续稳定,支持了海量的交易记录,并且从未出现过严重的漏洞,从而引发了广泛关注。这些都与区块链结构自身强校验的特性密切相关。

3.基本原理

区块链的基本原理理解起来并不复杂。首先来看三个基本概念。

●交易(transaction):一次对账本的操作,导致账本状态的一次改变,如添加一条转账记录。

●区块(block):记录一段时间内发生的所有交易和状态结果等,是对当前账本状态的一次共识。

●链(chain):由区块按照发生顺序串联而成,是整个账本状态变化的日志记录。

如果把区块链系统作为一个状态机,则每次交易意味着一次状态改变;生成的区块就是参与者对其中交易导致状态改变结果的共识。

区块链的目标是实现一个分布的数据记录账本,这个账本只允许添加,不允许删除。账本底层的基本结构是一个线性的链表。链表由一个个“区块”串联组成(如图2-1所示),后继区块中记录前导区块的Hash(散列)值。某个区块(以及块里的交易)是否合法,可通过计算Hash值的方式进行快速检验。网络中的节点可以提议添加一个新的区块,但必须经过共识机制来对区块达成确认。

图2-1 区块链结构

4.以比特币为例理解区块链工作过程

下面我们以比特币网络为例,来看其中是如何使用区块链技术的。

首先,用户通过比特币客户端发起一项交易,消息广播到比特币网络中等待确认。网络中的节点会将收到的等待确认的交易请求打包在一起,添加上前一个区块头部的Hash值等信息,组成一个区块结构。然后,试图找到一个nonce串(随机串)放到区块里,使得区块结构的Hash结果满足一定条件(比如小于某个值)。这个计算nonce串的过程,即俗称的“挖矿”。查找nonce串需要花费一定的计算力。

一旦节点找到了满足条件的nonce串,这个区块在格式上就“合法”了,成为候选区块。节点将其在网络中广播出去。其他节点收到候选区块后进行验证,发现确实合法,就承认这个区块是一个新的合法区块,并添加到自己维护的本地区块链结构上。当大部分节点都接受了该区块后,意味着区块被网络接受,区块中所包括的交易也就得到确认。

这里比较关键的步骤有两个:一个是完成对一批交易的共识(创建合法区块结构);另一个是新的区块被添加到链结构上,被网络认可,确保未来无法被篡改。当然,在实现上还会有很多额外的细节。

比特币的这种基于算力(寻找nonce串)的共识机制称为工作量证明(Proof of Work,PoW)。这是因为要让Hash值结果满足一定条件,并无已知的快速启发式算法,只能对nonce值进行逐个尝试的蛮力计算。尝试的次数越多(工作量越大),算出来的概率越大。

通过调节对hash值结果的限制条件,比特币网络控制平均约10分钟产生一个合法区块。算出区块的节点将得到区块中所有交易的管理费和协议固定发放的奖励费(目前是12.5比特币,每四年减半)。

读者可能会关心,比特币网络是任何人都可以加入的,如果网络中存在恶意节点,能否进行恶意操作来对区块链中的记录进行篡改,从而破坏整个比特币网络系统?比如最简单的,故意不承认别人产生的合法候选区块,或者干脆拒绝来自其他节点的交易请求等。

实际上,因为比特币网络中存在大量(据估计有数千个)的维护节点,而且大部分节点都是正常工作的,默认都只承认所看到的最长的链结构。只要网络中不存在超过一半的节点提前勾结在一起采取恶意行动,则最长的链将很大概率上成为最终合法的链。而且随着时间的增加,这个概率会越来越大。例如,生成6个区块后,即便有一半的节点联合起来想颠覆已被确认的结果,其概率也仅为,即可能性低于1/60。生成10个区块后,这个概率将降到1‰以下。

当然,如果整个网络中大多数的节点都联合起来作恶,将会导致整个系统无法正常工作。要做到这一点,往往意味着要付出很大的代价,与通过作恶得到的收益相比,得不偿失。