万字长文深入浅出讲述区块链技术细节和运行原理

本文不讨论区块链的上层应用方案,只阐述区块链本身的原理和运行机制。

 

1. 区块链起源

 

2015年中国电子商务交易额达20.8万亿,同比增长27%,其中实物商品网上零售额为32424亿元,同比增长31.6%,高于同期社会消费品零售总额增速20.9个百分点,占社会消费品零售总额(30.0931万亿元)的10.8%。

 

为解决互联网贸易中买卖双方的信任问题(存在潜在的退款可能),催生了支付宝等第三方支付机构作为信用中介。第三方中介的存在,虽然保证了商品和资金的正常交割,同时也增加了交易成本,本应归属于客户的大量的沉淀资金收益被计入中介机构,贸易效率也受到了一定的影响。而在使用物理现金的情况下,遵循的是一手交钱一手交货的准则,并不需要第三方信用中介的存在。

 

基于以上现状和问题,中本聪在2009年提出了一种基于严格数学算法的电子现金系统,使得任何达成一致的双方能够直接进行支付,而不需要第三方中介的参与。

 

自1983年D.Chaum发表第一篇电子现金论文以来,在电子现金方面的研究一直没有间断过。1980和1990年代的匿名电子现金协议,大部分是以乔姆盲签技术(Chaumian blinding)②为基础的。这些电子现金协议提供具有高度隐私性的货币,但是这些协议都没有流行起来,因为它们都依赖于一个中心化的中介机构。1998年,戴伟(Wei Dai)的b-money首次引入了通过解决计算难题和去中心化共识创造货币的思想,但是该建议并未给出如何实现去中心化共识的具体方法。2005年,芬尼(Hal Finney)引入了“可重复使用的工作量证明机制”(reusable proofs of work)概念,它同时使用b-money的思想和Adam Back提出的计算困难的哈希现金(Hashcash)难题来创造密码学货币。但是,这种概念再次迷失于理想化,因为它依赖于可信任的计算作为后端。

 

因为货币是先申请后应用,交易的顺序至关重要,所以去中心化的货币需要找到实现去中心化共识的方法。比特币以前的所有电子货币协议所遇到的主要障碍是,尽管对如何创建安全的拜占庭问题容错(Byzantine-fault-tolerant)多方共识系统的研究已经历时多年,但是上述协议只解决了问题的一半。这些协议假设系统的所有参与者是已知的,并产生如“如果有N方参与到系统中,那么系统可以容忍N/4的恶意参与者”这样形式的安全边界。然而这个假设的问题在于,在匿名的情况下,系统设置的安全边界容易遭受攻击,因为一个攻击者可以在一台服务器或者僵尸网络上创建数以千计的节点,从而单方面确保拥有多数份额。

 

中本聪的创新是引入这样一个理念:将一个非常简单的基于节点的去中心化共识协议与工作量证明机制结合在一起。节点通过工作量证明机制获得参与到系统的权利,每十分钟将交易打包到“区块”中,从而创建出不断增长的区块链。拥有大量算力的节点有更大的影响力,但获得比整个网络更多的算力比创建一百万个节点困难得多。尽管比特币区块链模型非常简陋,但是实践证明它已经足够好用了。

 

基于如上原因,再加上比特币的存量有限,不能随意增发,不需要依靠法币背书,代码开源等特点,造就了比特币的迅猛发展。

 

比特币的火爆,也让其背后的数据结构区块链以及实现比特币所应用的技术受到了广泛的关注,各政府部门、各央行、各金融机构(以43家国际银行支持的R3  CEV公司为首)、各大型软件公司(IBM、微软为首)开始关心区块链技术在各自领域的应用,大量的民间机构开发的山寨币开始涌现。

 

2. 区块链的特点⑤

 

从区块链起源、应用场景、运行机制,可以归纳出区块链的几大特点。

2.1 分布式去中心化

正如起源中描述的,比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量。既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链上的行为(包括比特币的运营,亦或是运行在区块链上的其他业务),这种机制就是共识机制。在完全去中心化的区块链上运行的比特币,采用的是PoW(Proof of Work,工作量证明),该机制完美的解决了拜占庭将军问题③。

 

因为基础网络架构为分布式,对单独一个节点是无法控制或破坏整个网络,掌握网内51%的运算能力(非节点数)才有可能操作交易,而这个代价大概要超过270亿美元。

2.2 无须信任

