文档中心

文档中心
区块链基础设施Annchain.OG产品文档

 

 

序言

 

区块链是一项革命性、颠覆性的技术,我们团队也一直对区块链抱有信心,充满信仰。然而其天生自带经济属性,致使其发展坎坷曲折,到目前为止,我们没有看到一条可承载商业落地应用的区块链的存在。我们并不否认比特币、以太坊、IOTA、EOS这些伟大项目作出的贡献,我们希望站在这些巨人肩膀上,探索出一条真正高效、稳定、安全的应用承载链。本文基于DAG架构的分布式账本技术,解决区块链发展至今的去中心化、可扩展性、安全三角平衡瓶颈。

 

从Ethereum到EOS,我们可以看出是在向三角平衡问题妥协。这期间也不乏出现很多优秀的共识算法尝试在完全去中心化的情况下达成高效共识,但在我们看来仅简单共识算法的优化或修改,给区块链带不来质的飞跃,是时候突破现有区块链架构桎梏,探索一种既可以实现现有区块链实现的可信网络又可以解决现有问题的方法。我们发现DAG具有很大潜力可以做到,我们也看到了很多基于DAG的优秀项目如IOTA,Byteball等,而我们又在他们之上前进了一小步,本文提出一种DAG+智能合约的方案,使得我们平台可以承载海量DAPP,同时解决了现有区块链使用太贵的问题。

 

目    录

 

1. 背景.................................................................................................................................................................................................................................... 1

 

2. OG概览............................................................................................................................................................................................................................. 3

 

3. DAG形态............................................................................................................................................................................................................................6

 

3.1. DAG..................................................................................................................................................................................................................................6

 

3.2. Sequencer.......................................................................................................................................................................................................................7

 

3.3. 状态确定化(Fanality).......................................................................................................................................................................................... 9

 

4. Ivy.........................................................................................................................................................................................................................................10

 

4.1. 网络构建.........................................................................................................................................................................................................................10

 

4.2. 随机选择原则................................................................................................................................................................................................................14

 

5. 智能合约.............................................................................................................................................................................................................................16

 

5.1. Sequencer的生成.........................................................................................................................................................................................................16

 

5.2. 运行合约.........................................................................................................................................................................................................................16

 

6. 安全......................................................................................................................................................................................................................................18

 

6.1. 针对DAG可能的攻击方式........................................................................................................................................................................................18

 

6.2. 安全的虚拟机................................................................................................................................................................................................................21

 

7. 总结......................................................................................................................................................................................................................................22

 

8. 附录一:预言机...............................................................................................................................................................................................................23

 

8.1. 被动式预言机................................................................................................................................................................................................................23

 

8.2. 主动式预言机................................................................................................................................................................................................................24

 

9. 附录二:智能合约分片.................................................................................................................................................................................................26

 

10. 参考文献...........................................................................................................................................................................................................................28

 

1.背景

 

链状的分布式记账技术保证了交易的顺序和共识的达成,却制约了区块链性能,成为了可扩展性的最大的瓶颈。

 

目前,以比特币、以太坊为代表的绝大多数的区块链都采用了区块+链式结构,其特点在于全网的交易都在一条链上被记录。即使每个节点收到的广播交易不完全一致,但链式区块链会通过工作量证明(PoW)、权益证明(PoS)等机制让某一个节点提出的区块得到全网的共识。这种线性增长的区块链结构保证了交易的有序性,也因此能够基于这种有效性开发诸如图灵完备虚拟机的上层应用。

 

然而正是由于交易是链式的,导致后一区块必须等待前一区块形成并达成共识之后才能形成,这成为了区块链目前最大的性能瓶颈和矛盾所在。例如,虽然目前比特币的全网算力在不断增长,但这种增长却内耗在互相的挖矿竞争上,并没有为提升区块链性能做出任何贡献。区块链中各种BFT改良共识方法,随着节点数的增多,网络开销指数级增长,也没有得到很好解决。而造成上述问题的根本原因还是在于,全网在某一时刻只能对某一区块进行共识,只有当共识结束后才能开始下一个区块,线性的模型无法进行水平扩展。

 

