APP下载

区块链综述:技术与挑战

2018-10-18王锡亮刘学枫赵淦森王欣明周子衡莫泽枫

无线电通信技术 2018年6期
关键词:以太比特合约

王锡亮,刘学枫,赵淦森,王欣明*,周子衡 ,莫泽枫

(1.华南师范大学 计算机学院,广东 广州 510631;2.唯链基金会,新加坡 018936;3.华南师范大学 数学学院,广东 广州 510631)

0 引言

自2008年被首次提出后[1],区块链的概念从加密数字货币逐渐延伸到各行各业的创新应用里。随着2016年比特币在资本市场市值趋于100亿美元的规模[2],大众对区块链的认识亦从比特币的底层技术——一个由对等网络中的节点共同维护和扩展的共享账本转变成为“区块链+领域”的应用发展模式。认知的转变过程说明了区块链技术成为全球技术创新的竞争高地。

区块链是一种集成式创新,其涉及的技术包括对等网络、拜占庭容错、智能合约以及分布式共识算法等。基于这种集成式的技术堆叠,区块链实现了一个可以在数字空间里达成一致信任的去中心化系统。其核心思想是在对等网络的去中心化特性下,通过节点之间达成一致性共识,并共同维护一个按时间顺序将数据区块以链条的方式首尾相连成链的数据链条。数据链条上的每一个区块以数字签名[3]等数据校验方式防止数据篡改和伪造。由此,区块链实现了一个去中心化共享账本。这种新的思路可以解决传统中心化系统所普遍依赖中央权威、信任和共识的成本高、可靠性差、安全性低等问题,对于传统社会组织和运作方式是一种颠覆性的变革和挑战。

区块链这种具有普适性的技术架构,可以很容易扩展延伸到其他应用场景里。事实上,根据目前区块链的发展进展,区块链技术可以分为三个阶段[4],即以可编程数字加密货币体系为主要特征的区块链1.0模式,这个阶段的区块链可扩展性稍微欠缺且功能相对单一,主要的能力体现在价值交换上,比如比特币、数字资产、在线支付等[5-6]。随着智能合约的兴起,通过在区块链上运行和存储计算机程序代码,实现了数字化合约的可信存储和执行,使得区块链技术进入2.0模式。金融领域的区块链应用层出不穷,标志着区块链技术从加密数字货币这单一的功能逐渐扩展到其他金融领域,进而实现了现实世界中业务系统数字化的协同工作,让区块链技术得以在包括股票、清算、私募股权等众多金融领域崭露头角[7];区块链3.0模式则强调区块链向行业的渗透,区块链技术陆续被尝试应用到物联网[8]、隐私保护[9]、商品防伪等其他领域中来,应用范围涵盖了整个社会的方方面面。区块链技术的去中心化、去信任特点,能够从根本上减少组织形态的摩擦并且提高协作效率,从而在大规模协作领域里更好地提升个人或组织的工作效率。

区块链技术亦有其面临的局限与问题。首先是区块链扩展性,由于区块大小具有容量限制,且共识过程需要一定的时间进行,因此交易的吞吐量和区块链的容量是影响区块链大规模应用的障碍。其次在安全方面,目前的工作量证明共识算法则需要至少六个区块的确认,才能在概率上确保交易的安全性[1],因此区块链的实时性较差。另外,如果参与共识的算力联合起来超过总算力51%时,可以很容易发起恶意分叉或者双重支付的攻击[10]。在隐私保护方面,目前可以通过一定的技术手段获得网络中节点IP的相关信息,可以通过追溯交易对其进行聚类得到很多有价值的信息,而且由于用户的使用不当也会造成DAPP的隐私泄露,以上种种都反映了区块链的隐私保护问题仍亟待加强[11]。

1 区块链参考架构

1.1 系统架构

分层系统架构的最好例子莫过于互联网OSI模型[12],而区块链系统本身即是一个类似OSI模型的庞大且复杂的体系结构。从软件架构的角度而言,区块链系统可以分为数据层、网络层、共识层、激励层、合约层以及应用层(如图1所示)。数据层是区块链的数据表示及数据操作规则;网络层则管理着区块链网络中节点间的通信联系;共识层则是描述节点间达成一致性的一组协议;激励层掌握着整个系统正常运作的经济刺激;合约层则通过虚拟机及可编程语言为区块链提供开发环境;应用层则是基于整个区块链底层体系结构所能实现的功能系统集合。

