FIL生态环境日益繁荣 究竟怎样才能降低 Gas成本?

[复制链接]
9159 |1
发表于 2020-12-21 19:30:00 | 显示全部楼层 |阅读模式

FIL生态环境日益繁荣 究竟怎样才能降低 Gas成本?


wk588_com_tlai14hs2ik.jpg

wk588_com_tlai14hs2ik.jpg


燃料(Gas)成本居高不下,老矿工无计可施,纷纷停工,趁此机会调整一下矿池,却挡不住新矿工的涌入,继续推高 Gas成本。此时,大家都想问一句,到底 Gas的费用能否降下来?何时可以?怎么做?


每次升级的时候,很多人都满怀期待,但事实并非如此。目前的升级并不能直接减少 Gas消耗或 Gas费用。只会使 Gas的收费更加合理。但是同时,我们更希望能够减少Gas费用。


那Gas费用能降下来吗?如何下降为了把事情讲清楚,我们一步步来。


wk588_com_za2c1kz0dzr.jpg

wk588_com_za2c1kz0dzr.jpg


什么是燃料(Gas)?


在 FIL网络中, Gas是消息(transactions)在网络中执行时消耗的资源的度量。此处讨论的资源包括计算资源和存储资源,即进行某项交易的成本。例如,一个特定的 PreCommitSector消息消耗了25,346,170 Gas,也就是说,对于该消息, FIL通过处理该消息,改变了网络状态,它将花费2千5百多万 Gas。每个消息将需要网络执行,这将消耗网络资源,因此,将消耗相应的 Gas。比如时空证明 WindowedPoSt 消耗了 Gas 2-5亿;复制证明 ProveCommitSector消耗了4-6千万。普通转账信息由于处理较简单,消耗的 Gas相对较少,大约在一百万以内。


每个消息消耗的 Gas数量与消息类型有密切关系,例如,由于它的计算量很大,而且还需要调用大量的状态信息,如 Sector commits来进行计算,所以消息消耗很大。而且转移无论是存储还是计算消耗都要少得多。与此同时,在不同的情况下,相同类型的消息的 Gas消耗是不一样的。因为当时的网络状态不同,所需的资源消耗也不同。


举例来说,如同时发送两次转账,与向旧地址转账相比,向新地址转账消耗更多的 Gas,这是因为向新地址转账时,网络需要先创建该地址,这会增加计算和存储资源的开销,因此消耗更多。这样的话,对于消息的发送者来说,在发送消息时,他们需要支付的 Gas值就更难判断了。此时,需要做出一个合理的估算。


每个消息内部发送的消息,消息的发送者可以为该消息所消耗的 Gas设置一个上限,如果执行时所需的 Gas大于此上限,则该消息不会执行。该上限是消息发送方对该消息成本的估计和愿意支付的最大成本。这种评估非常重要,特别是在支持智能合约之后,对一些消息进行成本评估非常困难,或者因为设计原因而存在错误,没有上限可能导致消息发送方的重大损失,或者导致网络安全问题。


一般而言,大家要对发送的信息进行估算,并根据估算值加上保险(比如10~25%),以设定这个上限: GasLimit。—— cjxy066

wk588_com_wquzjml4ham.jpg

wk588_com_wquzjml4ham.jpg


燃料(Gas)费用的计算?


上面提到的每个消息都需要计算资源,这是通过 Gas来衡量的。所有资源都有成本,计算资源也是如此。Gas数量乘上价格,就是执行此消息的成本。燃料(Gas)是 Gas的单位价格,例如,在 FIL中,定义 Gas的最低费用是100 attoFil,即 0.0000000000000001 Filecoin。在这种情况下,一条 WdPoSt消息需要花费4亿(e8) Gas所需的成本为:


100 attoFil * 4e8 = 40nanoFil = 0.00000004 Fil


很低,基本可以忽略。


但如果 Gas的单位成本上升到4 nanoFil,即 0.000000004 Fil,这是目前网络 Gas的平均单位成本,与100 attoFil的最低水平相比,增加了4千万倍。此时同样的一条耗资4亿(e8) Gas的 WdPoSt消息所需的成本也就是1.6 Fil,这太可怕了。


为解决 Gas的费用问题, FIL采用了EIP-1559调节机制, Gas的费用分为两部分:


1、基本费用(baseFee):基本费用由网络自动计算,反映了网络的拥挤程度或资源消耗,这部分费用将被消耗掉


2、小费(Premium):而小费是信息发送者向矿工支付的费用,通过支付,希望他们将自己的信息打包起来


自然,就像 GasLimit用来设置 Gas消费的总量一样; Gas的价格也可以设定一个上限,即 feeCap。指发送者愿意为 Gas支付的最高单价。


综合以上两部分,我们得出以下结论:一条信息发送者愿意为该信息支付的费用最高为:


GasLimit * feeCap 


 (也就是愿意支付的 Gas的最大数量和最大价格乘积)


wk588_com_gbm4u3kgrhw.jpg

wk588_com_gbm4u3kgrhw.jpg


为何要支付 Gas?


总之,为了网络的安全起见。不管哪种系统,都有处理能力。在非中心化区块链系统中,由于有大量的矿工共同维护网络,因此需要考虑的是网络的一般处理能力。若需要处理的消息(交易)超过了网络的处理能力,则网络安全将成为一个问题,至少对于 FIL来说是如此,如果大量的消息阻塞,导致处理能力稍差的矿工迅速被淘汰,网络将被处理能力最强的矿工所占据。