整个区块链网络中的数据是公开透明的,每个节点(参与者)都可自由加入该网络中,下载到所有的数据。任意两个节点间的数据交换无需互相信任,完全依靠区块链中的交易历史和数据的可追溯,以及共识机制来保证数据交换的正确且不可逆的执行。

2.3 不可篡改和加密安全性

跟当前银行网银系统(特别是公司网银系统)的加密机制类似,区块链的数据结构和交易流程中大量的使用了公私钥来加解密,保证数据的安全性。基于该技术基础,甚至可以应用群组签名④来保证共有数据的安全性。

 

任何事物既然有优点,也同时会存在不足之处。根源于分布式网络架构和共识机制,在区块链上运行的交易确认时间会比较长(比特币的确认时间大概是15分钟),交易并发数受限(比特币的每秒交易数为7笔,而淘宝的每秒并发数能达到10万左右),区块的容量限制(当前为1M,区块链的扩容一直在讨论中),监管难以介入,基于工作量证明的共识机制存在浪费系统资源和带宽的问题。

 

3. 区块链使用的主要技术

在Melanie Swan所著的《区块链:新经济蓝图及导读》的第二章给出了普通人的比特币转账功能方案和中本聪设计的比特币转账方案对比,非常简明的阐述了比特币的交易过程(实际过程比这个复杂),并引入了可编程合约的概念,中本聪的方案如下:

 

发送方A向比特币网络发送一份广播,其内容是这样的:“我要转1BTC给接收方B,并且我能提供一段脚本⑥,这段脚本作为钥匙可以打开这1BTC上的锁;同时,我根据接收方B的要求给这1BTC加上一把新的锁。”网络各节点收到广播,运行脚本,发现A提供的脚本确实能“开锁”。于是根据A的指令给这笔比特币换上一把B才能打开的“新锁”。当接收方B想用这1BTC时,只要能提供一段脚本作为钥匙打开这把新锁就行了。

 

图1. 比特币和区块链概述图 来源于《精通比特币》第二章

 

3.1 数据结构

 

3.1.1 区块

 

区块是一个包含在区块链(公开账簿)里的聚合了交易信息的容器。它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易组成。区块头是80字节,而平均每个交易至少是250字节,而且平均每个区块至少包含超过500个交易。

 

区块结构如下:

 

 

交易(Tx)详情中的结构如下:

 

而比特币支出(Tx_out)地址详情和接受(Tx_in)地址详情是放在一个Merkle树中,每条记录都有自己的索引编号以供查询每一笔记录中包括了生成时间、引用交易的哈希值(Tx_hash)、交易记录索引编号、比特币支出地址、支出地址数量等细节。每一比收支交易记录都有一个Merkle节点值,这个hash节点值是整个Merkle树⑧的一部分,决定了每一个地址都不能重复交易和被伪造。

 

每个区块都有一个区块标识符,区块标识符包含区块头哈希值(区块主标识符)和区块高度。

 

区块头哈希值可以唯一、明确的标识一个区块,并且任何节点通过简单地对区块头进行哈希计算都可以独立地获取该区块头哈希值。区块头哈希值实际上并不包含在区块的数据结构里,不管是该区块在网络上传输时,抑或是它作为区块链的一部分被存储在某节点的永久性存储设备上时。相反,区块头哈希值是当该区块从网络被接收时由每个节点计算出来的。区块的哈希值可能会作为区块元数据的一部分被存储在一个独立的数据库表中,以便于索引和更快地从磁盘检索区块。

 

区块高度是可以通过该区块在区块链中的位置识别区块的另一种方式。第一个区块,其高度为0,每一个随后被存储在第一个区块之上的区块在区块链中都比前一区块“高”出一个位置,就像箱子一个接一个堆叠在其他箱子之上。和区块头哈希值不同的是,区块高度并不是唯一的标识符,在区块链的增长过程中可能会出现两个或两个以上的区块有同样的高度,这种情况叫做“区块链分叉”⑦。

 

区块链里的第一个区块被称为创世块,它是区块链里所有区块的共同祖先,创世块的产生是通过参数设置产生的。

 

3.1.2 区块链

 

当一个节点从网络接受到传入的区块时,它会验证这些区块,然后链接到现有的区块链上,链接的形态如下图:

图2:区块链接成链过程 来源于《精通比特币》第7章

 