图1 区块链参考架构

数据层主要负责区块链底层数据的结构和存储模式。区块链通过链式结构按时间戳的先后顺序将区块关联起来,区块之间再通过一个哈希校验码来保证链上数据的完整性和不可篡改性。区块结构主要分为区块头和区块体,主要用于存储交易数据相关的哈希值和区块链网络重要参数。交易数据可以通过Merkle树结构进行组织,利用其提供的Merkle证明可以保证交易数据的不可篡改性,比特币中利用Merkle树结构还提供了简单支付验证(SPV)功能[1]。

网络层则包括分布式对等网络的组网机制、区块广播机制和数据验证机制等部分。网络层是区块链系统节点发现、共识及数据同步的关键。区块链通过对等网络实现去中心化的分布式自治网络,网络中的每个节点都需要承担网络路由、节点发现和区块数据传输、验证的功能。当网络中有新的区块产生时,节点间会广播这个新区块,除产生该区块的节点外,所有的节点都需要对该区块及其内的交易进行验证。

共识层是指区块链对等网络中达成一致性所运行的算法的集合,主要负责实现全网所有节点对交易和数据达成一致。共识层所使用的算法主要是为了应对拜占庭容错[13]及女巫攻击[14]。共识算法主要分为概率性算法和确定性算法。确定性算法是指一旦达成对某个结果的共识时,该结果就不可逆转,共识即结果,如PBFT[15];而概率性算法则是指当前的共识结果暂不可靠,需要一定的时间或达成某种条件后,共识结果被推翻的概率越来越小,最终在数学上成为最终结果,如PoW。

激励层主要负责区块链代币的发行和分配机制。区块链通过将社会生活的经济因素引入到计算机技术体系中,使得区块链的共识过程和去中心化特性得以实现。因为达成共识的过程越分散,其效率越低,但安全性和可靠性高,整个系统也越稳定;相反,达成共识的过程越集中,其效率越高,但也越容易出现中心权威。而通过在区块产生时赋予节点利益,可确保节点有利可图,因而能吸引越多的节点参与到共识的过程里。同样的,节点过多时需要考虑激励的负反馈调节,使得节点的数量维持在一定的界限里。比如,以太坊里创新地设计了Gas花费,使得在以太坊上的大部分操作都需要消耗Gas来获得,这一过程符合现实世界的考虑,会驱使更多的节点参与到系统的共识过程中,以获得利益来支撑在以太坊上的Gas操作[16]。

合约层赋予了区块链可编程的特性,能够在数字空间里实现一定限度内的各种应用。合约层通过在区块链系统上搭载的虚拟机等部件,能够在其上自动和强制执行各类脚本、算法和智能合约[17-18]。合约的执行,无需经由除区块链和本身外第三方来激活、管理和干预,是区块链应用去信任的基础。

应用层是基于区块链整体架构发展而来的区块链去中心化应用的集合,主要涵盖了区块链的各种应用场景和案例。区块链的去中心化特性、数据的不可篡改性及可追溯性,给予了区块链作为金融领域、物流领域等需要数据安全场景下的生命活力。而智能合约自动执行的特性使得区块链能在更广泛的商业逻辑甚至是组织模式下大展拳脚。

1.2 数据架构

区块链的数据架构决定了其数据的表示方式和组织形式。在数据架构上,区块链使用区块结构作为数据的载体,功能上类似于传统数据库的数据表,利用哈希算法给予每个区块一个哈希标示,并将多个区块组合形成前后衔接的链式结构,保证区块不可篡改。区块链的链式结构和区块结构如图2所示。

图2 区块链参考数据架构

对于大部分采用工作量证明共识算法的区块链而言,区块头结构里包含区块链版本号、父区块哈希值(地址)、时间戳、难度系数、交易哈希根以及当前区块共识过程中计算难题的解(随机数)等信息。区块链版本号用以跟踪和识别区块链所运行的网络协议版本,在对等网络里用于节点的发现和通信。时间戳则用于记录区块的产生时间,使区块能根据时间戳的先后时间按顺序连接在一起。交易哈希根一般是采用Merkle树结构组织交易后所得的根节点哈希值,即交易树里按层逐级两两哈希后最终产生的结果,该值可用于快速检验数据完整性。交易的数据结构因应用场景的差异而不同,但交易信息一般是以Merkle树的组织形式,通过哈希过程生成唯一的Merkle根,Merkle树能提供数据完整性证明,可用于区块链的零知识证明[19]。

