使用过ETH ERC20协议的用户,一定会因为其转账时的高额Gas费用头疼不已。
Gas费问题是目前ETH1.0面临最严重的问题之一,尽管ETH的基础设施相对完善,算力较高,但任务能力因为区块链的结构问题(每个全节点计算同样的数据,因此任务都在抢单个节点的计算资源),ETH在处理大量任务的时候会造成网络拥堵,为了更快促使矿工打包交易,用户竞价式支付Gas往往导致Gas费呈现爆发式的增长。
DeFi应用的井喷,则让这种现象愈演愈烈。因为ETH除了打包区块链交易外,其智能合约也是发布到链上的,所以智能合约在链上执行的时候要消耗资源,因此用户在DeFi 里做的几乎每一步(如Token转账、兑换、挖矿、注入流动性、收获Token、NFT筑造及拍卖等等),都需要支付Gas费,这也是Gas模型最为人诟病的一个症结所在。而上个月Gas费骤降的现象更是引起了业内人士的广泛讨论。
各位看官不妨跟随小隅一起先了解一下Gas的基本概念和缘起。
一、ETH Gas费概念的起源
如果想要更直观的理解Gas费模型,不妨将ETH区块打包过程形象化为交通运输。这就像一辆汽车在载人运输的过程中,会遇到道路宽度有限、汽车载人有限等因素,所以人进入汽车的过程就会有竞争,可以理解为以价高者可以先行上车,而平均的费用也会因拥堵被「哄抬」。
汽车行驶需要加油,而加油站需要支付「加油费」才能顺利加油,打包需要的Gas费就是「加油费」,羊毛出在羊身上,Gas费用来最终支付「加油费」。所以Gas费就是最终支付ETH的资源使用的费用。
- 1、Gas费的提出
Gas 的概念是来自计算机领域,在ETH里看到,最早来源于ETH黄皮书,黄皮书的作者正是目前炙手可热的跨链项目Polkadot的创始人Gavin Wood,ETH黄皮书指出,理论上,交易中包含的 Gas可以是任意值,因为理论上要涵盖更多交易,最高可达2^256(可涵盖与已知宇宙中的原子数几乎一样多的交易)。
虽然交易笔数和Gas值在设计时几乎没有上限,但现实是骨干的,ETH网络的处理能力是有限的,在Geth 1.6版本中,Gas计算切换为使用64位值,这样Gas限制为64位的单个块可以容纳的交易量是人体中红细胞数量的44倍,约2亿2千万个。不过这依然只是理论值,与现实运行情况大相径庭。
在这个版本确认前,还有一个较为有趣的细节,在Vitalik设计的ETH的Gas模型里,是把Gas费支付过程内嵌在合约里,也就是一个合约执行过程中,合约中的余额会减少,如果余额因为执行消耗不足了,合约会暂停。
- 2、早期、ETH合约里执行设置的内置扣费
而后来Gavin Wood开始参与ETH,进入后就修改了Gas的付费机制,从这种合约执行支付变成了转账人支付,也就是合约执行人支付。Vitalik 描述为,从「合同付款」方式转变为「发送者付款」方式,以代替每个单独的交易步骤立即拿走一点ETH。这就是我们所熟知的「Gas费支付」。
Gas是ETH中所有计算量的计价单位,在ETH网络上交易越多,Gas费支付就越多Gas。
这种采取使用者付费的模式,能够避免资源滥用。可以理解为一旦开发者为每种运算支付费用,就会尽可能将代码写得简洁高效,另外,Gas的存在还能阻止攻击者通过无效运算(因此执行很多操作都需要花费Gas),对ETH网路进行泛洪(Flooding)攻击,下文中统计的一个EIP就是提高了对账户访问的Gas值来减少攻击可能性的。
- 3、GasPrice和GasLimit
在了解Gas费的基本支付模型外,我们还需要了解GasPrice和GasLimit。
GasPrice为交易发送方对每单位Gas愿意支付的价格(以Wei计量),交易发送方可以自定义愿意支付的每单位Gas价格。假设一笔交易需要耗费10Gas,发送者愿意支付3Wei/Gas ,交易的成本总价就是30Wei,在我们使用的数字货币钱包里都会有调整Gas费的高级选项。
GasLimit为交易发送方最多能接受的用于执行交易的Gas量。假如没有GasLimit,可能会导致发送方的账户余额被误消耗殆尽,GasLimit是安全机制,防止把账户中所有ETH消耗掉。
另外,GasLimit也可以被定义为预付Gas。当节点在验证交易时,先将GasPrice乘GasLimit算出交易的固定成本。如果交易发送方的账户余额小于交易固定成本,则该交易视为无效。交易执行完之后,剩余的Gas会退回至发送方账户,这也是为什么我们在使用MetMask钱包(我们熟知的小狐狸钱包)执行合约的时候,预估Gas很贵,但执行完毕价格并没有那么高。
据以上的介绍,我们可以得到的基本理解是,Gas费是因为使用ETH的链上资源产生的,计算越多,Gas越高,在智能合约操作里,每个单独的步骤都需要支付Gas。另外,补充一点,如果发送者把Gas设置的很高,矿工会优先执行交易,因为矿工可以选择优先打包某些交易。
二、4月份的Gas费为什么会降低
对于ETH网络来说,4月份的大事记莫过于Gas费的变化,4月20日,平均260Gwei的Gas费价格,在仅仅经过一周左右的时间,就陡然降到了40Gwei以下,创2021年新低。
这个现象几乎出乎所有人的意料,而同时,在DeFi热度依旧很高的背景下,这么低的Gas费,给ETH的用户带来了很多操作的机会,例如原来一些聚合交易的Swap(兑换)功能因为Gas费过高让用户望而却步,现在Gas足够低,整体操作的摩擦损失就大大下降,用户尝试起来更有动力。不过Gas费为什么会降低,我们可以从哪些地方找到缘由呢?
在Gas费大幅度降低之后,业内有很多推论,第一个就是DeFi热度消减,第二就是此前很多“DiFi中疯狂挖取头矿的科学家操作”减少,例如ETH“黑暗森林”的套利、一些抢跑交易等。另外还有推论因为Gas限值提高变相改变了交易打包习惯,让更多低Gas费交易被打包。
注:科学家指的是在DiFi体系中,拥有技术背景,在捕获前沿信息后,能够通过技术手段挖取项目方头矿的一类人,这些头矿往往在项目推向二级市场后抛售获利。
注:黑暗森林一词出自刘慈欣的科幻小说《三体》,该词汇描述了以太坊交易池 (Ethereum mempool)这个虚拟空间中,存放着等待被打包进区块的交易。交易池受到来历不明的程序密切监控,它们监控着交易及其可能的最终状态。如果有利可图,他们会不择手段地抢跑或是竞价交易。这些“利益”就像在黑暗森林中被发现的猎物一样。
目前Gas费仍然保持在50Gwei左右。我们尝试从链上数据和Gas的逻辑来详细推导一下Gas费降低的缘由。
如果以美元计算,4月20日,是4月份Gas费的高点,大约为一笔交易32美元,这是单笔交易的平均数据,在4月25日,降低到了9美元,降低了近70%。
这个价格表现是ETH的单笔交易,并已经折算成美元,这个值与ETH价格也会略有相关性。对于网络来说,Gas的计算单位Gwei的数据更有代表性。
而小隅通过查阅ETH链上的交易数量、合约数量却没有明显的降低,其活跃地址数量变化还不到10%,看来这些关键性指标并不是导致Gas费降低的主要原因。
我们回溯到Gas费的运作逻辑,Gas的主要是网络资源负载的源头,也就是使用网络的人需要给予网络支出的费用,所以,网络的用户负责了网络的基础资源支出。而Gas的计费目前使用的是竞拍方式,也就是简单理解为价高者会优先打包,这代表着这是一个动态的“平衡”规律,也就是一旦网络交易者需要提速,Gas费会一直趋向加价。而如果没有人愿意去争抢交易,就会趋向降低。
这其中Gas的总价,是会因为Gas的计算单位的价格降低而降低。即N Gwei/Gas,N减小,单位Gas价格降低。
目前,在Gas费价格大幅度下跌的情况下,网络资源的使用次数并未出现大幅度减小,即上文我们查阅的合约使用数量、活跃地址等。
所以Gas费的降低,核心是Gas的计算单位价格的降低,即争抢交易减少。
而同时,EthHub的联合创始人Anthony Sassano也认为Gas减低的主要原因有四个:
Gas限制(区块大小)增加20%;
数字货币市场投资热潮的降温;
Layer2解决方案的实施;
Flashbots的采用。
注:Flashbots是一个开放工具并且改善维护矿工可提取价值(MEV,Miner Extractable Value)的组织。它与最优Gas费竞拍模式不同,Flashbots对降低Gas费有积极的作用,维护“透明”的MEV生态系统。
三、ETH的改进尝试
1、Rollup
Rollup是目前受到最多关注的ETH Layer 2解决方案,最有可能在短期内解决ETH网络拥堵的问题来降低Gas费,Vitalik也指出Rollup是ETH2.0分片技术上线之前最有效的扩容技术。Rollup的运营者通过将计算和完整的状态储存放到链下,压缩交易数据实现主链上的扩容。实际上交易数据是储存在区块链上的,风险源自运行者可能提供错误的数据进而控制用户资产,为了避免风险存在不同的Rollup解决方案。
2、侧链
侧链是一条区别于主链的区块链,用户可以将主链资产转移到侧链上交易,以节约主链的资源和交易者的成本。严格意义上侧链不算是Layer2解决方案,因为无法完全保证用户的资金安全也不能保证侧链与主链的关联性。侧链只能归为链下解决方案。侧链的技术实现有多种,重点在于让资产安全地转移到侧链,并让侧链资产安全地转移回主链,也就是能安全地实现双向锚定。
3、状态通道和 Plasma
状态通道是一种在链下进行交易和状态更新的技术,比特币闪电网络就是一种支付通道。ETH的状态通道可以让交易双方在链下进行状态的更新和交易,无需占用链上资源。他们通过状态通道进行交易时,需要对双方的行为进行签名并保存副本,每一步的操作是清晰的。如果他们结束了链下交易,就将最终状态签名后返回到主链上来更新主链上的状态。
状态通道在用户撤回资金时有挑战期的要求,是为了防止用户上传过期的交易记录牟利。用户要等待一段时间确认没有人上传更新的副本,等待期结束后会按照最新的副本内容执行。如果其中一个用户在挑战期受到攻击掉线等,他就会因无法回应而受到损失。状态通道需要有一组确定的参与者,因为在通道中的状态改变只限用于通道内的用户,而且部署状态通道需要成本,适合在一段时间内频繁进行状态更新的场景。
Plasma也是一种链下交易的方式,它通过在ETH主链上创建子链实现,交易和状态更新通过子链操作,ETH不会保存交易副本,因此可以节约ETH空间实现扩容。Plasma子链上同样存在区块生产者,其中的共识机制可以与ETH主链不同。他们在ETH上建立交易的根节点来记录子链状态,作为子链更新的证据。
为了防止Plasma链上的区块生产者作恶,Plasma使用欺诈证明机制,如果有人发现了生产者的作恶,那么可以提交证明让错误的区块回滚并没收生产者的保证金。如果用户要退出Plasma,也需要经历挑战期来证明他的交易为最新交易。但如果Plasma上所有人同时退回资金,那么可能导致ETH主链没有容量同时处理这么多交易,会导致用户资金丢失。
状态通道和Plasma的共性问题是要求资产具有所有者,这样资产所有者才可以出具证明。但对于智能合约不属于任何人的应用来说很难与状态通道和Plasma兼容,因此这两者只有在针对降低转账Gas费时效果明显,但由于易用性和挑战期的问题,技术进展处于停滞状态。
四、新的有关提案
早期的Gas故事是关于ETH Gas费模式的制定,而目前来看,除了对Gas费降低外,最好的扩容和降低Gas费方式还有压缩交易数据。
近期ETH社区对EIP-1559的讨论也是更加激烈,因为有很多的矿池并不同意部署这个提案,这个提案调整了Gas费的构成,虽然无法解决Gas高的问题,但可以提升对Gas费的预期,完善体验。
像EIP1559、EIP-3382这样对Gas费进行调整的提议很多,因为Gas费在ETH运行过程中占据了重要地位,所以Gas费有很多历史故事,如果把所有关于Gas费的消息全部浏览完毕,可以发现,解决Gas费并非易事。
ETH7月的网络升级称为“伦敦”升级,将包括改进提案(EIP)1559,这是一项有争议的计划,它将使Gas价格自动设置,然后烧掉这笔费用,而不是付给矿工。以此达到减少ETH供应,增加市场需求,并消除一定网络拥堵的目的。虽然新的升级会降低一定比例的交易费用,但真正的转变要到全面实施ETH2.0才能实现。
与当前依赖于高能耗硬件进行“挖矿”的网络不同,新的权益证明制将通过让用户在智能合约中锁定他们的代币来保护网络。ETH2.0承诺大幅降低拥堵,并允许每秒数千次交易,而不是当前网络的15笔左右,这将使交易成本降低到更合理的水平。不过在ETH2.0实现之前,矿工们仍将在网络转变期间享受创纪录的手续费收入。
如果ETH是一家公司,就像前方舟投资分析师James Wang想象的那样,那么这些收入数字将非常亮眼。Wang指出:“按4月份的数据计算ETH的年度收入,达到86亿美元,与2015年的亚马逊网络服务相当。” 在接下来的五年中,亚马逊网络服务的收入增长了575%,ETH爱好者们也希望能达到这样。
但这取决于ETHETH能否扩展更多业务。ETHETH网络中的每个区块,只能处理有限的交易量,网络已接近容量极限。交易费用再创新记录将不取决于更多的交易数量,而是取决于ETH价格上涨,以及用户愿意支付更高的Gas费以确保交易快速通过。
在这里,小隅也列举了一些根据用户的操作习惯和使用相关辅助工具节约Gas费的经验,例如:
1、进行同种代币的批量转账;
2、挑选交易者休息、网络 Gas Price 低的时间段交易;
3、利用Gas Price实时监控产品确定准确的Gas Price区间;
4、查询常见的Gas Limit范围再进行设置,避免因交易失败造成Gas费浪费;
5、开发者可以通过代交Gas费的方式为用户节约费用等。
附:21个与 Gas 费息息相关的EIP,提案大约根据时间先后排列。
1、EIP-5: 调整RETURN和CALL的Gas用量
2、EIP-150:大量IO操作的Gas成本变化
3、EIP-158:状态清除
4、EIP-1108:降低alt_bn128预编译Gas成本
5、EIP-1283:SSTORE操作码的Gas调整
6、EIP-2028:减少交易数据用气成本
7、EIP-2200:净Gas计量的结构化定义
8、EIP-2565:指定ModExpGas成本
9、EIP-1559:ETH 1.0链的收费市场变化
10、EIP-2929:状态访问操作码的Gas成本增加
11、EIP-1077: 合约调用的Gas中继
12、EIP-1087:用于SSTORE操作的Gas计量
13、EIP-1285:在CALL操作码中增加GcallstipendGas
14、EIP-1380:降低了内部调用的Gas成本
15、EIP-1613: Gas站网络
16、EIP-1930:具有严格Gas语义的CALL
17、EIP-2045:EVM操作码的颗粒Gas成本
18、EIP-2046:降低了对预编译进行静态调用的Gas成本
19、EIP-2542:新的操作码TXGASLIMIT和CALLGASLIMIT
20、EIP-3322:帐户Gas存储操作码
21、EIP-2780:减少内部交易Gas
注:转载请注明出处