http://www.7klian.com

扩展 DeFi 吞吐量:Layer-One 篇(下)

两个项目别离代表这条光谱的两头。DFinity 在细粒度这一端,每一个 “actor” 都有本身的细小规模,并且每个 actor 之间的交互都是异步的。粒度稍大的的 Near Protocol,个中每个合约都有本身的规模。粗粒度一端的是 PolkaDot,一个规模就是一整个分片,更详细一点应该叫做一条 “平行链”。从一个 dApp 开拓者的视角来看,断言 Ethereum 2.0 位于哪个位置还为时尚早。ETH1 EE(执行情况)应该是粗粒度型的,其界线刚好与一个分片的界线一致,就是当前的以太坊所化成的一个分片(也就是 Eth1 在 Eth2 实现后的将来)。一个专门的 Eth2EE 大概会选择一个更细粒度的方案。细粒度方案的优点在于它们是透明的;可以将所有的跨合约挪用一视同仁,无论这些挪用是否超过了分片界线。这就能反过来答允我们通过在分片间移动合约来实现负载平衡。

矿池抉择着区块的 Gas 上限。我们先来快速回首下矿工和矿池的运营模式:险些所有矿工城市选择将本身的算力发源与其他人的搜集在一起。他们会将资源会合到一起,然后得到不变的收益流,而不是冒着恒久没有收益的风险、单打独斗地挖矿。因此,矿池应运而生,认真验证每位矿工的孝敬,并分派下一个区块的挖矿任务。大大都区块都是由大矿池挖出的。下图显示了降生以来,矿池的出块占比环境:

区块出产者固然受到共鸣法则的限制,但共鸣法则也为他们提供了一些重要的自由(freedom),好比生意业务选择和排序。对付一般的代币转账来说,出产者的自由并不会造成很大影响,但对付 DeFi 生意业务好比生意业务所生意业务来说,抢跑(front-running,指发送 Gas Price 更高的生意业务来抢先使生意业务上链)大概收获庞大的经济代价。更巨大的问题是,一笔方针生意业务被夹在两笔生意业务中间,像夹三明治一样。Daian et al. (2019) 将可以或许从抢跑生意业务中得到的代价称为 矿工可抽取代价(miner extractable value)。
Brian Nigito (2017). “How to Build an Exchange.”
没有证据表白此刻的矿池在恶意操作他们的生意业务排序自由,,但假如他们做过,也一定是有赢利的。矿池一般都利用 Geth 客户端,该客户端会按照 Gas Price 来排序生意业务(见 1,2)。这导致了 Gas 的价值竞拍,对 Gas 出价最高的生意业务能最先打包上链。这一机制的负面结果是,任何人都能通过提跨越价来抢跑一笔生意业务。彼此竞争的生意业务者会一连提跨越价,直至生意业务的利润被 Gas 费完全耗尽。到了这个时候,生意业务可得到的所有代价城市酿成 Gas 费,进到矿工的口袋(译者注:这是一个理论上的功效,也是 “矿工可抽取代价” 观念的由来;实际上,高 Gas 费的生意业务大概很快就会打包上链,而不会存在彼此竞争的生意业务者像拍卖那样空隙地彼此出价;所以矿工可抽取代价也没有想象中那么高,究竟矿池之间有竞争)。

最近,全球最大的两个以太坊矿池做出了一个有争议的抉择,将逐日 Gas 产量提高 25% 。此举的目标是通过增加 Gas 供给量来抑制过高的生意业务费。到今朝为止,我们发明,再怎么提高 Gas 上限,也跟不上用户对生意业务需求的增长速度。这就意味着,Gas 价值在经验短暂下降后,最终照旧会再度回升。

Near Protocol sharding design

但对 DeFi 应用来说,一个异步的 transferFrom 挪用会带来相当大的挑战。设想一个两方之间的简朴互换,Alice 和 Bob 但愿互换 Eth 和 Dai。根基合约看起来会像这样:

