第4章 区块链账本
区块链从本质上来说是一个去中心化的、公开透明的、不可被篡改的分布式账本,其底层架构包含较多的技术内容,本章将围绕一条商用区块链,着重介绍区块链底层技术的基本概念,如区块、账户、交易、资产等。
基本概念的介绍将不聚焦于某个区块链系统,而是通过技术凝练抽象出各个基本技术的关键内容与核心特征,并给出适当的代码示例。通过学习和熟悉这些内容,你会对一个商用区块链系统的基础部件和底层框架的构建有较为直观的认识。
传统意义的账本是指由若干账页组成,每张账页有固定条目,按照顺序记录企业或者个人经济业务的本子。每个条目包含以下内容:实体(参与者)、时间(记录账目的时间)、业务(经济业务记录),这一系列的条目构成了一张账页,账页最终构成了账本。
传统的账本有以下几个问题:第一,记账权限中心化,传统的账本往往由单一的记账者维护。第二,账本非公开透明,普通交易者无法查看账本内容。第三,容易被篡改,如果记账者随意篡改账本的内容,如时间、金额等,那么其他人很难发现。第四,数据没有冗余备份,账本一旦损坏或者遗失,就无法找回。传统的账本仍然有其他更多的问题,这里将不一一列出,这些问题的根本原因在于传统的账本使用了一个中心化的记账模式,而区块链账本将彻底解决这些问题。
本节将围绕一个通用的区块链系统阐述区块链账本的内容。区块链账本是指在分布式系统中,每个节点都存储一个完全相同的账本,这个账本由区块按照时间顺序前后连接形成,每个区块都记录着在某个时间周期内所有的交易记录,区块和区块连接形成的一条链称为区块链,其形成的整个账本称为区块链账本。
如图4-1所示,一个区块包含两个部分,区块头(Block Head)和区块体(Block Body)。其中,区块头记录当前区块的关键属性和状态信息,区块体记录当前区块周期内所有的交易,这些交易是由用户在区块链上发起的业务操作,这些业务操作同时改变了单个区块和整条区块链的状态,这些交易包含用户的签名。
图4-1
每个区块头都含有两个关键的字段—“区块的哈希值”和“前区块的哈希值”。区块的哈希值是指自己区块头的哈希值,而前区块的哈希值则指向前一个区块的哈希值。区块之间前后连接,形成了一条“区块链”。
在区块体内,保存用户发起的签名交易,打包区块即类似于传统账本中的一页。这些交易的内容记录了区块链上的业务操作关系,可以通过交易来改变区块链的状态,如A转移资产给B,A账户的资产减少,B账户的资产增加。这些因交易引起的状态变化都将记录在区块头里,用以查询和回溯。
和传统的账本有较大区别的是,区块链账本是分布式的,即网络中的参与节点都会保存全账本数据,数据冗余备份,每个区块都是全网共识产生的结果。区块链账本如图4-2所示。
图4-2
区块链通过不可逆的哈希运算,将区块前后关联,区块内容不能被恶意修改,否则将会导致两个区块无法关联、无法继续形成区块链账本。所有的网络节点(Node)同步执行同样的共识,共识内容中包含同样的交易记录,这些交易记录在经过验签、计算之后其执行结果一致,在不同的节点中它们生成的区块一致。如果某个节点作恶,计算出与别人不一致的区块,那么当前区块的哈希值将会与其他节点不一致,而在生成下一个区块的时候,将无法与下一个区块共识的“前区块的哈希值”关联,导致其不会继续生成和同步区块。而其他正常的节点由于“诚实”地执行了共识,将能继续关联下一个区块。
与传统的账本相比,区块链账本有以下优点:①去中心化,每个人都可以参与记账;②公开透明,人人都能同步账本并进行校验和计算;③不可被篡改,由不可逆的哈希算法保证,一旦被篡改就能被立即发现。