然而采用有向无环图(Directed Acyclic Graph,DAG)的结构,可以使得多笔交易在互不干扰情形并行执行,可以把分布式账本模型从之前的“算力越大,竞争越大”转变成“算力越大,效率越高”。基于块链结构的区块链网络状态必须达成共识后才能进入下一个状态,而基于DAG的区块链中交易即共识,准确来说基于DAG的区块链是不存在共识但它的运行机制无形中使全局网络达成一种共识,本文在后续章节详细介绍。

本文在这里还要解释几个名词之间的关系。区块链与分布式账本技术,业界认为区块链属于分布式账本技术的一个分支,这一点本文也赞同。那么基于DAG结构的区块链是否还能叫做区块链,本文认为基于DAG结构的区块链应该属于分布式账本技术中与区块链平行的分支,应该称为DAG分布式账本技术,但本文作者更偏爱区块链,我们更喜欢称我们的技术为基于DAG的区块链,这里的区块链更广义些,较之之前基于块链结构的区块链有点不同,所以下文我们都称之为基于DAG的区块链技术,下文不再赘述。

 

2.OG概览

 

OG是一个拥有智能合约的DAG高性能区块链。OG底层采用了有向无环图(DAG)的账本构型,解决了现有块链区块链架构去中心化、安全、扩展性三角平衡问题。同时OG解决了DAG型区块链与智能合约的兼容性问题,能够确保在DAG结构下智能合约交易的有序性。

 

 

 

 

 

 

         图 2 OG的层次结构

 

OG具有如下特性:

 

效率:算力越大,效率越高。整个网络的交易吞吐量随着网络中全节点的加入而增加,交易的确认时间也随着全节点数量的增加而缩短,从而达到高扩展性。

 

公平:OG中没有专门的节点负责网络状态共识,OG网络中交易即共识,任何参与者既是网络使用者,又是维护者,地位平等。

 

安全:每一个交易的参与方都是前序交易的验证方并且被持续地以一种收敛的方式进行验证,要制造双花交易难度很大且成本非常高。

 

智能合约:OG通过独有的共识排序机制解决了普通DAG账本无法有序运行智能合约的问题。OG将无序的合约交易进行共识排序并上链,使得网络中每个节点上的虚拟机都有相同的运行结果和合约状态。

 

分片:OG考虑到今后规模可能会快速增长,支持基于应用的分片,实现系统的高扩展性。

 

预言机:OG通过有序的智能合约,支持线上账本与外部世界的沟通和数据调用。

 

3.DAG形态

 

DAG,作为OG的底层协议和网络构型,同时满足了去中心化和高性能的双重需求。我们基于此,提出了能够满足高性能智能合约运行的构架。这章主要介绍DAG构架。

 

3.1.DAG

DAG,英文全称是Directed Acyclic Graph,中文意为“有向无环图”。如果一个有向图无法从某个定点出发经过若干条边回到该点,这个有向图叫做有向无环图。

 

 

在DAG模型中,方框表示单元,线条表示关系,箭头表示从子单元到创世单元的方向,每个单元指向它的父单元。

 

与传统区块链不同,在DAG中,没有将交易封装成区块的概念,全网在同一时刻也不用对同一区块进行共识。DAG中的每个单元为一笔交易,交易单元组成DAG网。由于大部分交易之间并没有很强的因果关系,因此可以异步并发写入交易,极大提高了并发量,同时将交易确认时间降低到最低,解决了传统区块链的扩展性问题,吞吐量可以达到超大规模,并且可以水平扩展。

 

3.2.Sequencer

 

在传统的DAG模型中,交易之间的异步发布和验证保证了整个系统的高吞吐量,但是同时也使得各交易间的时间顺序不可靠且不可验证,这使得DAG结构上使用智能合约成为难点。IOTA尚未支持智能合约,Byteball仅支持声明式非图灵完备合约。由于交易确认的不确定性、节点同步的不确定性、网络延迟的不确定性等原因,交易的插入顺序不能保证。对于普通交易来说,顺序的前后对最终结果不会有影响,因为DAG能保证整个网络交易结果的最终一致。但是对于智能合约,顺序的混乱会导致节点间的世界状态无法达成共识。

 

