DAG 下的激励机制的挑战与对策

在比特币系统中,为了保证安全,比特币的交易吞吐率须要保持一个较低的水平。为了提升区块链的吞吐率,不少方案被提出来,其中一种方案经过使用有向无环图(Directed Acyclic Graph, DAG)的帐本结构,提升基于工做量证实(Proof of Work, PoW)的区块链系统的吞吐率,从而实现不牺牲安全性与去中心化的效率提高。安全

那么和经典的链式结构的 PoW 区块链(如比特币、以太坊)相比,DAG 帐本结构对区块奖励与交易费机制设计提出了哪些新的要求和挑战呢?

比特币/以太坊的激励机制

对于一个基于工做量证实的公链来讲,经过设计合理的激励机制,来鼓励矿工参与挖矿并遵照规则,是很是重要的事情。微信

做为加密数字货币的开山鼻祖,比特币合理的激励机制设计是它成功的重要因素。在比特币中,矿工每挖出一个区块,就能够得到必定数额的 区块奖励 。最开始这个奖励数额是 50 BTC, 以后每挖出 21 万个区块,比特币的区块奖励就减半。目前比特币的区块奖励是 12.5 BTC。 预计在 2020 年夏天,比特币的区块奖励将降至 6.25 BTC。性能

除了区块奖励,比特币矿工的另外一个收入来源是交易费。每一个用户在发起一笔交易时,须要支付一笔 交易费 。每一个比特币区块中全部的交易费会付给挖出这一区块的矿工。在比特币的设计中,早期的交易很少,区块奖励是矿工主要的收入来源。随着时间的流逝,当比特币的用户愈来愈多,区块奖励也通过屡次减半后,交易费将取代区块奖励成为主导部分。例如,在比特币区块 500439 中,交易费超过 13 BTC,高于该区块的区块奖励 12.5 BTC。区块链

以太坊的矿工收入主要也包含 区块奖励交易费 两部分,但与比特币相比有几处不一样:加密

1.以太坊的基础区块奖励没有比特币的按期减半计划。在初始阶段,以太坊的基础区块奖励是 5 ETH。在 2017 年名为拜占庭的硬分叉中,649 号提案被激活,基础区块奖励调整为 3 ETH。目前的 1234 号提案计划将基础奖励调整至 2 ETH。spa

2.为了适配智能合约的场景,用户在以太坊中发起交易时,不直接指定交易费,而是指定一个交易费单价,被称为燃料价格(gas price)。 交易实际执行时的计算量就是消耗的燃料,燃料用量乘以燃料价格是以太坊每笔交易最终的交易费。设计

3.以太坊出块速度较快,因此会出现更多分叉。为了给矿工提供更好的挖矿体验,以太坊引入了“叔块”的概念。每一个区块除了选择本身的父亲区块,还应当选择最多两个“叔块”。每一个区块每选择一个叔块,能够额外得到基础区块奖励 1/32 的奖励。而被主链区块选中的叔块,其中的交易不会被执行,但也能够得到必定的奖励,具体数值是:code

(8+叔块高度-主链块高度)/8*基础区块奖励

接下来,咱们以 Conflux 共识机制为例,为你们分析一下使用 DAG 帐本结构的 PoW 公链,在激励机制设计上有什么新的挑战,以及如何应对。flux

DAG 的区块奖励机制

比特币的方案在 DAG 中有什么问题

Conflux 经过有向无环图结构保留了全部的区块,在保证去中心化和安全性的前提下,能够提升性能。可是,通过计算和分析,咱们发现若是在 DAG 中直接采用比特币或以太坊的区块奖励方案会存在一些问题。rem

在 Conflux 的共识机制中,全部的区块被保留了下来。之因此这样设计,不只是为了最大化交易处理速率,也有安全上的考虑。(目前已知的 DAG 区块丢弃规则,在出块速度较快时,均可能会被坏人利用,致使大量好人区块被丢弃,从而可能影响安全性。所以保留全部区块是惟一的选择。)在这种状况下,若是咱们依然采用比特币或以太坊的规则,每个区块的区块奖励是一个固定值,将会面临一个问题——咱们称之为 “零成本攻击”的问题。

什么是“零成本攻击”? 咱们假设在比特币中,有一个攻击者正在尝试挖一条分叉链,以此来与主链竞争。若是竞争失败,整个分叉链会被丢弃,攻击者拿不到任何奖励。在这个过程当中,攻击者消耗了大量算力,付出了巨额的电费。这样的攻击是有高额的成本做为代价的。