2 区块链的核心理论和技术

从本质上来说,区块链是一个不可篡改的、透明的、可以被信任的分布式数据库。该数据库存储的是所有节点共同认可的交易数据,并且依赖这些交易数据自动执行预先约定的动作。

2.1 区块链的基本逻辑

区块链对应的系统中有多个核心的参与主体,其中包括有交易方和记账方。交易方是实际依托区块链进行交易信息记录、存证和结算的主体。系统中的交易被广播到区块链上。区块链上的各个记账节点需要完成多个交易信息的打包,构建一个完整的区块,并添加到区块链上。各个记账节点通过共识算法来竞争当次记账的权利。竞争胜利的节点打包的区块可以被顺利通过各节点的验证并被添加到区块链上。通常,记账节点还会获得相应的激励。

对应相应的交易,区块链能够自动执行智能合约。智能合约是交易双方提前约定的可执行的代码,由双方共同提交到区块链中。智能合约不可修改,其执行自动触发,不受干扰。每个智能合约都约定对应的触发信息,明确智能合约触发启动的条件。

区块链中的每一个区块包含有众多的交易信息。交易信息一般以一个特定的结构进行组织,比如Merkle树,并借助该数据结构对交易信息进行校验,如Merkle证明。

由于区块链自身架构的约束,当前大部分的区块链在交易的吞吐率等方面有一定的约束,并且区块链之间的整合和互动的需求也逐渐涌现,因此多条区块链的跨链互动和协作的能力也逐步成为区块链的一个主要能力。

2.2 共识算法

2.2.1 工作量证明(PoW)

工作量证明(Proof of Work,PoW)[20]是用来证明完成某项任务而付出了一定计算量的证明。这里的任务指的是要计算出一个与密码学安全相关的nonce值,使得加上区块中的其他数据内容的hash值小于给定的上限(与挖矿难度有关)。如果一个节点成功计算出这一个nonce值,则立即向全网广播这个新产生的块,网络中的其他节点收到这个块后,会立即对这个块验证,验证通过后,会将这个区块加入到自己本地节点维护的区块链中,并停止竞争当前的区块打包,转而进行下一个区块的竞争。在整个区块链网络中,只有最快计算出nonce的节点所打包的区块才能添加到区块链上。

2.2.2 权益证明(PoS)

权益证明(Proof of Stake,PoS)[20]是根据用户所拥有的权益来决定区块链中下一个区块由谁来构造,用户所拥有的权益越高,产生下一个区块的可能性越大。

如果权益仅仅是指用户在网络中所拥有币的数量,那么这意味着,拥有币的数量越多,则其权益越高,也就越有可能打包下一个区块。但是,这会导致网络中越富的用户,拥有更多的记账权,而拥有很少币的用户则几乎不可能获得记账权,从而导致了整个网络的中心化。

所以针对这个问题,关于下一个区块的记账权的选择算法衍生出了2个变种,分别是随机选择与基于币龄的选择。其中随机选择算法应用在BlackCoin项目中,它是采用一个公式来预测下一个区块的产生者,这个公式是通过结合权益的大小来寻找最小的hash值,因为权益是公开的,所以每一个节点都可以使用这个公式准确地预测产生下一个区块的节点;而基于币龄的选择则在PeerCoin中得到了应用,在这个项目中,持有币量越多,币龄越久的用户就越有可能获得下一个区块的记账权。

2.2.3 拜占庭容错算法(PBFT)

拜占庭容错算法[21](Practical Byzantine Fault Tolerance,PBFT),本质上而言是一种基于状态机的副本复制算法。它将服务建模为状态机,在分布式网络中的不同节点上进行副本复制,其中,网络中的服务都在这些副本上保存相应的状态信息并实现相应的操作。

PBFT算法是一个循环,在每一轮中,首先会根据设定的规则选出一个主节点,由其来组织网络中的交易,这整个处理过程分为三个阶段:分别是预准备阶段、准备阶段和确认阶段。在每一个阶段中,都会进行投票,在本阶段中只有超过2/3的投票同意才会进入下一个阶段,每轮结束后都会产生一个新区块。

2.3 智能合约

