LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 从以太坊高额交易费限制聊起,性能问题将如何阻碍DeFi发展,又有哪些解决方

从以太坊高额交易费限制聊起,性能问题将如何阻碍DeFi发展,又有哪些解决方

2020-09-05 洁sir 来源:区块链网络

如果你最近使用过DeFi,则交易费用会给你带来极大的震撼。如今,为以太坊交易支付数十至数百美元的费用是很正常的。在这样的价格下,只有鲸鱼可以赚钱,而你却可以忘掉崇高的目标,例如为每个人提供无银行业务或未经许可的金融基础设施。以太坊正在成为富人的地盘......


小行业最终可能要支付超过10%的费用。

高额费用只是更大的区块链可扩展性问题的症状,这个问题非常臭名昭著,这是当前区块链的最大局限性,但是还有更多的局限性,例如最终确定时间,对前端运行的敏感性,跨链互操作性等。


我们希望创建一个代币化的世界,其中所有价值都可以自由流动,而区块链的局限性无助于我们的使命。在本文中,我们将探讨以太坊的限制是什么样的,以及它如何影响DeFi用户。

请记住以太坊交易的GAS交易量不同。事务收集在大约每13秒创建的块中。每个街区都有一定数量的交易空间,被称为限价交易。目前,每个区块都有约1200万GAS交易的空间。一个普通的ERC-20代币转移大约需要五万个GAS。这意味着块最多可以包含240个代币传输,或每秒约18个事务。 DeFi交易通常涉及多次代币转移和其他簿记,这使成本成倍增加并进一步限制了吞吐量。GAS限制和封锁时间意味着有稳定的 GAS可供交易。

首先,我们来看看以太坊历史上的GAS供应及其使用情况如何增长。

gas 用量

每天大约开采六千个区块,为数十亿的GAS交易创造空间。该数量一直在变化并随着时间的增长而增长,这主要是由于GAS限制的增加。同时,随着以太坊获得越来越多的交易,交易消耗的GAS总量也一直在增长。

回顾以太坊的整个历史,GAS的供应(灰色)和消耗(黑色)看起来像这样:



可以说以太坊是企业级的,因为在办公时间内使用量更高。

就在拜占庭,君士坦丁堡和穆尔冰川硬叉之前,GAS供应出现了锯齿状的数据。这些就是以太坊的难度**(也称为冰河世纪)的影响。在冰河时期,封堵时间呈指数增长,导致一天开采的区块减少,因此每日总GAS供应量减少。这当然是非常不希望的,并且迫使网络采用硬叉对其进行修复。这正是它的目的:它通过强制使用硬叉来防止创新停滞,从而带来许多改进。伊斯坦堡的硬叉忘了重设**,因此穆尔冰川迅速跟进。即将到来的柏林硬叉正在考虑改变这种机制(EIP 2515)。


观察使用情况(黑色),自从2017年ICO热潮以来,以太坊一直在运行60%以上的容量。从那时起,GAS限制以明显的跳跃增加了四倍,每次都有相应的GAS使用量增加。在过去的几个月中,以太坊似乎停留在95%的使用率上。


要了解为什么以太坊不能超过95%的使用率,我们需要查看空块和ommer块。

空块和ommer块

在整个历史中,尽管有需求,以太坊从未使用超过限额的约95%。令人惊讶的是,剩余的5%被浪费在完全为空的块中。这些空块定期发生,大约每二十个块发生一次。为什么有人在有交易需要支付时才挖空块?让我们看一下数据:


空块的比率随时间稳定增长,目前约为5%。所有的矿池都为它做出了同等贡献,因此它不是恶意矿工。相反,真正的原因似乎是快速封锁。如果挖掘一个块的时间少于6秒,则该块被清空的机会将成倍增加。