分布式系统中,实现智能合约的普遍做法便是维持节点间的状态一致。传统的单链区块链如以太坊,所有的针对智能合约的操作都会以交易的形式发布到链上并被矿工记录到区块中。出块节点决定了当前块中交易的顺序,工作量证明决定了不会有太多的分叉结果,即使分叉也能保证大部分节点的选择是正确的。各个节点在经过共识后能保证自己的区块链账本内容(交易)和其它节点一致。在这个前提下,因为智能合约的操作顺序也被记录在账本上,所以各个节点在执行这些操作的时候会产生相同的结果,从而保证了合约状态的一致。

 

在DAG模型中,没有矿工统一打包交易这一步骤,每个节点对于网络的理解在每一时刻都有可能不同,这导致所有的交易呈现一个无序的状态。而无序的交易与状态一致性是互相矛盾的。这个矛盾点是制约DAG上智能合约实现的关键点。

 

为了解决无序操作造成的状态不一致问题,在继承了DAG中的交易单元与连线的模型后,我们创造性地提出了第二种单元的类型:Sequencer,这样我们的OG的组成元素即为:交易(Tx)单元、Sequencer单元、有向连线(验证)。Sequencer单元和Tx单元在DAG图中的作用是一样的,都可以去引用以及被引用,都需要被足够多的后继单元验证才能固定下来。其本质的区别在于提交人的不同以及承载的内容的不同。Sequencer的主要作用是帮助DAG网络进行交易的共识排序。除此之外,下文也会提到Sequencer会作为一个公信单元,定期进行网络状态确定化的工作。

 

 

 

如上图所示,Sequencer单元和普通的Tx单元在构建DAG的过程中的形态要求是一致的,都需要对之前的未经验证的单元(Tip[ Tip:特指目前处在DAG末端的,没有被任何其它单元验证的单元。Tip有指尖的意思。])进行验证。两者不同的是它们的内容:

 

表 1 普通Tx和Sequencer的头部信息

 

 

Trunk Hash和Branch Hash分别代表当前Tx(或者Sequencer)验证的两个Tip的哈希。普通Tx的主要内容是转账双方的地址(From和To)以及转账的金额(Value)。Sequencer不会有普通的交易转账信息,它的主要内容是合约相关的Tx的哈希值(TxSequencer字段)。为了减少系统的冗余,TxSequencer字段只会记录这些Tx的顺序和索引,不会记录Tx的完整内容。Sequencer保证了这一批Tx的执行顺序。当任意节点收到Sequencer继而执行合约时,合约相关的Tx执行顺序就依照Sequencer的内容来决定。

 

3.3.状态确定化(Fanality)

 

Sequencer除了确定智能合约交易的执行顺序外,还兼任定期将网络状态确定化的工作,防止网络被寄生链回滚。经过Sequencer验证的父单元,以及所有祖先单元的状态将被即刻确定,不能被推翻(即Finality)。

 

 

图 5 终结区:淡灰色区域为所有被S1终结的单元,深灰色区域为所有被S2终结的单元,白色是新生单元

 

4.Ivy

 

Ivy是区块链中的账本,OG中每一个节点的Ivy没有绝对的一致性,每个节点Ivy可能不太一样,但总体趋势是相同的,经Sequencer序列化后,也会确定下来一个主账本。因此OG的安全性也面临着艰巨的挑战,但OG改进了构造DAG的要求和流程,杜绝DAG构型中存在的安全隐患。

 

4.1.网络构建

 

OG网络中一个单元需要验证前序的单元,应选择几个单元为最佳,本文给出建议是2个(见后证明)。这样才能被广播到网络上成为DAG网络的一部分。为了维护这个网络的安全、公平、高效,OG综合考量了性能、安全、去中心化等因素,制定了如下前序单元的选择规则(A系列):

 

