区块链是什么

区块链(blockchain)是在比特币之后提出的一个概念,在中本聪关于比特币的论文中没有直接引入blockchain的概念,而是以chain of block来描述一种数据结构。

Chain of block是指由多个区块通过哈希(hash)串联成一条链式结构的数据组织方式。区块链则是采用多项技术交叉组合,维护管理这个chain of block数据结构,形成一个不可篡改的分布式账本的综合技术领域。

区块链技术是一种在对等网络环境下,通过透明和可信规则,构建不可伪造、难以篡改和可追溯的块链式数据结构,实现和管理可信数据的产生、存取和使用的模式。技术架构上,区块链是由分布式架构与分布式存储、块链式数据结构、点对点网络、共识算法、密码学算法、博弈论、智能合约等多种信息技术共同组成的整体解决方案。

区块链技术和生态起源于比特币,随着金融、司法、供应链、文化娱乐、社会管理、物联网等更多行业对此领域技术的关注,希望将其技术价值应用到更广泛的分布式协作中,区块链技术和产品模式也在持续进化,FISCO BCOS区块链底层平台在区块链技术基础上,专注提升安全、性能、可用性、易用性、隐私保护、合规监管等方面的能力,和业界生态共同发展,体现多方参与、智能协同、专业分工、价值分享的效能。

账本

账本顾名思义,用于管理账户、交易流水等数据,支持分类记账、对账、清结算等功能。在多方合作中,多个参与方希望共同维护和共享一份及时、正确、安全的分布式账本,以消除信息不对称,提升运作效率,保证资金和业务安全。而区块链通常被认为是用于构建“分布式共享账本”的一种核心技术,通过链式的区块数据结构、多方共识机制、智能合约、世界状态存储等一系列技术的共同作用,可实现一致、可信、事务安全、难以篡改可追溯的共享账本。

账本里包含的基本内容有区块,交易,账户,世界状态。

区块

区块是按时间次序构建的数据结构,区块链的第一个区块称为“创世块”(genesis block),后续生成的区块用“高度”标识,每个区块高度逐一递增,新区块都会引入前一个区块的hash信息,再用hash算法和本区块的数据生成唯一的数据指纹,从而形成环环相扣的块链状结构,称为“Blockchain”也即区块链。精巧的数据结构设计,使得链上数据按发生时间保存,可追溯可验证,如果修改任何一个区块里的任意一个数据,都会导致整个块链验证不通过,从而篡改的成本会很高。

一个区块的基本数据结构是区块头和区块体,区块头包含区块高度,hash、出块者签名、状态树根等一些基本信息,区块体里包含一批交易数据列表已经相关的回执信息,根据交易列表的大小,整个区块的大小会有所不同,考虑到网络传播等因素,一般不会太大,在1M~几M字节之间。

交易

交易可认为是一段发往区块链系统的请求数据,用于部署合约,调用合约接口,维护合约的生命周期,以及管理资产,进行价值交换等,交易的基本数据结构包括发送者,接受者,交易数据等。用户可以构建一个交易,用自己的私钥给交易签名,发送到链上(通过sendRawTransaction等接口),由多个节点的共识机制处理,执行相关的智能合约代码,生成交易指定的状态数据,然后将交易打包到区块里,和状态数据一起落盘存储,该交易即为被确认,被确认的交易被认为具备了事务性和一致性。

随着交易确认相应还会有交易回执(receipt)产生,和交易一一对应且保存在区块里,用于保存一些交易执行过程生成的信息如结果码、日志、消耗的gas量等。用户可以使用交易hash检查交易回执,判定交易是否完成。

和“写操作”的交易对应,还有一种”只读”调用方式,用于读取链上数据,节点收到请求后会根据请求的参数访问状态信息并返回,并不会将请求加入共识流程,也不会导致修改链上的数据。

账户

在采用账户模型设计的区块链系统里,账户这个术语代表着用户、智能合约的唯一性存在。

在采用公私钥体系的区块链系统里,用户创建一个公私钥对,经过hash等算法换算即得到一个唯一性的地址串,代表这个用户的账户,用户用该私钥管理这个账户里的资产。用户账户在链上不一定有对应的存储空间,而是由智能合约管理用户在链上的数据,因此这种用户账户也会被称为“外部账户”。

对智能合约来说,一个智能合约被部署后,在链上就有了一个唯一的地址,也称为合约账户,指向这个合约的状态位、二进制代码、相关状态数据的索引等。智能合约运行过程中,会通过这个地址加载二进制代码,根据状态数据索引去访问世界状态存储里对应的数据,根据运行结果将数据写入世界状态存储,更新合约账户里的状态数据索引。智能合约被注销时,主要是更新合约账户里的合约状态位,将其置为无效,一般不会直接清除该合约账户的实际数据。

世界状态

FISCO BCOS采用“账户模型”的设计,即除了区块和交易的存储空间外,还会有一块保存智能合约运行结果的存储空间。智能合约执行过程产生的状态数据,经过共识机制确认,分布式的保存在各节点上,数据全局一致,可验证难篡改,所以称为“世界状态”。

状态存储空间的存在,使得区块链上可以保存各种丰富的数据,包括用户账户信息如余额等,智能合约二进制码,智能合约运行结果等相关的各种数据,智能合约执行过程中会从状态存储中获取一些数据参与运算,为实现复杂的合约逻辑提供了基础。

另一方面,维护状态数据需要付出不少存储成本,随着链的持续运行,状态数据会持续膨胀,如采用复杂的数据结构如帕特里夏树(Patricia Tree),状态数据的的容量会进一步扩大,根据不同的场景需要,可对状态数据进行裁剪优化,或采用分布式数据仓库等方案存储,以支持更海量的状态数据容量。

共识机制

