作者简介:
吕旭军(Jack Lu)
网录科技创始人,首席执行官/CEO,原Factom(公证通)联合创始人,首席技术官,北京大学,俄亥俄州立大学。经济学、计算机硕士,MBA。20多年互联网及软件开发和管理经验。在美国、中国和欧洲都有多次创业经历。
杨涛
网录科技产品总监,专注于区块链应用产品设计。在管理软件、互联网领域有多年项目及产品实践经验,擅长商业系统规划与设计责编:景琦,欢迎关于区块链领域的技术投稿、约稿、给文章纠错,请发送邮件至[email protected]
比特币的成功,区块链概念的火热让基于区块链的分布式账本技术被众多国家的*银行视为国家数字货币的重要技术选择之一。我国央行也积极进行区块链技术的探索,国家数字货币项目组也正式成立并高举招聘大旗。从全球范围来看,英国央行步伐稍快,已经完成了一版被称为RSCoin的分布式账本数字货币系统概念证明。本文将基于英国发表的*银行数字货币白皮书,对其原理和机制进行解读,能够对国内的区块链从业者有所启发。
*银行发行数字货币的目标各有不同,但是需要遵循什么原则几乎出奇的一致:数字货币的发行量和发行过程不能类似比特币一样不受*银行的控制,数字货币不影响目前*银行——商业银行的货币发行二元机制。从技术层面上看,目前比特币最大的局限,交易吞吐量是重点需要解决的问题,比特币网络支持的交易量为7笔/秒,与其相比现实中的运行的支付系统,PayPay每秒可以处理100笔,Visa每秒可以处理2000-7000笔,国内的支付宝双11的峰值早已大于5万笔。从技术上来说由于业务逻辑的复杂程度不同,应用环境不同等因素,单纯对比吞吐量并没有实际的意义,但从实际应用来看,7笔/秒的交易是远远无法支撑*银行的数字货币系统。
基于以上的原则,RSCoin的最终目标是提供一个由*银行控制发行的性能优越的数字货币。为了实现这一目标,RSCoin在设计过程中充分借鉴了各类数字货币、信用卡等的机制,打造了一个独特的数字货币原型。主要体现在几个方面:
1. 双层链架构
2. 改进版的2PC共识
3. 交叉验证机制
下面我们将详细分析这一货币原型的原理和机制。
整体结构
双层架构(摘自原文)
首先RSCoin将区块分成了两层,高层级区块(higher-lever block)和低层级区块(low-lever block),高层级区块由*银行控制,主要职责是:1)控制货币的发行2)节点的授权、审查和激励3)整体账本的维护。但是不处理具体的交易。低层级区块由商业银行或央行授权的机构维护,每个节点被称为” mintette”,节点的主要职责是:1)处理用户的交易请求并验证合法性2)记录交易并更新账本3)相互交叉验证。这一双层设计并非RSCoin的首创,作者提到是受到了Factom(公正通)设计的启发。除此之外与比特币、以太坊等数字货币架构最大的不同是各节点之间并不同步交易数据,相当于每个节点有一个自己的链条,只是链条中包含了其他节点链条的信息以进行交叉验证,一段时间的交易统一合并到高层级区块中。这样做很重要的原因是大大降低了节点之间通信的负荷,对提升性能有较大的帮助。
共识算法
影响比特币吞吐量很重要的原因是比特币采用的工作量证明机制(POW),由于比特币是一个开放网络,基本假设是诚实节点和作恶节点都可以随意进出这个网络,为了避免遭受女巫攻击,通过算力的竞争来获得记账的权利是保证整个网络安全的有效方法。而在RSCoin中这个假设变为:央行作恶的可能性很小,其他节点都是央行授权并已知的节点。在这一假设下,对于系统的整体安全的保障要求可以相对降低,设计上更偏向于性能的考虑。
RSCoin把自己的共识机制称为改进版的Two-Phase Commit,首先节点并不需要“挖矿”,也就是不需要进行Hash随机数计算。任何交易系统最重要的要求之一是避免“双花”(同一笔钱被花了两次),“双花”的一种情况是用户有意或者无意将同一笔资金提交了两次交易,系统没有识别并认可了这两次交易;另一种情况是恶意节点或者用户攻击系统,对账本进行控制,让系统接受了两次交易,或者直接修改账本。严格来看工作量证明机制本身并没有直接解决第一种情况,而是为了第二种情况设计的。上面提到了RSCoin的假设情况没有 比特币那样恶劣,因此并不一定需要使用工作量证明来避免第二种情况的双花。解决第一种情况的双花最简单的方法就是交易请求时检查任何一次交易的输出至多只能基于一次其他交易的输入。对于这一点RSCoin仍然采用了比特币UTXO(unspent transaction output)的模式来进行记账,这里的output是相对于上一笔支付的付款方而言的,对于收款方则是input,为了避免混淆,下文中将统一用针对付款方而言的输出(output)来表示该内容。
传统记账模式
UTXO记账模式
这里,简单介绍一下UTXO模型。传统的记账模式与UTXO记账模式,二者的区别是传统模式通过交易记录与余额的对账保障余额的准确,在执行支付时只需判断余额是否足够,不需要重新计算余额从何而来。UTXO模式下,余额是多个上一笔支付方作为标记的来款(output)之和,支付时需要被花费的来款被打上自己的标记成为收款方的来款(这种模式非常类似于银行汇票的背书转让:每次转让签上转让方的名字,以此传递)。在这种模式下,避免双花的方法就是检查本笔交易相关的UTXO是否被其他交易花费。
RSCoin共识过程
下面,我们详细介绍RSCoin的共识过程。
首先为了提升性能,交易并不向全网广播,而是将交易随机分配到不同的节点处理,每个节点处理一部分交易,但每一个交易不会只有一个节点处理。需要提及的是以太坊提升性能的改进方案中已经提出过分片(sharding)处理的理念并将在新版本中实现。
简要介绍RSCoin的一些标识符号和定义。
- addr代表地址,也就是账号
- addrid代表与该地址有关的某一笔输出,addrid由交易的hash(用tx表示),输出地址的索引(用i表示),交易的值(v)组成。
addrid被记录在三个表中分别是UTXO list,代表所有未被花费的输出,pset list代表某段时间内已关联交易但未记账的UTXO,txset list代表记入账本的交易。简单来说三个列表分别记录同一笔资金在一段时间内的三个不同状态:未花费、已花费未记账、已记账。每个列表中包含了一段时间内的每一笔资金。
整个共识过程被分成为两步。
第一步发生在用户与节点之间,用户提起交易并通过地址索引(中心化的服务)自动找到该交易中所有UTXO对应的输出地址的管理节点(owner),不同的地址对应不同的管理节点,地址索引是一个中心化的服务,便于用户快速找到不同地址对应的管理节点。管理节点将对用户提交的交易进行检查:交易的合法性、地址是否由其管理、该地址对应的UTXO是否双花。检查双花的具体过程是:首先验证该地址下的输出未被花费(addrid在utxo列表中)以及该地址下的输出没有与其他交易关联(addrid不在pset列表中);如果验证通过,该节点将addrid从utxo列表中放入pset列表中,意味着这笔addrid已经与该笔交易关联,如果其他交易进行验证时会发现这笔addrid已经双花。从全局看,如果所有负责节点中的多数返回确认信息,意味着UTXO双花检查通过,用户将交易以和带有所有确认节点签名的结果发送给收款地址对应的管理节点。
第二步,收款地址的管理节点首先确认该地址归其管理,然后检查是否所有的输出都已经被多数节点确认以及他们的签名是否正确。如果检查通过,节点将这些输出加入他们的utxo列表(成为新的UTXO)并将交易加入txset列表。节点随后将通知用户“交易将被加入高级区块中”(如果没有加入,用户将以此为证据问责节点)。一段时间后,所有的节点将txset列表发送给*银行进行合并。
在交易过程中,节点之间并没有直接通信,而是在用户和节点之间完成,这降低了网络传输的负荷,提升了RSCoin的整体性能。
交叉验证
由于每一个节点有自己的链条,RSCoin设计了交叉验证的方式确保整个系统的整体性。节点进行每一笔交易的相关操作都严格按顺序产生日志,当节点完成一个区块时,日志和前一个区块头的Hash被作为自己的区块头。在节点进行交易的对外通信时,会将区块头作为签名信息的一部分进行发送,这些信息会被交易相关的节点获得。当一个节点完成一个区块时,节点的区块中还需要同时包含自己的和已获得的其他节点链条的最新区块头。这样低层级链的一个区块由这几部分构成:b = (h,txset,σ,mset),h代表区块的hash,txset交易列表,σ代表节点签名,mset代表其他节点的最新区块信息。这样不同节点链“你中有我,我中有你”完成交叉验证。
白皮书中也分析了交叉验证保障的安全性,结论是当分片(shards)越多时,系统不安全的概率越高,系统实际运行时效率和分片数量需要进行平衡。
高层级链
高层级链合并所有节点的交易后,一个区块由如下几部分构成:
他们分别代表区块的hash,交易列表,央行签名,下一个区块授权的节点。高层级链负责货币的发行,发行数量和接收方由央行控制,产生的过程是产生新币的同时转移到需要接收的银行地址。控制高层级链的*银行通过记录每个节点在交易的两个步骤中发挥作用的次数以及每个节点的日志对节点进行费用奖励。
测试结果
白皮书中对两种交易在局域网和广域网条件下进行了吞吐量测试,并且选取了一个输入两个输出,两个输入两个输出两种交易模式,测试结果如上图(摘自原文)。测试结果还反映吞吐量随着节点数量的增加直线上升。
未来拓展
由于目前描述的RSCoin只是一个最小的概念版本,在RSCoin白皮书的最后,作者在几个方面提到了RSCoin可能的拓展性。
- 剪枝:为了防止央行的账本过大,可以由央行对一些小额交易进行统一汇总轧差,将最终轧差的结果记录到链上,当然这样做的前提是*银行是完全诚信的。需要说明的是主要国家现行的央行清算体系也是基于对央行的信任和彼此的对账,而对账过程正是清算中效率较低的部分。如果进行剪枝,对账就是必要的。
- 节点激励:对于节点的激励可以引入类似POS(权益证明)的机制,各节点存入货币在央行并根据存入数量的多少安排交易的处理数量,如果存在错误行为将从这些预存的货币中扣除一定金额作为惩罚。
- 多种货币平台:作者提到了一种大胆的设想,不同的*银行都是用同一个平台发行不同的数字货币。这样更利于跨境的资金清算,减少目前比特币等数字货币面临的夸币种交易无法直接进行的问题。但笔者认为这完全是一种理想,货币关系国家安全和利益,方便和效率在国家利益面前不值一提,统一货币发行系统就像统一货币一样困难。
无论如何RSCoin结合主权*对于货币体系的要求,对于性能的要求。结合了区块链和数字货币领域的多种创意和经验,提出了一套适合*银行发行数字货币的框架,并且在原理分析、实验测试等方面展现了严谨的态度和科学的方法。
本文主要基于英国国家数字货币原型白皮书撰写:
“Centrally Banked Cryptocurrencies”by George Danezis and Sarah Meiklejohn