何冰分布式存储实验室
众所周知,矿工在Filecoin网络的收入来源于存储订单收入和区块奖励。网络前期,仓储订单收入较少,主要通过分块奖励。那么,你有没有研究过,街区奖励的组成部分是什么?而街区奖励之所以这样设定?
方块奖励的主要组成部分是当前高度下每个矿工的基本方块奖励小费(可能)惩罚。
当前高度的每块奖励=(到当前块高的总块奖励-到先前块高的总块奖励)/当前块高的块数
矿工奖励=(totalminerward-lastmineward)/当前块高的块数
如图,方块高度330003,三个矿工获得方块奖励,每个矿工获得一个奖励。
每个矿工可以获得的基本区块奖励如下:
total _ miner _ reward=17928 445792055869175204095纳菲尔
last _ total _ miner _ reward=17928 397766464829775195448纳菲尔
total _ miner _ reward-last _ total _ miner _ reward=4802559103940008647 nano fil
注:纳米填充=10负18次方填充
每块奖励=基本奖励/块数。
矿工可以获得的基本区块奖励=每个区块奖励x矿工获得的区块数。
目前每个矿工有1块奖励,矿工人数为3。
因此,每个区块的奖励是:
miner _ reward=48.0259103940008647/3=16.00155566
冰川的文章《Filecoin官方信息|Filecoin的EIP-1559》提到了gasPremium(贸易商给矿工的额外利润空间),也就是小费。
根据EIP-1559,交易创建者规定了费用上限(他们愿意花费来包装该交易的每单位天然气的最高价格)。如果收费上限低于该区块的基准费率,则不能计入该区块。由于基准利率将被破坏,交易创建者还指定了一个小费,作为对打包信息的矿工的激励。
在区块奖励中,以额外利润率包装区块中消息的矿工可以获得这些消息的gasPremium,所有消息的总消耗为gasReward(气体奖励)。
如图,块高330003中的一个节点,通过打包220条消息,最终得到了1147697454159193纳菲尔的气尖奖励,尖基块奖励总量超过了另外两个节点。
这是Filecoin对打包消息的矿工的正向激励政策。
有时候,大家也会注意到,会有一次竞价成功,但是奖励金额是0。这不是因为Filecoin没有给矿工应有的激励,而是因为矿工在打包消息时强行打包了不符合打包条件的消息,受到了链上的惩罚。如果扣除惩罚费用后的奖励金额仍不足以扣除,则奖励为0,剩余不足以扣除的惩罚金额将从矿工钱包余额中扣除。
那么,强制打包是什么意思呢?什么情况下打包短信会被处罚?罚金是多少?
事实上,这种惩罚也是根据EIP-1559中提到的“不应包装交易”的三重惩罚而制定的。
Filecoin油费由基本费用、小费和超额油费三部分组成。如前所述,小费是贸易商向愿意打包的矿工设置的gasPremium(小费汇率值)的额外费率;超额的燃料成本意味着Filecoin网络不支持用户支付过高的费用来“插队”进行优化。如果交易者对Gaslimit(一笔交易的用气量预估限制值)设置了不合理的指标,过低会导致消息上传失败。如果过高,交易商将被收取超额燃料费用(稍后将有机会详细分解超额燃料费用)。(Filecoin中关于燃气费机制的详细解释,请参考王大爷的聊天FIL(一)
另一个影响是对矿工的惩罚,“不应该被打包交易”。
“不应该打包交易”是指交易者在设置gasFeeCap(交易者愿意给矿商的最高费率)时,设置值过低,以至于gasFeeCap
如图,一个街区的高度,查询
WindowPoSt惩罚
上文提到的,是微观层面上,区块奖励构成中矿工可能收到的额外奖励和惩罚。那么,从宏观层面上,矿工获得的区块奖励份额,本身有额外奖励或惩罚的可能吗?
额外奖励是没有的,但是windowPoSt消息提交上链失败,会按照以下步骤,逐级惩罚:
1. 扇区第一次掉算力,没有罚金。第一次不做惩罚,主要是为了避免链同步的问题等非数据问题导致的误惩罚;
2. 扇区第二次掉算力(第一天和第二天连续掉),当次惩罚扣除扇区中对应3.51天的区块奖励。假设代码预估单T收益为0.2FIL,那就是每个扇区扣除0.2/32*3.51=0.0219375FIL;
3. 扇区连续第三次掉算力,惩罚扣除的方法如第二条。持续错误,每天都扣除相同区块奖励;
4. 如果扇区连续14天错误,扇区终止,除去已扣除区块奖励外,连带扣掉扇区的质押金额,不做返还;
注意:
除去扇区连续14天错误导致的扇区中止,其余惩罚均不涉及到质押金额;
Filecoin重点惩罚内容主要在于连续错误,如果扇区第一天错了,第二天对了,第三天再错,不会有罚金。要连续错误,才会受到惩罚。因此,少量的惩罚,是正常的,目前filecoin的代码有一些不太完善,比如写入的数据,有时候读取叶子节点,会报告错误,但从系统IO看没有什么异常,且有时候不出错了就一直不出错了,但数据始终未变。
但如果错误很多,且有连续错误,就需要分析每个错误原因,认真总结错误源头,优化代码和算法,避免相同问题。
参考:
https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0002.md