由于每个区块包含前一个区块的HASH值,这就使得从创世块到当前块形成了一条块链,每个区块必定按时间顺序跟随在前一个区块之后,因为如果不知道前一块区块的HASH值就没法生成当前区块。要改变一个已经在块链中存在一段时间的区块,从计算上来说是不可行的,因为如果它被改变,它之后的每个区块必须随之改变。这些特性使得双花比特币非常困难,区块链是比特币的最大创新。

 

3.2 P2P网络

 

为避免对中心化服务器的依赖,提供一个更为公平的网络运行环境,区块链的存储是基于一个分布式网络,每个网络节点存储全量的区块链,数据的传输和交互方式遵从P2P(Peer-to-Peer)协议。

P2P是指位于同一个网络中的每台计算机都彼此对等,各节点共同提供服务,不存在特殊的节点。在P2P网络中不存在任何服务器端、中央化服务、以及层级结构。P2P网络网络的节点之间交互运作、协同处理:每个节点在对外提供服务的同时也使用网络中其他节点所提供的服务。P2P网络也因此具有可靠性、去中心化,以及开放性。早期的BitTorrent和当前的迅雷都是采用的P2P技术。

 

3.2.1 网络节点

 

尽管P2P网络中的各个节点相互对等,但是根据所提供的功能不同,各节点可能具有不同的分工。每个节点都是路由、区块链数据库、挖矿、钱包服务的功能集合。一个全节点包含钱包、矿工、完整区块链、网络路由节点四个功能。另外还有一些节点只保留了区块链的一部分(一般只需包含区块头,大小只有完全区块链的1/1000),它们通过一种名为“简易支付验证⑨(SPV,Simplified Payment Verification)”的方式来完成交易验证,这样的节点被称为“SPV节点”(又叫轻量级节点)。除了这两类节点,P2P网络中还有其他类型的节点,总结如下:

图3. P2P网络中的节点类型 来源《精通比特币》第6章

 

3.3 加密签名机制

 

运行在区块链上的比特币所有权是通过数字密钥、比特币地址和数字签名来确立的,区块链上的交易需要一个有效的签名才会被存储。只有有效的数字密钥才能产生有效的数字签名。密钥是成对出现的,有一个私钥和一个公钥组成。公钥就像银行的帐号,而私钥就像控制账户的密码或支票的签名。一般情况下,比特币地址是由一个公钥生成并对应于这个公钥。

 

3.3.1 公钥密码体制(Public-key cryptography)

 

公钥密码体制分为三部分:公钥、私钥、加密解密算法。加密是指通过加密算法和公钥/私钥对内容(明文)进行加密,得到密文,加密过程需要用到公钥;解密是通过解密算法和私钥/公钥对密文进行解密,得到明文,解密过程需要用到解密算法和私钥。

 

公钥密码体制的公钥和算法都是公开的(这也是公钥密码体制名称的来源),私钥是保密的。针对不同的用途,可选择采用公钥还是私钥进行加密,再用对应的私钥或者公钥进行解密。

 

加密算法分为对称加密算法和非对称加密算法。对称加密算法中,加密的密钥和解密的密钥是相同的;非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。比特币的区块链上使用的是非对称加密算法中比较典型的代表“椭圆曲线算法”(ECC)。

私钥的生成一般是通过在一个密码学安全的随机源中取出一长串随机字节,对其使用SHA256哈希算法进行运算,这样就可以方便地产生一个256位的数字。如果运算结果小于n-1(其中n=1.158*1077,略小于2256),我们就有了一个合适的私钥。否则,我们就用另一个随机数再重复一次。公钥的生成可通过加密算法从私钥中获得,而反向从公钥推到出私钥被证明几乎不可能。

 

3.3.2 签名

 

区别于加密,签名是指在信息的后面再加上一段内容,可以证明信息没有被修改过。一般是对信息做一个hash计算得到一个hash值。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,所以只要内容一被修改,根据信息内容计算的hash值就会变化。

 

区块链上进行交易时,需要递交交易发起人的公钥和其签名,网络中的所有节点都可以通过所递交的公钥和签名进行验证,并确认该交易是否有效。

 

3.4 共识机制

 

在介绍共识机制之前,有必要再把区块链上的交易流程赘述一遍(以比特币为例)。

 