一种解释是,矿工在收到新的区块头时开始处理下一个区块,但未处理完整个区块。这种技巧在比特币中称为SPV挖掘,可帮助矿工立即开始下一个区块,但只能产生空区块。一旦对新块进行了完全处理,矿工就可以组装下一个完整块并切换为开采该块。这种解释的进一步证据是,如果同一位矿工快速连续发现两个区块,则空区块率降低25%。


挖掘空块的另一种方法是在处理新块时继续在前一个块上进行挖掘。这可能导致多个下一个块被挖掘。如果发生这种情况,以太坊将选择一个规范的区块,并记住其他人为ommers。矿工们仍然会从中获得少量回报。这以稳定的速度发生:


ommer率在2018年使用高峰期间达到峰值,但一直下降到所有已开采区块的5%的稳定比率。这与空区块率的增加相吻合,因为矿工可能会在这个时候改变策略。


尚不清楚立即付款率会损害以太坊的规模,但确实如此。自从拜占庭(Byzantium)中的EIP-100以来,难度调整可保持恒定的规范块和ommer块比率。因此,较高的ommer率意味着在ommers上浪费了更多的块,而在链上的增长则更少。这表现为阻塞时间增加,因此每天可用的总GAS减少。 (导致阻塞时间增加的另一个主要原因是冰河时期。)


无论是空还是空的区块,这些都是以太坊重要的网络健康信号。两者中的任何一个增加都意味着每天可用于交易的总GAS减少。 ommer比率的分析是支持EIP 2028和1559的研究的主要部分。令人惊讶的是,他们都没有提到空阻塞率,并且该研究存在方法上的缺陷。最好是采用适当的统计方法(如逻辑回归)进行更严格的分析,同时考虑夏季和空置率。


有一些方法可以降低ommer和空率。推测的根本原因是由于网络和处理延迟,矿池没有可用的最新状态。一种简单但不理想的解决方案是将矿池更多地集中化,以使最新状态集中在一处。 bloxroute等稍微分散的解决方案正在池之间创建专用的互连。受“间谍采矿”启发的想法是让矿池预共享他们当前试图开采的区块。其他池将为每种可能性准备下一个块,一旦一个池成功挖掘了它的块,他们就已经知道他们要在下一个开采的块并可以立即切换。上升到更高的层次,节点通信协议和处理算法的改进也将有所帮助,这里可能仍有一些收获的空间。但最终,降低本身的空载率将使每天的GAS供应最多增加我们看到的5%。

因此,似乎有95%的GAS限量,但是如果人们想使用超过95%的GAS会怎样?

GAS价格

当以太坊接近GAS极限时会发生什么?矿工可以根据自己的意愿自由选择交易,但实际上,他们以最高GAS价格优先的顺序进行处理,因为这(大约)使他们的利润最大化。最终结果是对可用GAS进行第一次价格拍卖。


GAS价格已成为完全无弹性供应的教科书示例。随着网络利用率超过80%并以95%的水平垂直起飞,它开始显著增加。需求的任何潜在进一步增长只会使价格上涨,直到阻止需求回到相同水平为止。降低价格的唯一方法是增加GAS供应或减少需求,最近GAS限额的提高不足以有效降低GAS价格。


乍一看,对以太坊的任何进一步机遇只会提高价格,而不会导致更多的使用。实际上,较低的使用价值将被较高的使用价值所挤占,廉价游戏NFT的交易将减少,而DeFi交易将更大。


提案EIP 1559旨在使GAS供应在较短的时间范围内更具弹性。在需求旺盛的时期,可以创建更大的区块(多达2000万个GAS)。这应该有助于平抑GAS价格的峰值,并让交易更早地包括在内。但是,它不会改变长期的供应弹性。根据EIP-1559,仍然会有长期的固定GAS费率,这意味着价格将上涨,直到需求足够小为止。根据EIP-1559,仍然有动机为在一个区块内首先被处理而支付溢价(假设池继续按该顺序创作区块)。这意味着,抢先的,竞标之战和矿工的价值提取将继续。