但若是一个攻击者在 Conflux 中这样作,他依旧能够拿到和正常挖矿至关的区块奖励。这是由于 Conflux 会保留全部的区块,固定区块奖励意味着攻击者不会受到任何惩罚。(须要注意,攻击者在 Conflux 这样作是没法双花已经被确认的交易的,Conflux 的安全性以很是高的几率保证这件事)。

这个问题虽然不会危及链的安全性,可是会影响交易被确认的时间,也会使 DAG 结构变得更加复杂,从而增长每一个矿工的工做量。咱们不但愿看到,因为激励机制没有对相似这样的攻击行为作出任何惩罚,致使天天都有矿工在攻击 Conflux。因此,咱们在设计激励机制的时候,仔细考虑了这一点。而咱们的解决这一问题的方式是惩罚矿工“伪装没有看到一些区块”的行为。

Conflux 的区块奖惩方案

下图中以一个例子,说明了一个坏人若是想挖分叉链,就须要伪装没有看到一些区块。

若是要具体地描述这个机制,就要先讲一个概念:“光锥外区块”(anticone-block)。什么是“光锥外区块”呢?在 DAG 中,若是两个区块之间没有一条路径,这两个区块的互为对方的 “光锥外区块”, 好比在下图中,B 和 C 互为对方的光锥外区块。

一个区块的区块奖励与它的光锥外区块的数量有关,光锥外区块越多,其奖励越少。当坏人挖出一个新区块时,那些伪装没看见的区块,都会成为坏人区块的“光锥外区块”,减小坏人区块的区块奖励,对坏人形成经济上的惩罚。

避免重复交易与交易费机制

因为 Conflux 采用了 DAG 结构,所以不一样的区块中可能会包含相同的交易。最近,社区里有不少热心的朋友询问咱们,若是相同的交易过多,致使有效吞吐率大幅降低怎么办。

这也是一个和激励机制紧密相关的问题,解决这一问题,归纳来讲就是两句话:

1.矿工从交易等待池(加权)随机选取交易

2.设计激励机制,鼓励矿工遵照上一条规则

交易随机选择策略

在比特币和以太坊系统中,每一个矿工会选择交易费最高的若干交易来打包,这样的选择在比特币或以太坊这样链式结构下是没有任何问题的。

可是在 Conflux 的 DAG 结构中,若是依然采用这样的策略,就可能会致使每一个节点选择的交易都差很少同样,都是那几笔交易费最贵的交易。那么区块中就会出现大量的重复交易,致使吞吐率下降。

为了解决这个问题,一个很直观的想法是,那就让矿工们从交易等待池中,随机地选取交易。当交易等待池中的交易越多,矿工随机选取交易出现冲突的几率就越小,重复交易的比例就越小。

除此以外,咱们还应该考虑交易的优先级问题。在比特币/以太坊的系统中,更高的交易费意味着更高的优先级。在 Conflux 的系统中,也应当保证交易费更高的交易具备必定的优先权。所以,交易选择策略的目标不该是最大化去重后的交易数量,而是去重后的交易费总量。因此咱们会根据交易费为每笔交易计算一个权重,矿工根据权重从交易等待池随机选取交易。

交易费用激励机制

交易随机选择策略能够在不少交易都处于等待的状态时,很好地解决交易重复的问题,同时还能够兼顾高交易费交易的优先级。但这样的策略为激励设计带来了巨大的挑战。

矿工们的目的是从挖矿的过程当中获取收益。若是违背交易选择策略,能够为矿工们带来更高的收益,矿工们天然就会选择让本身收益最大化的方案,而非遵照策略。若是 Conflux 采起和比特币同样的设计,一个区块中的交易费由该区块的矿工所有拿走,每一个矿工的最优策略将会是选择交易费最高的交易,而非遵照上述规则。

这实际上是一个博弈论机制设计问题。咱们将每一个节点打包交易的过程抽象成一个博弈问题并进行分析后发现,若是在多个并行存在的区块之间,平均分配这些区块中的交易手续费,矿工节点之间能够造成一种合做的模式:即共同经过减小冲突来最大化各自的收益。每一个节点的收益与这些区块的总交易费成比例。矿工若是遵照规则,将能够最大化这些区块的总交易费,从而也就最大化了本身的指望收益。


欢迎关注咱们的微信公众号:Conflux中文社区(Conflux-Chain)

添加微信群管理员 Confluxgroup 回复“加群”加入 Conflux官方交流群

相关文章
相关标签/搜索