比特币的交易结构如3.1.1中描述,除创世块中的交易外,每个交易(Tx)会存在若干个输入(Tx_in,也称资金来源)和若干个输出(Tx_out,也称资金去向),创世块中的交易没有输入。比特币的基本单位是未经使用的的一个交易输出,简称UTXO(Unspent Transaction Outputs)。比特币的币值最小单位是聪,类似于人民币中的分,1聪为0.00000001个比特币,UTXO是一定数量的聪,虽然UTXO可以是任意值,但只要它被创造出来了,就像不能被切成两半的硬币一样不可再分了,也就是说一个交易输出只能作为下一个交易的其中一个输入,而不能同时变为两个以上交易的输入且输入金额为上一个UTXO的拆分。

 

除创世块外,资金的来源有两种,一种是挖矿奖励(依照固定算法实现的货币发行),出现在每个区块(Block)的第一笔交易中;另一种是先前的交易中未曾使用的某个交易输出,即UTXO。支出方要出示证据来证明自己对该交易输出拥有所有权,而比特币系统则要验证该交易输出是否真的未被花费(是否是UTXO)以及支出方是否有权将其花费。简言之,从创世块产生的比特币(包括不能被花费的50BTC的交易输出,以及第一个创世快挖矿产生的比特币),以及挖矿产生的比特币,节点拥有的每个比特币都是通过交易来获取到的,并且每个比特币都可以溯源到为创世块产生的比特币或挖矿所得的比特币,比特币的转移是通过“转账”交易来实现的,如某个交易输出的地址为该节点,且该节点未把这个交易输出再进行交易(即作为下一个交易的输入),则该交易输出的比特币即为该节点所有。

 

与现实中的转账或支票类似,一笔比特币的交易承载的是货币的转移,而且交易的发起人并不一定是签署该笔交易的人。一旦一笔交易被创建,会被资金所有者进行签名(私钥签名),交易中除了转移的资金还可以添加其他的条件和信息(即脚本,比特币的标准交易会提供标准的锁定和解锁脚本),最终交易会被推送至比特币网络。一笔比特币交易被发送到任意一个连接至比特币网络的节点,这笔交易将会被矿工节点收集并加入到矿工节点正在解决的区块中进行验证(矿工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费)。如果交易被验证有效,该节点将会将这笔交易传播到这个节点所连接的其他节点;同时,交易发起者会收到一条表示交易成功的返回信息。如果这笔交易被验证为无效,这个节点会拒绝接受这笔交易且同时返回给交易发起者一条表示交易被拒绝的信息。

 

一个交易最终确认为有效,并稳定的加入到区块链中,需要经过一种判断机制,这种机制就是共识机制。区块链区别于传统的分布式系统一个非常重要的区别即是传统分布式的一致性算法不考虑拜占庭容错,且是面向日志(数据库)的,而区块链是通过共识机制来实现一致性,且是面向交易的的。

 

3.4.1 PoW

 

PoW(Proof of Work)工作量证明是被用于比特币区块链中的共识机制。在介绍PoW之前,我们先看看比特币的货币发行机制和挖矿的过程。

 

比特币的产生是通过创造出新区块,大约每10分钟产生一个新区块,每个新区块都伴随着从无到有的全新比特币,每开采210,000个块,大约耗时4年,货币发行速率降低50%。在比特币运行的第一个四年中,每个区块创造出50个新比特币。2012年11月,比特币的新发行速度降低到每区块25个比特币,并且预计会在2016年的某个时刻,在第420,000个区块被“挖掘”出来之后降低到12.5比特币/区块。由于比特币发行的总量是一定的且发行速率递减,因此比特币是一种通货紧缩的货币。

 

在前面(3.4节)概述了比特币的交易过程,一个节点发起一笔交易并传播到比特币网络,矿工节点收到后,会把该交易整合到自己的候选区块的Merkle树中(矿工每次在收到新的区块生效的消息后,就开始生成新的候选区块),如下图,矿工节点会反复计算候选块的Hash值,直到该Hash值小于特定的值(找到了解),并把这个区块发布给邻居节点验证,验证通过后邻居节点会把这个区块加入到自己的区块链副本中,并继续把这个区块发布给其邻居节点,该区块会以指数级扩散。其中反复计算候选块的Hash值找到找到合适的解的过程称为挖矿。

图4. 交易在区块的merkle树中的结构,Tx3即为交易信息

 

基于工作量证明的共识机制,包括交易的独立校验、区块构建(挖矿)、新区块校验、区块链组装和选择等过程。

 

