共计 3246 个字符,预计需要花费 9 分钟才能阅读完成。
在比特币系统中,为了保证安全,比特币的交易吞吐率需要保持一个较低的水平。为了提高区块链的吞吐率,很多方案被提出来,其中一种方案通过使用有向无环图(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。
2. 为了适配智能合约的场景,用户在以太坊中发起交易时,不直接指定交易费,而是指定一个交易费单价,被称为燃料价格(gas price)。交易实际执行时的计算量就是消耗的燃料,燃料用量乘以燃料价格是以太坊每笔交易最终的交易费。
3. 以太坊出块速度较快,所以会出现更多分叉。为了给矿工提供更好的挖矿体验,以太坊引入了“叔块”的概念。每个区块除了选择自己的父亲区块,还应当选择最多两个“叔块”。每个区块每选择一个叔块,可以额外获得基础区块奖励 1/32 的奖励。而被主链区块选中的叔块,其中的交易不会被执行,但也可以获得一定的奖励,具体数值是:
(8+ 叔块高度 - 主链块高度)/8* 基础区块奖励
接下来,我们以 Conflux 共识机制为例,为大家分析一下使用 DAG 账本结构的 PoW 公链,在激励机制设计上有什么新的挑战,以及如何应对。
DAG 的区块奖励机制
比特币的方案在 DAG 中有什么问题
Conflux 通过有向无环图结构保留了所有的区块,在保证去中心化和安全性的前提下,可以提高性能。但是,经过计算和分析,我们发现如果在 DAG 中直接采用比特币或以太坊的区块奖励方案会存在一些问题。
在 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 官方交流群