智能合约[16]的概念最早是在1995年由Nick Szabo所提出来的,其定义为:“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议”[22]。从本质上而言,智能合约实际上是计算机上的可执行程序,只要满足条件,即可被准确执行。但是,其又不仅仅只是一段程序,它本身也是区块链网络的参与者,它对其他用户发出的信息进行响应,可以储存网络中的价值单元,也可以自己发送信息与价值给其他用户。

从技术上来说,区块链上的智能合约包括:用于运行的环境——完备的状态机[23](例如,以太坊的EVM[16])和事务的处理与保存机制。在区块链中,事务主要指的是待发送的数据,事件则是对事务动作的记录与描述。当事务、事件信息传到智能合约当中时,会触发智能合约进行状态机判断,如果某个或某几个方法的触发条件满足,状态机就会依据合约自动执行相应的动作。

智能合约存在的根本目的是为了保证在区块链网络中,使一些数字化的承诺能够按照约定的条件正确执行,它本身并不会生成智能合约,也不会对智能合约的信息进行修改。

2.4 Merkle树与零知识Merkle证明

在比特币系统中,数据是通过Merkle树[24]来组织的,Merkle树结构如图3所示。

图3 Merkle树结构

Merkle树是二叉树的结构,其叶子节点存储数据块的hash值,然后其父母节点为两两的哈希,这样一层层上去,根节点是其孩子节点的hash值。Merkle树可以支持零知识证明。向别人证明自己拥有的某一组数据(L1,L2,L3,L4)中包含给定的内容L3,同时又不暴露其他数据内容的证明就叫零知识证明[25]。要实现这个证明,只要构造如图3所示的Merkle树结构,并公布Hash5、Hash0和Root就可以了。

2.5 双花

双花问题[10]是指一笔数字资产被重复使用,简而言之就是一笔钱可以被花两次甚至多次。双花攻击分为0确认双花与已确认双花。目前解决0确认双花的方法,在比特币系统中使用的是UTXO模型和时间戳来解决,其中,UTXO(Unspent Transaction Output)[1]是比特币中独特的价值转移基本单元,当一笔交易被双花时,挖矿节点在接收到后会选择先接收到的交易,抛弃另外一个交易;而在以太坊系统中则不建议用户开启0确认双花,而对于已确认双花,目前还没办法很好地解决。

3 区块链的典型系统

3.1 比特币

作为区块链思想诞生的源头,比特币网络是首个得到大规模部署的区块链技术应用,并且是历史上首个经过大规模长时间检验的数字货币系统。比特币项目糅合并借鉴了来自数字货币、密码学、博弈论、分布式系统等多个领域的技术成果,这些技术组合形成的在技术应用和业务应用均具备强大创新意义的比特币网络。

比特币网络提供的是一个公共可见的记账本,比特币网络中的用户没有单独的账户,每个用户拥有一个或者多个秘钥对。秘钥对中的公钥作为用户地址,用于作为交易的发起方和接收方的身份标识。由此,比特币网络的用户地址并非记录每个账户的余额,而是用户使用该公钥作为用户地址参与交易的交易余额。用户的真正余额应该是用户拥有的所有的公钥对应的交易的交易余额的总和。比特币网络在每次发生交易后,将交易记录通过比特币点对点网络广播到比特币网络上,并利用网络中矿工的挖矿过程来选取当前交易记账的节点和构建当前的区块,来完成对交易记录的记账过程。最后等比特币网络所有节点完成确认后即可认为交易完成。

3.2 以太坊

本质上来说,以太坊是一个基于交易的状态机,支持图灵完备的应用[16]。以太坊延伸了比特币网络的思想,除了具备比特币网络的功能外,还能使得在全球范围的多个计算机上运行代码成为现实。智能合约是以太坊中非常重要的一个概念,即以程序代码的方式来数字化和运行各种合约。智能合约运行在太坊虚拟机里,能按照智能合约的约定逻辑自动执行,可以在没有中心协调者的情况下被以太坊网络中的计算机复制和处理。

以太坊同样使用工作量证明作为共识算法,但以太坊产生区块的时间更短,而且区块的容量相对于比特币网络而言更小,这在一定程度上改善了区块链扩展性的问题,但是仍未能达到传统中心化应用的交易吞吐量。另外,智能合约相比于比特币原始的脚本语言而言,在以太坊中用来部署代码以及运行智能合约的语言更高级,而且由于智能合约图灵完备的特点,在任何其他程序语言中能够完成的计算都可以利用智能合约实现。

