Filecoin - Gas计算

2020-09-03 19:01 栏目:经验之谈 来源:网络整理 查看()

菲力肯开始了太空竞赛。矿工的力量开始显现。官方代码也有很多问题。几天后,版本从0.5.1升级到0.5.6。我已经很久没有研究过与go语言相关的逻辑了,但是最近我研究了与文件硬币中的气体计算相关的逻辑。让我们分享它。本文分析了0.5.6的逻辑,Lotus代码的最后提交信息如下:

提交606 a 58 BC 6b c 035 EC 0 b 90 c 6b 50488 e 29 e 90 f 4238 f

author : aayus Rajasekaran[email protected]

日期2003年8月29日:星期六:56336024 2020-0400

Lotus版本0.5.6

Lotus代码CHANGELOG清楚地记录了燃气成本模型的变化:从最初的限额/价格到限额/溢价/费用上限。新燃气模式参照EIP-1559:发送交易,交易成本不超过“费用上限”。矿工赚取的交易费是“溢价*限额”。简而言之,费用上限是天然气成本的上限,而矿工可以赚取的费用是溢价上限。(费用-保险费)*燃气费用限额将被烧毁。

feecap是如何建立的?限制设置得尽可能大吗?

燃气成本计算的相关逻辑在节点/impl/full/gas中的燃气估算消息燃气功能中实现.然后,将详细介绍基数/限额/溢价/费用上限。

1.基本费用

每个模块都将设置一个基本费用。该块中的事务需要烧录相应的baseFee。请注意baseFee,虽然名称看起来像费用,但实际上是价格,具体的燃烧成本是baseFee *限制。与基本费用相关的设置在构建/参数共享中定义。

const BlockGasLimit=10 _ 000 _ 000 _ 000

const BlockGasTarget=BlockGasLimit/2

const base feemaxchangedenom=8//12.5%

const InitialBaseFee=100e6

const MinimumBaseFee=100

常量打包效率同步=4

const PackingEfficiencyDenom=5

在初始块中,baseFee设置为InitialBaseFee(10^8).当从当前块生成下一块时,需要根据当前块的总限制来确定。具体逻辑请参见连锁店/商店/基本费用的计算基本费用和计算基本费用功能。

最小基本费用-最小基本费用(100)

区块气体限额-区块中所有交易的气体限额之和,在计算基本费用(打包效率/打包效率)时,可享受10%的折扣

“超出”部分区块气体限制-每个区块都存在气体限制的目标大小-区块气体目标。超出块目标被视为超出部分。注意过度,可能是积极的,也可能是消极的。

更新的基本费用-下一个块的基本费用,在当前块的基本费用的基础上增加12.5%(基本费用最大变化)。相关计算逻辑如下:

变化:=大。Mul(baseFee,大。NewInt(delta))

变化=大。NewInt(构建。BlockGasTarget))

变化=大。NewInt(构建。BaseFeeMaxChangeDenom))

简单地说,如果当前区块的天然气消耗量超过区块天然气消耗量,基本费用将增加12.5%。在这种逻辑下,你会发现当有许多交易时,基本费用会迅速增加和减少。

最新的24小时基本费用可在飞狐浏览器中查看:

Filecoin - Gas计算

2.GasLimit

天然气限额是指交易执行时愿意支付的“石油量”。交易消耗的气体限额几乎是固定的。请检查用于计算过程的GasEstimateGasLimit函数。简而言之,当一个事务需要获得气体限制时,在当前块高度,“执行”该事务:

res,err :=a . Stmgr . callwithGas(CTX,msg,priorMsgs,ts)

只是为了在执行过程中得到消耗的气体,并没有真正改变当前的状态。

3.GasPremium

天然气溢价是指交易执行时愿意支付的“石油价格”。天然气成本是石油数量乘以石油价格的结果。石油的数量与交易本身有关,几乎是固定的。显然,油价越高,天然气成本越高,矿商的收入就越高,他们也更愿意先打包交易。从发送者的角度来看,油价越低越好。Lotus代码提供了一种计算天然气溢价的方法。请检查GasEstimateGasPremium函数,该函数分为几个步骤:

检查前面模块(4=2*2)中的所有交易,并根据天然气溢价从高到低进行排序

计算所有交易的“平均”天然气溢价。平均意味着找出一半石油消耗的天然气溢价:

:=构建。BlockGasTarget * int64(块)/2

prev1,prev2 :=大。零(),大。零()

对于_,价格:=范围价格{

prev1,prev2=price.price,prev1

价格限制

如果在0 {

继续

{}

{}

加上千分之五的随机性

//平均值1,stddev 0.005=95%在-1%以内

噪声:=1兰特。NormFloat64()*0.005

premium=类型。BigMul(高级,类型。NewInt(uint64(噪声*(1精度))1)

premium=类型。Bigp(高级,类型。NewInt(1精度))

4.GasFeeCap

除了天然气溢价,交易还需要支付基本费用。也就是说,一般来说,交易成本是:(天然气溢价基础费)*天然气限额。问题是基本费用是可变的,对于交易的发送者来说可能太大而无法支付。燃气费上限是设定支付上限。有关相关的计算逻辑,请参见GasEstimateFeeCap函数。

交易很可能不会立即打包到下一个块中,因此在打包下一个块(10个块)时,有必要考虑基本费用的变化:

parentBaseFee :=ts。块()[0]。ParentBaseFee

递增因子:=数学。功率(1。1./float64(构建。BaseFeeMaxChangeDenom),float64(maxqueueblks))

feeInFuture :=类型。BigMul(parentBaseFee,类型。NewInt(uint64(递增因子*(18)))

feeInFuture=类型。bigp(FeInfuture,类型。NewInt(18))

每块基础费按12.5%的增幅计算。

经常账户余额的1%作为支付上限:

maxAccepted :=类型。法案。平衡,类型。NewInt(MaxSpendOnFeeDenom))

上述两种情况下的最小值被视为气体费用上限

5.GasLimit设置惩罚

众所周知,以太网中的气体极限可以设置得非常大。在正常情况下,超出的燃气费用将全额退还。尤其是,菲力考恩不完全是这样的。真正的天然气限额非常重要,因为它参与基本费用和天然气溢价的计算。如果为交易设定了不合理的气体限制,Filecoin将采用惩罚机制。惩罚气体成本也被消耗,并且计算逻辑查看ComputeGasOverestimationBurn函数。

当允许一定的误差时,计算超出的气体极限

常量(

气体过度使用数=11

gasOveruseDenom=10

(

超过:=气体限制-(气体过度使用数量*气体使用量)/气体过度使用量

在气体消耗量的1.1倍内,它被认为是一个合理的设置。

如果汽油用完了{

过量=气体使用

{}

过量的上限是使用的气体量。

根据超过的比例,确定要处罚的油量:

gasToBurn :=大。新积分(气体极限-气体使用)

gasToBurn=大。Mul(gasToBurn,大。新(结束))

GastBourn=big . p(GastBourn,big。NewInt(gasUsed))

简而言之,惩罚是过量/气体使用的比率。如果超过汽油用量,将被罚款。

摘要:

文件硬币的气体模型引入了基本费用来调整交易的拥挤。如果阻塞或阻塞交易不足,基本费用将按12.5%进行调整。计算每笔交易成本的公式为(燃气溢价基础费)*燃气限额。部分基本费用将被烧掉,而气体溢价将被用作矿工的手续费。请特别注意不要任意设置气体极限,否则会燃烧掉多余的气体极限。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发