1.在满足以下规则的前提下,随机选择当前网络中未被确认的两个单元(Tip),无需考虑权重因素,虽然理论上允许,但不鼓励选择已被其它单元确认的单元。

 

2.一个单元不能直接引用父单元直接或间接引用过的单元。

 

3.一个地址如果创建发布超过一个单元,后发布的单元必须直接或间接地包含引用其之前发布的所有单元,形成这个地址的顺序单元系列。Sequencer同样需要遵守此条,即后一个Sequencer块必须直接或间接确认前一个Sequencer。

 

4.如果一个地址发布的单元违反规则A3,发布一个或多个没有顺序引用关系的单元或单元系列,都视为双花,无论是否存在实质性双花行为。

 

5.在遵守规则A3的情况下,出现双花问题,根据顺序单元Sequencer确认时间,判定发布较早的有效,发布晚的无效。如果不遵守规则A3,发布多个非顺序引用关系的单元或单元系列,根据最优顺序单元系列算法,只有一个单元或顺序单元系列有效,其余单元或顺序单元系列无效。

 

6.如果一个地址的单元间接或直接引用两个或以上的同一人发送的没有顺序的单元,该单元无效,不论是否存在实质性双花行为。

 

 

 

A系列规则主要防止恶意节点的双重支付攻击。任何有冲突的交易终将会被后继的收敛交易发现并孤立,最终作废。

 

如后文指出的,为了对自始至终只验证某几条交易的懒惰节点进行约束,我们制定额外的前序单元的选择规则(B系列):

 

1.长周期限制:新的单元不能验证古老的、已经被N个Sequencer块覆盖的单元。例如下图,令N=2,则白色区域的新单元将无法以Sequencer1终结过的祖先单元作为父单元。这避免了懒惰节点永远选择某一个早就被验证的单元作为父单元的可能性。

 

 

1.短周期限制:在长周期允许的范围内,为了避免懒惰节点选择某几个固定的存在于短周期内的已验证单元作为父单元、为了避免大量懒惰节点合谋作恶选取同一父节点,也为了对单个节点短时间内发送交易数量的限制,在选取父单元的过程中需要对父单元的哈希值进行限定,具体方法为:

 

a)预先制定哈希函数。

 

b)节点选取父单元前需要进行一个难度不大的工作量证明,遍历出满足条件的,使得

 

c)节点在广播单元前需要进行一个难度比b)显著小的另一个工作量证明,遍历出满足条件的父单元, ,使得

       

其中, .

 

d)如果无法从当前Tip池中选出满足条件的父单元, ,则该节点针对该笔交易,可选择:1,重新计算b)中的另一个;2,选择更多或更少的父单元做验证;3,等待满足条件的父单元出现。

 

随机父单元选取方式

 

采用可变难度系数法则,定义难度系数,当交易被验证时,校验者调用难度公式,计算得到与之匹配的原始难度。

 

 

F为总计算量,由父单元校验开销和本地挖矿开销组成。交易发送者可选择校验父单元个数k,本地挖矿难度系数与k存在反比例关系,如图10。为了取F最小值,建议选取父单元校验个数为2,如图11,满足交易发送方性能最优原则,以及全网TIP收敛要求。

 

4.2.随机选择原则

 

目前常见的DAG网络都依赖权重进行父单元的选择。如IOTA会根据马尔科夫蒙特卡洛演绎方法选择前序单元,使得选出某一个单元的概率分布与其路径上所有父单元权重造成的影响成正向关系。又例如Byteball设置中心化的Witness来引导单元选择可信度高的前序单元。从效果上来看,任何企图引导单元、通过算法影响单元选择某些所谓的“主链单元”的策略都是低效且不必要的。事实上,这会造成大量单元采用雷同的策略进行交易选择,在交易量上升之后会造成大量交易由于不在偏好列表里,而无法被后续单元验证的情况。

 