如果你愿意等待更长的时间,那么GAS价格可能会更低。历史数据表明,如果你愿意等待两分钟或更长时间,则可以得到不错的回报。 EIP-1559应该有助于降低溢价,以加快处理速度。


因此,当我们达到GAS限额时,GAS价格会上涨,问题是我们如何提高此限额?

Gas限额

矿池决定GAS限额。让我们快速回顾一下矿工和矿池的工作方式:几乎所有矿工都在集中其资源。他们没有集中所有精力去寻找下一个障碍,并且对长期无偿支出做出冒险,而是集中资源并获得稳定的收入来源。采矿池可以验证每个矿工的贡献并编写下一个要工作的区块,从而促进了这一过程。让我们看看这些份额在以太坊的历史中是如何发展的:


Sparkpool,Ethermine和F2Pool共同创作了大部分程序块。


除了参与硬分叉,池运营商还承担着一项重要的治理责任:他们设定以太坊的GAS限制。与区块时间和GAS价格不同,每个区块的GAS限额都是积极确定的。新的GAS限制值被限制在距先前区块0.1%的范围内,因此每个区块只能向上或向下轻推一小步。如果他们都同意,微动会迅速增加,以便在2.5小时内GAS极限可以翻倍或减半。如果未达成协议,则GAS限值将变为池大小加权的中位数。


当前,由于缺乏有关矿工在现实中的行为的清晰信息,我们采用的是一种相当简单的方法:投票系统。矿工设定gas限制的方式是以太坊早期的权宜之计。与许多足够好的权宜之计解决方案一样, EIP 1559提出了一种不同的机制,目前针对柏林硬叉进行了讨论。


#以太坊矿工投票赞成将大块GAS限制从10,000,000增加到12,500,000。从理论上讲,这意味着以太坊网络现在具有每秒处理约44个事务的能力,而不是约35个。这是社区的另一个里程碑。

最近,两个最大的矿池做出了颇有争议的决定,将每日GAS产量提高了25%。目的是通过增加GAS供应量,从高昂的交易费用中获得急需的救济。从到目前为止我们所看到的,交易需求的增长快于GAS限额的增长,这意味着价格可能会暂时缓解,但最终会再次上涨。

提高GAS限额会给以太坊的安全性带来巨大的隐性成本。如我们所见,GAS限制会增加全空堵塞率。在正常的交易负载下,这种增加很小。但是出于安全性考虑,我们仅对最坏情况下的对抗行为感兴趣。 Perez&Livshits(2019)研究了这种情况,并且在相同的GAS成本下,其交易处理速度比正常交易慢100倍。如果你用这样的事务填充一个块,则节点将花费90秒钟来处理它,从而导致节点落后,并且池中矿工单体和空块。自发布以来,已经有一些缓解措施,但远未解决。这导致两个主要节点开发人员PéterSzilágyi和Alexey Akhunov批评提高GAS限制的决定。


因此,当我们达到GAS限额时,GAS价格就会上涨,看来我们不应进一步提高GAS限额。我们还能做什么?我们可以降低交易的GAS成本吗?

GAS成本

交易的GAS成本主要由EVM成本操作所弥补。事务由许多EVM操作组成,每个操作的成本由EIP和硬分叉控制。在过去的硬分叉中,某些操作的GAS成本已增加(EIP 150、160、1884)或降低(EIP 1108、2028、2200)。计划中的柏林硬叉还考虑了许多特定于GAS的变更(EIP 1380、1559、2046、2565、2537)。


所有这些更改的目的是使费用更准确地反映运营的真实成本。这意味着随着计算机和算法变得更快,计算操作的成本将下降。存储操作的成本是另一回事。存储和查找的成本取决于链状态的大小以及以太坊状态的大小,并且不断增长。这种增长不能被存储设备或数据库的改进所抵消。