通过对 Gas成本的调整,并辅以一定的惩罚措施,形成了一个反馈系统,在网络拥挤时可以提高 Gas单价,在网络空闲时可以降低单价,从而保证网络的畅通。还能防止垃圾信息泛滥和网络攻击等问题。设置一个网络处理能力值,在消息消耗Gas的总量(具体就是计算GasLimit的和)超过这个值的时候,提高baseFee,低于这个值的时候,降低baseFee。快速调整,采用指数调整方式。那就是为什么每个人都看到了 Gas费用的快速变化。


wk588_com_5mhq3vzvw0z.jpg

wk588_com_5mhq3vzvw0z.jpg


Gas的最新两次升级是否对调整有所帮助?


在 Gas的费用很高的时候,许多人希望 FIL团队采取措施来降低 Gas的费用。这是一个非常简单的方法,即人为地提高系统的处理能力。但这件事是不能随便去做的。若设定的处理能力超过网络中节点的一般处理能力,一方面网络进入的门槛提高,另一方面网络的安全性降低。


所以,为什么团队不直接将 Gas的成本降低一些呢?究竟还有什么方法可以降低 Gas的成本?


之前说过一个理由,为了网络安全,不能想怎么设就怎么设。应该考虑到网络环境以及真实反映信息的实际成本。但这两个最新的升级难道不会影响 Gas消耗吗?怎么回事。


下面来看看这两个升级:


V1.2 升级对某些消息处理模块的 Gas消耗值进行了调整,这种调整的主要原因是,以前的版本设置比较随意,这次将其合理化。—— cjxy066


PoSt的验证成本大大降低,因此这对 WdpoSt的消耗有正面的影响,而且更省钱。尽管如此,与存储相关的运营成本增加了。因为网络数据越多,存储成本就越高,这是因为在此之前对存储的消耗估计不够,所以要进行调整。这次调整之后,大家看到的是 PreCommitSector和 ProveCommitSector消息成本并没有下降,反而上升了。特别是对于大型采矿者来说,提高算力时,存储访问量会增加,而消息消耗的燃料也会增加。


因此,此次升级并非调整燃油费,或降低燃油费,而是使之更为合理。


升级主要是为了解决 WindowedPoSt耗油量过大这一问题。小矿工特别受不了。与此同时,该消息是控制类的消息,必须发送。怎么了,想想办法,这个部位可以少烧或不烧。这一观点是在前期的讨论中提出的。有许多其他的想法,但是这个想法在目前的情况下是相对简单的。最终形成了FIP009文件(在前期相关工作的一个章节中提到了Steven004提出的类似想法)。这次更新只是调整了 WdPoSt的燃烧部分, Gas消耗的计算并未改变。


所以,任何认为通过此次升级可以降低 Gas成本的想法都是不现实的。


wk588_com_l0i4xpqtjqu.jpg

wk588_com_l0i4xpqtjqu.jpg


究竟怎样才能降低 Gas的成本?


总而言之,我们知道 Gas费用与系统的安全性有关,与系统处理能力有关,不能随意调整。所以才能做到两点:


1、提高系统处理能力


2、大家根据 Gas收费自己掌握发消息的节奏,对于现在来说就是增长算力的节奏。


当前最现实,也是不断比较现实, FIL的参与者所要考虑的就是,不管算法如何优化,网络性能如何提高,网络还是会出现拥挤,所以,这些情况都需要大家共同面对和处理,这部分是开发人员无法解决的。这种燃油费本身就是要调整的,所以涨跌是正常现象,要平常心。它和真实的经济生活一样,需要市场来调节。


此外,当 FIL的生态环境日益繁荣时, FIL网络的处理能力还需要进一步提高,否则,处理能力低下就会阻碍网络的发展和生态环境。这项工作也是目前最重要的工作之一。现在有几个提议正在考虑中,它们都与提高 FIL网络性能有关,比如:


FIP007:提高 HAMT和 AMT的性能和安全性: HAMT和 AMT是 Lotus中最主要的数据结构,它们的性能得到了提高,从而提高了整个网络的性能


FIP008: 批量Pre-commitments:当前每个 Sector的 precommit是一条单独消息。若支持批量发送,可节省大量消息,对存储的访问和更新也可一次性处理,因此可提高性能


按照FIP008的思路,Prove-Commitments还可以进行批量处理。这一点现在已经被批量处理了。但是信息仍然单独地发送。


有些更激进的方法是这样的:考虑到当前消息处理对资源的最大消耗,即 PoRep和 PoSt验证消息。于是,有一种想法,干脆不去验证。这样可以大大节省时间。能大大减少资源的消耗。那么不验证不是可以造假吗?其实不然,类似于共识错误的惩罚。当大多数人都不会造假时,考虑一种防止造假的检举机制。然后,只要有一些节点愿意在链表下进行验证和检举就可以了。—— cjxy066


wk588_com_f2sgqdndhmr.jpg

wk588_com_f2sgqdndhmr.jpg


以上思想在什么时候可以实现?


根据当前核心开发团队的讨论,FIP007将在新年假期后进入下一个版本,可能在1月底发布;FIP008将在相同版本中实现或放置下一个版本。


关于未经证实的激进计划,仍有许多问题有待探讨。比如安全问题,如果有大量的舞弊,是否会带来较大的问题,对于检举者的奖励,检举的期限等,都是需要探讨的。那要花很多时间。关注:永不止步IPFS 公众。


回复

使用道具 举报

发表于 2022-7-8 16:36:39 | 显示全部楼层
的想法货每年向国家奉献给海力风电会更快的联合国  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门版块
快速回复 返回顶部 返回列表