以目前采用了马尔科夫蒙特卡洛演绎方法的IOTA网络为例,在TPS仅仅为11的环境下,Tip单元占比达到39%,被至少一个单元验证过的单元比例仅为61%,其中最终被网络承认的单元比例仅为18%.新生单元随大流,偏爱权重较高的主路径,跟随同一个节点后被后继单元的马尔科夫蒙特卡洛演绎方法淘汰,得不到任何确认的机会。

 

 

 

 

在OG中,单元在选择前序单元时不作任何路径上的假设和计算,完全随机选择在单元池中尚未被验证的新单元,只要该单元能够被合法链接(见下文描述)。完全随机的过程保证了每一笔在网络中的单元都能够有相同的几率被验证,而与区块所在位置无关。经过模拟,在同样的参数下,随机选择的策略保证了只要TPS规模不以几何级速度增长,该网络无论交易量大小,都能最终收敛。

 

 

5.智能合约

 

智能合约交易的运行是需要网络中所有节点共识顺序的,否则会造成执行结果的不统一。Sequencer的到来使得OG网络中的所有节点对于智能合约交易的顺序有了共识。

 

5.1.Sequencer的生成

 

和一般的DAG Tx不同,我们使用PoS (Proof-of-Stake) 共识生成每个Sequencer。在系统中,有一部分节点在抵押了部分资产后会拥有Senator身份。拥有这个身份的节点将获得打包生成Sequencer的权利。Senator的主要职责是将部分符合权重要求且与合约相关的Tx以权重为第一参考要素按顺序打包进Sequencer中。在一轮Sequencer生成周期中同一时间只会有一个Senator进行打包工作,剩余的Senator会对新生成的Sequencer进行校验,只有通过其它Senator校验的Sequencer才会被整个DAG网络承认。所有的Sequencer都会有先后的编号,Sequencer与Sequencer之间始终保持着有序的状态。

 

5.2.运行合约

 

在图14的场景中,节点需要执行合约时,首先它会从DAG中获取自己没执行过的最早(根据编号判断最早)的Sequencer也就是Sequencer1。然后依据Sequencer1的TxSequencer字段保存的Tx哈希找到DAG中对应的Tx并逐条执行Tx的内容。最后将执行完的结果存储到自己本地的DB中。由于所有正常的节点在执行合约的时候都以Sequencer1中标注的Tx顺序执行,且所有人的Sequencer1都是保证一致的,所以最后正常节点间的合约状态也会保持一致。执行完Sequencer1后下一轮执行Sequencer2,如此往下循环下去。

 

 

6.安全

 

不管是块链架构的区块链还是基于DAG架构的区块链都必须解决双花、交易确定性、DOS问题。本节将重点介绍OG如何通过自身结构上的安全机制免疫这些攻击 。

 

6.1.针对DAG可能的攻击方式

 

目前影响DAG账本的安全性和高效性的尝试主要有以下几点:

 

 

6.1.1.寄生链双重支付

 

攻击者进行一笔双重支付,可以在原交易取得实质性结果(如货物交割,合约运行)后取消该交易,使交易对手方遭受损失,其具体步骤为:

 

●攻击者在正常的网络中发送一笔交易并得到了足够的后继交易的确认

 

●与此同时攻击者在一条不为人所知的本地链中发送双重支付交易

 

●攻击者持续在本地链中发送大量交易,这些交易用于确认该双重支付交易,并且不确认正常网络上的原始交易。

 

●这些交易既可以通过大量身份产生(女巫攻击),也可以不定期地确认正常网络上的交易(寄生在正常网络上的寄生链),从而达到增加自身权重、混淆视听的目的。

 

●当攻击者认为自身的寄生链已经超过主链,从而使得大部分主链上的后继交易在面临双花选择时倾向于选择寄生链而非主链时,将这条寄生链公布于众。

 

●一旦成功,主链上之前已经确认过的交易,连同它前后的交易都面临被抛弃的风险。

 

OG的设计杜绝了寄生链存在的可能性。寄生链成功的关键在于攻击者能够以更快的速度在不为人知的本地DAG网络上构建出比主网权重更大的DAG分支。该行为决定了这些私有交易不能被广播,否则网络上任何一个单元都有可能在第一时间发现该双花交易而将之隔离。

 

