区块链技术概述
当今互联网的四大逻辑:ABCD(AI +Block chain +Cloud +Big Data)。
其中AI解决数据如何产生价值;Block chain解决数据所有权的确认和流转;Cloud存储数据;Big Data解决庞大的数据如何组织的问题。B(Block chain)展开如下分析。
1 区块链概述
1.1区块链定义
区块链是一种去中心化、去信任化、完整且动态一致的、不可篡改的多方参与和监督维护的分布式数据库。通过时间戳、哈希算法、非对称加密、分布式和共识机制等技术,解决数字资产确权、信任等问题,实现网络信息转移到网络价值转移的巨大飞跃。
关于区块链技术的定义繁多,在维基百科中区块链被定义为:“区块链是用分布式数据库识别、传播和记载信息的智能化对等网络,起源自比特币。区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了若干次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块”。
区块链首次在中本聪2008年发表的《Bitcoin:A peer -to -peer Electronic Cash System》中出现。文章指出目前几乎所有的交易都是借助第三方机构完成的。这种交易出现的原因是因为交易双方互不信任,商家会要求商家填写完整且非必要的信息,却依然不能避免某些欺诈行为。第三方机构的存在,增加中介费用,扩大不必要的交易规模。区块链有很多优势,它通过多方共识算法建立起了互联网上的信任,并通过智能合约实现了服务流程自动化,是继互联网革命之后又一次颠覆性革命。
区块链原本是比特币等加密货币存储数据的一种独特方式,是一种自引用的数据结构,用来存储大量交易信息,每条记录从后向前有序链接起来,具备公开透明、无法篡改、方便追溯的特点。实际上,这种特性也直接体现了整个比特币的特点,因此使用区块链来概括加密货币背后的技术实现是非常直观和恰当的。区块链是一项技术,加密货币是其开发实现的一类产品,不要等同或混淆。与加密货币相比,区块链这个名字抛开了代币的概念,更加形象化、技术化、去政治化,更适合我们研究、去推广。
广义的区块链技术,必须包含点对点网络设计、加密技术应用、分布式算法的实现、数据存储技术的使用等4个方面,其他的可能涉及到分布式存储、机器学习、VR、物联网、大数据等。狭义的区块链仅仅涉及到数据存储技术、数据库和文件操作等。
1.2 区块链架构
1.2.1 区块链版本
区块链1.0应用以比特币为代表,为了解决货币和支付手段的去中心化;区块链2.0就是更宏观的对整个市场的去中心化,利用区块链技术来转换许多不同的资产而不仅仅是比特币,通过转让来创建不同资产单元的价值。例如在金融领域的运用、构建去中心化资产管理系统、Dapp构建去中心化自治社会、区块链股权应用等。
区块链2.0通过智能合约来彻底颠覆了传统货币和支付的概念,而区块链3.0将是区块链在非金融货币领域中的价值。例如去中心化域名系统Namecoin、数字身份验证、区块链政府、去中心化公共服务、工业化基因测序、区块链公证和知识产权、慈善捐赠信任、重构现有的征信模式等。
区块链促进大数据预测任务自动化,区块链可以和大数据连接,大数据预测分析可以和自动执行的智能合约完美结合,区块链技术加入到经济支付层面,做为量化工具,海量自动执行的任务会解放大量的人类生产力。区块链也会促进大数据向下一个数量级发展。
1.2.2区块链架构
区块链的技术模型及架构自下而上依次是数据层、网络层、共识层、激励层、合约层和应用层组成。区块链架构1.0和升级版分别如图1和2所示:
图1 区块链1.0基础架构
图2 区块链升级版架构
1.3分层简述
首先是“数据层”,封装了底层数据区块的链式结构,以及相关的非对称公私钥数据加密技术和时间戳等技术,这是整个区块链技术中最底层的数据结构。这些技术是构建全球金融系统的基础,近十年的使用证明了它非常安全的可靠性。而区块链,正式巧妙地把这些技术结合在了一起。
其次是“网络层”,包括P2P组网机制、数据传播机制和数据验证机制等。P2P组网技术早期应用在BT这类P2P下载软件中,这也意味着区块链具有自动组网功能。
第三层“共识层”,封装了网络节点的各类共识机制算法。共识机制算法是区块链的核心技术,因为这决定了到底是谁来进行记账,而记账决定方式将会影响整个系统的安全性和可靠性。目前已经出现了十余种共识机制算法,其中比较最为知名的有工作量证明机制(POW,Proof of Work)、权益证明机制(POS,Proof of Stake)、股份授权证明机制(DPOS,Delegated Proof of Stake)等。不过,对于不需要货币体系的许可链或者私有链而言,绝对信任的节点以及高效的需求上述共识算法并不能够提供,因此对于这样的区块链,传统的一致性算法成为首选,PBFT(拜占庭容错)、PAXOS、RAFT。数据层、网络层、共识层是构建区块链技术的必要元素,缺少任何一层都将不能称之为真正意义上的区块链技术。
第四层“激励层”,将经济因素集成到区块链技术体系中来,包括经济激励的发行机制和分配机制等,主要出现在公有链当中。在公有链中必须激励遵守规则参与记账的节点,并且惩罚不遵守规则的节点,才能让整个系统朝着良性循环的方向发展。而在私有链当中,则不一定需要进行激励,因为参与记账的节点往往是在链外完成了博弈,通过强制力或自愿来要求参与记账。
第五层“合约层”,封装各类脚本、算法和智能合约,是区块链可编程特性的基础。比特币本身就具有简单脚本的编写功能,而以太坊极大的强化了编程语言协议,理论上可以编写实现任何功能的应用。如果把比特币看成是全球账本的话,以太坊可以看作是一台“全球计算机”,任何人都可以上传和执行任意的应用程序,并且程序的有效执行能得到保证。
第六层“应用层”,封装了区块链的各种应用场景和案例,比如搭建在以太坊上的各类区块链应用即部署在应用层,而未来的可编程金融和可编程社会也将会是搭建在应用层。
激励层、合约层和应用层不是每个区块链应用的必要因素,一些区块链应用并不完整的包含后三层结构。接下来将分章节总结各层的技术特点。
1.4区块链数据库与传统数据库比较
区块链其本质上是一个去中心化的数据库。区块链系统能够大幅度降低成本,减少风险和管理成本,提升流动性,增加创新产品和服务的机会。可以说,和大数据、云计算、人工智能一样,区块链是未来十年中举足轻重的技术。
1.4.1 区块链系统和CAP、ACID和BASE
为什么我们说区块链系统其实是一个分布式数据库系统?
ACID
传统的数据库都满足ACID原则。我们首先来看一个“事务”(transaction)的概念。事务是一个操作序列,是一个不可分割的基本工作单位。在一个传统的数据库管理系统(DBMS)中,事务应该具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。取这四个英文单词的首字母缩写,我们得到的是ACID。
从ACID的四个特性来看,我们发现其实比特币区块链系统几乎具有这些特点:①一个区块要么被全部记录进入区块链,要么不被认可,不可能有中间状态;②一个区块在加入区块链之后,原本区块链的系统依然保持完整性;③每次只有一个区块可以被加入到区块链中,所以隔离性是当然的;④而在区块被写入链条之后,新的区块链会被复制到所有的区块链节点上,被永久保存。
在区块链系统上有一个特殊情况,如果两个不同的节点差不多同时申请挖币的奖励,那么它们中会有一个节点计算出的区块在最终会被抛弃,因而ACID特性中的D(持久性)其实是不满足的。
BASE
因为区块链节点处于地球各处,而这些节点又是由不同用户维护的,所以其实我们并不能保证每次访问区块链的系统时都能获取到数据,而这恰恰又对应了互联网时代分布式数据系统的一个特性,可以称之为为BASE。BASE是一个很怪异的词语的缩写:Basically Available,Soft-state,Eventual Consistency(基本上是可访问的、软状态、最终一致性)。
在BASE理念中,基本可用是指系统在出现不可预知的故障时,允许损失部分可用性;软状态是指允许系统中的数据存在中间状态,不过该中间状态的存在并不会影响系统的整体可用性;最终一致性指的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一致。和ACID概念的强一致性相比,BASE理念面向的是可扩展的分布式系统,BASE通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的。不过两者的共同点是最终会达到一致状态。我们可以认为区块链系统符合分布式数据系统的BASE理念。
CAP
在分布式数据系统中,有三种重要的属性如下:
① 一致性(Consistency):数据一致性,任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。
② 可用性(Availability):好的响应性能,每一个操作总是能够在确定的时间内返回,也就是系统随时都是可用的。
③ 分区容忍性(Tolerance of network Partition):可靠性,在出现网络分区(比如断网)的情况下,分离的系统也能正常运行。
CAP原理解释了关于这三种属性的关系。CAP原理的意思是:一个分布式系统不能同时满足一致性、可用性和分区容错性这三个需求,最多只能同时满足两个。CAP原理是由美Berkerly的Brewer教授提出。
图3 CAP原理示意图
图3所示,CAP原理指出一致性、可用性、分区容忍性不可三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。牺牲一致性而换取高可用性,也是大多数分布式数据库产品的方向。
在比特币区块链系统中看到了“一致性”被牺牲的情况。当一个新的区块被部分节点接受时,如果用户访问的是还没有更新的节点,那么用户获取的数据是不一致的,所以从分布式数据系统的角度来看,比特币区块链系统其实是一个AP系统,也就是说,它保持了可用性和分区容忍性,不过放弃了一致性。
1.4.2 基于区块链的数据系统特征
① 去中心化或者多中心化(Distributed or Decentralized)
区块链最大的特性就是使用分布式计算和存储,从而减少甚至消除中心化的硬件或管理机构。在区块链上,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。
② 开放性(Open)
系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何(有权限的)人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。
③ 自治性(Autonomous)
区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全地交换数据,使得对“人”的信任改成了对机器的信任,任何人为的干预都不起作用。
④ 信息不可篡改(Untemperable)
一旦信息经过验证并添加至区块链,就会永久存储起来,单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。
⑤ 匿名性(Anonymous)
由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此交易对手无须通过公开身份的方式让对方对自己产生信任。
1.4.3 区块链与大数据
区块链和大数据是两个在过去几年中都得到飞速发展的技术。2016年第46届世界经济论坛达沃斯年会论坛的主题为“掌控第四次工业革命”,包括人工智能、无人驾驶、区块链、量子计算等在内的科技前沿领域在会议中被反复提及。
目前区块链能够承载的信息数量是有限的,离我们要用“大数据”的标准来衡量的地步还差得很远,不过千里之行始于足下,要一步一步地来。
如果要让区块链承载大数据,就目前所看到的这些区块链系统都还不具备这个能力。我们来看区块链系统三个和大数据有矛盾、需要改进的特点:分布式的;有隐私的;安全的;
区块链系统是分布式的,而大数据讲究的是可规模化的、可量化的数据;区块链系统是匿名的、有隐私的,而大数据在意的是个性化;区块链系统是安全的,信息是相对独立的,而大数据在意的是信息的整合分析。
区块链系统本身就是一个数据库,而我们所说的大数据指的是对数据的深度分析和挖掘,也就是说,数据分析和数据挖掘需要构建在区块链系统之上,把数据的价值发挥出来。如果要做到以数据为基础来做决策,那么区块链的大数据化是区块链系统必须要完成的一个步骤。
微软亚洲研究院系统算法组首席研究员Thomas Moscibroda在2017首届科技金融国际峰会上提到了区块链的效率和隐私问题。在区块链中,每一个人都在分享自己的数据,而且每一个交易记录都需要被所有人核实、记录和存储。一方面,这个过程会使区块链对传统数据库而言更慢。另一方面,区块链双方的交易过程中第三方必须知晓,且会去核实这个交易的合法性和正当性,而每一个人都能知道交易双方的中间数据,这也带来了隐私问题。String Labs联合创始人Tom Ding认为区块链技术其实是一项有相当门槛的技术,在整个世界上可能也只有为数不多的团队有能力开发底层区块链系统。Alphabet的DeepMind Health部门已经宣布计划使用一种与分布式账本一样的系统来监视目前正在被使用的患者数据。他们的工具命名为Verifiable Date Audit(VDA)。Alphabet声称VDA并不是区块链,而是类区块链。VDA借鉴了很多来自比特币区块链的功能,包括不可更改性。同时还提供某种程度的透明度,所以第三方机构可以验证这些数据。R3的技术主管Richard Brown针对他们的产品Corda是这样评述的:“Corda是一个分布式账本平台,它很大程度上受到并吸取了区块链系统的优势,去掉了很多不适用于银行业场景的区块链设计。”
目前世界一些专家做过深入探讨,共同观点是从架构上来看,在未来的3年甚至更长的时间内,包括比特币和以太坊区块链在内的主流区块链系统都无法有效提升技术应用到有高频数据录入需求的场景上。当然,如果一个区块链系统未来的场景在有足够大的用户和数据量的情况下每秒的交易量也不会到达千这个数量级的话,还有实现的可能。
如何让区块链系统真正商用化?受到微软和Google的启发,认为如果要真正商用化区块链系统,唯一的出路就是区块链数据库(Blockchain DataBase)。在设计的区块链数据库兼有区块链系统和数据库系统两个系统的优势。区块链系统是符合BASE理念的,不过并不满足ACID。所以可以选择一个不满足ACID,而符合BASE理念的数据库来做底层数据架构。而与传统的数据库系统相比,区块链数据库将能够拥有原先系统所不具备的特性,即前文中所讲述的区块链系统的各种特性。
1.4.4 区块链数据库中的数据
比特币区块链的可扩展性是一个大问题。如果不提升数据块的大小,整体的交易量则无法提升,而如果提升了数据块的大小,因为每个客户端的节点都会有数据库的完整拷贝,数据存储会是一个非常头疼的事情。
不同于传统的区块链系统,区块链数据库将会拥有数据库系统的可扩展性和性能:数据可以超过1TB,甚至到达PB的数量级;并发写入的数量级可以达到10-30万笔/秒;单条事务数据没有上限;
区块链数据库中共识模块的作用是让系统中所有的数据节点都能够保持一致。如果一个节点的区块链上添加了一条新的交易,那么数据库中所有其他节点也会把同一个交易加入到各自的区块链上。共识模块的关键点就在于保持整个系统中所有交易顺序的一致性。
共识算法在以太坊和比特币区块链中的达成是通过工作量证明(POW)或者权益证明(POS),而IBM Hyperledger和其他一些想要提升效率的区块链系统采用的是PBFT(Practical Byzantine Fault Tolerance)协议。后者的效率会高很多,不过网络传输的数据会根据节点数的上升而成倍增加。区块链数据库中,会采用Paxos共识算法。
1.5 将数据写入区块链方法
在Ethereum平台中有两种方式能够将数据存到区块链上,一种是以区块Block为单元,将数据附加到每一个区块上,如图2.4形式;另外一种是以一笔交易Transaction,将数据发到区块链上,如图2.5形式;其中以Block为单元的形式吞吐量相对于Transaction的形式要低。方法一如下:
图4 利用区块附加信息extradata装数据
图4,区块链系统中包括两类节点,一是全节点,即负责发送数据以及存储、维护全系统的数据的节点。二是轻节点,即为方便普通消费者用户查询数据内容的节点,其不存储完整的区块链数据,维护难度低,上线即可用。
数据通过作业现场所属单位或个体维护的节点,调用挖矿miner . Start ( )和setExtra( )两个方法,将数据发到数据块Block上,同时将用以查询区块具体信息的key of block(在Eth中称为BlockHash)存进数据库,轻节点从数据库中调取并到区块链系统上进行查询,最后返回结果。方法二如下:
图5 利用交易方式装数据
图5,数据通过作业现场所属单位或个体维护的节点,调用挖矿miner.Start()和sendTransaction ()两个方法,将数据以Transaction的形式发送到区块链上,多条Transaction打包成一个block,每条Transaction发送到区块链上都会返回一条key(在Eth中称为TransactionHash ),将key存到数据库,供查询使用。
通过上述对比可以得出这样一个结论,方式一每个区块只能存一条数据,而第二种方式则可以存储多条,为了实现系统的高性能,满足实际需求,选择第二种方式,其相较于将数据附加在区块上系统性能将得到更大发挥。
1.6 软硬分叉
硬分叉:当比特币代码发生改变后,旧节点拒绝接受由新节点创造的区块。不符合原规则的区块将被忽略,矿工会按照原规则,在他们最后验证的区块之后创建新的区块。
软分叉:旧的节点并不会意识到比特币代码发生改变,并继续接受由新节点创造的区块。矿工们可能会在他们完全没有理解,或者验证过的区块上进行工作。
2. 区块链链类型及平台比较
2.1 区块链链三大类型
私有链、联盟链、公有链是区块链的三大类型,而且目前衍生出一些例如侧链,跨链、支链等类型,在实际应用中可以根据所处信任环境的不同选择需要的区块链类型。传统机构无法突然之间转变成一个完全的公有链,联盟链是实现未来加密世界的重要步骤。相比于中心化数据库,联盟链的最大好处就是加密审计和公开的身份信息。没人可以篡改数据,就算发生错误也能追踪错误来源。相比于公有链,私有链更加快速、成本更低,同时尊重了公司的隐私。联盟链或在传统机构中先落地应用,同时将区块链推广到企业的管理和应用中。
2.1.1 公有链
公有链指全世界任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、任何人都能参与其中共识过程的区块链——共识过程决定哪个区块可被添加到区块链中和明确当前状态,公有链是“完全去中心化”的。在公有链中程序开发者无权干涉用户,所以区块链可以保护使用他们开发的程序的用户。任何拥有足够技术能力的人都可以访问,只要有一台能够联网的计算机就能够满足访问的条件。尽管所有关联的参与者都隐藏自己的真实身份,这种现象十分的普遍。他们通过他们的公共性来产生自己的安全性,在这里每个参与者可以看到所有的账户余额和其所有的交易奖励。
从应用上说,公有链包括比特币、以太坊、超级账本、大多数山寨币以及智能合约,其中公有链的始祖是比特币区块链。目前,大多数以太坊项目都依靠以太坊作为公有链,以太坊是一个全新开放的区块链平台,它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。以太坊是可编程的区块链,允许用户按照自己的意愿创建复杂的操作,可以作为多种类型去中心化区块链应用的平台。以太坊平台本身没有特点,没有价值性,和编程语言相似,它由企业家和开发者决定其用途。不过很明显,某些应用类型较之其他更能从以太坊的功能中获益。以太坊尤其适合那些在点与点之间自动进行直接交互或者跨网络促进小组协调活动的应用。
除金融类应用外,任何对信任、安全和持久性要求较高的应用场景,比如资产注册、投票、管理和物联网等等3.0时代应用,都会大规模地受到以太坊平台影响。
2.1.2 联盟链
联盟链也成为许可链,联盟链的参与区块链的节点是事先选择好的,节点间很可能是有很好的网络连接。这样的区块链上可以采用非工作量证明的其他共识算法,比如有100家金融机构之间建立了某个区块链,规定必须50个以上的机构同意才算达成共识。联盟链适合于机构间的交易、结算或清算等 B2B 场景。例如在银行间进行支付、结算、清算的系统就可以采用联盟链的形式,将各家银行的网关节点作为记账节点,当网络上有超过2/3的节点确认一个区块,该区块记录的交易将得到全网确认。联盟链对交易的确认时间、每秒交易数都与公有链有较大的区别,对安全和性能的要求也比公共链高。
金融集团之间更倾向于联盟链。各大国际金融巨头陆续加入R3 CEV区块链计划,R3 CEV 是一家总部位于纽约的区块链创业公司,由其发起的R3区块链联盟,至今已吸引了50家巨头银行的参与,其中包括富国银行、美国银行、纽约梅隆银行、花旗银行等,中国平安银行于2017年5月加入R3区块链联盟。
基于区块链的金融资产交易只会将金融机构端接入链内,以联盟链的方式运行,暂时不会将消费端用户上链。区块链在跨境汇款等领域的应用将能大幅提升效率、降低成本。传统跨境汇款涉及汇出行、汇入行、SWIFT 多方,花费时间长、成本高。
2.1.3 私有链
私有链,是指其写入权限仅在一个组织手里的区块链,读取权限开放或进行限制。联盟链在一定程度上联盟链也属于私有链的范畴。
私有链往往有极快的交易速度、更好的隐私保护、更低的交易成本、不容易被恶意攻击,并且能做到身份认证等金融行业必需的要求。私有链上可以运行完全免费或者至少说是非常廉价的交易。如果一个实体机构控制和处理所有的交易,那么他们就不再需要为工作而收取费用。私有链的应用场景一般是企业内部的应用,如数据库管理、审计等;在政府行业也会有一些应用,比如政府的预算和执行或政府的行业统计数据,这一般来说由政府登记,但公众有权力监督。私有链的价值主要是提供安全、可追溯、不可篡改、自动执行的运算平台,可以同时防范来自内部和外部对数据的安全攻击,这个在传统的系统是很难做到的。
私有链和联盟链之间的设计隐私权限会有不同,联盟链中的权限设计要求往往会更为复杂。
2.2 区块链其他链类型概念
2.2.1 跨链
跨链,顾名思义,就是通过一个技术,能让价值跨过链和链之间的障碍,进行直接的流通。区块链是分布式总账的一种,一条区块链就是一个独立的账本,两条不同的链,就是两个不同的独立的账本,两个账本没有关联。本质上价值没有办法在账本间转移,但是对于具体的某个用户,用户在一条区块链上存储的价值,能够变成另一条链上的价值,这就是价值的流通。
如果说共识机制是区块链的灵魂核心,那么对于区块链特别是联盟链及私链来看,跨链技术就是实现价值网络的关键,它是把联盟链从分散单独的孤岛中拯救出来的良药,是区块链向外拓展和连接的桥梁。
2.2.2 侧链
侧链(sidechains)这个概念来自比特币社区,2013.12提出。侧链的诞生是由于比特币本身或某一区块链本身的机制存在一些问题。但是直接在比特协议或者比特币链条上进行修改的话,又容易出错。而且比特币区块在一直不断运行,万一出错了涉及的资金量太大了。这个是不被允许的,于是诞生了侧链。
本质上来说,侧链机制,就是一种使货币在两条区块链间移动的机制,它允许资产在比特币区块链和其它链之间互转,降低核心的区块链上发生交易的次数。侧链实质上不是特指某个区块链,而是指遵守侧链协议的所有区块链,该名词是相对与比特币主链来说的。
3.3 Bitcoin、Ethereum、Fabric平台
Bitcoin即比特币,是第一个加密数字货币,区块链技术也正是由Bitcoin系统引申而出。Bitcoin是健壮稳定的加密数字货币系统,从2009年发布至今未发生过任何宕机事件。 Bitcoin系统具备以上描述的区块链技术的各种特征,分布式、去中心、去信任、数据不可篡改等。 Bitcoin系统不支持智能合约,是纯粹的加密数字货币系统,所以不适合在 Bitcoin系统上做深度开发。
Ethereum以太坊是一个具备智能合约功能的公共区块链平台。Ethereum能够通过其自带的专用加密数字货币ETH作为手续费用支付用户在Ethereum的虚拟机(EVM)中部署、调用智能合约所需要的算力占用的节点。而Ethereum官方主推的智能合约编写语言为Solidity,它是一种图灵完备的编程语言,能够完美运行于EVM(以太坊虚拟机)中,这就意味着通过智能合约,用户可以实现任何业务逻辑。Ethereum概念在2013至2014年间由程序员Vitalik Buterin提出,当时的概念大意为“下一代加密货币与去中心化应用平台”,2014年通过网络公开募集资金的方式开始发展。截至目前,Ethereum已是全球市值第二高的加密货币。
Ethereum平台在与Bitcoin相比在支持原有加密数字货币生成与交易的基础上还新增了智能合约功能。智能合约是区块链2. 0以及区块链3. 0的发展基础,它不是一个简单的程序,而是将合约源码转换为PC能执行的底层机器码部署到区块链全链,供合约发布者及以外的用户进行调用或者共同执行,在部署结构上分布式的程序。通过智能合约能够实现现实生活中的各种业务逻辑,并将业务逻辑和规则在区块链上确定。想要调用合约的用户必须遵守合约中约定的规则,而合约本身在区块链系统中也是作为一个用户存在,参与到合约中的用户在触发预先规定好的某个事件时将触发一些具体操作的产生。值得注意的是,在依赖全网其他节点进行验证的时候,要求提出结果并想要录入区块的用户所持有的账户中有足够的Ether可以作为推动合约结果验证的Gas(燃料)。Ethereum通过不断改进一系列设计精妙的互相制约配合的机制逐渐成为了一个健壮可靠的智能合约平台。如图9.1为Bitcoin和Etereum的对比,从侧重点和功能点以及技术组成上做了对比。
图6 BTC与ETH比较
Fabric是目前风头正热的Hyperledger开源项目下最重要的子项目,由Linux基金会于2015年发起,目前己经发布到release版本。Fabric的设计理念是构建企业级应用的区块链技术平台,主要针对交易和业务密集的金融类行业。与Bitcoin和Ethereum相比有较大不同,较为直观地看,首先是Fabric中不自带加密数字货币,再者是Fabric支持类似多链并存的Channel应用模式,最后是Fabric中通过加入CA验证机制引入了成员管理模块,从隐私保护和私密方面做了更多的考虑。
从内部结构上看,Fabric与从Bitcoin系统引申出的区块链技术架构有了很多改变,从某种意义上说Fabric只是借鉴了区块链技术中的某些机制,实现了一套目标类似联盟链的系统。针对现实交易中具体交易细节不便于利益相关者以外的人所了解,Fabric提出了Channel机制,简单来说即交易相关者通过单独的交易信息通道对数据信息传输和管理,只有拿到“钥匙”的人才能开启对应Channel数据访问权限。从这个角度来看,Fabric其实是在完全的去中心化和实际业务需求之间找一个平衡点。目前利用Fabric实现的应用相对Ethereum来说还很少,主要原因在于平台还相对不成熟,开发难度大,使用者少。各平台比较如图7
图7 各平台对比
3 区块链实现原理及优缺点
3.1 区块链的工作原理
区块链技术的核心是当前链上的所有参与节点之间共同维护链上存储的交易信息,使得交易信息基于密码学原理而不是基于信任,使得任何能够达成一致要求的交易双方,能够之间进行交易,无需第三方参与。
从比特币技术角度来说,区块是一种对交易进行记录的数据结构,该数据结构反映的是一笔交易的资金流向。系统中已经达成的交易区块链接到一起会形成一条主链,所有参与计算的节点都记录了主链或者主链的一部分。一个区块包含以下几个部分:交易信息,前一个区块的哈希散列、随机数、难度值、时间戳。其中交易信息是区块中所保存的任务数据,交易信息中具体包含交易双方的交易数量、电子货币的数字签名等;前一个区块的哈希散列值的目的是将区块链接起来,使得按时间顺序的过往交易进行顺序排列;随机数是用来是交易达成的核心部分,所有矿工节点争先计算随机数的答案,最先找到答案的矿工节点拥有对新生成区块的记账权,将区块向网络中进行广播更新,如此一来完成了一笔交易。
从区块链的本质上来看,区块链是一个巨大的去中心化的账本数据库。随着交易的不断产生,所有参与的矿工节点不断的对交易信息进行验证并找到合适的区块对交易进行存储,这个链式结构会不断增长延长。这些区块依照时间的顺序不断添加到原有的区块链上。每一个参与认证的节点都拥有一份完整的区块链的备份记录,而这些都是通过数据验证算法解密的矿工网络自动完成。区块链上保存所有相关节点的交易信息,这些信息被完整的记录在区块链中。新产生的区块将会获得奖励给生成该区块的矿工电子货币,通过这种奖励机制的方法,让矿工有利可图,成为矿工挖矿的动机。
区块链技术产生之后,当一个用户想要验证历史交易信息时,可以通过基于密码学与数据结构的一系列运算追踪交易所属的区块,进而完成认证。除此之外,可以通过对随机数的调整控制区块产生的速度。私钥的保密性能保证实现匿名交易。对于存储的历史交易数据可以通过剪枝进而实现硬盘空间回收,经过中本聪的预测计算,经过完全剪枝的区块链一年只生成4.2MB的数据量。
也有文章对区块链做了如下精简的总结:狭义的说,区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构,并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账,能够安全存储简单的、有先后关系的、能在系统内验证的数据。广义的区块链技术则是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码(智能合约)来编程和操作数据的一种全新的去中心化基础架构与分布式计算范式。区块链具有去中心化、时序数据、集体维护、可编程和安全可信等特点。①是去中心化:区块链数据的验证、记账、存储、维护和传输等过程均是基于分布式系统结构,采用纯数学方法而不是中心机构来建立分布式节点间的信任关系,从而形成去中心化的可信任的分布式系统;②是时序数据:区块链采用带有时间戳的链式区块结构存储数据,从而为数据增加了时间维度,具有可验证性和可追溯性;③是集体维护:区块链系统采用特定的经济激励机制来保证分布式系统中所节点均可参与数据区块的验证过程(如比特币的“挖矿”过程),并通过共识算法来选择特定的节点将新区块添加到区块链;④是可编程:区块链技术可提供灵活的脚本代码系统,支持用户创建高级的智能合约、货币或其他去中心化应用。
3.2 区块链的特点
1、去中心化
分布式传输:区块链的底层是一个P2P网络,所有的交易在节点之间通过P2P网络协议传输,数据由一个节点直接传输给网络中的其他所有节点。
分布式记录:区块链构建了一整套协议机制,让全网每一个节点在参与记录的同时也来验证其他节点记录结果的正确。只有当区块链网络中大部分节点或甚至所有节点都同时判定这个交易记录正确时,或者所有参与记录的节点都比对结果一致通过后,记录的真实性才能得到全网认可,记录数据才允许被写入区块中。
分布式存储:区块链构建了一个分布式结构的网络系统,让数据库中的所有数据都实时更新并存放于所有参与记录的网络节点中。这样即使部分节点损坏或被黑客攻击,也不会影响整个数据库的数据记录与信息更新。
分布式传输、分布式记录和分布式存储使得整个区块链系统完全去中心化。没有一个节点,没有一个组织,没有一个国家能够完全地控制这个系统。在整个系统内,数据的存储、交易的验证、数据的传输过程都是去中心化的。
2、为系统数据提供可靠架构
在区块链的结构中没有中心化的结构,每个参与节点只作为区块链当中的一部分,并且每个参与节点拥有相等的权利,网络中的黑客若试图篡改或者破坏部分节点信息,对整个区块链来说并没有影响,而且参与节点越多,该区块链越安全。
3、为资产交换提供智能载体
区块链具有可编程的特性,并依附于一系列辅助办法,能够保证资产安全,交易真实可信。例如工作量证明机制,对区块链上的数据进行更改,必须拥有超过全网超51%的算力;智能合约机制,将合同用程序进行代替,一旦达成了约定条件,网络将会自动执行合约;互联网透明机制,网络中的账号全网公开,而用户名则进行隐匿,并且交易信息不可逆;互联网共识机制,通过所有参与节点的共识来保证交易的正确性。
4、为互联网交易建立信任关系
区块链系统中,所有验证机制的基础都是非对称加密技术。在区块链系统的交易中,非对称密钥的基本使用场景有两种:①公钥对交易信息加密,私钥对交易信息解密。私钥持有人解密后,可以使用收到的价值。②私钥对信息签名,公钥验证签名。通过公钥签名验证的信息确认为私钥持有人发出。
在解决信任的问题上,与传统的引入可信第三方不向,区块链利用数学方法来解决。在交易的过程中,我们可以不用了解对方的可信程度,交易双方之间只需要相信数学算法就可以达到互相信任的目的。区块链技术去掉了传统的信任问题,操作都由数学算法来背书。
5、高效
从概念的角度来讲,对区块链上的多个副本进行保存似乎相较于单一的集中式数据库效率更低。但在很多现实的应用中,存在多方对同一交易信息进行保存的状况。大多数情况下,同一笔交易信息的相关数据可能不一致,所以各参与方可能需要耗费很多时间进行核实。而应用区块链技术之后可以减少人工对账过程,达到节约成本。
3.3 区块链面临的问题
随着区块链技术的广泛应用与研究的不断深人,区块链技术所存在的一些问题逐渐显现,如区块链大小与系统交易吞吐量的不平衡、数据安全存在隐患、数据隐私较难保障等。从区块链的设计和需求出发,探讨区块链技术的特征、系统可扩展性、系统安全性和隐私保护等方面的问题。
3.3.1 扩展性问题
如今加密货币领域面临的最大问题就是扩展性问题,对于区块链的实现框架,扩展性主要包括两个方面,一是区块存储的扩展,另一个是提升交易吞吐量的扩展程度。区块链的数据通常是只能追加记录,而不能修改和删除记录。针对之前数据有误的情况,需要在现有数据链中增加一条新数据,并且再增加一条声明,表明前述记录添加有误,才能保存完整数据。只有数据完整,新加入的节点才有能力对全网的完整交易历史进行验证,而无须信任其他节点。这种机制为区块链的去中心化机制提供了便利,但是也影响了系统的可扩展性。
目前主流的支付处理商例如Visa信用卡可以处理2000笔交易/秒,最高可达56000笔交易/秒,当前区块链网络每秒只能处理7笔。如果单纯调整区块链中区块的大小,使得每个区块可以存放更多交易数据,显然可以提高交易吞吐量。然而区块数据量增大将导致单个用户节点不能运行完整的区块链节点,只有可以负担起全节点资源消耗的商业机构才可以运行完整节点。全网的算力将集中在部分实体机构中,这些实体可以共谋对区块链进行恶意攻击或篡改以谋求自身利益最大化。在网络节点数目足够多的情况下,全网可以保证抵御51%攻击,然而节点数目增多,网络中节点间交互和通信会占用更多网络资源,这导致区块链网络处理速度的降低。悉尼大学构建出一个在公有和私有环境中工作的区块链,称作“红腹区块链”,使交易能够以点对点的方式进行,也能够在仅限于特定用户的行业环境中进行,进而使得该区块链可以在100台机器上每秒处理超过妞万次的交易,但该区块链仍处于实验阶段,尚末投入使用。因此区块链的开发者应考虑如何设计一个高性能的区块链,在保证安全性和网络正常运行的前提下提高交易效率。
3.3.2 隐私保护问题
区块链系统中的隐私一般分为身份隐私和交易隐私两类,身份隐私是指用户身份信息和区块链地址之间的关联关系,交易隐私是指区块链存储的交易记录和交易记录背后的知识。相对于传统的中心化架构,区块链机制不依赖特定中心节点处理和存储数据,因此能够避免集中式服务器单点崩溃和数据泄露的风险,然而随着区块链技术不断发展和广泛应用,其面临的隐私泄露问题越来越突出。用户在使用区块链地址参与区块链业务时,有可能泄露一些敏感信息,区块链系统中通过账户地址标识实现数据或交易的传输,而一个地址的统一性无法掩盖,不同地址之间稳定的关联交易也有迹可循,例如区块链交易在网络中的传播轨迹,这些信息有可能被用户推测区块链地址对应的真实身份。
此外,交易记录通常能反映一些敏感数据,可能泄露用户的隐私,例如在数字货币应用中,分析人员通过分析交易记录可以获得用户的交易规律,甚至能推测出用户的身份信息、消费水平、位置信息及生活状态等。身份隐私和交易隐私是用户在使用区块链技术时需要重点保护的内容,这些信息一旦泄露有可能对用户造成巨大威胁。为了实现对这些数据的隐私保护,可以采用基于属性的密码访问控制技术,将一般访问控制技术同密码学工具相结合,实现对访问对象的安全访问。
3.3.3 安全性问题
区块链技术虽然基于密码学原理,但并非绝对安全,主要可以从区块链加密算法、区块链节点间的共识协议与区块链公私钥使用安全性几个方面考虑。在算法层面,以目前我国天河二号的算力来说,产生区块链SHA256哈希算法的一个哈希碰撞大约需要228年,但随着量子计算机等新计算技术的发展,NP完全问题的破解将成为可能。协议方面,基于POW共识过程的区块链主要面临的是51%攻击问题,即节点通过掌握全网超过51%的算力就有能力成功篡改和伪造区块链数据。51%算力是考虑到区块链中攻击者用更大代价的货币来换取较小价值的收益是不划算的,但区块链应用前景广阔,不排除攻击者为了某种目的不惜成本地攻击,且理论上技术手段实现。使用安全性方面,区块链技术一大特点就是不可逆、不可伪造,但前提是私钥是安全的。私钥是用户生成并保管的,没有第三方参与,私钥一旦丢失,便无法对账户的资产做任何操作,同时也无法排除私钥被他人窃取从而造成数据隐私泄露的情况。区块链大量应用了各种密码学技术,属于算法高度密集工程,在实现上比较容易出现问题。
针对区块链系统的各种安全问题,应考虑综合应用密码学技术、网络安全技术从算法、协议、使用和实现方面提高区块链安全性,应对现存的安全问题。
即使区块链技术仍有不足,但是所带来的影响是前所未有的,我也要抓住这个机会跟着导师好好学习区块链,而且目前,区块链正在四个方面进行技术性的优化。首先是共识算法,正在由低频低效向高频高效转变;其次是处理方式,从链上处理到链上链下协同;再次是服务分片,由全员周知到范围通知;最后是组织形式,从单一链条到多链组合。我坚信区块链在以后的发展中会越来越好,落地应用会越来越多。
4 区块链应用之比特币
4.1 比特币的产生
比特币由挖矿产生–通过计算出一个随机数字Nonce,生成的BTC被记录在矿工的名下,且挖矿产生的比特币即为Coinbase。BTC每十分钟产生一次,产生数量由最初的50、25到现在的12.5枚,BTC通过矿工的公钥哈希值锁定。交易的输出被称为“未花费交易输出(UTXO-Unspent Transaction Output)”,即交易UTXO+区块链=比特币系统,如图8。
图11.1 比特币系统组成
4.2 比特币交易
UTXO:(Unspent TransXtion Output未花费交易输出),用比特币拥有者的公钥锁定加密的一个数字,UTXO≈比特币。比特币系统中没有比特币、账户、账户余额,只有UTXO,账户余额只是比特币钱包的概念。UTXO存在全节点的数据库里,转账将消耗属于自己的UTXO,同时生成新的UTXO并用接受者的公钥锁定。
4.2.1 交易的结构
比特币最基本的交易类型为P2PKH(Pay-to-Public-Key-Hash),顾名思义交易付款的对象是公钥哈希。
比特币脚本存在的意义是让每笔交易合法化,这个合法化不是人工审核而是有脚本自动执行校验的,脚本分为锁定脚本和解锁脚本。锁定脚本和UTXO是对应的,一个UTXO中包含一个锁定脚本。当这个UTXO要被使用时,比如alice转账给bob需要引用这个UTXO,这就产生了一笔交易,这笔交易只有被验证了才可能在比特币的网络中传播。验证的时候需要的就是解锁脚本。
从上述流程可以看出: 锁定脚本和UTXO 关联,而解锁脚本和某笔交易关联。锁定脚本被叫做scriptPubKey, 解锁脚本被叫做ScriptSig。交易输出结构=UTXO+锁定脚本(用接受者的公钥哈希);交易输入结构=UTXO+解锁脚本(接受者签名及公钥)
解锁脚本: ,解锁脚本是由签名与公钥组成,这就保证了必须拥有私钥的用户才能对某一笔交易进行解锁。
锁定脚本:OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG, 锁定脚本是由一连串堆栈命令和公钥哈希组成,公钥哈希即RIPEMD160(SHA256(公钥)),大小20字节;比特币地址实际是由该公钥Hash进行Base58check编码而来,所以必须拥有该地址的私钥才能将锁定脚本解锁。