这意味着在DeFi中存储将继续是高额费用。创建新的余额需要花费2万GAS,而修改现有的有5000GAS。转移至少会修改两个余额,一次交换至少要进行四个或更复杂的DeFi交易,可能会涉及更多昂贵的状态。似乎没有简单的方法来减少所涉及的存储量,并且如果有的话,它的成本也在增加。最后,安全问题与提高GAS上限同样适用。对于当前的实际平均运营成本天真地优化GAS成本是非常危险的。

到现在为止,很清楚为什么扩展以太坊是一个棘手的问题。在讨论拟议的解决方案之前,我们想深入了解当前以太坊的另一个限制——DeFi用户的局限性。

矿工可提取价值

共识规则提供了一些重要的自由,例如交易选择和排序。对于常规的代币转移,这无关紧要,但是对于DeFi交易,在先行交易中具有显著的经济价值。如果将目标交易夹在两个攻击交易之间,则可以考虑使用更复杂的攻击。


似乎池没有恶意地使用其事务排序自由,但是它们仍然像从中那样从中受益。池可能使用Geth来按GAS价格订购交易。这将创建一个GAS价格拍卖,最高薪的交易排在第一位。不幸的是,任何人都可以通过提高出价来领先交易。有竞争力的贸易商会继续竞标GAS价格,直到交易利润完全被GAS费消耗掉为止。在这一点上,所有可利用的价值最终都作为交易费落入了矿工的腰包。


在其他情况下,立即进行另一笔交易是有价值的,例如,成为价格预告更新后第一个清算头寸的交易。这被称为“后退”,最终也使矿工获利。


矿工的可提取价值最终通过更大的价差,更差的价格,更高的费用和更多的失败交易从常规的DeFi用户那里提取。为了获得出色的DeFi体验,应该解决此问题。解决该问题的方法是限制交易的订购自由度,例如,要求首先以最低gas价格订购一个区块中的交易。


现在我们对以太坊的限制以及它们如何影响DeFi有了概述。当然,所有致力于扩展的项目团队都会解决这个问题,是吗?

第一层,第二层

有许多非常出色的团队致力于解决扩展问题。解决方案有两种,第一层和第二层。第一层解决方案旨在构建以太坊的更具可扩展性的替代方案,第二层解决方案旨在在以太坊之上构建可扩展的基础架构。


让我们从显而易见的事情开始:改善现有以太坊的性能。这对于Eth1x所做的工作至关重要。通过提高以太坊客户端的性能,仍有许多工作要做。不幸的是,Eth1x几乎得不到应有的支持,因此进展缓慢。为了了解可以通过这种方式实现的性能,我们只需要看一下Solana,它可以实现以太坊吞吐量的一千倍以上,并且还有增长的空间。这种方法的主要缺点是,它需要复杂的硬件才能运行整个节点。


其他大多数解决方案具有三个共同点:使用WebAssembly作为虚拟机,具有最小状态的体系结构以及最重要的是分片。当前以太坊按顺序执行所有交易。实际上,将交易按顺序排列可以说是区块链的重点。该模型的缺点是很难并行执行,因此我们无法通过向其投入更多资源来轻松解决扩展问题。这就是诸如Eth2.0之类的下一代区块链出现的地方。通过更改执行交易的方式,可以并行处理它们。这是通过将区块链分成多个松散连接的域来完成的,这个过程称为分片。在分片内,事情仍然可以顺序发生,但是在分片之间它们是异步发生的。这允许所有分片并行运行,从而按大约分片数扩展网络。用于拆分的域也不必与分片相对应,可以将多个域分配给同一分片,甚至移动它们以实现负载平衡。


链在何处以及如何划分为多个域,具体取决于特定的下一代链。从细粒度(许多微小域)到粗粒度(很少有较大域)的频谱上可以考虑它们。


两个项目方便地跨越了粒度范围。 DFinity在细粒度的一端,其中每个参与者都是自己的小域,每个参与者交互都是异步的。 Near协议的细化程度稍差一些,其中每个合约都是其自己的域。粗粒度的一端是PolkaDot,其中的域是一个完整的分片,在这种情况下,更准确地称为平行链。从Dapp开发人员的角度判断以太坊2.0将在何处落下为时尚早。