OG引入的Sequencer,同时也是交易终结性的确定者。被Sequencer直接或间接验证的交易直接进入终结状态。寄生链由于不能广播自己,因此无法被Sequencer看到,也会远比正常单元晚进入网络。正如规则B1所述,任何一个诚实节点在验证既往交易的时候,都不会用这些突如其来没有被Sequencer终结过的交易去覆盖已经被终结过的原始交易。Sequencer的存在加速了交易的确认速度,同时防止了恶意攻击企图推翻较长历史的尝试。

 

6.1.2.懒惰节点

 

一笔新的交易需要验证之前未被验证的交易。但由于网络延迟的因素存在,无法避免一笔过往的交易同时被多笔交易验证。一般而言,新的交易应当随机选择在交易池中未被验证的交易,从而使得交易池中的交易能够被快速消耗。然而一个懒惰节点会倾向于验证某一个固定的早已被验证的远古交易(例如一个在核心路径上的老交易)。这样对于该懒惰节点而言,只需验证一次,就可以广播无数交易,并且其它诚实节点同样会确认该笔交易。这种懒惰的行为虽然不会对整个网络的安全性造成影响,但是它们提高自己效率的代价是降低整个网络的性能。因此在DAG账本中,无论该类节点是出于何种目的(代码实现错误、纯粹利己节点、寄生链节点等),均需要对这种行为进行约束或惩罚。

 

OG通过独特的父节点选择算法保证了单个节点不可能每次都选择固定的一个或几个父节点,也保证了多个节点无法串通选择某一个或几个父节点。正如B2所述,单元需要先遍历出一个与交易信息相关的本地nonce,使得该单元Hash小于某个难度值a。这个过程(PoW1)需要被设计成占用90%以上的挖矿时间。一旦nonce确立,单元需要将该nonce与潜在的两个父单元的Hash进行合并,计算Hash,使得该挂钩Hash小于某个难度值b。这个过程(PoW2)需要被设计成占用10%不到的挖矿时间。

 

我们的目的在于让节点在每次选择未确认单元的时候都倾向于选择不同的单元而非同一个。影响最终单元有效性的因素有两个:父单元的Hash和本地的nonce。之所以设计PoW1难度远大于PoW2,是因为我们要让节点在进行PoW遍历的时候,更换父单元的难度要远远小于更换nonce的难度。这样如果一个懒惰节点执意要跟随某一个固定交易,那么它无法享受算法给他带来的优惠(换父单元,PoW2),必须每次都要换nonce,而换nonce(需要进行PoW1)又是一件非常困难的事情。

 

父节点选择算法同样限制了多个节点合谋跟随同一个交易的企图,原理与限制单个节点跟随同一个交易一致。

 

6.1.3.DoS

 

作为一个全节点,既是网络的使用者又是网络的维护者,因此发送交易无需手续费。然而无手续费可能会诱使恶意节点发送大量微小单元进行对网络的“合法”的或“非法”的DoS。

 

对于合法的DoS,其交易格式正确,则PoW必须要能够通过验证,而计算PoW对于一笔正常交易来说时间微不足道,但要形成足以影响DAG网络的量级的DoS,需要攻击方付出大量的算力成本。

 

对于非法的DoS,其交易格式不正确,则收到该交易的节点不会中继这笔交易。攻击者最多影响该单个节点,而几乎无法影响整个OG网络,也无法通过攻击OG网络的一部分而对整个OG网络进行有效攻击。

 

6.2.安全的虚拟机

 

作为以太坊最核心的功能之一,智能合约及其语言Solidity在近年来得到了广泛的应用。以太坊虚拟机EVM及智能合约虽然满足了图灵完备的功能要求,但是在安全性方面已经被证实存在较多缺陷,这对于一个运行着经济模型的区块链系统而言是有非常大风险的。例如,基于以太坊发行的虚拟币SMT、EDU、BEC均由于未使用SafeMath,导致在代币数量计算过程中整数溢出,导致货币超额增发;又例如,Fomo3D所采用的随机数算法在同一区块中能够被复现,同一区块里的其它交易能够预测该随机数,从而导致抽奖算法存在不公,间接导致了该团队其他项目的失败。对智能合约的安全性审查过于复杂,需要考虑多方面因素,严重影响了其公开透明的特性,使得普通用户难以验证该合约是否存在漏洞。

 

