解读Filecoin官方经济模型
8月28日,Filecoin正式发布一份长达32页的“Filecoin经济”报告,详细阐述了代币经济模型设计的原理和细则。Filecoin经济模型究竟是什么?本文整理的Filecoin经济模型详解。
原文:
解读Filecoin经济
https://mp.weixin.qq.com/s/m_sHPH-8bSdJoN34BOz7VA
Filecoin经济Q&A总结
https://mp.weixin.qq.com/s/l624DJfvbfbw3t1UogYkAg
1.引言
Filecoin 的经济模型为了达到三个目的。一是在规定的时间把相应的代币释放出来,让矿工有挖矿,维护链的动机;二是为了 约束矿工,让其保存好用户数据;三是为了激励旷工去存储有意义的真实数据。
为了达到这些目的,设计者们费尽心力为 矿工的行为设计了一系列的奖励、惩罚、抵押、锁仓机制,这些方法都体现在 specs-actors 这个库中。
2.可验证数据算力
可验证数据是说经由官方认证的机构或个人作为验证者能通过验证的数据集,就是所谓真实数据集。矿工封装这类数 据可以获得 10倍的有效算力加成。按是否有 deals 调整之后的算力:
3.区块奖励
区块奖励机制主要要达成两个目的:
1. 每六年区块奖励减半;
2. 给区块奖励的释放设置一个算力门槛,只有全网算力达到某个之后才会解锁更多的奖励。
3.1 六年减半
首先是每六年减半的算法就是很标准的半衰期为 6 年的指数衰减算法。
3.2 两部分之和
为了设置算力门槛,区块奖励被分为两部分发放 simplySupply 和 baselineSupply,分别代表简单按区块高度计算的发放算法、与全网总算力和预先设置的基线算力相关的发放算法。目前 SimpleTotal = 330M FIL,BaselineTotal = 770M FIL。
blockReward (t ) = simpleReward (t ) + baselineReward (t )
3.3 SimplyReward
3.4 BaselinePower
区块奖励的第二部分 baselineReward 和 BaselinePower 相关,所以先介绍 baselinePower. 当前网络的基准算力值, 初始值为 2.5 EiB,以每年 100% 的速度实现指数增长,设增长系数为 k,则
3.5 BaselineReward
为了计算 baselineReward 引入了一个称为 EffectiveNetworkTime 的衡量,设定随着区块高度增加,全网总算力和 基线算力分别都在累加,当全网算力较小时 EffectiveNetworkTime 不进行递增,此时按基线发放的奖励 baselineReward 为 0; 当全网总算力值超过基线算力 baselinePower 的累加时,EffectiveNetworkTime 进行递增。然后用线性内插值法算 出两个区块高度之间当累积基线算力和累积全网总 rawByte 算力相等时严格的 EffectiveNetworkTime 的值,分别命名为 prevRewardTheta 和 currRewardTheta, 代入上述计算公式 (1) 就可以得到某一区块高度的基线奖励。
1. 计算 prevRewardTheta
2. 如果在这一轮累加的全网总算力大于累加基线算力,则会将 EffectiveNetworkTime 增加 1,并且更新累加总算力 和累加基线算力
3. 计算 currRewardTheta
4. 根据本轮和上一轮的 RewardTheta,也即保证 CumsumBaselineP ower(RewardT heta) == CumsumRealizedP ower 的精准的浮点数的 EffectiveNetworkTime 来计算本轮的 baselineReward
5. 将 (7)(3) 的结果带入 (2) 中,即可求出区块高度为 t 的区块奖励
3.6 thisEpochReward
显然这还不是最终的奖励,考虑到区块里面消息验证的 gas 费用和惩罚费用,以及同一轮多个 blocks 和每个 block 有不同的 winCount,得到下面的最终的公式:
其中:
ExpectedLeadersPerEpoch 是设定的每轮期望出块数,设置为 5
GasReward 为区块里面所有 message 验证所需要的 gas 费用
MsgPenalty 为区块里面所有验证错误的 message 所需要的惩罚费用,后文详述
3.7 锁仓与释放
矿工的区块奖励不会马上下发到矿工的钱包,而是先进入到矿工的锁仓里面,锁仓里的 FIL 会在一段时间之后线性 释放到矿工钱包。当前的释放方案:
开始释放时间:当前区块高度
线性释放耗时:180 天
释放频率:每天
每次释放的数量:
4.扇区抵押和释放
filecoin 的抵押机制为了保证矿工每提交一个扇区,都要有与当时网络总算力相关的抵押金额,随着矿工递交的扇区 数量增加,抵押也会越来越多,只有当扇区过期时间到了才会将对应的抵押降低。
4.1 奖励估计,算力估计
为了平滑同一个扇区算力占全网算力比的比例。引入 alpha-beta-filter 模型对全网算力和奖励发放进行估计,用此估 计值来计算一个扇区算力分别在 1 天,3.51 天,5 天,20 天,70 天所能获取的区块奖励。
4.1.1 算力模型
建立全网算力估计模型的初始状态:初始估计值 position = 750,000 GiB 初始估计速度 velocity = 3,840 GiB / epoch 在每一轮结束时候取到此轮的真实值 observation power, 重新计算估计算力值和估计算力增速。
4.1.2 区块奖励模型
建立区块奖励模型的初始状态:
初始估计区块奖励: 36.266260308195979333 FIL
在每一轮结束时候取到此轮的真实值 observation epoch reward, 重新计算估计区块奖励和估计区块奖励增速。
4.1.3 DefaultAlpha, DefaultBeta
实验得出:
DefaultAlpha = 314760000000000000000000000000000000
DefaultBeta = 96640100000000000000000000000000
这样在需要获取对应的 reward 的时候,就可以由当轮的这两个估计模型来求得。
4.1.4 NextEstimate
每轮结束更新估计模型
1. 进行估计值计算
2. 根据观测值进行纠偏
3. 得到新的估计模型
4.1.5 ExpectedRewardForProvingPeriod
用算力模型和区块奖励模型来估算一段时间内的区块奖励
1. 估计算力增速的平方 <= 302231454903657293676544 时候
2. 估计算力增速的平方 > 302231454903657293676544 时候
由以上公式得到: dayReward : 估计一个扇区 1 天能获得的区块奖励 20dayReward : 估计一个扇区 20 天能获得的区块奖励 3.51dayReward : 估计一个扇区 3.51 天能获得的区块奖励 5dayReward : 估计一个扇区 5 天能获得的区块奖励 70dayReward : 估计一个扇区 70 天能获得的区块奖励
4.2 全网总流通量
总流通量是指能自由转账的金额,所有供应量去除 RewardActor 还没发出去的金额,去除销毁了的金额,去除存储 市场的余额,去除所有 miner 的抵押金额这些仍然处于锁定状态的金额。正常情况下流通金额会越来越多。
4.3 扇区抵押
4.4 扇区抵押释放
扇区抵押金额会在,此扇区生命周期结束的时候,一次性释放给矿工,目前共识规定,扇区的最小过期时长为180天。
这里不能不提的是共识会记下所有 active 状态的扇区的抵押存储在一个叫 InitialPledgeRequirement 的变量里面,之 后当矿工递交扇区消息的时候,都要验证其锁定的金额必须大于等于存活扇区的抵押之和,也就是说矿工必须要保证始 终有足额的锁定金额在其账户,否则其无法递交新的扇区消息。
5.惩罚
为了让矿工能稳定的存储提交的扇区数据,filecoin 除了设计了定期挑战的严格的 windowPoSt 之外,还让矿工在提 前终止扇区时付出巨大的代价。
5.1 提前终止扇区
当一个扇区还没有达到其过期时间时矿工手动触发终止或者因为没有正确提交 windowPoSt 而终止时,将会从矿工 钱包里面扣除大量 FiL。
所以按照终止扇区时候的时长来算的话: 20dayReward < penalty <= 90dayReward
5.2 Fault, Skip
另外在针对 windowPoSt 的暂时容错处理上,共识提交了三种容错方式:
手动声明扇区错误:Penalty = 3.51 dayReward
由共识检查出来的错误扇区: Penalty = 3.51 dayReward
矿工主动跳过一些扇区的检查: Penalty = 3.51 dayReward
这些惩罚费用都是从矿工 lock 的金额中删除,转到专门的销毁账号f099,不能恢复。
5.3 ConsensusSlash
共识惩罚的三种情形:
(a) double-fork mining fault
同一个 miner 在相同高度产生了两个 cid 不同的 blocks;
(b) time-offset mining fault
某个矿工在不同高度的两个 blocks,却有相同的 parent tipset;
(c) parent-grinding fault
A, C 高度相同,并且有相同的 parents
B 的 parents 包含 A
B的 parents 不包含 C
共识惩罚奖励给举报者的奖励费用:
其中:
curEpoch - heigherBlockEpoch : 举报时候的区块高度与共识错误的较高的那个 block 高度之间的高度差
collateral: 举报时候被举报矿工的 miner 余额.
6.消息 GasFee
gas 费用分为不同的类型
1. 链上存储消息 (fil/bytes)
2. 链上存储返回值 (fil/bytes)
3. 消息验证
收取 gas 的方式
1. 算出链上储存消息的费用
2. 费用转给中间人 gasHolder
3. 算出消息验证的费用
4. 算出链上存储消息返回值的费用
5. 从 gasHolder 退回多余的部分 fee
6. 费用转给 rewardActor,验证区块的时候转发给打包的矿工
7.PARAMS
除了上述的一些参数,还有一些也列举如下:
SectorsMax 32 « 20 一个矿工能同时拥有的最大的 active 扇区数
AddressedPartitionsMax 200 单个 window 里面最大的 partition 数
NewSectorsPerPeriodMax 128 « 10 单个证明周期里面最大扇区数
ChainFinality 900 不能产生分叉的区块数
PreCommitChallengeDelay 150 做 commit1 之前要等待的高度
ElectionLookback 1 挖矿取 randomness 的高度
WPoStChallengeLookback 20 windowPoSt 取 seed 的高度
FaultDeclarationCutoff 70 不能递交 fault 的高度
FaultMaxAge 2800 × 14 最长的 fault 时间
MinSectorExpiration 180 × 2880 最短的扇区过期时间
dealPerSectorLimit max(256, ssize/134217728) 每个扇区 deal 数量限制
ConsensusMinerMinMiners 3 最小的挖矿矿工数
ConsensusMinerMinPower 1 « 40 最小的挖矿算力
MaxMinerProveCommitsPerEpoch 8000 每轮最多的 proven 数量
以上是对官方经济报告的分析与解读。
近日,Filecoin官方在Github发布经济模型优化草案,或将25%的区块奖励立即释放给矿工,剩下的仍按照180天线性释放。