1.1 理解区块链
区块链通常被定义为去中心的分布式记账系统,该系统中的节点无需互相信任,通过统一的共识机制共同维护一份账本。比特币可以说是第一个区块链应用。在金融危机爆发的2008年,一位名叫中本聪(Satoshi Nakamoto)的神秘人物在《比特币:一个点对点电子现金系统》中首次提出了“比特币”这一概念。比特币的底层记账系统就是现在我们说的区块链技术,而中本聪身份之谜也为比特币和区块链技术带来了更加神秘的色彩。在前几年,大家会关注比特币而不会单独谈论区块链这个技术。直到2015年,区块链这一概念才被单独提出来为更多人所了解,且向着更广泛的应用场景发展。发生在这个时间点的主要原因之一是以太坊的出现和日益成熟。
区块链是一种分布式、去中心化的计算与存储架构。在详细了解区块链每个技术组成部分之前,先来理解为什么需要这种架构。
区块链要解决的是如何用一种可信的方式记录数据,使得用户可以信任区块链系统记录的数据,而无须假设记账节点的可信性。怎么实现呢?“无须信任”技术上的解决办法就是假设互相不信任。因此,每个节点都存有一份完整的数据记录,每条新的交易都要被重新验证。当一个节点重新加入网络并需要同步数据的时候,也是从其他节点同步交易历史,然后重新计算验证——这就决定了其第一个特点,即分布式存储(不能完全信任他人的存储)。也正是为了高效可靠的验证需要,才有了区块链现在的数据结构:区块链由成块的交易通过密码学算法连接在一起,使得整个账本公开透明、可追踪、不可篡改(数据被篡改时很容易被验证发现)。这么多记账节点为什么愿意按照一致性协议记账呢?依靠的就是巧妙的记账激励机制——诚实的记账节点会得到相应的奖赏,且诚实的记录比恶意篡改记录的收益更大——这就是一致性协议设计中的要点。下面就对区块链的数据结构、分布式存储和一致性协议进行详细介绍。
首先从数据结构来理解区块链,图1-2展示了比特币区块链的数据结构。系统中的交易(Transaction)被打包成一个个区块(Block)。在区块链系统运行过程中,区块链每次只能添加一个区块,并且每个区块均包含了用于验证其有效链接于上一个区块之后的数学凭证。正如它的名称“区块链”(Blockchain),一个个区块按照密码学算法链接在一起。这样的组织设计可以很容易地验证数据是否篡改、追踪历史以及保证安全。
图1-2 比特币区块链的数据结构
其次,区块链的架构是分布式、去中心化的。系统中各个节点组成一个P2P网络,每个节点均分别执行、验证和记录相同的交易,每个节点都可以在本地存储完整的区块链数据。没有一个中心机构能够干预交易的执行顺序和结果。因此,该架构具有很强的鲁棒性。这里要说明一点,我们看到的公有链的平台是去中心的,因为其设计假设以没有任何信任作为前提,即都不可信。在实际的应用中,如果有一些可信的元素,是完全可以利用的。因此我们也看到很多系统设计是多中心或者弱中心的模式。“去中心”在这里不是目的,而是一种达到可信的手段。
最后,为了保证各节点状态的一致性,还需要共识机制,即一致性协议(如PoW、PoS、PoA等)。以PoW为例,为了使得各个节点记录的结果是一致的,在每一时刻系统要选择一个记账节点来计算下一个区块。其他节点对该记账节点的区块结果进行验证,通过后则接受这个区块。为了激励大家高效正确地记账,系统对记账节点有相应的奖赏,这样一来大家会贡献计算和存储资源来争夺记账权。由于可以互相验证,也保证了记账的可靠性。接下来,我们要解决的问题就是:如何公平地选取这个记账节点,以及如何设计激励机制。PoW中采用的是“猜散列值”这个公平的、依靠消耗算力的方式,也被称作“挖矿”。谁先算出给定要求的散列值,谁就以大概率争夺到这个记账权。为什么说是概率呢,因为在分布式网络中,由于延迟,消息传递到其他各个节点的时间是不一样的。比如,我看到的是Bob先算出来的,而你可能看到的是Alice先“挖”出来。在不同节点上对下一区块的认可在短时间内可能是不同的。最终,以系统中最长的链条作为共识结果,即大家认可的账本内容。因此在使用中,当我们在本地看到某个交易被打包在区块链后,还需要等待若干后继块产生,等待若干块又称为等待确认(confirmation)。这样做的目的是防止由于延迟带来的账本不一致,具体细节将在第2章介绍。可见一致性协议的设计既要安全,以保证全网中各个节点存储的数据能够达成共识;还需要有效的激励机制,给予一定的经济奖励(即虚拟货币机制)来维持并且验证网络运行的节点,从而保证架构的稳定健康运行。
图1-3展示了比特币一类的数字货币的交易示例。Bob要给Alice进行转账,他需要创建一条交易,声明转账的付款人、收款人以及转账金额。之后Bob在这条交易上添加自己的数字签名,并将交易发布到区块链网络上。这条交易被记账节点验证后打包广播,并通过共识(一致性)协议达成全网一致。Alice在确认看到交易被记录,且该交易后面还有若干区块陆续被记录后(通常6~12个块)就可以认为自己已经收到了Bob的转账。
图1-3 区块链的网络结构
对于比特币的原理和使用我们有了一定的了解,接下来的问题是区块链是不是只能支持数字货币这一种应用呢?在其他业务场景中,当逻辑复杂、资产多样化的时候,又该如何利用区块链呢?