如何扩展DeFi吞吐量:Layer-One 篇(上)
如果你最近用过 DeFi ,最近高涨的交易费会令你瞠目结舌。如今,就以太坊交易而言,数十乃至数百美元的交易费实属稀松平常之事。在如此高昂的手续费下,只有巨鲸才能有利可图,更别提什么 “让没有银行账户的人也能享受银行服务”、“让免许可型金融基础设施惠及所有人” 等宏图伟业了。以太坊正在成为富人的聚集地。
如果是小额交易,手续费可能会超过交易金额的 10%
高昂的手续费表象之下的核心是 区块链可扩展性问题。这个问题太过臭名昭著,以至于有了自己的维基百科页面。这是当前区块链最主要的局限性,此外还有终局性时滞太大、抢跑交易、跨链互操作性等局限性。
我们想要创建一个能让所有价值自由流动的代币化世界,区块链的局限性会阻碍我们实现这一愿景。这就是为什么 0x Labs 组建了一个专门的研究工程师团队针对这些局限性开发解决方案。在本文中,我们将探索以太坊的局限性及其对 DeFi 用户的影响。我们还将简要介绍下一代区块链。在后续文章中,我们将探索另一类解决方案(Layer 2),并介绍我们自己解决 DeFi 需求的策略。
首先,要知道以太坊交易的大小是以 Gas 消耗量来衡量的。交易会打包到区块中,大约每 13 秒出一个块。每个区块只能容纳有限的交易,因为有所谓的 “区块 Gas 上限”。目前,每个区块的 Gas 上限是 1200 万。一个普通的 ERC20 代币交易需要消耗大约 5 万 Gas 。这就意味着,一个区块最多可容纳 240 笔代币转账操作,即,每秒可完成大约 18 笔交易。DeFi 交易通常涉及多笔代币转账,以及其它记账操作,这会导致成本翻倍,并进一步限制吞吐量。Gas 容量和出块时间意味着有源源不断的 Gas 可供交易使用。
我们先来看看以太坊诞生以来,Gas 的供应量和使用量增长情况。
Gas 使用量
每天,以太坊上都会新增大约 6000 个区块,容纳数十亿 Gas 的交易。这个数量一直在变化,并随着时间流逝而增长,主要是因为区块 Gas 上限增加。与此同时,随着以太坊上交易的数量和规模在不断增加,交易所消耗的 Gas 总量也在不断增加。
回顾整个以太坊的发展史,Gas 的供应量(灰色部分)和消耗量(黑色部分)如下图所示:
(你可以说,以太坊是企业用的,因为 Gas 使用量在工作日更高)
如图所示,在拜占庭(Byzantium)、君士坦丁堡(Constantinople)和缪尔冰川(Muir Glacier)硬分叉发生前,Gas 供应量都出现了锯齿状的骤降。这些都是以太坊难度炸弹,又称冰河世纪(ice age),所产生的影响。在冰河期,出块时间会呈指数型增加,导致每天挖出的块数量减少,每天的 Gas 供应总量也随之减少。当然了,这种情况是非常糟糕的,因此以太坊网络需要用硬分叉来恢复网络。难度炸弹的用意正在于此:引入改进措施,以免出现创新停滞的情况。由于君士坦丁堡硬分叉忘了重新设置难度炸弹,以太坊紧接着又引入了缪尔冰川硬分叉。之后的柏林硬分叉正在考虑改变这一机制(EIP 2515)。
通过图中黑色部分的 Gas 使用量,我们可以看出 2017 年 ICO 热潮以来,以太坊的 Gas 使用量占 Gas 上限的 60% 以上。自此以后,Gas 上限经过几次跃升,增长了四倍。每次跃升后,Gas 使用量也出现相应增长。过去几个月来,以太坊的 Gas 使用量似乎卡在了 Gas 上限的 95% 上。
要想知道以太坊的 Gas 使用率为何无法超过 95% ,我们需要先了解空块和叔块。
空块和叔块
纵观以太坊的发展史,即使是在供不应求的情况下,以太坊的 Gas 使用量也没有超过 Gas 上限的 95% 。令人惊讶的是,剩余 5% 的 gas 都是以空块的形式被浪费了。空块是有规律的,大约每挖出 20 个区块就会有一个空块。在有付费交易等待打包的情况下,为什么还会有人挖空块?我们来看一下数据:
空块率随时间的流逝而稳定增长,目前在 5% 左右。所有矿池都有挖空块,因此不是恶意行为。真正的问题是,出块速度过快。如果挖出一个区块的时间少于 6 秒,这个块是空块的概率会成倍增加(译者注:作者这个断言应该是根据时间戳统计数据得出的,因为没有使用虚拟语气)。
有一种解释是,矿工在收到一个新区块的区块头、但还没处理完整个区块时就开始挖下一个区块。这在比特币中叫作 “简单支付验证(SPV)” 挖矿,可以让矿工立即开始挖下一个块,但是只能挖空块。一旦新的区块处理完成,矿工就可以开始打包并挖出下一个区块。可以证实这一解释的另一个证据是,如果同一个矿工连续挖出了两个区块,空块率就会降低 25% 。
除了挖空块之外,还有一种方法是在处理新区块的同时继续接着上一个区块挖矿(而不是挖更新的可挖位点)。这就有可能导致多个新区块被挖出。如果这种情况发生在以太坊上,网络就会选出一个合法区块,并将其它区块视为叔块。挖出叔块的矿工会获得同样的区块奖励。叔块率非常稳定:
2018 年,Gas 使用量达到顶峰时,叔块率也达到了顶峰(现已降至稳定的 5%)。那段时间,空块率也有增加,可能是因为矿工改变了策略。
虽然叔块率对以太坊可扩展性的影响不是很明显,但确实存在。拜占庭硬分叉中的 EIP-100 调整了区块难度评估公式,将叔块计算在内。因此,叔块率越高意味着在矿工挖出的区块中,作为叔块被浪费的区块越多,作为合法区块被添加到最长链上的区块越少。具体表现为出块时间增加,每日 Gas 供应量减少。(导致出块时间增加的另一大原因是冰河期。)
无论是叔块还是空块,都是以太坊上重要的网络健康标志。二者中任意一者增加都意味着每日 Gas 供应量减少。对叔块率的分析是 EIP 2028 和 1559 背后主要的研究内容之一(参见 1、2、3)。令人惊讶的是,这两个 EIP 都没有提到空块率,而且研究上存在方法上的缺陷。最好能采用恰当的统计方法(如逻辑回归)来进行更严格的分析,并将叔块率和空块率都纳入考虑范围。
有一些方法可以用来降低空块率和叔块率。假设导致空块率和叔块率较高的根本原因是,由于网络和区块处理延迟,矿池无法获得最新状态。一种简单(但是不可取)的方法是,让矿池变得更加中心化,将最新状态集中在一处。去中心化更高的解决方案是,使用 bloxroute 在矿池之间创建专属的互联通道。还有一种解决方案的灵感来自 “间谍挖矿(spy mining)”,就是让矿池预先共享它们正在挖的区块。其它矿池就能针对每一个在挖区块准备好下一个区块,一旦某个矿池成功挖出了区块,其它矿池就知道下一个该挖哪个区块,并且马上切换过去。从更高层次来看,改进节点通信协议和处理算法也会带来帮助,或许也能带来一些收益。但是,正如我们所见,降低叔块率和空块率最多可以将每日 gas 供应量提高 5% 左右。
由此看来,gas 上限是 gas 供应量的 95% 。那么,如果人们对 gas 的需求超过这一上限,会发生什么情况呢?
Gas 价格
当以太坊用户对 Gas 的需求接近上限时,会发生什么情况?矿工可以随心所欲地选择交易进行打包(详见下文)。但是实际上,矿工会优先打包 Gas 价格高的交易,因为这会让他们的收益最大化,最终引发针对 Gas 的最高价格拍卖。
Gas 价格已经成为完美的无弹性供给范例。 随着以太坊网络对 Gas 的利用率超过 80% ,向 95% 的上限直线靠拢,Gas 价格就会出现大幅上涨。需求量增加只会推动 Gas 价格上涨,直至用户负担不起为止。让 Gas 价格下跌的唯一方法是,提高 Gas 供应量或降低用户对 Gas 的需求量。近期 Gas 上限的增加并不足以有效压低 Gas 价格。
乍看之下,人们对以太坊的兴趣增加,只会导致 Gas 价格上涨,不会导致以太坊的使用量增加。实际上,Gas 价格高的交易会淘汰 Gas 价格低的交易。那些小额 NFT(非同质化代币)交易会减少,大额的 DeFi 交易会增加。
EIP 1559 旨在让 Gas 供应量在较短的时间范围内更具弹性。在需求量高峰时期,会创建出较大的区块(高达 2000 万 Gas)。这有助于平抑 Gas 价格,让交易更早被打包进区块。但是,这并不会改变长期中的无弹性供应问题。EIP 1559 实施后仍然会有一个长期不变的 Gas 上限。这就意味着,Gas 价格将持续上涨,直至需求量足够小为止(与现状相同)。此外,EIP 1559 实施后仍有用来支付给矿工、作为打包交易的报酬的激励机制(假设矿池会继续按照这个激励的大小为交易排序、创建区块)。这就意味着,抢跑交易、Gas 竞价之战和矿工抽取价值的问题依然存在。
图中数据代表被打包进下一个区块所需支付的最低价格。如果你愿意等久一点,Gas 价格会低得多。从近期的历史数据来看,如果你愿意等待两分钟及以上,Gas 价格就会下降。EIP 1559 有助于在降低溢价的同时加快交易的处理速度。
因此,达到 Gas 上限时,Gas 价格就会上涨。那么,我们如何提高 Gas 上限?
原文链接:
https://blog.0xproject.com/scaling-defi-layer-one-7eeb24aca4f0
作者: Remco Bloemen
翻译&校对: 闵敏 & 阿剑