Eth1EE(Eth1的后Eth2未来)将是粗糙的,并且边界与分片重合,而当前的以太坊将成为单个分片。专用的Eth2EE可能会寻求更细粒度的解决方案。细粒度解决方案的优点是它们是透明的。他们可以使所有合约间调用看起来都一样,无论它们是否跨越分片边界。反过来,通过在分片之间移动合约,可以轻松实现负载平衡。


缺点是跨域事务不再是原子的,而是变为并发且部分不可逆的。在DFinity和Near中,这显示为合同间调用异步并返回您需要等待的承诺。在等待期间,到目前为止发生的所有事情都将致力于该链。然后其他人的交易可以堆积在上面。在这一点上,无法还原到目前为止发生的一切。等待最终解决后,它可以从合同调用中返回成功或失败。有各种各样的建议可以避免这种情况,并在碎片之间重新获得某种形式的原子性,但是它们也有自己的缺点。拥抱非原子性似乎是自然结果。


对于DeFi,异步transferFrom调用构成了很大的挑战。想象一下两方之间的简单交换,Alice和Bob想用Eth交换DAI。基本合同看起来像。


但是现在我们需要处理错误。如果第一笔交易失败,我们可以简单地停止交易。但是,如果第二次交易失败,我们需要将 Alice 还给1 Eth。问题是, Bob 在到达那儿之前可能已经花光了。解决此问题的一种方法是使用托管。


虽然没有人会丢失代币。但是现在, Bob可以免费享受 Alice的独家优惠。当Alice的代币被保存在代管中时,它们不可用于其他交易,并且尚不能保证与Bob的交易会成功。可以通过惩罚不良行为来解决此问题,但是由于DeFi交易非常有价值,因此很难确定适当的惩罚。也可以通过要求所有市场参与者从一开始就将其资金托管在单个存款合同中来解决此问题,但这又使状态再次集权,并且实质上取消了分片。


要注意的另一件事是这些并发问题有多棘手。在实际交换中,还存在需要更新的订单的填充状态,这使协议更加复杂。与以并发错误为基础的缺陷相比,困扰以太坊1.0的可重入错误只是蝴蝶。并发错误是不确定的,并且在测试期间似乎从未发生。正如我们在简单交换中看到的那样,它们需要从头开始重新考虑体系结构,因为像缺陷一样,摆脱它们的唯一可靠方法是将所有东西拆掉并从头开始进行重建。


交换是DeFi其余部分赖以建立的基础,并且它是一个臭名昭著的串行过程。我们已经看到了基于订单簿的交易所如何构成挑战。自动化的做市商交易所比较简单,因为它们已经具有托管资金,但是在那儿,储备金余额本身就形成了阻止并行化的瓶颈。即使在最快的传统交易所中,结算最终也可以在没有并发的情况下,在单个匹配引擎上进行序列化。


这并不意味着不可能解决这些问题。对于所有这些协议,最简单的解决方案是在每个分片上部署独立的实例,并由套利者使它们保持同步。或者,也许我们可以使单个同步分片具有足够的性能以包含所有DeFi,并且我们可以不再担心并发性。

原文参考文章列表:

1.Daniel Perez & Benjamin Livshits (2019). “Broken Metre: Attacking Resource Metering in EVM.”
2.Daian et al. (2019). “Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges.”
3.Brian Nigito (2017). “How to Build an Exchange.”
4.Danny Ryan (2020). “The State of Eth2, June 2020.”
5.Scott Shapiro & William Villanueva (2020). “ETH 2 Phase 2 WIKI.”
6.Near Protocol sharding design

原文作者:Remco Bloemen,0x.org的技术研究员。

原文链接:Scaling DeFi — Layer One

—-

编译者/作者:洁sir

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...