矿工节点收到一个新交易后,会对交易的语法、数据结构、输入输出、签名、脚本等方面进行独立校验,校验通过后会把这个交易放入候选区块中,且把这个交易传播出去。

 

区块的构建是依照3.1中区块的数据结构进行构建,但是区块能从候选块变成可发布出去,需要先使用SHA256算法获取该区块的Hash值,并使得这个Hash值小于一个特定的值,由于Hash函数的结果没法根据输入预知,所以只能每次随机改变输入值来计算,直到出现适当的Hash值。

 

而随机改变的这个输入值是跟区块头中的随机数(Nonce)有关的,每次变成该随机数来计算新的Hash值。而需要使得该Hash值小于的特定值是根据区块链中事先设定的难度(每个区块可能都不同,且是每个矿工节点根据区块链副本自动调整)来确定,该难度的目标是根据区块生成的平均速度来自动调整的(比特币是每10分钟生成一个新的区块)。

 

找到该Hash值后,该矿工节点就会把这个区块发布给邻居节点,邻居节点会从数据结构、时间戳、coinbase交易⑩、区块内的交易等方面进行独立校验、校验通过后会验证节点会把这个加入到区块链中(也可能不是马上就加入)、并把这个区块散播到该校验节点的邻居节点。

 

区块加入区块链中有三种方式:一种是连接到主链上的,第二种是从主链上产生分支的(备用链,即区块链产生分叉),最后一种是在已知链中没有找到已知父区块的,需要等到父区块到来后才把该区块加入到区块链中。加入到区块链的区块需要至少得到后续6个区块的链接后(但核心开发者认为,需要120个区块,才能充分保护网络不受来自潜在更长的已将新产生的币花掉的攻击区块链的威胁),该区块才算得到最终的确定。

 

PoW的优点是算法简单、容易实现、节点间无需交换额外的信息即可达成共识、破坏系统需要投入极大的成本等。但是也有浪费资源、区块的确认时间过长、容易产生分叉等缺点。

 

3.4.2 PoS

 

PoS(Proof of Stake)股权证明(也称权益证明)是基于币龄(Coin age)并通过与PoW类似的由每个节点散列运算产生的共识。所蕴含的含义是区块链应该由那些在其中具有经济权益的人进行保障。

币龄是指货币的持有时间段,简单举例说明一下:如果李明从韩梅那里收到了10个币,并且持有90天,那么李明就收集到了900币天的币龄。

 

到目前为止,已有两个系统开始运行:点点币(Peercoin)和未来币(NXT)。点点币使用一种混合模式,用你的股权调整你的挖矿难度。未来币使用一个确定性算法以随机选择一个股东来产生下一个区块。未来币算法基于你的账户余额来调整你被选中的可能性。

PoS在一定程度上缓解了PoW的能源消耗问题,但是记账并没专业化,因为拥有权益的参与者未必希望参与记账。

 

3.4.3 DPoS

 

类似于去中心化公司(Decentralized Autonomous Company, DAC),去中心化表示每个股东按其持股比例拥有影响力,51%股东投票的结果将是不可逆且具有约束力。DPoS(Delegated Proof of Stake)授权股权证明的原理跟去中心化公司的机制类似,为达到这个目标,每个股东可以将其投票权授予一名代表。获票数最多的前100位代表按既定时间表轮流产生区块。每名代表分配到一个时间段来生产区块。所有的代表将收到等同于一个平均水平的区块所含交易费的10%作为报酬。如果一个平均水平的区块含有100股作为交易费,一名代表将获得1股作为报酬。与其所被授权的投票权无关,这前100人所获得的权力权重是相同的,每名代表都有一份相等的投票权。

 

要称为一位代表,需要先在网络上注册你的公钥,然后分配到一个32位的特有标识符,该标识符会被每个交易的头部引用;每个签报会有一个参数设置窗口,在该窗口里用户可以选择一个或更多的代表,并将其分级;每个钱包将显示一个状态指示器,让用户知道他们的代表表现如何,如果他们错过了太多的区块,那么系统将会推荐用户去换一个新的代表。

 

3.4.4 Ripple

 

Ripple 是一种用以进行金融交易的互联网协议,该协议可以用来即时免费地以任何币种向世界的任何角落转账

 

(1) Ripple的历史

 