4.2.2 比特币交易示例
假设alice要向bob支付0.015比特币, alice会用到一个UTXO(假设是单输入,单输出),这个UTXO带有一个锁定脚本,为交易设置“障碍”。
锁定脚本如下:
OP_DUP OP_HASH160 be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG
OP_DUP:复制栈顶数据,然后该数据放置栈顶
OP_HASH160:对栈顶数据执行ripemd160(sha256(data)) (这其实是两次摘要计算)
be10f0a…:Bob接受者的比特币地址
OP_EQUALVERIFY:对比栈顶的两个数据,如果相等都被移除
OP_CHECKSIG:验证签名
bob如果要接收这笔比特币(另一种说法是bob可以引用该笔输出),就要给出一个解锁脚本,然后解锁脚本和锁定脚本组合后执行的结果为真才能确认交易有效。
解锁脚本如下:
3046022100ba1427639c9f67f2ca1088d0140318a98cb1e84f604dc90ae00ed7a5f9c61cab02210094233d018f2f014a5864c9e0795f13735780cafd51b950f503534a6af246aca30103a63ab88e75116b313c6de384496328df2656156b8ac48c75505cd20a4890f5ab
看起来是一堆数字,其实『签名』和『公钥』(sig & pubkey)的组合。签名是bob的私钥对该笔交易的信息加密的结果,公钥就是指的bob的公钥。由于私钥只有bob才知道,所以也只有他才能拿出正确的签名,至此交易完成可以广播以供节点验证。
4.2.3 交易及区块传播验证
一般来说,钱包软件生成交易并向邻近节点传播,节点对收到的交易进行验证,并丢弃不合法交易。合法交易主要包含以下内容:交易的size要小于区块size的上限;交易的utxo是存在的;交易输入utxo没有被其他交易引用-防止双花;输入总金额>输出总金额;解锁脚本需验证。验证结束后将合格交易加入到本地的Transaction数据库中,并将合法交易转给临近节点。
区块的传播验证:当相邻节点收到新区块后,立即做以下检查:验证POW的Nonce值是否符合难度值;检查时间戳是否小于当前时间2小时;检查Merkle树根是否正确;检查区块size要小于区块size的上限;第一个区块必须是coinbase交易;验证每个交易。如果以上条件都满足则证明挖矿成功。
4.3 比特币的分叉
硬分叉:当比特币代码发生改变后,旧节点拒绝接受由新节点创造的区块。不符合原规则的区块将被忽略,矿工会按照原规则,在他们最后验证的区块之后创建新的区块。如果新旧区块都不妥协,最终的结果是产生两个币种,例如BTC和BCC。
软分叉:由比特币交易的数据结构改变引起,但是区块的数据结构并未改变。旧的节点并不会意识到比特币代码发生改变,并继续接受由新节点创造的区块。矿工们可能会在他们完全没有理解,或者验证过的区块上进行工作。老节点接受新旧格式的区块,但是新节点只接受新区块而拒绝旧区块。
软分叉主要有矿工激活软分叉MASF和用户激活软分叉UASF,在这里就要提一下隔离见证(segwit)。因为原来版本区块中需要写入签名信息,但是黑客可以通过改变交易签名来改变交易的ID,从而有很大的交易隐患。隔离见证就是将签名部分从交易中移除,提高安全性的同时间接扩容。这个建议是Core团队(比特币维护团队)在BIP141会议中提出来的,同时矿工团队(掌握很高算力的矿工组织)也希望在实施隔离见证之后将区块扩容到2M使每秒完成的交易数增多。Core团队不同意扩容,因为他们认为BlockStream公司推出的闪电网络完成可以解决交易数的问题。Core团队拒绝扩容同时在BIP148会议中提出了用户激活软分叉方案,即区块高度到达某一值自动执行隔离见证,这样core团队和矿工团队的矛盾达到了顶峰。
终于在2016年2月的香港会议召开前,Core团队的代表同意在实施隔离见证后扩容到2M,史称香港共识。但是令人意外的是,此次会议Core并没有出席会议也没有扩容。2017年5月纽约会议(纽约共识Segwit2X),代表全网80%的算力的矿业代表在纽约达成Segwit2x扩容,Core团队和矿工暂时达成和解。
4.4 比特币的安全
比特币目前面临的攻击主要有以下几种:可塑性攻击;重放攻击;粉尘攻击;空块攻击;51%攻击等。下面将一一解释。
1)可塑性攻击
可塑性也称可锻性,是指一个物体的外形改变不引起质量和物理化学属性的变化。在比特币中,交易签名具有可塑性,改变签名的某一位签名仍然有效,所以这就会产生这种情况:修改交易签名引起交易的哈希值改变(TXID改变),TXID的改变会导致原来的TXID无法找到,造成漏洞攻击,交易所或者用户会以此损失自己的数字货币。
解决方法:采用隔离见证,前文也有讲述。将可伪造的签名部分移除交易数据结构,在另一个地方存放签名,这样改变签名也不会影响TXID的变化。
2)重放攻击Replay Attack
重放攻击值攻击者黑客重复发送相同的数据包到目的主机,用以欺骗系统。但是比特币系统中重放攻击并非黑客主动攻击,而是由硬分叉造成。系统自动进行重放攻击,例如在BTC链上进行取款,会同时在BCC上运行取款,导致交易所产生损失。解决方法就是在两条链的签名上设置一个区别来避免重放攻击。
还有一些其他的攻击,例如粉尘攻击就是通过大量低额度的交易让网络拥堵;空区块攻击即不打包交易,只有coinbase;51%攻击即拥有51%算力就可以新挖一条对自己有利的链来取代旧链;双重支付攻击即一笔钱支付给两个不同的人(没有等6个区块确认就发货的风险);拒绝服务攻击即拒绝对某个特定的比特币地址提供服务。
