一 区块链
1 区块链起源
追根溯源是我们学习和认识新事物的重要方法。区块链技术是从比特币系统中总结提炼出来的,是比特币系统的副产物,了解比特币系统的起源及其设计理念对于我们打开区块链之门有重要帮助。
货币是人类文明史上的一大重要发明,货币的职能包括价值尺度、流通手段、贮藏手段等。很难想象,没有货币现代商业社会将如何运转。货币的设计、发行、流通是关系到国计民生的大事。
随着人类社会的发展,货币经历了实物、金属、纸币等几种形式的演变,价值交换效率不断提升。人类进入数字时代以后,货币的数字化需求不断别提出。
货币的数字化有两种形式,一是电子货币,也就是法币的数字化,主要是通过支付、清算等环节的电子化,提高效率,不影响货币的发行、存储等环节,如支付宝、PayPal等支付工具,都属于此类。另一种则是数字货币,数字货币与电子货币的最大区别在于,数字货币具有独立的发行机制。数字货币的发行、支付等环节全程数字化,可以与法币或其他数字货币兑换。Q币、比特币、Libra,都属于数字货币。
数字货币相对于电子货币具有交易成本低、交易流程短、无需第三方支持、较好的匿名性等优势,从上世纪90年代开始,一直是互联网领域的热门课题。安全和公信是任何货币被认可和接纳的前提,数字货币也不例外。由于网络的开放性、匿名性和数字信息的可复制性,数字货币的设计相对于以往任何货币的设计面临更多的挑战。
数字货币前后经历了几代演进,比较典型的有e-Cash、HashCash、B-money等,由于设计上的缺陷或技术上的限制,这几种数字货币都几乎没有走到实用状态。2008年全球金融危机期间中本聪(Satoshi Nakamoto)发表论文《Bitcoin:A peer-to-peer electroniccash system》(《比特币:一种点对点的数字货币系统》),提出对等网络中比特币系统的设计思路。2009年中本聪公布了比特币系统最初实现代码。第一个比特币于2009年1月3日生成。2017年上半年,比特币价格达到了2000美元以上,比特币已成为具有全球影响的数字货币。
为规避复制风险及其可能带来的“双花”问题,比特币系统中,并没有设计代表货币的数据块甚至是编码,比特币仅仅是一个货币单位。比特币巧妙地通过分布式账本记录每个人已获得的和支出的货币的数量,记录一个人的财富。也就是说,比特币系统中不存在传统意义上的账户。同时,分布式账本存储也增强了数据的安全性。
为了保证分布式账本的安全,比特币系统引入了非对称加密技术和数字签名技术,保证了账本内容的完整性和不可否认性。同时,分布式账本的“链式”结构,完美实现了账本的可追溯性、可审计性。
另外,比特币采用PoW(Proof of Work,工作量证明)共识机制解决了记账权分配与确认,赋予比特币“民主”特质。同时,比特币固化的发行机制也避免了货币的滥发。
以上种种设计理念及技术选择,让比特币在较大的范围内被信任和接纳。从第一个比特币的诞生到今天,比特币系统已平稳运行了十几年,事实证明比特币系统在技术上是可靠的。
比特币系统的最初设计目的是实现高效的、低成本的货币职能,时至今日,尽管炒币现象火爆,但比特币的货币职能并没有充分展现。相反,蕴藏于比特币系统中的区块链技术及其巨大的商业价值却被大家一再推崇。
2 区块链概念
实际上在中本聪的论文中并没有提出区块链的概念或定义,甚至没有出现过“区块链”(Blockchain)这个词,只是出现了“区块”(Block)和“链”(Chain)。同时,构建比特币所采用的技术,如对等网络、非对称加密、分布式账本、PoW共识机制等都不是中本聪发明的,但,正是中本聪的巧妙组合,使比特币系统具有了分布式、可追溯、不可篡改、集体共识的优点。
2014年前后,部分金融机构开始意识到,作为比特币系统的底层技术——区块链,集众多“才华”于一身,是一种极其巧妙的分布式链式共享账本,对金融及其他众多行业带来的潜在影响甚至不亚于复式记账法的发明。2014年10月在大英图书馆的一次技术研讨会上,区块链的概念被初步提出,人们对区块链技术进行了深入探讨,并积极展望了区块链的未来。2015年,区块链受到了更广泛的关注,《华尔街日报》刊文称,区块链是复式记账法之后金融领域最重要的技术突破。《经济学人》杂志在封面《信任的机器》一文中介绍区块链为创造信任的机器。文章指出,区块链并非仅仅是一项加密技术或者数字货币,在信息不对称、不确定的环境下,它还可以建立满足经济活动赖以发生、发展的“信任”生态体系。作为比特币底层技术的“链”,其价值远大于比特币本身。区块链可以让人们在没有中央权威机构监督的情况下,对彼此协作建立起信心。区块链是一种共享账本技术,实现了在分布式商业网络里多方参与的双边交易中的去中介化。简单来说,它是一台创造信任的机器。
比特币系统中,区块链仅仅被用来“记账”。为了拓展区块链技术应用场景,2016年,著名的区块链平台以太坊(Ethereum)首先将“智能合约(Smart Contract)”技术嵌入了区块链中,使区块链应用场景的想象空间得以迅速扩大。世界经济论坛预测,到2025年,世界经济10%的GDP将产生于区块链上。
从技术层面上看,区块链是数学、密码学、计算机网络、程序开发等多种科学技术的组合应用;从功能视角来看,区块链是提供了一种分布式数据存储方法,具有不可抵赖、不可篡改、全程留痕、可追溯、集体维护等特点。这些特点保证了区块链的“诚实”与“透明”,为区块链创造信任奠定基础。
技术成熟度一个重要衡量标准是开发工具,随着区块链技术的不断成熟,开发工具或平台开始涌现,以太坊和超级账本(Hyperledger)是其中最为典型的代表。工具的不断成熟,为区块链技术走向更广泛的应用做好了铺垫。
3 区块链技术
3.1区块链技术本质
图1 区块链本质
区块链,本质上是一个由多方共同维护、内容实时同步分布式共享数据库,也称为分布式共享账本(Distributed Shared Ledger)。区块链是一种与传统记账方式不同的记录技术。传统记账方式采用集中式记账,即由专人负责记录数据,数据的记录、修改、删除往往被某一节点(或用户)集中控制,节点(或用户)之间难以形成稳定的信任关系,如图1左。区块链模式下,数据由所有节点(或用户)共同维护,每个参与维护的节点都有记录新数据的机会,都能实时获得一份最新数据的完整拷贝,如图1右。与传统的记账技术相比,其特点包括:共同维护、数据实时同步,为节点之间建立信任关系奠定了组织基础。
3.2区块链账本结构
区块链这一概念有广义和狭义之分,广义的区块链是指实现分布式共享账本的技术体系;狭义的区块链则是指,分布式账本当中的账本。作为账本的区块链,顾名思义,由区块组成的链条,如图2。区块链的每个链节都是一个区块,区块之间具有严格的顺序关系。随着时间的推移,一个个区块被不断记录到区块链上,区块链不断增长。区块被记录到链上的过程叫上链。区块在结构上分为区块头和区块体两部分。区块体里存放的是,从上一个区块上链到当前区块上链这段时间内产生的所有的需要记录在区块链上的交易数据。区块头中,一个最关键的内容是上个区块的“报文摘要”。报文摘要可以验证上一个区块内容是否被改动过,从而形成了环环相扣,可追溯、可验证的链式结构。
图2 区块链账本结构
3.3报文摘要
报文摘要,是数字报文摘要的简称。借助数学中的一种函数——单向哈希函数,可以将任意长度的、任意内容的输入文件计算得出一个固定长度的一段字符,这段字符,我们称之为报文摘要。可以认为,不同的输入文件,产生不同的报文摘要。找出具有相同报文摘要的两个不同文件几乎是不可能的。报文摘要的作用是保证数据内容的完整性,即,只要报文摘要一样,我们就可以认为数据内容被篡改过了。反过来,如果数据内容被篡改,由其得出的报文摘要一定会发生变化。当然,以上判断的前提是原始文件的报文摘要必须安全存放。目前常用的报文摘要算法有:MD5和SHA等。
单纯的报文摘要,在原始文件报文摘要安全性无法保证的情况下,没有实际价值。因为文件篡改者完全可以在同时截获文件和摘要的情况下,同时篡改文件和生成新的报文摘要,然后将它们交给文件接收者,从而达到欺诈目的,如图3。
图3 报文摘要攻击
3.4非对称加密
保密信息的传递需要加密和解密两个过程,在加密过程中,我们使用加密密钥把明文加工成密文。在解密过程中,我们使用解密密钥把密文加工成明文。根据加密密钥和解密密钥是否相同,我们把加密分为对称加密和非对称加密。在非对称加密中加密密钥和解密密钥是不同的,分别被称为公钥和私钥。私钥一般需要通过随机数算法生成,公钥可以根据私钥生成,但技术上不能通过公钥生成私钥。公钥是公开的,可以交给任何人,而私钥需要自己保密存放。公钥加密的信息只有对应私钥能够解密,反之,私钥加密的信息也只有对应公钥能够解密。
目前,区块链应用中都是利用用户公钥区别用户的。
3.5数字签名
非对称加密技术有两个重要用途。一是秘密传递信息。例如小王利用小李的公钥加密信息后发给小李,小李可以用自己的私钥解密文件,获得真实信息。非对称加密技术的另一个用途是,身份确认。对于特定加密信息,如果可以用你的公钥解密成明文,则可以认定,该信息一定是你发出的。这种私钥加密的不可否认性类似于现实生活中的签名,具有独一无二性,因此,我们也把私钥加密称为数字签名。
通常将报文摘要与数字前面技术结合起来使用,即先获取文件的报文摘要,然后用自己的私钥进行加密,把报文摘要的密文交给接收者。这种技术不但保证了信息的完整性,同时也保证了信息发送者的可鉴别性和不可抵赖性。数字签名过程如图4所示。
图4 数字签名过程
3.6区块上链的完整过程
某节点发起一项交易,交易各方在交易数据上做数字签名,确认交易,并将交易数据广播到区块链网络中,区块链中各节点不断收集网络中的交易数据。区块链系统一般会设定一个时长(例如比特币网络为10分钟),该时间段内的所有交易数据打包在一起(包括上一区块的报文摘要),组成一个候选区块。时间一到,区块链根据共识机制确定记账节点,记账节点对新区块签名确认并将新区块广播到网络中。其他节点核查记账节点的记账权并验证签名,认可后用自身私钥签名确认。当确认节点达到一定数量后,新区块被整个网络接纳,作为区块链最新区块,计算新区块报文摘要,再开始下一个区块形成过程。
3.7共识机制
由区块链上链过程可见,共识机制是是区块链的核心技术,因为这决定了到底由谁来记账,而记账方式将会影响整个系统的安全性和可靠性。目前已经出现了十余种共识机制算法,其中较为知名的有PoW(Proof of Work,工作量证明),PoS(Proof of Stake,权益证明),DPoS(Delegate Proof of Stake,股份授权证明)机制以及拜占庭将军容错共识等。当然,没有一种共识机制是完美无缺的,同时这也意味着没有一种共识机制是适合所有应用场景的。
1)PoW(工作量证明):就是基于挖矿的共识机制,主要应用于包括比特币和以太坊前三个阶段等。依赖机器进行数学运算来获取记账权,即通过与或运算,计算出一个满足规则的随机数,获得本次记账权,发出本轮需要记录的数据,全网其他节点验证后一起存储。优点是完全去中心化,节点自由进出;缺点是资源消耗相比其他共识机制高、可监管性弱,同时每次达成共识需要全网共同参与运算,性能效率比较低,达成共识的周期较长,因此不适合商业应用。
2)PoS(权益证明):由Quantum Mechanic 2011年在bitcointalk首先提出,它是PoW的一种升级共识机制,在Peercoin、NXT和以太坊第四个阶段等应用。根据每个节点所占代币的比例和时间,等比例地降低挖矿难度,从而加快寻找随机数的速度,因此节点记账权的获得难度与节点持有的权益成反比,但它依然是基于哈希运算竞争获取记账权的方式。其优点是相对于PoW在一定程度减少了数学运算带来的资源消耗,性能也得到了相应的提升;缺点是还需要挖矿,本质上没有解决商业应用的痛点,可监管性也比较弱。
3)DPoS(股份授权证明):与PoW和PoS不同,DPoS不需要再挖矿了,而是类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账,持股人拥有所持股份对应的表决权。优点是大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证,降低运行网络的成本和维护网络安全的费用,增强网络效能;缺点是整个共识机制还是依赖于代币的,然而很多商业应用是不需要代币存在的。
在区块链技术出现之前,互联网上的信息拷贝是零成本的,数字资产具有无限可复制性,如果没有可信赖的第三方监督,我们根本无法确认一笔数字现金是否被花掉,因此可能出现重复支付的问题。
为了解决这个问题,区块链参照了“拜占庭将军问题”(Byzantine failures)的算法。该问题是一个协议问题,指拜占庭帝国军队的将军们必须全体一致决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒,而将军们只能依靠信使来传递信息。如何才能防止受到叛徒欺骗而做出错误决策呢?数学家设计的算法是让将军在接到上一位将军标有进攻时间的信件之后,写上同意或反对并盖上自己的图章,然后把信转发给其他所有的将军,在这样的信息周转之后,最后会出现一个盖有超过半数将军图章的信息链,以保证将军们在互不信任的情况下达成共识。
莱斯利·兰伯特把拜占庭将军问题引入到点对点通信中。拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为。拜占庭容错协议必须处理这些失效,并且这些协议还要满足所要解决问题要求的规范。
区块链的技术原理参考了拜占庭将军问题的算法,通过盖戳(数字签名)的形式来进行公证。网络上的每一个参与者的计算机里都会有一份总账的备份,也都能在这本总帐里记上一笔,并且所有的备份都是在实时地、持续地进行更新、对账,以及同步着拷贝,即全网记账。每个节点都可以竞争盖戳,互相认证。这使得一个不可信网络变成了一个可信的网络, 使得所有参与者可以在某些事情上达成一致。
3.8区块链层次模型
区块链是分布式共享账本,也是一种计算机网络。跟国际互联网一样,是一个复杂系统,可以通过层次模型分层认识。区块链技术模型由自下而上可分为数据层、网络层、共识层、激 励层、合约层和应用层,共6个层次。
数据层、网络层、共识层是区块链的必要元素。
1)数据层:最下层是“数据层”,它封装了底层数据区块的链式结构,以及相关的非对称公私钥数据加密技术和时间戳等技术。
2)网络层:中间是网络层,包括P2P组网机制、数据传播机制和数据验证机制等。
3)共识层:第三层是共识层,封装了网络节点的各类共识机制和算法。
而激励层、合约层和应用层不是区块链的必要元素,一些区块链应用并不完全包含这3层结构。
第四层是激励层,它将经济因素集成到区块链技术体系中来,包括经济激励的发行机制和分配机制等,主要出现在公有链当中,如比特币中的激励机制。
第五层是合约层,它封装各类脚本、算法和智能合约。
第六层是应用层,它封装了区块链的各种应用场景和案例,未来的可编程金融和可编程社会也将搭建在应用层中。
3.9最广义区块链
区块链技术来自于比特币系统,人们对区块链的认识必然受到比特币系统的影响。比特币系统建立在去中心化的对等网络中,发行数字货币,系统对所有人开放,可以随时加入或者退出。
如果用“去中心化”、“发币”、“开放”去描述和限定区块链,将极大地缩小区块链的概念范畴。事实上,从最近几年区块链技术和应用的发展,我们可以看到,大量的“非典型”区块链不断涌现。例如,联盟链大行其道,但其并非开放的。绝大多数区块链项目也不需要数字货币的支持。
理想化的区块链系统,是由许许多多节点组成的点对点的网络结构,似乎既不需要中心化的硬件设备,也不需要任何管理它的机构。在很多文献中都提出区块链是去中心化的(Decentralized),即整个网络没有中心化的硬件或者管理机构,任意节点之间的权利和义务都是均等的,且任一节点的损坏或者失去都会不影响整个系统的运作。需要指出的是,区块链并不一定是去中心化的。实际上,软件系统的网络架构一般有3种模式:单中心、多中心、分布式,Decentralized只表明不是单中心模式的,它可能是多中心或弱中心,也可能是分布式的。完全去中心化至少在现阶段是不可行的。2016年起,众多区块链研究机构开始放弃用“Decentralized”描述区块链。大量区块链案例在Internet上出现。同时,过度强调“去中心”也可能会被误读为不愿意接受监管,不利于区块链技术的发展和推广。
在共识机制上,区块链也可以做出一些让步,例如在联盟链中,节点之间可能存在地位、作用或者计算机性能差距较大的情况,这种情况下,或者出于经济原因,或者出于效率原因,或者存在公认节点等原因,部分节点可以委托或转让其记账权及其他权力。
因此,我们必须以开放的态度对待快速发展的区块链,用其最本质的特征界定区块链。区块链最显著的特征是“基于密码学的分布式共享账本”,其最大的作用是“在多方之间建立信任”。故,最广义的区块链应定义为“基于分布式共享账本的信任机”
4 区块链发展
Melanie Swan所著的《区块链:新经济蓝图及导读》一书在业界引起了巨大的反响。她在书中提出了对区块链版本划分的方法,即按照区块链已经完成的以及将要完成的功能划分成区块链1.0、2.0和3.0三个阶段。这种版本划分方式基本上反映了区块链技术成熟发展的大脉络,目前也得到了业界广泛的认可。
区块链1.0。我们可以把比特币理解为区块链技术的一个应用场景,也就是 区块链1.0阶段。但是如果仅有比特币,区块链也只是一种数字货币,并不能达到今天的火爆程度,可以说比特币是当今区块链的“杀手级”应用,但是区块链可以做的事情远远超过比特币,完全有可能产生其他“杀手级”应用。
区块链2.0。从应用上来看,区块链2.0的重要标志是经济、市场和金融领域的区块链应用,例如股票、债券、期货、贷款、抵押、产权、智能财产和智能合约。从技术上来看,区块链2.0的重要标志是智能合约。智能合约是运行于区块链上的程序,目的是自动执行先前约定好的合同,与价值交换、承诺、条件、商业规则相关。智能合约极大丰富了区块链的应用空间,提高了商业逻辑的自动执行效率。
区块链3.0。在这一阶段,区块链的应用范围被拓展到各行各业,支持广义的资产交互和登记,进入万物互联,设备民主的“区块链+”时代。
目前区块链技术还主要处于2.0阶段。
按照区块链的可接入性或涵盖范围,区块链可以分为公有链、联盟链和私有链三种类型。
公有链(Public Block Chains)是指:世界上任何个体或者团体都可以接入网络,发送交易,且交易能够获得该区块链的有效确认,任何人都可以参与其共识过程。公有区块链是最早的区块链,也是应用最广泛的区块链,比特币系统就是最典型的公有链。
联盟链(Consortium Block Chains):由某个群体内部指定多个预选的节点为记账人,每个块的生成由所有的预选节点共同决定(预选节点参与共识过程),其他接入节点可以参与交易,但不过问记账过程(本质上还是托管记账,只是变成分布式记账,预选节点的多少,如何决定每个块的记账者成为该区块链的主要风险点),其他任何人可以通过该区块链开放的API进行限定查询。
私有链(Private Block Chains):仅仅使用区块链的总账技术进行记账,可以是一个公司,也可以是个人,独享该区块链的写入权限,本链与其他的分布式存储方案没有太大区别。
5 区块链面临的问题与挑战
区块链涉及的技术栈比较丰富,有分布式系统、存储、密码学、经济学、博弈论、控制论、计算机网络等等。区块链从概念到实践都在不断探索中,加之相关技术特别是信息技术也在不断变革中,因此,区块链必将面临众多问题与挑战。
5.1抵赖和隐私保护
如前所述,密码学的发展为解决这类为题提供了不少手段,例如报文摘要、非对称加密、数字签名等。然而以上技术的安全针对目前的计算能力而言的,量子计算等新技术的出现将突破算力约束,例如目前正在大量使用的MD5、SHA等密码学基础算法将可能不堪一击。新一代加密技术需要尽快研发。
5.2分布式共识
共识机制一直是区块链领域的研究热点。不管是PoW、PoS还是DPoS都有自己的特点和局限。不同应用场景下共识需求会存在较大差异。
比特币运行于开放环境下,通过引入工作量证明机制来规避少数人作恶,算法的核心思想是基于经济利益的博弈,让恶意参与者受到经济损失。然而这中共识机制依赖的“挖矿”效率低下,环境不友好。
共识机制的技术指标包括:节点容错能力、决策速度、恢复能力。PoW运行不多于一半的作恶节点,PBFT允许不超过1/3的作恶节点。
5.2交易性能
由于区块链系统的复杂性,多数区块链平台运行效率仍偏低。比特币系统只能支持每秒约7笔的交易量。据最新的报道,目前最快的区块链系统可以支持的吞吐量已突破每秒千笔。即便如此,相对于证券市场、商业支付等高频交易应用场景的要求差距巨大。
为提升区块链性能,一方面可以提升节点的性能、优化策略算法;另一个思路是,将记账以外的业务放到区块链之外,保持区块链记账功能的单纯性。最近讨论热烈的“闪电网络”“侧链”“影子链”等设计方案都是基于这种思想的。只在区块链中记录交易的最终状态。
在联盟链、私有链等相对安全环境下,可以通过简化共识机制、数字签名等环节,提升系统性能。
5.4扩展与集成
常见的计算机系统可以通过增加节点来扩展系统的处理能力,但是区块链系统可能完全相反。因为区块链中强调共同维护,数据要同步,共识要达成,增加节点特别是性能较低的节点,可能会拖整个系统的后腿。解决这一问题的思路是,不要求所有节点参与共识过程,在系统中设置核心节点,由其代理弱节点的职能。
区块链的集成也是一种潜在需求。区块链目前的发展状态类似Internet的发展的初期,众多公司都在研发自己的网络,网络之间缺少联系,区块链技术期待自己的“TCP/IP”。
5.5数据存储
区块链又被称为分布式共享数据库,但这种数据库与传统的分布式数据库存在众多不同,包括组织结构、数据结构、数据表示、处理需求等等。
首先,为提升区块链性能,区块链上的产生交易数据需要采用链上与链下相结合的方式存储,链上存储交易最终状态,链下存储过程与细节数据。这样的设计有利于减轻区块链记账压力,提升性能。同时链下数据更有利于数据的检索和使用。但是,链上链下数据必须保持一致性和可验证性。
关于区块链技术发展趋势的探讨和争论,从其诞生之时就从未停息。从科技史发现,技术领域也存在着周期性。技术需要经历诞生期、爆发期、泡沫期、爬升期和产出期,这个周期可能需要7-8年,甚至更长。能够坚持过泡沫期迎来爬升期是考验技术自身价值的关键。
技术成熟度曲线又叫技术循环曲线,或者直接叫做炒作周期,是指新技术、新概念在媒体上曝光度随时间的变化曲线,诞生于硅谷。1995年开始,高德纳咨询公司(Gartner)依其专业分析预测与推论各种新科技的成熟演变速度及要达到成熟所需的时间。
图5是高德纳咨询公司于2019年发布的区块链相关技术成熟度曲线图。可以看出,区块链技术整体上仍处于发展期,只有数字资产交换、加密货币等少量应用相对成熟。而部分关键技术,如区块链数据交换、智能合约等还没有经历泡沫破裂期。
区块链构建信任关系的功能已经凸显,这也是目前生人社会商务活动最或缺的交易要素,尽管路途艰辛,但光明前景已不远。
图5 区块链技术与应用成熟度曲线
二 区块链技术平台
技术是否成熟的一个重要标志是开发工具的发展程度,随着区块链技术的不断发展,区块链开发工具和平台不断涌现。目前,全球有数个区块链技术平台,其中比特币、以太坊、和Linux基金会的开源项目超级账本比较有代表性。
此外,还有比特股(Bitshare)、恒星(Stellar)、R3 Corda等国外区块链技术以及国内一些公司研发的区块链应用平台。
1 比特币
1.1概述
作为区块链思想的源头,比特币项目值得区块链学习者仔细研究。比特币网络首先是首个得到大规模部署的区块链技术应用,并且是首个得到检验的数字货币实现,无论从信息技术领域还是从金融学领域都是具有十分重要意义的。
虽说交易脚本赋予了比特币系统一定的可扩展性,但其实用价值极其有限。因此,严格来说,比特币系统仅仅是一个区块链应用,不具备区块链平台的应用开发功能,但探索区块链项目的发展过程和设计理念,对于深刻理解区块链技术又重要价值。
比特币是区块链技术的首个成功应用,是经过时间检验的数字货币系统。自2009年项目正是上线以来,比特币网络产生总共近60万个区块。比特币系统具有如下特点。
1)去中心化。意味着没有任何独立个体可以对网络中的交易进行破坏、任何交易请求都需要大多数参与者的共识。
2)匿名性。比特币中的用户是匿名的,无法从交易信息关联到现实中的个人,这也意味着很难进行审计。
3)通胀预防。比特币的发行需要通过挖矿计算来进行。发行量每四年减半,总量上限为2100万枚,无法超发。
比特币发展史上大事如下。
2008年10月中本聪发表论文《Bitcoin:A peer-to-peer
electroniccash system》(《比特币:一种点对点的数字货币系统》)。
2009年1月3日,比特币系统部署上线,中本聪完成第一个区块记账,并获得50枚比特币。
2010年5月21日,比特币第一次被用于购物。1万BTC购买了价值25美元的披萨优惠券。这些比特币今日(2020年5月24日)价值近1亿美金。
2012年11月28日比特币产量第一次减半。
2013年德国、加拿大支持比特币与法币的兑换。
2016年7月9日,比特币产量第二次减半。每次成功挖矿获得12.5个比特币。
2020年5月17日,比特币产量第三次减半,每次成功挖矿获得6.25个比特币。
目前比特币市场总值已超过1200亿美元。
1.2交易
比特币是一个数字货币系统,但是系统中并不存在代表比特币的数据块或者编码,比特币仅仅是一个货币单位。每个人拥有的比特币总数记作:未使用的交易输出(Unspent Transaction Output,UTXO),即此人还没有花出去的收入。不用数据块或编码表示比特币是为了防止“双花”(即利用数据拷贝,多次用同一货币支付)。
在交易过程中,付款方需要把自己的UTXO转给收款方,付款方的转出被记录未付款方的“使用过的交易输出”(Spent Transaction Output,STO),这笔价值付款方无权再使用。收款方收到的UTXO,成为自己的UTXO,以后可以被自己所用。只不过,付款方付出的UTXO往往大于收款方收到的UTXO,多出的部分被记账节点作为交易费收下了。
图6 比特币系统交易
即UTXO = UTXO1 + UTXO2,且系统规定,UTXO2 >= 0.0001BTC。交易费越高记账者往往优先记录。比特币系统中,每笔交易需要设定两个参数:输入和输出。输入是付款人的付出,即图6中的UTXO,输出即收款人的收入,即图6中的UTXO1。交易需要付款人签名确认,然后广播到网络中。
交易最小金额单位叫“聪”,即一亿分之一比特币。
交易广播到网络后,会被记录到区块上。比特币区块主要包含区块头和区块体两个部分。
区块头内的主要信息有:上一个区块的报文摘要、时间戳、Nonce等。Nonce是一个关键数据,我们稍后介绍。
区块体内包含:区块大小信息、交易数量、交易的具体内容。
1.3共识机制
比特币共识机制是为了确定记账权,即由谁来把收集到的交易数据串联到区块链上。
运行于开放环境下的比特币选择了PoW共识机制,这不是一种绝对可靠的共识机制,但是从密码学、博弈论、概率论角度分析,该机制实现了事实上的高概率可靠。
挖矿是PoW共识机制的核心概念,矿机通过挖矿来竞争区块链记账权,获得记账权后可以获得一定量的新增比特币作为记账报酬。
目前,每10分钟左右生成一个区块,记录了这10分钟内发生的验证过的交易内容,串联到区块链尾部,每个区块的成功记录者得到6.25个比特币奖励(该奖励作为区块内的第一交易),以及付款用户支付的交易服务费。
记账一个区块的最初奖励是50个比特币,每隔21万个区块自动减半,即4年时间,最终比特币总量稳定在2100万个。因此,比特币是一种通缩货币。
挖矿的具体过程为:挖矿节点综合上一个区块的报文摘要、上一个区块生成后新的经过验证的交易内容,再加上一个随机数X,一起打包成一个候选新区块,求取候选区块的hash值,如果该hash值满足比特币系统给定的条件C,则该挖矿者获得新区块记录权,串联区块并获得奖励。如果候选区块的hash值不满足条件C,则尝试下一个X。比特币系统中所有的挖矿者都在使用该方法需要符合条件的X,第一找到者获得记账权。最近几年,随着比特币价格的不断走高,逐利者不断加大投入,提高算力,希望能获得更多记账权,从而获得更多比特币奖励。目前比特币系统算力已近每秒千亿亿次hash计算。由于X是一个随机数,即使投入不大的挖矿者仍然有机会获得记账权,只是获得机会的机会少一些。
比特币系统每隔两周会自动调整条件C,以改变挖矿难度,从而把挖矿时间控制在一个合理范围内。
目前比特币系统上的矿机总价值已超过千亿美金,按照控制1/3算力可破坏比特币系统计算,恶意破坏者需要花费几百亿美金,而被破坏的比特币将一文不值,因此,破坏者不会获得任何好处。这就是经济博弈论下的比特币安全。
2 以太坊
在区块链领域,以太坊使是仅次于比特币的著名开源项目。作为公有区块链平台,以太坊将比特币针对数字货币交易的功能做了进一步拓展——引入智能合约,使之适应更为复杂和灵活的应用场景。
从此,区块链技术的应用场景,从单一基于UTXO的数字货币交易,延伸到图灵完备的通用计算领域。用户不再受限于比特币脚本简单的逻辑支持,而是可以设计任意复杂的合约逻辑,为构建各种各样的上层应用开启了大门。
2.1以太坊项目
以太坊项目的最初目标是打造一个智能合约的平台,该平台支持图灵完备的应用,按照智能合约的约定逻辑自动执行,理想情况下无停机、欺诈以及第三方干预等问题。
以太坊的核心理念是对比特币系统的拓展。基于以太坊项目,以太坊团队目前运营了一个公开的区块链平台——以太坊网络。智能合约开发者使用官方提供的工具和以太坊专用应用开发语言Solidity,可以很容易地开发出运行在以太坊网络上的分布式应用(Decentralized Application,DApp)。用户通过以太币(Ether)来购买燃料(Gas),维持应用运行。
以太坊项目的官网网址是ethereum.org,代码托管在github.com/ethereum。
2.2以太坊简史
2013年以太坊早期发明者维塔利克˙布特林(Vitalik
Buterin)提出智能合约思想,发布以太坊白皮书。
2014年2月,以太币预售,筹集资金、组建团队,开始研发以太坊项目。
2015年7月,以太坊第一阶段Frontier(前沿)正式发布,Frontier采用类似比特币网络的PoW共识机制,支持智能合约。
2016年3月,第二阶段Homestead(家园)开始运行,相对于第一阶段的Frontier,改善了安全性,提供了可视化图形界面客户端。
2016年6月,DAO项目受到漏洞攻击,造成以太坊硬分叉。
2017年3月,以太坊成立企业联盟,成员有摩根大通、微软、哥伦比亚大学等。
2017年10月,以太坊开始推出第三个阶段Metropolis(大都会),共识机制采用PoW和PoS混用。
2018年2月,以太币成为市值第二高的加密货币,仅次于比特币。
按计划以太坊后续还将推出第四个阶段Serenity(安静),共识机制将完全转换为PoS。
以太坊发展到今天已经历了数次硬分叉,每次硬分叉后的版本对之前版本不再兼容。
2.3分叉
区块链技术协议不会一成不变。当需要修复漏洞、扩展功能或者调整结构时,区块链需要在全网配合下进行升级。升级通常会涉及更改交易数据结构和区块的数据结构。
由于分布于全球的节点不可能同时完成升级来遵循新的技术协议(有赞成派和反对派),因此区块链升级时可能会发生分叉。对于一次升级,如果把升级节点成为新节点,未升级节点称为旧节点,根据新旧节点的兼容性,可以分为软分叉(soft fork)和硬分叉(hard fork)
如果旧节点仍然能够验证和接受新节点产生的交易和区块,则称此次升级为软分叉。如果旧节点不能验证和接受新节点产生的交易和区块,则称此次升级为硬分叉。软分叉升级相对平稳,硬分叉会造成区块链的分裂。重大的技术革新往往需要面对硬分叉。
2.4以太坊特点
以太坊底层也是一个类似比特币的P2P网络平台,智能合约运行于网络中的以太坊虚拟机里,以太坊是一个公链平台,任何人可以接入。
与比特币相比,以太坊的技术特点主要包括以下内容。
支持图灵完备的智能合约,设计了编程语言Solidity和虚拟机EVM。
降低了区块产生时间间隔,由10分钟降至15秒左右。
采用账户系统和世界状态,而不是UTXO,支持更复杂逻辑。
支持POW共识机制,并计划支持效率更高的POS共识机制。
通过Gas限制代码执行指令数,避免循环攻击。
更丰富的安全措施。
2.5核心概念
智能合约(Smart Contract)是以太坊中最重要的一个概念,即将合约编程,以计算机程序的方式来执行各种合约。上世纪90年代,Nick
Szabo等人曾提出类似概念,但因一直缺乏可靠执行智能合约的环境,而被当作一种理论设计。区块链的出现为智能合约提供了条件。
以太坊支持通过图灵完备的高级语言(主要指Solidity)来开发智能合约。智能合约运行于以太坊虚拟机上,可以接受来自外部的请求和事件,能够查询外部状态与条件,通过触发运行提前编写好的代码逻辑,进一步处理交易和事件,也可能调用其他合约。
智能合约执行过程中,可能会产生新的交易数据,并记录在区块链上,这些数据一旦上链将无法伪造和篡改。
账户,比特币系统中没有传统意义上的账户,而是采用UTXO记录整个系统的状态。任何人都可以通过交易历史来推算出用户的余额信息。以太坊采用了不同的做法,用账户来记录系统状态,每个账户存储余额信息、智能合约代码等。提高了价值转移的效率。
具体来看,以太坊账户分为两种类型:合约账户(Contract Accounts)和外部账户(Externally Owned Accounts)。合约账户存储智能合约代码,只能被外部账户调用激活。外部账户,是以太币拥有者账户,对应公钥,包括余额、存储根等个人信息字段,由个人控制。当智能合约并调用并执行时,会消耗燃料,燃料可以通过账户中的以太币购买。
以太币是以太坊网络中的货币。以太币主要勇于购买燃料和支付给矿工,作为以太坊运行智能合约的报酬和矿工记账的报酬。以太币最小单位是wei,一个以太币Ether等于1018个wei。
矿工成功记账一个区块获得5个以太币,用户也可以通过交易市场购买以太币。目前每年通过挖矿可以生成一千万个以太币。单个以太币价格在几百美元。
燃料,智能合约执行于以太坊的消耗品,类似于汽车运行要消耗汽油。可以通过以太币购买。如过因为燃料不够,而使得智能合约未能执行完整时,交易状态会回到智能合约执行前的状态,即状态回滚。
交易,以太坊交易是指一个账户到另一个账户的消息数据。消息是以太坊执行操作的最小单位。消息可以时转账,也可以是其他事务处理。
每个消息包含如下字段。
To:目标账户地址
Value:转移的以太币数量
Nonce:交易相关字符串
GasPrice:燃料价格
Startgas:交易消耗的最大燃料
Signature:签名
以太坊目前每秒可执行几十笔交易,速率高于比特币。
2.6以太坊客户端
以太坊客户端可用于接入以太坊网络,进行账户管理、转账、交易、挖矿、智能合约开发等各种操作。目前Geth是最为常用的以太坊客户端之一。用户可以通过安装Geth来接入以太坊并成为一个完整节点。
在Geth开发区块链和智能合约的流程如下。
设置区块链——启动区块链——创建账户——智能合约编程——部署智能合约——调用智能合约。
3 超级账本(Hyperledger)
超级账本项目是首个面向企业级应用的开源区块链平台。
在Linux基金会的支持下,超级账本项目吸引了IBM、Intel、Cisco、摩根大通、R3等在内的众多科技和金融巨头的参与。
3.1超级账本项目简介
2015年12月,开源界的鼻祖组织Linux基金会牵头,联合30多家科技和金融翘楚企业,共同宣布成立超级账本项目。项目宗旨是,推动和发展透明、公开、分布式企业级分布式账本技术,包括协议、规范、标准和示范代码。项目官方网站为hyperledger.org。其实,超级账本项目成立之前,IBM、Intel、R3等企业已在区块链领域有不少技术积淀。
作为一个联合项目,超级账本由面向不同目的和场景的子项目构成。目前包括Fabric、Sawtooth、Iroha、Blockchain Explorer、Cello、Indy、Composer、Burrow等8个顶级项目,所有项目遵循模块化设计、代码可读、持续演进等基本原则。超级账本社区目前拥有超过140家全球知名企业或机构,包括三十多家来自中国的企业,如华为、三一重工等。
超级账本强调企业间特别是企业联盟间分布式账本的应用,为基于区块链技术打造高效商业网络打下了基础。超级账本提出和实现了许多创新的设计和理念,包括完备的权限和审查管理、细粒度的隐私保护,以及可插拔、可扩展的实现框架。
3.2社区组织结构
每一个成功的开源项目都离不开一个健康、繁荣的社区。超级账本社区目前主要是三驾马车领导的结构。技术委员会(TSC),负责技术相关工作,下设多个工作组,具体带动各项目或地区的发展。管理董事会(Governing Board),负责社区组织的整体决策,由超级账本会员推选产生。Linux基金会(LF)负责项目基金的管理。
超级账本社区非常重视项目在大中华区的应用和落地情况,2016年12月,超级账本大中华区工作组成立。
3.3顶级项目介绍
超级账本所有项目托管于GitHub上,主要顶级项目如下。
Fabric,是最早加入到超级账本项目种的顶级项目,由IBM、DAH等企业于2015年底提交到社区。项目定位于面向企业的分布式账本平台,创新地引入了权限管理、设计上支持可插拔、可扩展,是首个面向联盟链场景的开源项目,也是超级账本项目中应用最为广泛的顶级项目。Fabric基于Go语言实现,核心代码8万行。Fabric包含Fabric CA、Fabric SDK等多个子项目。
Sawtooth,Intel等企业提交的项目,同样定位于分布式账本平台,由python语言实现。
Iroha,由Soramitsu等企业提交的分布式账本平台项目,由C++语言实现,同时支持基于C++语言的区块链开发。
Blockchain Explorer,由Intel等企业提交,定位于区块链平台浏览器,基于Node.js实现,提供web操作界面,可以实时查看区块链运行状态,如区块个数、交易情况等。
Cello,IBM提交,定位于区块链管理平台,同时提供区块链即服务。
Indy,基于区块链的数字化身份全球管理平台。
Composer,IBM贡献,Fabric的一个辅助编译工具。
Burrow,由Monax、Intel提交,Go语言实现,开发可运行于以太坊虚拟机的智能合约的工具,支持POS和权限管理。
3.4超级账本Fabric
Fabric是超级账本目前最成功的顶级项目,已成为目前企业区块链开发首选平台。Fabric从1.0版本开始,在架构上进行了重新设计,对节点进行了分类,配以不同角色,同时,安全性、性能、可扩展和可插拔性方面都有不少改进。
Fabric网络中存在4种主要的服务节点,彼此协作完成整个区块链系统的功能。节点角色是一个逻辑概念,不同类型的多个节点可以运行在同一个物理服务器上。
背书节点(Endorser),负责对交易的提案进行检查和背书,计算交易执行结果。
确认节点(Committer),又叫记账节点,负责在接受交易结果前再次检查合法性,接受合法交易对账本的修改,并写入区块链结构。
排序节点(Oderer),对所有发往网络种的交易进行排序,将排序后的交易按照配置中的约定打包成区块,提交给确认节点进行处理。
证书节点(CA),对网络中所有的证书进行管理,提供标准的PKI服务。
Fabric使用通道技术管理网络和运行于其上的应用,使用一条独立的系统通道(system chennal)管理网络中的各种配置信息,并完成对于其他应用通道(Application channel)的创建。
除了以上四种主要服务节点外,Fabric网络还又负责组织间交互的锚节点(Anchor)和负责区块同步的主节点(Leader)。一个Fabric网络只能有一个锚节点和一个主节点。
Fabric大致分为底层的网络层、权限管理模块、区块链应用模块,通过SDK和API向应用开发者提供服务,如下面的图所示。
链码(chaincode),Fabric智能合约写在链码里并在区块链外部应用程序要和账本发生交易的时候被外部应用程序调用。在大多数情况下,链码只和账本的数据库组件(世界状态)交互,而不和交易日志交互。
Fabric账本包含两个组件:世界状态和交易日志。每一个参与者有一份他们参与的每个Fabric网络的账本的副本。世界状态组件描述了一个给定时间点的账本状态。它是账本的数据库,存储的是账本当前值。交易日志组件记录所有导致世界状态当前值的交易。它是世界状态的更新历史。这样,账本就是世界状态数据库和交易日志历史的组合体。容器技术,使Fabric可以承载各种主流语言来编写的智能合约。
图8 Fabric 框架
3.5Fabric区块链交易流程
Fabric区块链建立后,为各节点颁发证书,启动节点,并加入已经创建好的通道,各节点根据配置分配好角色。
从节点提交提案到最终结账的全过程如下。
提交交易提案(客户节点)——背书、签名(背书节点)——排序、生成区块(排序节点)——验证、记账(确认节点)——数据同步(主节点)
Fabric SDK是用来开发、调试、发布链码(智能合约)的编程工具,并提供大量开发工具包,以支持和提高开发效率。
(完) 上海 杨超 2020-5-26