与其让开发者在每个合约中都对合约的安全性反复斟酌,OG从源头上,即智能合约语法和虚拟机本身去解决安全问题。

 

数值安全:传统的EVM对于溢出采取的是容忍的态度,而OG的虚拟机则完全不允许溢出,从根源上避免了大量非预期的行为。

 

类型安全:EVM对于代币的实现与普通整数无异,导致货币可能被简单增发。而OG原生提供Coin类型,对于代币的操作都有一套独立的、区分于普通数值计算的方式。

 

权限安全:从语言层面上强制智能合约编写者显式指定所有函数的权限要求,避免了由于疏忽导致的高危函数被越权调用的问题。

OG的智能合约语言和虚拟机旨在对目前常见的Solidity漏洞进行根源上的避免,令智能合约不再危险。

 

7.总结

 

OG提出一种基于DAG通用区块链架构,主要解决现有区块链中去中心化、扩展性、安全三者平衡难题及DAG如何结合智能合约。我们很高兴看到我们所做的探索及一些成果,但其中有些问题本文中还没给出很好的解决,如安全性,强一致性及最终性,我们非常欢迎感兴趣的团队和我们联系。 我们在附录中介绍了预言机和分片思路,我们会在后续的技术白皮书中详细分析。

 

8.附录一:预言机

智能合约本身受限于区块链的封闭环境,是无法与外界交互的。为了实现诸如可信计算平台的功能,在区块链上需要有一个与真实世界联通的机制。预言机(Oracle)由能够被信赖的第三方权威机构维护,用于将真实世界的数据输入到智能合约,方式分为主动式和被动式:

 

8.1.被动式预言机

 

被动式预言机当且仅当有节点对预言机合约进行调用时,为了满足合约调用方的个性化需求而进行内容响应。例如合约A发起查询“在Google中搜索‘区块链’返回的结果数”时,被动式预言机会根据用户的输入进行外部调用。得到数据后,通过合约A的回调函数向合约A输送数据。在合约调用的过程中可能产生手续费,由合约调用方预先支付。

 

 

8.2.主动式预言机

 

主动式预言机不需要合约调用才触发外部调用,一般用于长久持续的数据更新,如当前各个城市的天气、数字货币的兑换价等客观信息。主动式预言机持续地获取数据,通过调用自身合约的输入函数,向自身合约存储数据。外部合约A可以通过虚拟机直接获取到该预言机合约中存储的数据,无需进行异步调用。

 

 

9.附录二:智能合约分片

 

DAG的一大优势就是Tx的异步分发使得整个网络不会遇上大的性能瓶颈。但是在加入Sequencer以后和智能合约相关的Tx就会受限于Sequencer的打包速度。这可能会造成整个网络的合约操作拥堵。假如一个时间段内有1000笔合约相关的Tx被广播入网络,而PoS中的Senator在一个时间段内只能处理100笔操作,那么剩下的900笔Tx就会处于拥堵状态。久而久之整个合约系统就会越来越瘫痪。为了防止Sequencer拖慢整个网络的处理速度,我们采用分片技术来提高Sequencer的处理能力。

 

在智能合约平台中,大部分合约其实互相是没有任何关联的。针对这些没有关联的合约我们可以对其进行分片处理。如果现在有N个合约 [ C1 , C2 , ... Cn ],我们将相互有联系的合约放到一起,同时将没有联系的合约尽量均匀的分到多个分片中,这样每个分片所涉及的合约Tx将会分布的较为均匀。同时,因为分片之间没有交互,所以我们可以针对每个分片并行的生成对应的Sequencer。这样就可以在保证状态一致性的前提下加强Sequencer的处理能力。

 

 

