中心化银行数字货币RScoin

RScoin总的特点:

是英格兰银行的中心化银行数字货币的方案,为了解决了比特币的计算消耗能源和可扩展(主要是交易速度)的问题,由中央银行控制货币发行,依靠分布式的mintettes解决double-spending问题,同时有透明和可审计的特点。

bitcoin的缺点:

1.交易速率低(一秒钟7个交易);

2.由于工作量证明,消耗很多能源;

3.货币的供应不灵活,不能适应宏观经济,同时波动太大。

RScoin的特点:

1.解耦了货币供应和账本维护;

2.中心化的发行货币方式方便政府发行货币;

3.透明的货币政策,可查看的交易和价值转移,匿名,以及区块链和数字货币的其它特点;

4.中心化的方式可以授权和监控mintettes的行为;

5.根据测试,30个mintettes,提供2000笔/S的交易容量,少于1s的交易速度,同时交易容量随着mintettes的增加而线性增加。

6.激励mintettes的方式更好,未来可能考虑采用商业银行充当mintettes;

7.不仅是数字货币,也是一个框架,可以用到其它的领域;

交易部分(对比)

Bitcoin的交易:

名词解释:

1.Keypair:pk,sk。Pk是公钥,匿名特性,存储地址,sk用于加密信息。

2.Utxo:上一个交易的交易输出,作为所有者的余额组成部分,不能被分割,被所有者锁住,如果没有被消费,可以作为所有者下一个交易的输入。

 

交易例子:

一个user创建一笔支付0.7btc给商家的交易

1)组织交易,假如一个user有1个btc,由0.5,0.5的utxo组成,需要支付0.7的btc,那么就是这样的流程:找到0.5和0.5的utxo作为交易输入;输出是两个,0.7btc支付给商家,另外0.3btc返回给user,交易输出可以作为下一笔交易的输入的utxo。交易信息是一个包含多个输入和多个输出以及其它信息的数据结构。

2)他需要通过某种途径广播到足够多的节点,让节点验证交易。utxo输入需要user的解锁脚本来解除锁定,以确定user对utxo的所有权,在输出的时候,再把输出锁定在商家的地址上。同理,当商家需要使用这个utxo时,他需要解锁这个utxo(用pk进行锁定,用sk解锁)。

3)获得记账权的miner将验证过的交易包含到区块中,并广播这个区块(包含验证条件),再经过几次确认之后,就会成为总账的一部分,并且新产生utxo可以被所有者使用。

此Miner获得交易费用和挖矿奖励。

 

RSCoin的交易:

RScoin的组成:

由central bank和mintettes构成,central bank完全控制货币产生(关于货币政策,并没有描述,这个是由各个银行自己控制的),mintettes负责维护交易账本,包括收集交易,校验和包含到区块中,不同于比特币的miner,mintettes由中央银行授权收集交易。

Mintettes产生lower-level的block,(每一个block的产生时间叫epoch,各个mintette的epoch可能不同),并在一段时间之后(这个时间是period,可以设定),提交给中央银行,生成higher-level的official blocks,供外部用户查看。

 

 比特币是靠工作量证明来防止女巫攻击,但是RSCoin的mintettes由中央银行授权,因此可信度高,所以可以采取适当调整之后的Two Phase Commit(2pc)的方式来实现。

注:大规模的p2p系统面临着有问题的和敌对的节点的威胁,为了应付这种威胁,很多系统采用了冗余。然而,如果一个有恶意的实体模仿了多个身份,他就可以控制系统的很大一部分,破坏了系统的冗余策略,中央授权可以有效防止。

比特币是靠非常严格的时间排序来防止double-spending,但是这个对于RSCoin来说是不必要的,只需要保证任何一个交易的输出最多只能作为一个交易的输入就够了。注:因为RSCoin没有分叉一说。这个特点跟不需要工作量证明相关

 

 
   

 

 

实现共识:

A.  威胁模型和安全特性:

威胁模型:

  1. 大多数mintettes都是诚实的;
  2. Mintettes都不诚实;这个貌似没特别证明,可能隐含在一些特性中了。

安全特性:

1.no double-spending。

2.uer如果收到了mintette的确认,那么这个交易就不能被抵赖。

3.User能确定一个mintette的潜在行为和以前的同一时间的行为匹配。

4.每个人都能审计mintettes的交易,所以mintettes事后不能修改,忽略和插入交易。

5.Mintettes的不作为行为将会暴露出来,也不会获得交易费用。

 

B.  基础的共识协议

  1. 交易校验者(mintettes)的区域被分成了很多部分,每一个mintette负责其中一个子集(shard)。同时,每个shard都被多个mintette覆盖,这样就会可靠安全。注:是否可以这样理解,users被分成很多块,mintette负责其中一个子集的user所发出的交易。
  2. User的每一个交易的输入都是由不同的上个交易的输出,所以输入的所有者都可能不同,同时这个交易的输出的所有者却是相同的,因为都是这一个交易的输出。所以owners(addrid)是一个含有输入mintette的集合,owners(Sout)是同一个owner。
  3. 每个mintette负责两个清单:1.未消费的的utxo,是上个交易的输出(只负责与自己相关的addrid);2.pset:用来检测double-spending,3:txset用来打包交易进入账本。
  4. 一些符号:

(addrid → (addr,v)) ∈ utxo,已经有v的value被送到addr,说明这个addrid的utxo正在被使用;

(addrid → (⊥,⊥)) ∈ utxo说明还没有被使用;

(addrid → tx) ∈ pset说明addrid的在tx的交易中被作为输入。

假设每个mintette都有详尽的utxo的清单,并且在每个period开始,pset都是空的,这样既可以开始交易了。

交易流程:

 

   

 

 

 

 

 
   


collect vote:检测每一个输入是否有被double-spending,所以user把交易送到每个含有输入的mintette,让他检查。

 

1)CheckTx检查交易的结构,包括数据组成,输入和上个交易输出是否相等,以及上个交易包括签名等的合法性。

2)如果addrid在utxo(这个utxo没有被使用,但是如果utxo正在被使用,这个时候是检查不出来的,所有要检查pset),并且没有addrid->tx没在pset中,则没有被double-spending,然后就把utxo从addrid移除,再将addrid-tx记录到pset中,然后返回给user被sk签名的交易信息。

  1. commint:如果通过上一步的double-spending检测,就会返回一个包含签名的确认信息,user就会检查所有返回的签名信息,如果正确就把所有的签名和交易(bundle of evidence)一起发送给owner(sout);这里应该用了大多数的原则,只要大多数的mintettes同意,那就是合法的。
  2. owner(sout)校验:

 

 
   

 

1)检查这笔交易的输出是不是自己的覆盖范围,校验,包括包含输入的的mintette是不是最新被授权以及他们的签名是不是正确。

2)把输出添加到utxo的list(这样就可以作为下一笔的输入了),把交易添加到txset 的list,然后给user发送一个确认,这个确认就是之前提的不可抵赖的证据(对于user来讲这个时候交易就结束了)。

3)在一个period的末尾 ,这些mintett把txset和其它一些信息发送给central bank。

注:这里应该也使用了类似比特币的解锁和锁定的方法,不然的话交易走不通,所以从整体来看,mintettes相当于维护utxo的作用,比特币是把utxo放在区块链中,RSCoin是把utxo放在mintettes中,文档中并没有完全说明这个问题。

另外:如果第一步移除了utxo的addrid,但是user并没有在第二步把交易送给sout,怎么办?

有两个特点:

a)      通信开销较小,比如bitcoin,他们的miner和server之间是持续的连接,但是RSCoin是通过user转发的。

b)      安全性:不会double-spending和不可抵赖。

 

C.  可审计

Mintette维护一个包含自己key action和通过user与自己交互的其它mintette动作的log。

Action包含query,commit,closeepoch三个关键动作。

Query:更新pset,所以这个log包含了一个utxo成为一个交易输入的过程;

Commit:更新utxo和txset,所以这个log包含了交易和对应的一些evidence,就是各个mintette的签名。

Closeepoch:每个mintette存储了一个hash链,这个链作为log当前状态的一个证据存在,hseq = H(aseq||hseq−1),即包含了当前log入口和上个hash的链头。

为了共享这个证据,mintette每次发送信息都会包含这个hash头的签名,即交易的时候的验证信息包含了这个头。所以每个mintette的hash链头都包含了自己的上一个hash头和与之交互的别的mintette的hash头。这个方案可以支持之前提的后三个特性。

       Personal audit:query和commint都有这个hash头,所以修改或者不提交或者不是当前的hash都会造成log和hash头不对应,所以有问题的mintette会被发现,也就限制他不能修改自己的log。

       universal audits exposed inactivity:主要是从2pc中间的时间间隔来讲的,最后提交的可能不够活跃,所以就暴露了。

注:文章中对以上两个audit的证明可能跟之前提到的特性有些不匹配。

大多数mintettes诚实就有了意义,从概率统计的观点来看,shard的数量越多,全部都诚实的可能性越小,所以推荐确定shard的数量,结论是mintettes的数量是M的时候,每个shard的mintette数量是Q的时候,shards的数量最优是M/Q。

 

D. 性能

1)理论分析:mintette的数量越多,每一个mintette的工作量就越小。

2)实验分析:首先是一些基础的数学运算的测试,以及构成2pc的一些基础运算的测试性能。其次做了一些交易测试,用了30个mintette,每个shard 3个mintette:在本地,广域网以及新发货币作为输入和前一个交易作为输入几种情况做了测试,结论是网络对于延迟的影响不大,在1s以内;在3个mintettes以内的时候,交易的吞吐量在400笔每秒,在3个以后,吞吐量线性增加,大概每增加一个mintette,交易量增加66笔。

 

RSCoin系统

主要针对mintettes和central bank之间的互动和整个系统的参数以及特性。

Lower-level blocks:

组成格式:b = (h,txset,σ,mset),h = H(h(i−1) bank ||h(m) j−1||otherblocksk||txset),h(i−1) bank是指上一个period提交银行的哈希值,h(m) j−1是指上一个m组的block的哈希值(一个period可能包含很多epoch),otherblocksk是指与这个mintette交互的哈希值,txset是指一个epoch的所有交易的集合,σ是mintette的签名,mset是与这个mintette交互的mintette的哈希值集合。

注:同一个shard的mintettes提交给central bank的txset应该是相同的。

 

Higher-level  blocks:

组成格式:Bbanki= (h,txset,σ,DPKi+1),

注:DPKi+1有一定的作用,比如一个mintettes在一个交易中不作为,那么就不能获得下一个period的keypair,在提交block的时候可能就不会通过,也会被发现。

1)  生产货币:tx(NULL→ addrbank)采用类似比特币的挖矿生成币的方式,用一个没有原地址的交易,发送一定数量的币给银行的地址;

2)  分配费用:分配费用:tx(addrbank→ addrm),关键点不在怎么把费用分配给mintette,而在于分配给谁,所以分配的策略是central bank有一个关于校验输入的mintettes的计数器作为分配的费用的一个依据,考虑到输出必须能作为输入才能有奖励,所以这个策略不仅激励mintette进行第一个phase的工作,也间接激励他们进行第二phase的工作。在分配的时候,也会考虑之前的工作日志,谁的行为不够积极,也会在分配的时候作为一个参考条件。

3)  关于log:日志都是发给central bank的,是否发布是个问题。假如central bank 不够诚实,user可以尝试采用广播的方式来获取分布式的log,这样user就可以校验mintettes的行为,同时可以重复操作来对比账本,可以防止银行的过失行为(具体细节不清楚)。

4)  简化区块结构:由于区块中多了一些数值,比如DPKi+1,RSCoin可能与其它的数字货币不兼容,所以通过两个交易向下一period发送addrbank和pk(具体细节不清楚)。

 

注: user和mintettes,以及central bank地位并不对等,在系统中的位置也不对等,user通过什么途径去查看交易日志?文章中说得不清楚。

 

Incentivizing mintettes:

通过适当的激励,mintettes可能会做更多的事情,比如组成更长的区块,减轻central bank的负担。

 

Setting system parameters:

可以设置epoch,period的时间,还有mintettes的数量。Period是可以设置的时间,如果时间很短的话,交易可以在较短的时间包含进正式的账本。但是为了减轻central bank的负担,period越长越好,这个并不会延长交易的时间,因为交易在包含进正式账本的时候已经确认了。Mintettes越多速度越快,但是mintettes过多,单个mintette交易费用就会变少,这样对于mintettes的激励作用就会下降。

 

优化和扩展

A修剪中间交易,为了防止交易膨胀,central bank可以把period类的头尾之内的交易去除,但是这有一个central bank 修改交易历史的风险,尽管我们可以通过action log来监督central bank的行为。

B更多的激励诚实行为,在central bank准备金,且只能校验小于准备金大小的交易数量,如果有不诚实的行为,就会受到惩罚。

C多重银行和外汇交易,如果很多central bank采用共同的框架,user就可以使用使用不同的货币,但这些货币之间并不关联,central bank也不能跟踪到别的central bank的交易。

如果要进行兑换交易,就需要一个第三方,后面的兑换流程看起来像个智能合约。

 

货币兑换

大概的情况是这样:Alice想用m单位的c1货币换回bob的n单位的c2。

 

有几个要点:

1)退货交易必须得有对方的签名,这里还包括c的签名,因为退货是需要征得别人的同意的。

2)消费交易可以附带一个只有发起方知道的pre-image x,对方必须知道x才能将发起方消费的钱释放给自己。

所以交易流程会是这样:

1)Alice首先创建一个消费m个c1交易给bob,附带有H(x)的哈希值,然后发起一个从bob那里退m个c1的退货交易。

2)Alice需要获得包括c和bob对这个退货交易的签名,使得他在t1时间之后可以退货。

3)当Alice获得他们的签名之后,他就可以把消费交易包含到区块链中了(这个时候bob如果有x的话,是可以拿到m个c1的)。

4)Bob也发起一个消费交易,同样附带有H(x)哈希值,然后也发起一个退货交易,同时获得Alice和c的签名,使得他在t2时间后可以使用退货,并将消费包含进区块链。

5)如果在t2时间内,alice出示了x并获得bob消费m个c2,那么x就暴露了,同样bob就可以用x获得Alice消费的n个c1,整个交易就完成了。

如果t2时间内,alice没有出示x,那么bob就可以在t2的时候使用退货,钱就回来了,在t1的时候,alice也可以使用退货,钱也退回来了,这个时候交易就相当于没有发生。

所以关键点是t1>t2,如果t1<t2,那么Alice会在t1的时候退货,自己消费的钱就先回来了,但是还没到bob的退货时间t2,这个时候alice还可以出示x,获得bob消费的钱,这样交易就会有问题。

 

注:这个过程中,貌似c没什么作用。

 这是我整理英文版RScoin之后的文档,英文原版:http://eprint.iacr.org/2015/502.pdf 。

 

posted @ 2016-10-12 16:43  三尺剑  阅读(3411)  评论(1编辑  收藏  举报