3.3 超级账本

比特币提供了区块链技术的原型,开创了区块链技术的浪潮。以太坊则通过智能合约扩展并延伸了区块链技术的功能,发展了区块链应用的组织模式。而超级账本[21](Hyperledger)却是另辟蹊径,引入了权限控制和安全保障,强调区块链技术不需局限在完全开放的模式下。超级账本是Linux基金会管理下的合作项目,目标是建立面向企业应用场景的分布式账簿平台的底层构架,吸引了许多科技和金融公司参与,包括IBM、Intel、Cisco、摩根大通等。在这个项目下,许多参与的公司都提供各自的区块链解决方案,比如IBM和Interl公司提供了各自已有的区块链代码。目前,在项目中的区块链解决方案中,以Fabric最为知名。

Hyperledger Fabric是一个提供分布式账本解决方案的平台,与其他区块链系统的差异体现在私有性和许可制上,即维护着一个需要认证接入的网络系统,严格来说,其是一种部分去中心化的区块链系统[24]。Hyperledger Fabric优点在于支持不同的模块组件直接拔插启用,使其能根据特定的商业应用场景进行灵活的组装。

4 技术挑战

区块链当前还面临很多技术挑战,其中最为受关注的是跨链技术、隐私保护以及扩展性的技术。

4.1 跨链

当前的区块链应用越来越丰富,不同的应用可能依赖不同的区块链。长期发展下去,区块链的应用很有可能变得碎片化,区块链上的交易、业务数据和链上的共识将被割裂形成区块链孤岛。由此,其中的一个技术挑战是为区块链提供区块链之间的交互和整合能力,使得区块链上的交易、价值等能够跨区块链进行流动和互动。跨链技术[26]就是让区块链实现价值互联网的关键,它是把区块链从分散的孤岛中拯救出来的良药,是区块链向外拓展和连接的桥梁。早在比特币诞生初期,人们就意识到比特币在转账速度、容量以及智能合约等方面的不足,如果说能建立比特币账本的一个副本,就像以前许多法定货币由黄金担保一样,在需要的时候资产可以在2个区块链之间相互转换,就可以加速比特币或者其他数字资产的流动性。而目前跨链技术主要包括有:① 公证人机制;② 中继模式;③ 哈希锁定;④ 分布式密钥控制。

4.2 隐私

在比特币网络或以太坊网络中可以通过一些技术手段获取网络中节点的IP信息以及一些节点的拓扑关系[11],从而泄露了区块链网络中的节点ip、端口等隐私,甚至泄露了整个网络的拓扑隐私。

对网络中的节点信息以及拓扑信息等隐私进行保护,对于目前来说仍然是一个挑战。其中,文献[9,27]等主要研究区块链网络交易隐私。在比特币网络中,交易是可被追溯的,因为采用UTXO模型,通过查找所有的输入与输出信息,对相关地址进行聚类,会得到很多有价值信息,从而造成了隐私泄露问题。目前比特币的这个隐私泄露问题还没有得到很好的解决。

4.3 可扩展性

目前区块链技术的可扩展性[28-29]在某些方面受限,特别是,区块存储和交易吞吐量方面。随着网络中交易的不断产生,区块数量也会不断增加,随着时间的增长,其所占用的存储空间越来越大,直至非常庞大。因此需要提高区块存储的可扩展性。交易吞吐量的可扩展性指的是针对交易性能而言的,目前区块链网络的交易性能还是不能很好地支持大规模的交易数量,目前提出了很多方案来解决这些问题,如闪电网络、侧链等技术,但是这个问题并没有真正得到解决。

5 结束语

区块链技术综合了密码学、博弈学、社会学以及经济学等多个学科的技术,具有去中心、去信任、透明、开放、不可篡改以及可追溯等特性,重塑了社会的信任体系,具有重大的意义。本文介绍了区块链的相关背景,阐述了区块链的参考架构、核心技术与算法;讨论了典型的区块链系统如比特币、以太坊以及超级账本,分析了目前区块链所面临的重大挑战,希望能够为相关研究提供有价值的指导和借鉴。

猜你喜欢

以太比特合约
以太万物理论概述
车易链:做汽车业的“以太坊”
比特币还能投资吗
比特币分裂
比特币一年涨135%重回5530元
A Study on the Contract Research Organization
神秘的比特币
以太互联 高效便捷 经济、可靠、易用的小型可编程控制器
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望