Ripple项目的初衷就是要建立一个分布式的P2P清算网络:每个人都是自己的银行,可以签发、接受借贷,同时又作为借贷通道(例如A想向B借钱,他们互不认识,却正好都认识C,那么C就可以作为A、B的通道,C先向B借钱,然后再把钱借给A,间接实现A向B借钱)。该项目几乎依靠Ryan Fugger一个人的力量支撑下来,并获得了一定的成功。但Ripple的用户一直不多,仅流行于若干个孤立的小圈子,原因很简单:Ripple的设计思路基于熟人关系和信任链,一个人要使用Ripple网络进行汇款或借贷,前提是在网络中已经存在他的朋友,否则无法在该用户与其它用户之间建立信任链。

这一状况随着OpenCoin公司的成立得到改观。

 

(2) Ripple的特点

 

Ripple的一个主要特点是网络架构去中心化,它需要维护一个包含所有帐号、所有交易(因此也就是所有账户余额)的总帐本,这个总帐本分布在所有网络节点中并时刻保持同步。其核心机制与比特币类似,但也存在以下重要区别:

 

1)Ripple网络支持多种货币。除了自己的Ripple币,它还支持法定货币(例如美元、欧元、日元等),并打算在近期支持比特币,未来有可能支持所有虚拟货币。

 

2)Ripple网络自动进行汇率换算。也就是说,用户可以用任何一种类型的货币向他人支付另外任何一种类型的货币,从而实现所有货币的全网流通。

 

3)Ripple的交易确认过程可在几秒钟之内完成。Ripple引入了一个“共识(Consensus)”机制,通过特殊节点的投票,在很短的时间内就能够对交易进行验证和确认。

 

4)Ripple客户端不需要下载区块链,它在普通节点上舍弃掉已经验证过的总帐本链,只保留最近的已验证总帐本和一个指向历史总帐本的链接,因而同步和下载总帐本的工作量很小。

 

5)Ripple无需也不能挖矿。

 

6)Ripple币的总量非常不能增加,而且只能递减。该公司已经创造出了1000亿个单位的Ripple币,计划最终向外发行75%的Ripple货币供应,并承诺永不增发。用户在进行每次交易时要花费一定的Ripple币(金额非常非常低,大约是1/1000美分),这个交易费不交给任何人,只是凭空消失。因此Ripple币只会越来越少,但减少的速度非常慢。

 

(3) Ripple共识算法

 

Ripple共识算法,使一组节点能够基于特殊节点列表达成共识。初始特殊节点列表就像一个俱乐部,要接纳一个新成员,必须由51%的该俱乐部会员投票通过。共识遵循这核心成员的51%权力,外部人员则没有影响力。由于该俱乐部由“中心化”开始,它将一直是“中心化的”。

 

除了以上的主流共识机制,还有poet共识算法(Intel的intelledger区块链共识算法,核心是用intel的支持sgx技术的cpu,在cpu的受控安全环境下随机产生一些时延,而且cpu会给这个时延一个证明,谁的运气好时延就短,谁就能抢得记账权,以这种方式避免挖矿)、Tangle(一种物联网IOT行业的加密货币IOTA的共识机制)、dBFT(国内区块链小蚁的共识机制)以及其他一些共识机制(大部分是整合改进前面的四种主流共识机制)等。

4. 大型机构/团体的进展情况

区块链的主要应用范围可参看《区块链:新经济蓝图及导读》和英国政府发布的区块链白皮书《分布式账本技术:超越区块链》 。

虽然截至目前为止还没有有影响力的商业应用出现,但是由于区块链潜在的广阔应用前景,有一些大公司或团体开始着力研究自己的区块链平台或基础设施。下面几个是最有影响力的几个。

 

4.1 超级账本

 

超级账本项目是IBM和Linux基金会为首的40家公司(截至到2016年3月)共同推出的区块链基础项目,由于参与者都是来自于各行业的巨头,并且该项目也许会成为未来企业级区块链技术的底层架构基础。据之前的采访,超级账本会运营开源比特币区块链的概念。

 

4.2 Azure BaaS

 

Azure BaaS是微软公司推出的区块链即服务的解决方案,作为一种“沙盒”,其合作伙伴可以在微软提供的这个低风险环境中交互不同的技术,从智能合约到基于区块链的纳税申报服务。该方案主要是基于以太坊只能合约的基础上进行完善的。

2016年4月4日,微软与R3区块链联盟达成战略合作协议,帮助其开发区块链技术。

 

4.3 R3 CEV

 