假设我们将所有的合约分为10个分片:[Shard1 , Shard2 , ... Shard10],每个分片管理部分合约,分片之间的合约互相没有联系。同时假设当前有一个包含100个Senator的集合:Setsenator = [S1 , S2 , ... S100],当需要生成新的Sequencer时我们从Setsenator 中随机抽取10个Senator作为这一轮的Sequencer打包人。10个打包人 [S1 , S2 , ... S10] 对应10个分片 [Shard1 , Shard2 , ... Shard10],产出10个Sequencer [Seq1 , Seq2 , ... Seq10]。这十个Sequencer被剩余的Senator [S11 , S12 , ... S100] 验证通过后再广播到DAG网络上。

 

通过使用分片技术,Sequencer的生成不再受限于单个Senator的处理速度。当有更高的TPS需求时,只需要增加分片的数量让更多的Senator能够同时进行处理即可。

 

Senator在一个时间段内会被随机选出并被分配成为一个分片的Sequencer Proposer。而各个分片会被分配不同的智能合约。这些分配动作都需要一个角色来进行统一的管理。在我们的系统中,会有一个初始智能合约Csharding存在,Csharding专门用作分配Senator和管理分片,Csharding 会在系统初始化的时候写入到genesis中。在系统初期,Senator由我们团队运营,但是任何想要成为Senator的第三方只要向Csharding 缴纳足够的平台币后即可成为Senator。Csharding 会控制Sequencer的生成时间,在某一个时间段内会随机从Setv 中挑选出一定数量的Senator,这些 Senator会获得对应分片的Sequencer打包权。剩余的 Senator作为验证人对这一时间段内的 Sequencer 进行验证。在验证过程中,验证人可以从 Csharding 中查询收到的Sequencer的打包人是否有权利进行打包。

 

除了Senator的控制,Csharding 还要负责合约分片的分配工作。上文有提到,所有互相之间没有联系的合约会被分到不同的分片中。为了完成这个动作,合约在发布的时候必须在Csharding完成注册。注册完成后新的合约便可以在Csharding 中查询到对应的分片编号。当Proposer需要打包顺序的时候会通过Csharding检索Tx对应的合约分片,如果是Proposer负责的分片则记录到需要生成的Sequencer中,否则就直接跳过。

 

10.参考文献

 

[1] S. Nakamoto, Bitcoin: A peer-to-peer electronic cash system. 2008, http://bitcoin.org/bitcoin.pdf

 

[2] B. Vitalik. Ethereum: a next generation smart contract and decentralized application platform. 2017, http://ethereum. org/ethereum.html.

  

[3] W. Gavin. Ethereum: A secure decentralised generalised transaction ledger. 2014, Ethereum Project Yellow Paper.

 

[4] People on nxtforum.org. DAG: a generalized blockchain. 2014, https://nxtforum.org/proof-of-stake-algorithm/dag-a-generalized-blockchain/

 

[5] D. L. Sergio. DagCoin: a cryptocurrency without blocks. 2015, https://bitslog.wordpress.com/2015/09/11/dagcoin/

 

[6] I. Eyal, S.G. Sirer. Majority Is Not Enough: Bitcoin Mining Is Vulnerable[J]. 2014, 8437:436-454.

 

[7] S. M. Ross. Introduction to probability models[J]. 2003, Technometrics, 40(1):78-78.

 

[8] S. King and S. Nadal, Ppcoin: Peer-to-peer crypto-currency with proof-of-stake. 2012, https://peercoin.net/assets/ paper/peercoin-paper.pdf

  

[9] C. LeMahieu. Raiblocks: A feeless distributed cryptocurrency network.  2017, URL https://raiblocks.net/media/RaiBlocks_Whitepaper__English.pdf.  

 

[10] P. Erguei. The tangle. 2017, URL https://iota.org/IOTA_Whitepaper.pdf.  

 

[11] C. M. Liu, D. Wang and M. Wu, Vite: A High Performance Asynchronous Decentralized Application Platform, 2018, https://www.vite.org/