- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Dora白皮书
展开查看详情
1 . Dora Network 郭雄辉 Tyler Kot 李星 steve@dora.network tyler@dora.network star@dora.network Version 1.1.0 2018 年 9 月 28 日 摘要 以太坊等新一代智能合约平台的出现极大地推动了区块链技术的应用,但目前 存在性能不足的问题,无法满足更广泛的应用需求。Dora 从三个方面解决性能问题: 纵向扩容、横向扩容和共识算法。纵向扩容挖掘合约间和合约内的并行度;横向扩容 采用子母链的技术提高性能;共识算法 DVBC 基于 DPoS,VRF 和 BFT,兼顾安 全性和高性能。Dora 虚拟机兼容 EVM,基于 EVM 的 dApp 能快速移植,并通过 零交易费的经济模型进一步激励生态建设。总的来说,Dora1 是一个免交易费的高性 能高并发公有链。 1 区块链的现状与展望 1.1 区块链技术综述 2008 年 9 月,中本聪发表比特币白皮书 [1] 。2009 年 1 月,比特币主链正式上线,并安全 运行至今,开创了加密数字货币的新时代,并将区块链这一新技术拉入公众视野。2015 年 7 月, 以太坊 [2] 上线运行。以太坊的 EVM 可执行图灵完备的智能合约,标志着第二代区块链技术走 上舞台。在众多的以太坊应用当中,加密数字通证无疑是最为重要和流行的一种。以太坊社区推 出了 ERC-20 标准,并提议了 ERC-721 标准,为加密数字货币(cryptocurrency) 、通证 (token) 和非标通证(non-fungible token)的发行和流通奠定了基础。2017 年,整个加密数字货币市场 增长超过五十倍,上千种新的加密数字货币和通证的发行和升值是主导因素。目前, 区块链的前 沿创新技术主要体现在共识机制, 区块结构和网络结构。 首先是共识机制。最早在比特币上采用的是工作量证明 PoW 共识算法,大量的矿工进行哈 希运算来争夺区块的记账权,导致大量的电力消耗。为了克服 PoW 资源浪费的缺点,新的权益 证明 PoS 共识算法根据用户持有代币数量,以及用户持有代币的时间来决定区块的记账权,大 大减少了争夺记账权而消耗的电力,同时提升了效率。PoW 和 PoS 都还需要矿工争夺记账权, 代理权益证明 DPoS 共识算法参考人类行为活动中的公司运营机制,采用去中心化的投票方式 先选举出有限的代理记账节点,这些被选举出的代理节点再按照规则轮流打包区块,避免了对记 账权的争夺,效率得到更近一步的提升。这三种共识算法理论上只要网络中不超过 50% 的记账 节点出问题,整个网络就是安全的。它们都属于间接达成共识的算法族,先要争夺出记账权,再 生成区块,最后通过确定性方法(比如最大难度)解决分叉问题。而在联盟链中更多采用拜占庭 容错 BFT 算法,它属于直接达成共识的算法,这种算法一轮运行结束后就能确定性地在参与者 1 路印基金会投资,香港 Loopnest 加速器孵化项目。 1
2 .2 DORA 纵向扩容:并行化 2 之间形成区块共识,不需要先争夺记账权,也不会有分叉,但它只能保证在网络中不超过 1/3 的 记账节点出问题的情况下,整个网络是安全的。 其次是区块的组织结构。传统的区块链采用的是树状结构,一个区块有且仅有一个父区块, 通过区块之间的父子关系来形成全局有序的线性账本。而最新的研究则允许区块有多个父区块, 比如 IOTA [3] 强制要求新区块必须指向两个父区块,从而组织成一个有向无环图 DAG,将多个 交易全局有序的线性账本规约为一个只记录部分偏序关系的非线性账本,从而加速交易的确认 速度。 最后是网络结构。将大的网络分片组织成小的网络,采用子母链的结构。比如 Ardor [4] , Cosmos [5] ,Asch [6] 和 PChain [7] 。Cosmos 将主链称为 Hub,其他子链称为 Zone,Hub 和 Zone 之间通过 IBC(Inter Blockchain Communication)协议交互,当一个币种通过 Hub 从一个 Zone 转到另外一个 Zone 时,Hub 会负责保持其总量的不变性,但是 Hub 不负责验证单个 Zone 上 的交易,Hub 和 Zone 都是采用 Tendermint [8] 共识算法。PChain,类似于 Cosmos,尝试按每 个 dApp 构成子链,PChain 主链和子链的共识算法采用 PoS。这些方案中母链对子链的交易没 有任何记录和检查机制,子链的安全性完全交由子链的矿工去维护,在子链矿工数比较少的情况 下存在潜在的安全问题。Asch 和 Ardor 考虑到这一点,设计出一个新的矿工角色,要求其把子 链的区块记录打包上传到母链上,Asch 设计要求子链的创建者上传子链区块,而 Ardor 的设计 则不做角色的强制要求。Ardor 考虑的更周全一些,让母链在一段时间后可以对子链的区块数据 做快照和裁剪,从而解决母链数据膨胀问题。 1.2 目前区块链待解决的两个问题: 性能和存储 随着需求的增加,区块链面临亟需解决的可扩展性问题。目前区块链的低吞吐能力 (比特币 大概 7 笔交易每秒,以太坊大概 15 笔交易每秒),不足以满足全球金融交易的需求。相比之下, Visa 可处理 56000TPS 的交易,支付宝在 2017 年 11 月已实现了 200000+TPS 交易峰值。目 前区块链网络的可扩展性问题严重限制其广泛的应用,例如以太坊所支持的智能合约直接作为 dApp 运行在以太坊上,随着链上项目越来越多,负载越来越重,像“加密猫”一个项目就能把 整个以太坊弄的连基本的转账都很难成功。如何在不影响安全性和去中心化特质的前提下提升 区块链吞吐量,仍然有待探索。 随着时间的流逝,区块链还面临数据膨胀问题。如图1所示(数据来源,http://bc.daniel.net.nz) , 截止到 2018.2 月份比特币目前的区块总大小超过 150G,新节点需要花费 14 天才能同步完所有 区块;以太坊区块总大小超过 650G,新节点需要花费 8 天才能同步完所有区块,而且还在以每 天约 145M 的速度增长。 1.3 Dora 的展望 Dora 采用全新的开创性区块链架构设计,旨在用区块链技术满足全球范围商业活动的需要。 Dora 从 CPU 设计中受到启发,设法将流水线模型和分支预测算法应用于区块链,提出了针对 区块链可扩展性问题的解决方案,大幅提高区块链的性能,并兼顾安全性和去中心化。 Dora 将推动区块链进入下一代,建设高速高效,通过节点快照新节点可快速加入的网络。最 终,Dora 的目标是变成一条人人可用,人人易用的公有链。 2 Dora 纵向扩容:并行化 传统的区块链扩容解决方案分为两种:状态通道和多链分片。像闪电网络 [9] 就是利用状态 通道技术来缓解区块链可扩展性问题。其基本思想是固定的一组当事人之间的频繁交易,在所有 各方都完成交易后,其中一方只发布最终结果,而无需在链上生成多个交易记录 (本质上是减少
3 .2 DORA 纵向扩容:并行化 3 图 1: 区块链数据膨胀 中间结果的存储)。然而,闪电网络只适用于固定的一组当事人之间频繁的交易,如果用户的交 易目标是随机的并且交易行为偶尔发生的话,就会导致低效率。而多链分片则是一种横向扩容技 术,通过增加链或者片区的数量,把交易分散达到最终扩容的目的,但这种方式通常伴随着子链 或者子分片上的安全性问题。 这些解决方案都以交易的串行化执行为假设条件,交易的串行化使得每个矿工节点可以独 立去执行和验证,从同一个创世块出发经过同样的串行操作序列,一定能得到一样的输出结果。 很显然,交易的串行化执行会导致系统的 TPS 总是受限于单个节点的性能。需要思考的是,交 易和交易之间一定要串行执行吗?是不是能在交易级别做并行处理从而设计一种纵向扩容技术 呢? 2.1 普通转账交易的并行 将账号看成一个节点,A 转账给 B,则在 A 节点到 B 节点之间添加一条有向边,边上的数 字表示转账金额。一个区块内的所有交易可以构成一个图。举一个例子,假设一个区块中包含如 下一些交易 {A 转帐给 B 10 个 token,A 转帐给 C 5 个 token,D 转账给 F 3 个 token,E 转 账给 G 2 个 token},如图2所示。 从图上明显可以看到这些交易被划分为三个子连通图:{A,B,C}, {D,F} 和 {E,G},同一个 连通图内的交易存在依赖关系,只能串行执行,但不同连通图之间是可以并行执行的,比如 D 转账给 F,E 转帐给 G 的先后执行顺序只是在中间临时状态不同,但不会影响区块最终的状态。 在现实区块链世界中,很容易找到这些没有依赖关系的交易集合。 2.2 智能合约间的并行 针对普通转账交易,可以按涉及的账号来划分子连通图,但智能合约转账交易的划分复杂的 多。先看图3智能合约的链上执行示例。一次智能合约的执行逻辑上可以分成两部分:一部分用 白色标识 EVM 解释执行部分,另外一部分用灰色标识真正改变世界状态的部分。灰色部分是影
4 .2 DORA 纵向扩容:并行化 4 图 2: 普通转账交易 图 3: 智能合约的串行 响最终世界状态的关键组成部分。智能合约的执行过程中可以采集到该智能合约所依赖的外部 账号的世界状态,也能采集到最终影响的外部账号的世界状态。 只要一个智能合约所依赖和改变的账号集合与另外一个智能合约所依赖和改变的账号集合 有交集,这两个智能合约是连通的。这样将一个区块中所有的智能合约交易划分成不同的连通子 图,各个子图之间可以并行执行。如图4所示,假设这四个智能合约交易可以划分在不同的连通 子图中,并行化处理后,该区块的生成速度能极大提升,从而提升整个系统的 TPS。这种并行 化算法既可以用单机多线程来实现,也可以用多机并行处理。 通过对以太坊区块高度 5592867 到 5609843 之间的区块数据分析,得出以下结论:智能合约 交易占总交易量的 53.7%,平均每次智能合约交易执行时间为 1.29ms,最大执行时间为 51.1ms, 最短执行时间为 0.14ms。也就是说,如果智能合约调用是串行化的话,理论上系统最大的 TPS 只能达到 775,如果并行执行,则不存在理论上的限制。 这种纵向扩容技术本质上类似于 CPU 设计中的分支预测,即通过流水线操作提前执行分 支,如果预测正确,后续流水线只需按序执行,从而极大地提高系统的并行性。Dora 设计的纵 向扩容技术,理论上能运用到任何目前已知的公有链上,提高系统的 TPS。 下面给出算法的形式化定义。 2.2.1 符号定义 定义. 首先定义后面用到的一些概念: 智能合约空间: T
5 .2 DORA 纵向扩容:并行化 5 图 4: 智能合约的并行 区块: Bt = {T1.. Tnt } ∈ 2T , 它是一组智能合约的集合。 账户地址空间: A 账户状态空间: L 世界状态空间: LA , 它是从账户地址空间到状态空间的映射的集合。 世界状态转换函数: Γ : LA × 2T → LA , 例如 σt = Γ (σt−1 , Bt−1 ),其中 σt , σt−1 ∈ LA 。它根 据当前世界状态, 执行一组智能合约并更新世界状态。 串行执行: 如果对于一组合约中任意一对合约, 其中一个合约的所有操作都在另一个合约的 所有操作之前, 那么称为这组合约是串行执行的。也就是原子化串行。 安全性: 如果并行执行的一组合约对世界状态所产生的改变等同于这组合约的某些串行执 行, 则称该并行执行是安全的。即给定并行状态转换函数 Γp 和所有串行转换函数的集合 S, 需满 足 (∃S)(S ∈ S) ∧ (S(σ, Bt−1 ) = Γp (σ, Bt−1 ))。 智能合约的读账户集合:Tr ∈ 2A 智能合约的更新账户集合:Tw ∈ 2A 账户的状态:L(Tr ) ∈ 2L 2.2.2 算法流程 下面给出 SSP 算法1的流程,它可以在保证安全性的前提下提升系统性能,减少执行时间。 需要说明的是普通转账可以看做是一种简化的智能合约,所以 SSP 也是适用的。 2.3 智能合约内的指令级并行 Dora 完全兼容以太坊 EVM 指令集, 并在实现层面进行性能优化:编译时优化, 包括循环展 开, 指令合并等以及运行时优化,包括 JIT 等。同时允许程序员对代码进行标注(Annotation) , 告诉编译器哪些部分可以被并行优化。
6 .2 DORA 纵向扩容:并行化 6 Algorithm 1: Safe Speculative Parallelization(SSP) 安全推测并行 Procedure proposer.Propose() repeat Receive T ∈ T; Execute smart contract σ = Γ ((Tr , L(Tr )), T ); Send the tuple (σ, Tr , Tw ) to validator; until exit; return; Procedure validator.Validate() Set of valid contracts V ← ∅; Delta world state ∆σ ← null; repeat Receive the tuple (σ, Tr , Tw ) from proposer; for each valid contract V ∈ V do if Vr ∩ Tw ̸= ∅ or Vw ∩ Tw ̸= ∅ or Vw ∩ Tr ̸= ∅ then Abort T ; end end if T is not aborted then V←V∪T ; ∆σ ← ∆σ + σ; end until timeout or the |V| > n; Update world state σt+1 ← σt + ∆σ; return;
7 .3 DORA 横向扩容:子母链 7 图 5: 区块瘦身 图 6: 子母链 2.4 动态调节区块大小和区块瘦身 为了提高整个网络的 TPS,Dora 会根据当前网络拥堵情况动态调节区块大小,同时引入一 种区块瘦身技术,如图5所示: 传统区块链中,一个区块通常会包括区块头和一系列的交易列表。举以太坊为例,一笔交 易大约要占用 200 多个字节,一个节点广播区块的时候会把原始交易都打包到区块中广播出去, 这对网络带宽资源造成不必要的浪费,因为每笔交易在区块打包之前就已广播到网络节点上了。 理论上,广播区块时,只在区块中放入交易的 Hash 值(只需 32 个字节)即可。当节点收到区 块中交易 Hash 列表时,如在本地查找不到对应的交易数据,再向其他节点询问获取。采用这种 压缩模式,网络带宽理论上能节约 7 倍左右,对应到 TPS 也有同样提升。 3 Dora 横向扩容:子母链 Dora 以子母链的方式对区块链做横向扩容(如图6)。一个智能合约可以部署在母链或者子 链上。对计算性能要求高的智能合约可以单独部署在子链上。 子母链均采用账号模型,账号可以在子链和母链上共用的,但其在不同链上的状态会分别记 录,同一个账号在不同链上各自记录在该链上的世界状态。举个例子,用户可以通过钱包创建一 个账号,该账号可以同时用于接收和发送母链和子链的转账交易,但母链上拥有的代币数记录在 母链上,子链上的代币记录在子链上,同时通过一种特殊的跨链交易 CrossChainTransaction 来 支持子母链之间的代币转账交易。母链支持多币种转账。
8 .3 DORA 横向扩容:子母链 8 图 7: 子链安全性 3.1 子链安全性 如图7所示,Dora 主链支持一种特殊的交易,每隔一段时间子链中生成区块的矿工负责把还 未记录在主链上的子区块信息 ChildChainBlock 打包递交到主链上,但注意母链上不会记录完 整的子区块信息,而只是记录子区块头信息,这些数据仅仅只是记录,母链的矿工打包时不负责 验证。为了保证子链数据的安全性,Dora 要求子链的矿工抵押一定数量的 DNT 代币,同时引 入了监察者矿工。监察者矿工在发现并核实子链矿工的错误区块后,获取一定的奖励。 监察者同时会监听母链和子链的所有交易,当检测到母链上有子链区块打包消息 Child- ChainBlock 时,结合之前收到的子链交易数据去做验证,一旦检测到有子链区块存在问题,则 把证据递交到母链上,同时为了防止监察者发起 DoS 攻击,监察者递交证据时需要抵押一定数 量的 DNT 代币,一旦证据属实,则监察者可获得出错子链矿工抵押的代币,如果证据不属实, 监察者本次抵押的代币会作为奖励给母链矿工。 3.2 数据剪枝和快照 为了解决数据膨胀问题,Dora 母链支持子链区块信息的剪枝裁剪,记录在母链上的子链的 数据只保留近期区块的数据(比如 2048 个区块),更久之前的数据可以从母链上移除。 同时母链还支持快照,一个快照包含当前区块所有账号的世界状态信息,新的节点可以只从 某一个快照块出发从而快速同步,甚至轻量级节点可以删除快照以前的所有区块数据。 3.3 Dora 子母链之间代币跨链转账和交易 Dora 设计了一个特殊的 CrossChainTransaction 交易能让同一账号内的代币在子链和母链 上互相流通。 CrossChainTransaction: { blockno:区块编号,rawtransaction 这笔交易在具体哪个区块内 blockhash:blockno 对应区块的 Hash merklepath: 验证 rawtransaction 是否在区块 blockno 内的默克尔树路径 rawtransaction:{ owner: ""0xfbc2a4...ed"", symbol: “UT”,
9 .3 DORA 横向扩容:子母链 9 图 8: 代币在子母链间转移 value: 100, direction: 0 or 1 (0 表示从子链到母链,1 表示从母链到子链) } } 如图8所示,展示了代币 UT 如何从子链转移到母链。 假定账号 A 转移 100 个 UT 到母链上,当跨链交易发生时: 1.A 先在 UT 子链上发起一笔特殊的转账交易,表示将 100 个 UT 从子链账号 A 转移到母 链账号 A; 2. 该特殊交易在子链上得到确认后,等待子链的矿工将包含该交易的区块信息记录到母链 上; 3.A 接着在母链上发起一笔从子链到母链的 CrossChainTransaction 交易,附带上步骤 1 的 转账交易,区块高度和 merkle 路径供母链做验证; 4. 母链矿工验证 CrossChainTransaction,如果验证通过则打包进母链区块,并修改母链账 号 A 的状态记录转入 100 个 UT; 反之,代币可以遵循同样的规则就可以从母链上再转移回子链,这种方案的好处是整个转移 过程中代币还保留在同一个账户下,不像其他跨链解决方案引入额外的受控制账户。 同时 Dora 母链上设计了一个特殊的 TokenSwapAction,允许两种代币之间的原子互换,需 要携带双方签名的订单信息,并同时会检查双方的余额来决定是否能执行互换。
10 .4 共识算法 DVBC 10 图 9: 跨链交易 TokenSwapAction: { taker: "LRC", takerAddr: “0xfbc2a4...ed” takerValue: 1000, maker: "RDN", makerAddr: “0xabc35e...ef” makerValue: 500, takerOrderWithSignature: makerOrderWithSignature: } 通过这个原子互换代币操作 TokenSwapAction 和跨链操作 CrossChainTransaction,很容易 实现子母链之间的跨链交易 (图9)。 4 共识算法 DVBC 4.1 算法思想 为了平衡高性能和高安全的两个需求,Dora 提出了一种兼顾安全和效率的混合共识算法 DVBC(Delegate Verifiable BFT Consensus)。DVBC 基于 DPoS [10] ,VRF [11] 和 BFT [8] 。算 法分为 3 个层次。假设有 M 个节点,一共选出 N + 1 个节点,N 初始取为 21。在每一轮共识 开始时,Dora 首先使用第一层算法 DPoS 根据选票的大小从 M 个节点中选择出得票数排名前 N /3 个节点,这些节点会自动成为本轮的记账者。第二层算法将剩下的节点 M − N /3 作为候选 节点,在这些节点中采用可验证随机数 VRF 算法随机挑选出其中的 2*N/3+1 个候选节点作为 本轮的记账者。最后一层运用 BFT 算法在 N + 1 个记账者之间来达成区块共识。该共识算法能 保证在 N + 1 个节点中只要不超过 N /3 个作恶节点,区块的正确性仍然得以保证,而且不存在 任何分叉。显然该算法可以防止超级节点联合作恶。此外,由于其他候选节点也能被选中作为记 账者,能让更多的节点愿意作为候选节点,从而增加网络的安全和鲁棒性。 考虑到每个 dApp 对安全和性能的要求不同,Dora 允许在创建子链的时候指定子链的共识 算法:DPoS+VRF,BFT 或者两者混合。 4.2 形式化描述 算法2描述了 DVBC 的整体流程。其中 DPoS,VRF,BFT 分别如算法3,4和5所述。
11 .4 共识算法 DVBC 11 DPoS 给出了一种根据投票比例作为候选节点被选中概率的抽样算法。 VRF 算法首先用每个候选节点的公钥和前一区块的 Hash 值作为源信息,将该信息交给 VRF Hash 函数算出新的 Hash 值,利用该值进行排序选出 2*N/3+1 个节点。使用 VRF 的好 处是可以快速形成共识,找出候选节点,并且可以被验证。 BFT 算法采用 π 演算 [12] [13] [14] 来描述。π 演算的基本语法如图10所示。使用 π 演算的好处 是便于分析算法的性质,例如安全性和活性,还可以使用软件对算法做形式化验证。该算法分为 propose,prevote,precommit 和 commit4 个的状态。P, V, C 是 propose,prevote,precommit 的缩写, 分别对应算法中的 3 个主函数。为了方便描述递归关系,还定义了子函数 PrevoteSub 和 PrecommitSub,简写为 VS 和 CS。getProposal 函数当提议 p 不为空时需直接返回 p,否 则整合最近交易信息到一个提议中并返回。函数 round_robin(k) = k mod N 表示根据当前轮 次选出一个负责 propose 的进程,类似 leader 的角色。N 个节点之间的共识协议可以表示为 ∏N Consensus ::= i=1 Yi 。每个节点的状态记做 s = {k, p, v},k 表示轮次,p 表示本轮提议的区 ′ ′′ 块信息,v 表示所有轮的投票信息。vk and vk 分别表示在第 k 轮的 prevote 和 precommit 投票 信息。进程之间通过通信信道传递信息, 这里用 cpi ,cvi ,cci 和 cwi 分别表示第 i 个进程用于 propose,prevote,precommit,commit 的通信信道。 函数 Propose 首先判读自己是否当前的提议者,如果是,则打包最近的交易到提议 pr 中, 将 pr 通过 cp 通道发送到给其他进程;同时进入 V 状态。如果不是 proposer,而且已经有提议, 也进入 V 状态;否则接受提议者从 cp 通道发来的提议或者超时后再进入 V 状态。 函数 Prevote 会把收到的提议通过 cv 通道广播给其他进程,并从其他进程的 cv 通道接 受提议;然后创建共享通道 c,将收到的提议通过 c 发出;同时进入 PrevoteSub 子函数。在 PrevoteSub 函数中,如果从超过 2/3 的进程收到相同的提议,则进入 C 状态;否则若收到超过 2/3 的进程的提议,但不一致,则携带空提议进入 C 状态;否则还没有收到 2/3 的进程提议, 需 分情况处理。读取通道 c 的信息,若发现是旧的消息,则继续等待;若是当前轮信息,则合并投 票信息并等待;若自己的轮次落后,回到 P 状态,追上当前轮。 函数 Precommit 从 cc 通道广播提议给其他进程, 并从其他进程的 cc 通道接受提议;同时 创建通道 c,将收到的信息发出去。类似 Prevote 函数,如果从超过 2/3 的进程收到相同的提议 则正式提交该提议;否则如果提议不一致,转到 P 状态,开始下一轮;否则继续等待,如果发 现自己轮次落后则回到 P 状态。 Algorithm 2: DVBC Function DVBC() while true do list of delegates L = ∅; L = DPoS(N /3, candidate_votes); L.append(VRF(2 ∗ N /3 + 1, candidates)); BFT(L); end 4.3 BFT 算法并行化 假设每个区块的 propose, prevote, precommit, commit 四个状态的时间分别为 T 1,T 2, T 3, T 4,按串行执行生成和确认 N 个区块所需要的时间为 N ∗(T 1 + T 2 + T 3 + T 4)。 从流水线的角度来考虑这个问题,四个状态可以有序并行执行,理想情况下,如图11所示, 按照流水线的方式执行生成和确认 N 个区块所需要的时间为 N ∗ T 1 + T 2 + T 3 + T 4。当 N 足
12 .4 共识算法 DVBC 12 P ::= 0 empty summation | P1 |P2 composition(parallelization) | P1 + P2 summation(nondeterministic choice) | (new x)P channel creation | α.P prefix form | τ.P silent action | x(y).P input | x < y > .P output | (x).P restriction | timeouti .P timeout of process i | P s (y) function to which pass variable s and y ∑ n Pi ::= P1 + P2 + .. + Pn multiple summation i=1 ∏n Pi ::= P1 |P2 |..|Pn multiple composition i=1 图 10: π 演算符号说明 Algorithm 3: DPoS Function DPoS(m, candidate_votes) list of delegates L = ∅; status = candidate_votes; sum = summation(candidate_votes); for i = 0; i < m; + + i do status += candidate_votes; top = sort(status).top_index()); L.append(top); status(top) -= sum; end return L; Algorithm 4: VRF Function VRF(m, candidates) list of delegates L = ∅; inf o = candidates.pub_key + previous_block_hash; candidates_hash = V RF _hash(sec_key, inf o); topn = sort(candidates_hash).topn(m)); L.append(topn); return L;
13 .4 共识算法 DVBC 13 Algorithm 5: BFT Procedure Propose() Pik,p,v ::= if i == round_robin(k) then cpi < pr > |Vik,pr,v , where pr = getP roposal(p) else if p ̸= ∅ then Vik,p,v else cpround_robin(k) (pr).Vik,pr,v + timeoutround_robin(k) .Vik,∅,v Procedure Prevote() ∏N Vik,p,v ::= cvi < p > |(new c)( j=1 cvj (pr).c < cvj , pr > |V Sik,p,v (c)) Procedure PrevoteSub() { } 2 V Sik,p,v (c) ::= if maxb (| pr ∈ vk’ : pr.block == b |) > N then 3 Cik,b,v 2 else if |vk’ | > N then 3 Cik,∅,v else c(cv, vote). if vote.round < k then cv(pr).c < cv, pr > |V Sik,p,v (c) else if vote.round == k then V Sik,p,vote∪v (c) else Pivote.round,p,vote∪v Procedure Precommit() ∏N Cik,p,v ::= cci < p > |(new c)( j=1 ccj (pr).c < ccj , pr > |CSik,p,v (c)) Procedure PrecommitSub() { } 2 CSik,p,v (c) ::= if maxb (| com ∈ vk” : com.block = b |) > N then 3 cwi < b > 2 else if |vk” | > N then 3 Pik+1,∅,v else c(pc, vote). if vote.round < k then pc(com).c < pc, com > |CSik,p,v (c) else if vote.round == k then CSik,p,vote∪v (c) else Pivote.round,p,vote∪v
14 .5 DORA 特色 14 够大时,经过这种流水线操作后,时间近似为 N ∗ T 1。 图 11: 共识算法并行化 5 Dora 特色 5.1 横向和纵向扩容 Dora 既支持常规的多链横向扩容,还支持独特的基于分支预测的纵向扩容机制,因此能获 得比其他系统更高的 TPS。 5.2 共识算法的并行化 Dora 的共识算法充分运用了流水线的思想,让区块的生成和确认两个过程并行执行,进一 步提升系统 TPS。 5.3 一键发币和一键多转 目前以太坊上最大的应用还是 ICO 发币,即通过创建一个智能合约来发行代币。ICO 代币 之间的转账本质上是调用智能合约的接口,在大量代币转账交易时会导致网络拥堵,浪费资源。 Dora 支持特殊的铸币交易 MintAction,将发行代币固化到母链上,让发币的行为变得和普通转 账交易一样容易。 MintAction: { name: "UToken", totalSupply: 100000000000000000000000000, decimals: 18, owner: "0xfbc2a4...ed", symbol: "UT" }
15 .6 DORA 经济模型 15 同时针对目前代币空投慢的问题,Dora 原生支持一键多转账交易 SendMultiTransaction。 用户能一次指定多个转账地址,把多笔交易打包在一起,节省网络资源。 SendMultiTransaction: { from: ""0xfbc2a4...ed"", symbol: “UT”, toLen: 4, toList: { "0xfbc2a4...e1", 100 "0xfbc2a4...e2", 500 … } } 6 Dora 经济模型 Dora 网络引入 DNT(DoraNetworkToken) 代币,用于激活内部生态,是其体系内流通的货 币,DNT 总量恒定为 10 亿枚。DNT 代币是 Dora 网络内部的主要燃料(GAS) ,用于支付交易 费用。一般而言,Dora 网络有两种类型的账户:外部账户和合约账户。外部所有的账户,由私 钥控制,没有代码。Dora 网络用户可以通过创建以及签名交易从一个外部账户发送交易。合约 账户,由合约代码控制。每当合约账户接收交易时,合约代码就会执行,包括对内部存储读写, 发送交易或者创建合约等等。 6.1 区块奖励 Dora 网络将代币的 5% 用作前 5 年的区块奖励,每年奖励 1%。五年后,区块奖励的方式 以及数量由社区投票决定。Dora 网络允许节点自行设定分成比例,通过市场调节手段来激励持 币用户投票选取记账节点。假设每个区块的代币奖励个数为 W ,某个节点愿意采用比例 p 的代 币作为投票奖励,那么当该节点出块时,所有投票给该节点的用户则会按票数占比来平摊 W ∗ p 的区块奖励,具体到每个投票用户则为 Iu = ∑NVu Vk ∗ W ∗ p。该节点获得的区块奖励则包括两 k=1 部分,一部分是自己作为普通用户投票给自己所获得的投票奖励,另外一部分则是作为记账者所 获得的奖励,具体计算公式为: Iu = ∑NVu Vk ∗ W ∗ p + W ∗ (1 − p) k=1 6.2 普通转账免费 在 Dora 网络执行的交易都会产生交易费用。交易费用和 Dora 网络的计算资源或者存储资 源的消耗相关。Dora 网络中的计算资源或者存储资源使用 GAS 数量表示。普通转账或者智能 合约的交易费用(GAS 费用)的计算公式为:资源消耗的 GAS 数量乘以 GAS 价格。GAS 费 用以及 GAS 价格都以 DNT 为计量单位。 Dora 网络用户普通转账时,可以抵押代币换取免费转账额度。抵押越多则免费额度也越大。 在抵押期完,代币返还给用户。为了避免零成本交易攻击,Dora 网络根据账户抵押代币数来计 算该账号免费使用的 GAS 费用,超出免费使用配额的交易则会被实际扣除 GAS 费用。以 N 天 为一个周期,在这个周期内账号 U 的最大免费配额计算公式如下: U 的当前锁定代币 Fu = 当前所有账户的锁定代币 ∗ 该周期内累计到当前区块的交易总GAS费用
16 .7 总结和进一步工作 16 6.3 交易费用池奖励 普通转账或者智能合约的交易费用从发起交易的账户扣除,存放在交易费用池。交易费用池 中的交易费用分配由 Dora 社区管理。交易费用池中的交易费用可分配给 (但不限于):Dora 网 络节点,Dora 网络持币用户,优质 dApp(周期内投票最高的一些 dApp)等等。交易费用池奖 励周期性发放。具体的奖励发放周期以及分配比例在 Dora 社区公示投票决定。 6.4 社区治理及规划 Dora 网络的下列事项,需经过社区投票方式进行表决,持有 DNT 代币的用户拥有相应数 量的投票权: • 制定重要决策 • 区块奖励方式以及数量变更 • 紧急事件,如影响社区的事件、软件安全、系统升级等 Dora 社区做出决议,必须获得 DNT 代币总量的 60% 以上通过(具体比例可以通过社区投 票方式更改) 。Dora 网络本着公开透明的原则,由托管机构监督数字资产的流行并定期分享给社 区。 为了激励 dApp 开发以及生态建设,Dora 网络设计了“dApp 孵化以及投票“的治理规划。 dApp 孵化指 Dora 网络用户可以锁定代币供 dApp 开发者(或者团队)在孵化期内使用,解决 dApp 开发者(或者团队)前期开发资金不足的问题。dApp 开发者(或者团队) ,可以使用锁定 代币进行开发测试以及早期用户推广。孵化结束后,Dora 网络用户可以随时收回未被使用的锁 定代币。孵化之前,dApp 开发者(或者团队)在 Dora 社区公示:dApp 项目内容以及开发周 期,需孵化的 DNT 代币数量以及时间,dApp 项目代币发行时间以及 dApp 项目代币的空投比 例等等。dApp 项目发行代币时,按照公示的空投比例空投给提供孵化的 Dora 网络用户。 为了进一步激励 dApp 开发以及生态建设,Dora 网络用户在一定周期内,对开发中的 dApp 进行投票。投票最高的前几名 dApp 获取一定的奖励。具体奖励查看“交易费用池奖励”介绍。 7 总结和进一步工作 Dora 提出了智能合约并行化的 SSP 算法,设计了兼顾安全和效率的 DVBC 分层共识算法, 采用多链技术,使整个系统能达到商业级别性能。并且,Dora 完全兼容以太坊 EVM,降低了 dApp 开发者的移植成本。此外,Dora 采用免费交易模式激励生态进一步发展。 技术总是不断进步的,Dora 会持续关注区块链领域最新的研究方向,吸收和改进已有的研 究成果,比如更高效安全的共识算法。另外会尝试让一些可信任的智能合约通过提前指定前置条 件的方式来加速并行执行效率。也会考虑随着上层应用的需要动态扩展链上支持的交易类型。 智能合约除了支持 EVM 之外,Dora 计划支持 WebAssembly,让更多的开发者能在 Dora 上快速开发 dApp。 致谢 感谢路印基金会和香港 Loopnest 加速器孵化项目对本项目的投资。本文的很多想法来源于 路印 [15] CEO 王东先生。他在论文撰写过程中也给予了很多帮助和指导,在此表示由衷的感谢。
17 .参考文献 17 参考文献 [1] Satoshi Nakamoto. Bitcoin: A peer-to-peer electronic cash system. https://bitcoin.org/ bitcoin.pdf, Dec 2008. [2] Vitalik Buterin. Ethereum: A next-generation smart contract and decentralized application platform. https://github.com/ethereum/wiki/wiki/White-Paper, 2014. [3] Serguei Popov. The tangle. https://www.iotatoken.com/IOTA_Whitepaper.pdf. [4] Ardor whitepaper. https://www.jelurida.com/sites/default/files/ JeluridaWhitepaper.pdf, 2016. [5] Jae Kwon and Ethan Buchman. Cosmos, a network of distributed ledgers. https://cosmos. network/resources/whitepaper. [6] Asch whitepaper. https://github.com/AschPlatform/asch/blob/master/docs/ whitepaper/index.md. [7] PCHAIN Foundation. Pchain whitepaper. https://pchain.org/#whitepaper. [8] Ethan Buchman. Tendermint: Byzantine fault tolerance in the age of blockchains. http://atrium.lib.uoguelph.ca/xmlui/bitstream/handle/10214/9769/Buchman_ Ethan_201606_MAsc.pdf, Jun 2016. [9] Joseph Poon and Thaddeus Dryja. The bitcoin lightning network. https://lightning. network/lightning-network-paper.pdf, 2016. [10] dantheman. Dpos consensus algorithm - the missing white paper. https: //github.com/liuchengxu/blockchain-tutorial/blob/master/content/misc/ dpos-consensus-algorithm-this-missing-white-paper.md, 2017. [11] Silvio Micali, Michael Rabin, and Salil Vadhan. Verifiable random functions. In Proceedings of the 40th Annual Symposium on the Foundations of Computer Science, pages 120–130, New York, NY, October 1999. IEEE. [12] Robin Milner, Joachim Parrow, and David Walker. A calculus of mobile processes, I. Inf. Comput., 100(1):1–40, 1992. [13] Robin Milner, Joachim Parrow, and David Walker. A calculus of mobile processes, II. Inf. Comput., 100(1):41–77, 1992. [14] Robin Milner. Communicating and mobile systems - the Pi-calculus. Cambridge University Press, 1999. [15] 王东, 周杰, and 王辉. Loopring(路印):去中心化代币交易撮合协议. https://github. com/Loopring/whitepaper/raw/master/zh_whitepaper.pdf, 2018. 法律事务 所有的运营一律遵循当地的法律法规及监管要求。若出现需要寻求法律意见的事项,需要通 过当地律师予以确认。
18 .参考文献 18 免责声明 英⽂文部分,参考PWC提供的英⽂文描述 本文件是项目阐述的概念性文件【白皮书】,并非出售或者征集招标与 Dora 产品及其相关 公司的股份、证券或其他受管制产品。根据本文件不能作为招股说明书或其他任何形式的标准化 合约文件,也并不是构成任何司法管辖区内的证券或其他任何受管制产品的劝告或征集的投资 建议。本文件不能成为任何销售、订阅或邀请其他人去购买和订阅任何证券,以及基于此基础上 形式的联系、合约或承诺。本白皮书并没有经过任何国家或地区的司法监管机构审查。本文件中 所呈现的任何信息或者分析,都不构成任何参与代币投资决定的建议,并且不会做出任何具有倾 向性的具体推荐。您必须听取一切有必要的专业建议,比如税务和会计梳理相关事务。投资者一 旦参与投资即表示了解并接受该项目风险,如果投资者所在国家或地区有相关法律法规限制或 者禁止参与本投资,那么请不要参与投资,否则视为个人为此承担一切相应结果和后果。对于本 文件中述的任何内容的准确性或完整性,或者以其他方式发布的与项目相关的内容,不给予任何 声明和保证; 在没有前提条件的情况下,不能对任何具有前瞻性、概念性陈述的成就或合理性内 容给予任何声明和保证; 本文件中的任何内容,不作为任何对未来的承诺或陈述的依据; 争议解决条款 当出现争议时,有关方面应依据协议通过协商解决。如协商无法解决,可通过法律解决。