R3 CEV是由43家银行等金融机构组成联盟投资的区块链初创公司,致力于将区块链应用到银行等金融机构。但由于区块链中金融数据、金融业务运行机制等特定,2016年4月5日R3 CEV宣布他们正在研究一种分布式账本技术,取名Corda,是一个分布式账本平台,彻底记录、管理和同步监管金融机构的金融协议,但该技术并非比特币所推广的无许可交易账本。

 

Corda是解决当事人和交易之间达成的共识,但不是针对所有的参与者,这个设计元素是和公共区块链技术不一样的。Corda并不会有数字货币,且设置有监管者。

 

4.4 以太坊

 

以太坊(Ethereum)是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用。 Ethereum可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产。

 

注释:

 

①. 德勤一直以来,对于区块链在金融行业的应用主要是从四个方面着手研究,即金融机构的反洗钱(AML)和了解你的客户(KYC)领域的应用、在证券结算和清算领域的应用、在代理投票领域的应用、在公司行为方面的应用(主要是业务流程的自动化和决策流程的缩短)。

②. 盲签技术是一种特殊的数字签名类型,只有消息的发送者希望发送的消息由签名者签名,但只有发送者可以看到明文消息的内容,签名者无法得知明文消息,并且签名者不能将消息和签名联系起来,即不能追踪到签名,但其他用户可以验证消息是由签名者进行了签名的。盲签技术具有很好的匿名性。

③.拜占庭将军问题简言之就是在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下达成一致的协议。

④. 群组签名即在一个需要保密的数据上进行运营多个私钥进行签名,只有拥有多私钥对应的多公钥同时进行解签,才能使用该数据。

⑤. 德勤认为的区块链技术特点主要是非中心化、无需信任、集体维护和可靠数据库;R3 CEV认为区块链的主要特征为共识、确认、唯一性、不可变和验证。

⑥. 脚本就是一种比较简单的计算机语言,通过编写一段脚本可以实现各种各样的约定和规则。

⑦.区块链分叉:由于区块链的分布式网络结构,所以不同副本之间不能总是保持一致。区块有可能在不同时间到达不同节点,导致节点有不同的区块链视角。解决的办法是,每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块链,也就是最长的或最大累计难度的链。

跟区块链分叉还有一个相关概念区块成熟时间(Maturation Time),是指矿工产生一个新区块得到25BTC收益后,要等过了100个块后,才能使用这些币;这个100区块时间,即收到100个确认的时间,就是区块成熟时间。为什么要设这个时间?如果这个区块在分叉时变成了孤立区块,25个BTC的收益将消失,如果矿工挖到比特币后可以马上花掉,就会造成后续的一系列接收者损失比特币,因而设定了100个确认的限制,在这之后产生分叉的可能性非常小,即使产生分叉,也只会影响矿工收益,不会影响到其他人。

⑧.Merkle树:Merkle树是一种哈希二叉树,它是一种用作快速归纳和校验大规模数据完整性的数据结构。这种二叉树包含加密哈希值。在比特币网络中,Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径。生成一棵完整的Merkle树需要递归地对哈希节点对进行哈希,并将新生成的哈希节点插入到Merkle树中,直到只剩一个哈希节点,该节点就是Merkle树的根。在比特币的Merkle树中两次使用到了SHA256算法,因此其加密哈希算法也被称为double-SHA256。

⑨. 支付验证有别于交易验证,支付验证只判断用于“支付”的那笔交易是否被验证过,并得到了多少算力的保护(即多少确认数);而交易验证非常复杂,涉及到验证是否有足够的余额可供支出、是否存在双花(同样的一笔钱花费两次,也叫双重支付)、脚本是否能通过等,通常由运行完全节点的矿工完成。

⑩.Coinbase交易:Coinbase交易也称创币交易,是每个区块中的第一笔交易。是用来奖励矿工们所做的贡献的。与常规交易不同,创币交易没有输入,不消耗UTXO。它只包含一个被称作coinbase的输入,仅仅用来创建新的比特币。创币交易有一个输出,支付到这个矿工的比特币地址。

 

5. 参考文献

 

中本聪:一种点对点的电子现金系统

以太坊:下一代智能合约和去中心化应用平台

英国政府:分布式账本技术:超越区块链

几种盲签方案的研究综述

区块链:新经济蓝图及导读

说明:文中有些图片来自于互联网,感谢原创者的贡献

 

来源:谭昶 作者:谭昶

来源URL:http://www.360doc.com/content/16/0503/20/29322182_555998433.shtml