共识机制是区块链领域的核心概念,无共识,不区块链。区块链作为一个分布式系统,可以由不同的节点共同参与计算、共同见证交易的执行过程,并确认最终计算结果。协同这些松散耦合、互不信任的参与者达成信任关系,并保障一致性,持续性协作的过程,可以抽象为“共识”过程,所牵涉的算法和策略统称为共识机制。

节点

安装了区块链系统所需软硬件,加入到区块链网络里的计算机,可以称为一个“节点”。节点参与到区块链系统的网络通信、逻辑运算、数据验证,验证和保存区块、交易、状态等数据,并对客户端提供交易处理和数据查询的接口。节点的标识采用公私钥机制,生成一串唯一的NodeID,以保证它在网络上的唯一性。

根据对计算的参与程度和数据的存量,节点可分为共识节点和观察节点。共识节点会参与到整个共识过程,做为记账者打包区块、做为验证者验证区块以完成共识过程。观察节点不参与共识,同步数据,进行验证并保存,可以做为数据服务者提供服务。

共识算法

共识算法需要解决的几个核心问题是:

  1. 选出在整个系统中具有记账权的角色,做为leader发起一次记账。
  2. 参与者采用不可否认和不能篡改的算法,进行多层面验证后,采纳Leader给出的记账。
  3. 通过数据同步和分布式一致性协作,保证所有参与者最终收到的结果都是一致的,无错的。

区块链领域常见的共识算法有公链常用的工作量证明(Proof of Work),权益证明(Proof of Stake),委托权益证明(Delegated Proof of Stake),以及联盟链常用的实用性拜占庭容错共识PBFT(Practical Byzantine Fault Tolerance),Raft等,另外一些前沿性的共识算法通常是将随机数发生器和上述几个共识算法进行有机组合,以改善安全、能耗以及性能和规模问题。

FISCO BCOS共识模块采用插件化的设计,可支持多种共识算法,当前包括PBFT和Raft,后续将会持续实现更大规模,速度更快的共识算法。

智能合约

智能合约概念于1995年由Nick Szabo首次提出,指以数字形式定义的能自动执行条款的合约,数字形式意味着合约必须用计算机代码实现,因为只要参与方达成协定,智能合约建立的权利和义务,就会被自动执行,且结果不能被否认。

FISCO BCOS运用智能合约不仅用于资产管理、规则定义和价值交换,还可以用来进行全局配置、运维治理、权限管理等。

智能合约生命周期

智能合约的生命周期为设计,开发,测试,部署,运行,升级,销毁等几个步骤。

开发人员根据需求,进行智能合约代码的编写,编译,单元测试。合约开发语言可包括solidity,C++,java,go,javascript,rust等,语言的选择根据平台虚拟机选型而定。在合约通过测试后,采用部署指令发布到链上,经过共识算法确认后,合约生效并被后续的交易调用。

当合约需要更新升级时,重复以上开发到部署的步骤,发布新版合约,新版合约会有一个新的地址和独立的存储空间,并不是覆盖掉旧合约。新版合约可通过旧合约数据接口访问旧版本合约里保存的数据,或者通过数据迁移的方式将旧合约的数据迁移到新合约的存储里,最佳实践是设计执行流程的“行为合约”和保存数据的“数据合约”,将数据和合约解耦,当业务流程产生改变,而业务数据本身没有改变时,新行为合约直接访问原有的“数据合约”即可。

销毁一个旧合约并不意味着清除合约的所有数据,只是将其状态置为“无效”,该合约则不可再被调用。

智能合约虚拟机

为了运行数字智能合约,区块链系统必须具备可编译、解析、执行计算机代码的编译器和执行器,统称为虚拟机体系。合约编写完毕后,用编译器编译,发送部署交易将合约部署到区块链系统上,部署交易共识通过后,系统给合约分配一个唯一地址和保存合约的二进制代码,当某个合约被另一个交易调用后,虚拟机执行器从合约存储里加载代码并执行,并输出执行结果。

在强调安全性、事务性和一致性的区块链系统里,虚拟机应具有沙盒特征,屏蔽类似随机数、系统时间、外部文件系统、网络等可能导致不确定性的因素,且可以抵抗恶意代码的侵入,以保证在不同节点上同一个交易和同一个合约的执行生成的结果是一致的,执行过程是安全的。

当前流行的虚拟机机制包括EVM, 受控的Docker,WebAssembly等,FISCO BCOS的虚拟机模块采用模块化设计,已经支持受到社区广泛欢迎的EVM,将会支持更多的虚拟机。

图灵完备

图灵机和图灵完备是计算机领域的经典概念,由数学家艾伦·麦席森·图灵(1912~1954)提出的一种抽象计算模型,引申到区块链领域,主要指合约支持判断、跳转、循环、递归等逻辑运算,支持多种数据类型如整形、字符串、结构体的数据处理能力,甚至有一定的面向对象特性如继承、派生、接口等,这样才能支持复杂的业务逻辑和完备的契约执行,与只支持栈操作的简单脚本进行区分。

2014年后出现的区块链大多支持图灵完备的智能合约,使得区块链系统具备更高的可编程性,在区块链既有的基本特性(如多方共识,难以篡改,可追溯等,安全性等)基础上,还可以实现具有一定业务逻辑的业务契约,如李嘉图合约(The Ricardian Contract),也可以使用智能合约来实现。

合约的执行还需要处理“停机问题”,即判断程序是否会在有限的时间之内解决输入的问题,并结束执行,释放资源。想象一下,一个合约在全网部署,在被调用时在每个节点上都会执行,如果这个合约是个无限循环,就意味着可能会耗尽整个体系的资源。所以停机问题的处理也是区块链领域里图灵完备计算体系的一个重要关注点。