作者丨邓明
编辑丨Cindy
当互联网金融遇到区块链,会擦出怎样的火花?
本文根据邓明在由InfoQ举办的2016 ArchSummit 全球架构师(北京)峰会上的演讲整理而成。
大家好,我是国付宝的CTO邓明。很荣幸参加本次架构师峰会,跟大家分享区块链的主题。我分享的副标题叫做“成熟技术也能激发业务变革”,可能大家会问,区块链是最近两年出来的新技术,怎么会是成熟技术呢?后面我将会展开谈谈原因。
先简单介绍一下国付宝的背景。国付宝是2011年成立的,其前身是商务部旗下的一个支付平台,独立出来后跟海航集团合资创办了国付宝。国付宝也是国内最早做P2P网贷行业支付的厂商,我们从2012年开始就涉足这个行业,有多年的业务背景。
今天的演讲将会从三个方面展开。首先是介绍区块链的来源及特点;其次会通过金融行业的一些参考案例了解一下区块链技术的特点;最后会介绍一下我们在互联网金融领域的区块链创新实践和想法。
区块链的来源及特点
讲到区块链的起源就不得不说到比特币。正是比特币的创始人中本聪,在一篇关于比特币的文章中提出了区块链的思想。但是当时没有提到区块链这个词。
下面这张图是比特币自发行以来的价格走势,大家可以看到,中间有很大的价格起伏,近期的价格稳定在人民币5000元左右。这个价格是上周从火币网上查到的。对于一个完全没有任何实物资产支撑和机构信用背书的数字货币,能达到100亿美元的总市值,不能不说是一个奇迹。
那我们看看比特币做了什么,让大家对他有这么大的信心。
简单说,比特币颠覆了传统的支付流程。如图所示,传统电子支付过程,是付款方和收款方都在某个中间机构开户,这个中间机构可能是银行,也可以是第三方支付;付款方发起支付指令后,资金从付款方的账户被划转到收款方账户。跨行支付其实本质上也是这个过程,只是中间环节更多了。
比特币的实现中,利用区块链的技术完全颠覆了这个过程。还是付款方和收款方,在比特币中,只要付款方生成一条付款信息,说明自己把钱付给了谁,然后用自己的私钥进行签名,再把签名之后的付款信息在网络上进行广播,就可以了,不需要中间机构;
被广播的信息会被比特币的参与者,又叫矿工,所接受,付款方和收款方本身也都可以扮演矿工的角色,为什么他们被称作矿工,后面会有介绍;所有的矿工都可以收集网络上广播的签名交易信息,然后一起维护到一个按照时间顺序串接在一起的账本上,这就是区块链;一旦交易被成功记录到区块链中,这笔支付就完成了。
大家看到,在这个过程中没有开户,没有中间机构,没有复式记账,钱就转过去了,是不是很神奇?
但是这里面有几个问题:大家一起记账,怎么保证没有记假账的?到底以谁记的帐为准?怎么避免同一笔比特币被重复消费,也就是“双花”?
我们再来看看这个转账过程的一些细节。
前面我们提到,把账本信息按照时间信息串到一起,形成链式数据结构,就是区块链看似很简单,但是为了做到交易信息记录的准确,其实它背后运用到了更多的技术手段。
首先,是非对称加密技术,简单说就是用私有密钥对交易信息签名,然后必须用配对的公共密钥验证签名,私用密钥的使用者必须是付款人。
其次,被签名的交易信息在网络上进行广播,所有参与到比特币网络的人都可以接收到这笔交易信息,并且可以对交易信息进行验签,确保交易是合法的,这解决了第一个避免记假账的问题;接收到交易信息后,大家会按照约定的规则生成区块,就是一个数据块,这个数据块中包括所有的交易明细信息,按照merkle tree的方式组装起来。
因为所有人都可以组装区块,那就带来第二个问题,合法的区块链只有一条,交易也只能记录一次,到底以谁记的账为准呢?这就引入了共识机制,简单说就是大家一起做事,用一种办法决定到底听谁的。
比特币中的决策机制叫做PoW工作量证明,就是让大家在区块头中,结合上个区块的Hash值,也就是区块箭头,以及本区块的Hash值,试算一个随机数,这个随机数结合前面提的两个Hash值做SHA运算后,结果必须要小于某个数值。大家知道SHA本身就是Hash算法,其结果是没有规律的。
想要Hash计算的结果满足某个要求,唯一的办法就是不断地试,这个不断尝试的过程就被称作挖矿,挖矿的人当然就是矿工。当然,挖到矿以后也是有奖励的,这个奖励就是直接赠送比特币,所以大家都会很积极地参与挖矿。
区块生成以后也要发送给大家验证,一旦网上有相当的矿工验证过区块以后,这个区块就被正式接纳到区块链中,成为区块链中合法的一环了。然后这些新的区块信息会通过P2P的通信网络在网上传播,让大家都同步到最新生成的区块,并保持区块链的一致性。
上面这一系列过程完成以后,比特币的支付也就完成了。
讲完上面的过程大家可能比较奇怪,这里面怎么没有账户余额的变化,支付就完成了?这也是比特币区块链里很有意思的地方,下面会结合”双花”问题谈一下。
做过支付的人都知道,在支付过程中需要避免“双花”问题,就是说同一笔钱不能被花多次。在传统的支付系统中,要避免双花,通常是利用中心系统的事务处理,一借一贷来达到这个目的。在区块链中,大家都是在分布式记账,怎么避免双花呢?我们看看比特币怎么实现的。
前面我们提到,矿工在生成区块的时候,会从网络上收集交易信息,交易信息中包含了付款人的私钥签名;矿工首先会验证签名是不是正确的,只要是正确的签名就被认为是付款人认可的支付;然后矿工会从以前的区块链中追溯,看看付款人这次消费的比特币是不是以前没有被消费过,这就引入了UTXO的概念。UTXO表示未被消费的交易输出,也就是付款人可用的比特币余额。
由于比特币中所有的消费记录都可以从区块链中查到,而且记录越久的区块越不可能被篡改,这就保证了每个矿工都可以独立判断是否发生了双花,并通过检查避免这种情况的出现。这种方式一方面解决了“双花”问题,另以方便,每个人的账户余额不是记录下来的数字,而是通过UTXO计算出来的。这也是为什么将交易记录到区块链中,支付就完成了的原因(并不是所有的区块链都是这种方式)。
当然,因为是大家同时记账,有时会发生区块链分叉的情况,也就是说同时有两个或多个矿工记账成功的情况。发生这种情况时,一般大家会分别在每个分叉上继续记账,直到某个时刻某一条分叉明显比其他分叉长,这时就抛弃其他分叉,都回归到最长的分叉上,确保只有一条合法的区块链。
通过前面的讲解,大家会发现区块链技术其实是一系列技术的组合,包括区块加链的数据结构、非对称加密算法、时间戳、Hash算法、工作量证明等。这些技术的大部分在比特币出现的前十年就已经陆陆续续出现并比较成熟了。
比特币把这些成熟的技术经过一系列巧妙地组合,最终给大家带来了颠覆式的产品,这个产品就是没有任何政府背书,也没有任何实物抵押的加密数字货币,并且已经产生了100亿美元的天价市值。从这里面我们也能看到成熟技术背后的巨大潜力,让我们反思是不是把那些我们已经习以为常的技术的潜力发挥到了极致。
前面通过比特币区块链的介绍,说明了一下区块链的运行原理。其他区块链的实现跟比特币可能有些不同,比方说共识算法不一样,区块头定义不一样,或区块大小不一样,但是基本原理都是类似的。
总结一下区块链的几个特点。
区块链按照运用的范围通常会被分为公有链,联盟链和私链三种类型。公有链是指所有人都可以参与的区块链,比特币就是典型的公有链;联盟连通常是某个行业内部的区块链,方便同行业的不同企业之间协同合作,不是谁都可以加入的,后面我们将要介绍的R3就是典型的金融行业联盟链;私链通常是某个企业内部的区块链,目前这方面的应用比较少。
不管是哪种区块链,都具备几个特点。
首先是去中心化
,或者叫做去中介化,这两个说法是有点差别的,去中介化可能更准确些,在比特币中就很典型,不需要任何中介机构就能完成端到端的汇款。
其次是稳定可靠
,这很容易理解,因为没有一个中心化的系统,所有参与方的业务逻辑和数据都是完整的,任何一个点的故障都不会对整个系统正常运行造成影响。
再次是公开透明不可篡改
,这也很容易理解,区块链也叫分布式账本,大家都有账本的全部信息,信息都被签名确认,不能被篡改。信息虽然是公开透明,并不代表没有隐私,通过一些技术手段也可以达到保护隐私的目的。
最后是自治化
,这可能是区块链使用的最高境界了,通过在区块链中记录智能合约,自动执行智能合约,达到自治的目的。比特币中也有部分智能合约的实现,比方说约定到达某个期限以后才把比特币转给收款人。
金融领域参考案例分析
下面将介绍一些金融领域的区块链案例,因为国外区块链方面的尝试开始比较早,这里的案例主要是国外的案例。但是基本上这些案例在国内都有厂商在做不同层面的尝试了。
英格兰银行RSCoin
首先介绍的是英格兰银行RSCoin的案例,RSCoin的论文去年就在网上发表了,有兴趣的同学可以自己下载学习。这是一个央行发行数字货币的尝试。英格兰银行有一份研究数字货币的白皮书,里面提到如果央行发行的数字货币占到GDP的30%,就能对对GDP带来3%的增长。所以不光是英格兰银行,包括中国央行在内的很多央行都在研究发行数字货币的方案。
在RSCoin的体系中,将记录区块链的角色分为2种:bank,也就是中央银行;还有mintette。Bank向mintette发数字证书,类似PKI证书体系,因此是一种联盟链。
Mintette负责生成lower-level block,并上传给bank生成higher-level block。Mintette每隔一段时间(这段时间叫做epcho,时长可变,每个mintette都可能不一样)生成一次lower-level block,mintette之间的block可以有交叉引用。这样做是为了打破之前说的比特币区块链每秒7笔的限制。
Mintette每隔较长时间(Period,这个时间是固定的)将lower-level block上传给bank,由bank生成higher-level block,并构成主区块链。
在这个体系下,货币的发行是由bank完成的。
RSCoin通过mintette实现了lower-level block的记账,但是每个mintette记录lower-level block的时间间隔都不一样,在这种情况下怎么避免双花呢?RSCoin里设计了一套类似两阶段提交的方式来避免双花。
在RSCoin的交易体系中,利用了addrid的概念,addrid表示了交易方的公钥以及交易信息。每个addrid分配给一组mintette。在交易时先通过公共服务查询input addrid的归属mintette,并确定数字货币没有被消费;然后系统会通知output addrid的mintette确认交易,等到mintette都将交易记录到block中以后,就完成了交易。
在RSCoin的模式下,没有明确说明只有商业银行才可以承担mintette的角色,因此第三方支付理论上也可以作为mintette记账。
大家看到,区块链不但可以用来发行没有政府背书的电子货币,也可以发行有央行背书的电子货币,可见其背后的创新空间非常大。
R3 CEV区块链创业公司
接下来介绍的是R3 CEV,这是一个在金融领域很有名的区块链创业公司,西方很多大型银行都加入了他们的区块链联盟。国内今年有平安集团、招商银行等大型机构刚刚加入R3。它的愿景是基于类似区块链的技术,构建一个叫做Concord的平台,帮助银行改善贸易融资等业务的处理效率。
Corda是Concord中的关键组件,是一个记录和处理金融智能合约的分布式账本。Corda的白皮书已于今年8月份发布,R3也宣布今年11月底将Corda的代码开源。
Corda有几个关键的设计思路。
首先,它认为数据的一致性可以降低业务的复杂度;了解金融业务的同学可能知道,在金融系统的实现中,跨机构的业务处理最复杂,通常会涉及到多次数据交换和数据比对,所以如果采用分布式账本技术做到数据公开透明,可以降低业务复杂度。
其次,它认为金融合约的很多内容不能做全部信息的全局共享,所以它设计了一些特殊的机制确保只有合适的人才能看到所有信息。
最后,在记录智能合约的时候,Corda在区块链中同时记录了智能合约的代码程序,和合同文本,方便人的阅读。
大家可以看到,Corda其实在比特币区块链之外,针对传统金融业务的特点做了很多优化和改造,让其更适合在一个受监管的环境下开展合法业务,跟比特币的完全不受管制的使用环境和设计理念已经完全不一样了。
日本瑞穗实业银行
日本的瑞穗实业银行希望能构建一个系统实现跨境证券交易的自动化处理,这是一个跨企业的业务合作流程。起初他们尝试建立一套传统的IT系统,但是发现这中间的投入和复杂度很高:需要构建独立的IT系统,需要构建独立的团队,需要对现有的业务流程做很大的改造。
后来他们利用区块链的方式构建了新系统,减少了交易状态和数据的核对工作,也减少了人员组织上的开销,大大提高的交易的处理效率。
从这个案例里我们会发现,传统的跨企业系统集成思路会带来很大的系统开销和组织开销,区块链技术的去中心化特征通常为我们带来了解决问题的另一个思路。
The DAO区块链初创项目
这是另外一种类型的区块链初创项目。The DAO是构建在以太坊之上的一个Dapp(去中心化应用),它的愿景是实现“去中心化的自治组织”。DAO成立之初就引起很大关注,通过众筹得到超过1.6亿美元的资助,号称是全球最大的众筹案例。我们看看为什么大家对它有这么大的热情。
DAO本身没有业务,它提供了运行业务的平台。以其中的一个项目,Mobotiq为例。Mobotiq是一个共享电动汽车的项目,发起者首先在The DAO平台上发布项目的建议书,对项目感兴趣的人可以参与众筹;参与众筹的人在项目实际运行中拥有投票权,可以投票确定项目资金的使用、具体事项的决策等;
等到共享电动汽车投入实际运行,用户支付的也是以太坊的电子货币,这些货币可以投入公司持续运行,也可以用来回馈投资者。这里面所有的投票决策规则、支付规则等,都是用代码签名写入到区块链中的智能合约,实现了一个没有公司实体的公司。
参加The DAO项目的人,不用互相认识,甚至有可能彼此感觉不到对方的存在,只要相信区块链里记录的信息,包括智能合约信息,就可以一起经营一个类似于公司的实体。不能不说这是一个很大的变革。
当然,虽然DAO吸引的投资很大,但是现在也还只是一个实验性的项目。不过这个案例也让人从另外一个侧面看到了区块链技术改造现有业务模式的潜力。