本文将介绍区块链的8种特性
分布式数据库
区块链是一种分布式数据库,大部分区块链技术在底层是线上采用了传统的数据库保存数据。例如:维护比特币代码的Bitcoin Core团队实现的比特币就采用LevelDB 来索引和保存区块链的链状态信息,而在比特币的钱包则采用Bekerly DB。不同的区块链可能采用不同的数据库系统实现,同一种区块链的不同节点也可能采用不同数据库。
数据库可视为电子化的文件柜——存储电子文件的处所,用户可对文件中的数据运行新增、截取、更新、删除等操作。
分布式数据库是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。每个被连接起来的数据库单元被称为站点或节点。分布式数据库有一个统一的数据库管理系统来进行管理,被称为分布式数据库管理系统。
区块链网络各个节点是复制同步的分布式数据库。每个节点上的数据库都有着完整的区块链上的所有数据和历史信息。由于每个节点上都有完整的检索数据,因此每个节点都直接查询到区块链上的任何记录,不需要依赖第三方。
图1-1 中心化账本和分布式账本的比较示意
共识机制:让各个节点的数据库保持一致的方法
谈到区块链,我们经常会听到“共识”(Consensus)这个概念,各种共识算法的名称,例如工作量证明(Proof of Work, 缩写POW)、权益证明(Proof of Stake, 缩写POS)。
工作量证明(POW)是一种经济对策。一般要求用户进行一些耗时适当的复杂运算,且答案能被服务方快速验算,以耗用的时间、设备、能源作为担保成本,来确保服务与资源被真正使用。
工作量证明现已成为以比特币为代表的加密货币或区块链的主流共识机制。
权益证明(POS)(又称持有量证明)权益证明(又称持有量证明)是出现的共识机制。与工作量证明不同,权益证明要求一组验证者轮流对下一个区块进行提议和投票,每个验证者的投票权重取决于其持有权益证明的多少。权益证明的显著优势在于具备安全性、降低集中化的风险以及提升能效。
区块链就是一种分布式数据库,是有很多节点的数据库,并且每个节点可以独立验证数据,不需要依赖第三方。那么,一个问题就诞生了:如何让这些节点的数据库保持一致?传统的分布式数据库有一个重要的假设,即分布式数据库的每个节点都是“友好的”。因此,要保持数据一致,主要克服一些技术性问题,比如网络延迟怎么办?网络临时中断怎么办?不同节点上的用户想篡改数据怎么办?……但这些问题都不可能忽略。除此之外,区块链一个重要的想法,不能默认各个节点都是“友好“的。有可能有些节点有意”制造麻烦”。
“共识”的概念很容易理解。共识的本质,就是让区块链各个节点上的数据保持一致的方法。而各种不同的共识算法,就是为了此目的采用的不同技术方法。“共识机制”的根本母的在于确保区块链各节点的数据是一致的。
达成共识是一个“慢”且“费劲”的过程,这就是代价——为了实现区块链系统的分布式、去中心化、独立验证、数据难以被篡改等特征。由于达成共识是一个“慢”且“费劲”的过程,故可以肯定的是区块链系统的性能始终低于集中式系统。
共识算法对公链(公共区块链)尤其重要。因为任何人不需要许可就能加入这类区块链网络,因此有可能出现由“恶意”的区块链网络,这就导致了共识算法几乎是保证这类区块链系统可靠的唯一途径。而需要许可的区块链,例如联盟链,其成员被一定规则约束,从身份识别验证、加入网络、访问权限到参与活动都受控制。在这类受约束的区块链中,不只有共识机制这一方法保证系统的安全和数据的一致性。例如实用拜占庭容错算法(Practical Byzantine Fault Tolerance 缩写为PBFT),而在联盟链选择工作量证明机制(POW)是不必要的。
P2P通信
成为一个有“共识”的、可靠的分布式数据库,且不依赖任何中间机构,解决这个问题的方法就是P2P(点对点)通信。所谓点对点,即Point to Point,节点之间的通信不需要经由第三方。P2P通信是最简单、直接、“原始”的通信方式,是任何网络通信的基础。这种通信方式可以减少网络依赖关键的中间节点,可以防止部分节点恶意操控整个区块链产生影响。由于采用了P2P通信方式,区块链“去中心化”特性更强。
P2P在隐私性要求高的网络中和文件共享领域得到了广泛的应用,由于其点对点的特性,可避免经过“中间人”。
图1-2 客户端服务器架构与点对点架构的比较示意
公开可验证的数据
区块链的节点是可见的。对于比特币和以太坊这种典型的公链来讲,链上的任何数据都是完全公开的,全世界任何人都可以看到,而且区块链上的数据是难以删除或修改的,因此数据一旦在区块链上发布就成为公开的信息。
区块链上的数据普遍使用常用的加密和签名算法来保证数据的正确性和一致性。在每个区块链节点上都可以立即验证链上数据的正确性。
区块链是如何进行数据的验证呢? 这涉及到两个重要的计算机密码学相关技术:一是哈希算法,二是数字签名技术。
①哈希算法又称散列算法、哈希函数、哈希算法的特点是任何原始数据的小改动都会改变输出数字的大变化,比那个且无法反向推导出原始数据的变化。
②数字签名是一类用于快速验证的算法。 每个使用者有一对密钥:一把公钥一把私钥。用户会使用私钥生成签名,用公钥验证签名。
难以篡改的数据记录
难以篡改的数据记录经常有人理解为“不可篡改”数据记录。严格来讲,这并不正确,区块链上的记录并不是不可篡改,而是“难以篡改”。在前面提到,区块链是一种分布式数据库,每个节点都有独立验证的能力,通过共识保证各个节点数据一致。也就是说,要想“篡改数据”就得骗过每个节点的验证算法,其次还得骗过整个区块链的共识机制,让所有节点改变,这变得更困难。
区块链是个“不支持删除操作”的数据库,区块链的数据只能不断增加,不会被删除。由于这个特点,使得区块链比较适用于非常重要、需要留下记录的场合。
区块链的数据虽然难以被篡改,但并不意味着“不可篡改”或“数据永不丢失”。一般情况下,区块链的节点越多、越分散,数据被篡改或完全被破坏的难度就越大。在一个去中性化程度非常高的区块链上,要篡改或破坏数据是十分困难的。
智能合约:链上的“代码逻辑”
以太坊是第一个引入更复杂的代码逻辑的区块链,并沿用了Nick Szabo在1995发明的词汇“智能合约(Smart contract)”。从名字上看,可能“误导”了一部分大众。以太坊的智能合约不具备人们所说的“智能”(人工智能等),也不是大众理解的“合约”(合同、法律条款),而是一种新的结合了区块链的计算模型,配合了一个图灵完备的虚拟机和一种新的程序设计语言。
Nick Szabo在其论文《智能合约:数字化市场的构建模块》中首次提出“智能合约”的概念。智能合约是一套以数字形式定义的承诺,合约参与方可以在上面执行这些承诺的协议,其基本理念是把合约条款嵌入硬件和软件中。以太坊实现了智能合约这一概念。
图灵机的提出是为了研究可计算问题而构思的抽象计算模型——将传统的纸币计算过程进行抽象,由虚拟机器人进行的数学运算,是现代计算机的雏形。
虚拟机是一种特殊的架构软件,可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于虚拟机这个软件所创建的环境来操作其他软件。以太坊的虚拟机(Ethereum Virtual Machine,缩写EVM)。
自主账户体系
区块链上的“账户”是没有“人”给你“分配”的。这与传统的互联网服务,或者是更传统的银行、证卷公司等,用户需要在对方提供服务时,首先要做的就是在其平台上申请和开通账户。为什么在区块链中有价值的数字货币,却不用开设账户呢?所谓的账户,是某个机构在本记账系统中给用户分配一个标示,这个标示属于用户且受机构规范的分账记录。也就是说用户得先从银行或证卷公司等平台“注册”一个账户,才能在这些平台中享受服务。而在自主账户体系中用户不需要向任何平台“注册”账户。
所谓自主账户,指账户的产生不是由其他人分配、产生,而是用户自我产生、自我申明。用户只需按照一个算法执行一下,就可以获得自己独特且安全的账户。自主账户体系相当于——去中心化身份,人作为个体,身份是自主的,不需要向任何人证明自己的身份。
区块链并不是真正匿名的
区块链普遍采用的自主账户地址往往是一长串字符或数字。除少数隐私区块链技术外,大部分区块链上的数据是完全公开的,人们可以清晰知道每笔交易的相关账户,如果是一笔转账,转账的金额和交易账户都清清楚楚,这个账户的一举一动都可以被全世界看到,且一公开就不能被抹去。
区块链之所以能够保护用户隐私,原因在于区块链账户无法对应用户的真实身份。正如前段提到的自主账户体系。自主账户不需要向任何人或机构申请,因此用户在使用自主账户时,没有任何信息能把账户与真实世界的个人信息关联起来。从这个角度看,区块链的匿名性相比于互联网应用会更好。这种“匿名性”和“隐私性”一度为地下交易、暗网提供便利。