Daniel Perez & Benjamin Livshits (2019). “Broken Metre: Attacking Resource Metering in EVM.”
       actors          (TBD. Contracts?)          chains
今朝,由于缺乏关于矿工真实行为的具体信息,我们采纳了一种较量简朴的要领:投票系统。但愿我们未来能通过软分叉将这一要领转酿成更准确的算法。—— 以太坊的根基设计道理 (2015 年 3 月)
此刻我们已经对以太坊的范围性及其对 DeFi 的影响有了全面的相识。虽然,所有天王级的团队都在开拓办理方案,对吧?
大部门其他办理方案都有三点配合之处:(1)利用 WebAssembly 作为虚拟机;(2)最小化状态的架构;以及最重要的,(3)分片。当前的以太坊是串行执行所有生意业务的。事实上,让生意业务能排成一个行列可以说是区块链的全部意义地址。但这种模式的缺点就在于,难以并行执行生意业务,所以我们无法通过投入直接更多资源来办理扩展问题。那么把区块链支解成多个松散互联的规模,一个线程就叫一个 “分片”,就能实现并行化处理惩罚。在一个分片内部,事务仍然是串行产生的,但差异分片的事务是移步产生的。这就使得所有分片能并行运行,以分片数量为倍数扩大网络的吞吐量。我们用来支解网络的规模也不需要与分片一一对应,可以把多个规模分派给同一个分片(线程),甚至可以移动它们做负载平衡。看 Near Protocol 的 “夜影” 协议白皮书可更深入地相识分片的概略。

最后,提高区块的 Gas Limit 也同样有安详性方面的隐忧:提高 Gas Limit 是有结果的步伐中最差的。纯真按照当前真实操纵的平均成原来改变 Gas 耗损量也长短常危险的(Naively optimizing the Gas cost for the current true average cost of operations is very dangerous.)。

由上图可见,星火矿池、Ethermine 和鱼池的出块占比遥遥领先。
上面说的不代表这些问题是不行能办理的。最简朴的办理方案就是要求所有这些协议在每一个分片上都陈设一个独立的实例,然后让套利者来担保差异实例之间没有价差。又可能,我们可以让一个同步的分片拥有足够强大的机能,强大到可以包括所有的 DeFi 生意业务,然后就不消烦恼并发问题了。
缺点在于,超过规模的事务就不再是原子化的了,它们会酿成 并行的,甚至是部门 不行逆 的。在 DFinity 和 Near 中,这一点表示为跨合约的生意业务酿成 async 状态,并返回一个理睬:你需要 await(期待)。在一场 await 期间,所有到时已经产生的生意业务城市被提交到链上。然后其他人的生意业务可以会萃在上面。到这时你就无法回滚已经产生的工作了。当 await 最终办理的时候,它会从合约挪用中返回 “乐成” 可能 “失败”。有很多提案实验制止这一点、找回某种形式的跨分片原子性,但都有本身的缺点。看起来,拥抱非原子性会是自然功效。

Gas 上限

fine parallelization  <——————-> coarse parallelization
矿工可抽取代价
我们从最明明的一个方案开始:提高当前以太坊区块链的机能。也就是 “Eth1.x” 同仁在做的事。单论以太坊客户端的机能晋升,就有许多事情可以做。不外,Eth1.x 还没有获得他们应得的支持力度,所以希望迟钝。想要对这个偏向的机能晋升可到达的水平有个根基观念,只需相识一下 Solana 就好,Solana 实现了以太坊的 1000 倍吞吐量,并且尚有空间可以提高;缺点在于需要很高级的硬件才气运行全节点。
从以太坊成长初期开始,由矿工配置 Gas 上限就是一个权宜之计。由于其它方案都不足好,这个权宜之计就一直延续了下来。EIP 1559 提出了一个差异的机制,今朝社区正在接头是否将其插手柏林硬分叉。在那之前,矿池运营者可以像 OPEC(石油输出国组织)打点石油开采那样打点 Gas 供给。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。