1. 代币发行
根据 Filecoin 研究小组最新发布的设计模式,Filecoin区块奖励将不再使用调节周期,而是每一轮都自动调节,仿照自然界放射性衰减的法则,按照指数递减模式调节。
Filecoin币(FIL),就是基于Filecoin产生的数字代币,总量20亿枚。
FIL币一共有四种分配模式:
总量的70%作为矿工奖励(14亿),6年线性减半。
Protocol Labs团队拥有15%,6年解禁。
ICO投资者拥有10%,12~36个月解禁。
出块奖励计算公式:
注1:这里的单位是 attoFIL, 1FIL = 10^18 FIL
注2: 当Remaining(未挖出的币量)小于 10^11,这个奖励值就归零了,不能再挖出币。那时,矿工的收入将完全是交易费。
注3:1400000000 是系统最初保有币的总量,也即挖矿产生的总量,共14亿枚FIL。
注4: 可以看出,第一轮的奖励数为:153.856861913558700202 FIL。
2. 抵押与奖罚:
Filecoin网络中质押分为两类:
– Pledge Collateral (承诺质押):即矿工在挖矿时承诺给网络的可用空间时提供的质押,比如说提供 8T空间,质押1000FIL。
– Storage Collateral(存储质押):即矿工在存储用户数据时,为保证用户数据在规定的时间内被存储而提供的质押,比如接受用户1G数据存1年,质押100FIL
以上质押,在矿工不能兑现承诺的情况下,则可能被没收。
注1. 需要抵押filecoin代币作为抵押来建立你的矿工,具体创建矿工手续费需要查询:lotus state pledge-collateral
注2. 随着时间的推移,矿工需要抵押一定数量的FIL来保证自己行为的当,具体的数量现在未确定。在testnet期间,您可以从我们的网络水龙头中检索test filecoin作为开始挖掘的抵押品。
注3. 扇区大小:测试网支持1Gb的扇区,但是主网启动后会通过fork的方式取消对1GB扇区的支持,官方建议的是32G大小的扇区
矿工收益来源:
1. 区块奖励:按照一定的算法进行全网线形递减释放
区块奖励是与你的算力(有效存储量,通过PoSt证明)成正比。也就是说,你需要存的越多越好,比如说,你有100T的空间,最好100T全部存储用户数据,并证明给网络看。这样,网络会确认你的算力为100T。简单说,就是数据填得越多越好。如果一轮中有多个被选举矿工出块,那么出块奖励则由这几个矿工平分。
2. 存储收费:为用户存储数据的收益(来自于用户付费)
3. 检索收费:为用户检索数据的收益(来自于用户付费
4. 交易费用:交易收费,燃料费用
矿工惩罚:
1. 共识攻击惩罚:
当一个矿工在一个出块周期内发布两个或以上区块,且满足预期共识所定义的处罚条件时。(严格地说,一个获得出块资格的矿工只能产生一个区块)
当这种情况发生时,任何其他矿工都可以报告,网络通过检验属实后,会罚没涉嫌攻击网络的矿工的所有抵押,并且扣除所有现有算力,因为对网络的攻击行为被视为不可接受的。这基本上是最严重的处罚了。
2. 时空证明出错惩罚:
迟交时空证明:每一个矿工需要在每一个证明周期(Proving Period)内提交证明,否则,就会被罚。这里所说的迟交,不是没交,而是提交时间超过了一个证明周期,但仍然在一个生成攻击阈值(Generation Attack Threshold,超过这个时间,则可能不能鉴别生成攻击)范围内提交了。
在这种情况下,矿工应当知晓自己未在规定的时间内提交证明,此时仍可按照常规提交时空证明(PoSt),但此时要主动附上迟交罚金。
罚金的计算与延迟的时间长度相关,矿工可以自行计算。
3. 未提交时空证明:
如果一个矿工不仅没有在一个证明周期内提交证明,而其延迟的时间甚至超过了生成攻击阈值。这种情况下,就被视为没有提交时空证明。
在这种情况下,任何其他矿工都可以报告这种情况,网络通过检查属实后,采取严厉的惩罚措施。目前计划的实现是:罚没所有质押物;算力清零。
这对一些网络中断时间可能较长的用户非常不利。一个可能的改进是软件将来可能提供一定的容忍度,允许用户在一个VDF(Verifiable Delay Function)攻击的范围内进行补救。但即便如此,那些可能较长时间断网的用户也会无能为力。
4. 存储错误:
这种情况应该也会比较普遍。这就是说,当一个矿工所存储的数据出现错误时,当然应该接受一定的惩罚。
这种情况需要矿工主动报告丢失(或着说发生错误)的扇区(Sectors)给网络,这可以在时空证明中进行,协议中有定义,包含在“Missing Sectors”字段即可。 作为一个矿工,需要周期性地检测数据,这也是时空证明过程的一部分工作。
网络通过检测矿工提供的证明,验证属实,将根据丢失(错误的)扇区数量来罚没相应的质押物(FIL),同时罚没此矿工相应的算力。
注意,当一个矿工发现磁盘损坏或数据丢失,他/她可以想办法恢复数据,也就是说重新构造时空证明,然后重新向网络申明拥有数据和算力。但是,这是补救措施,本次罚没的抵押物还是没了(否则就为生成攻击打开大门了)。此补救措施的一个好处就是其合约用户可能不追究其责任。
5. 违背合约惩罚:
如果一个矿工未能按照合约在规定的时间内存储用户数据。比如用户要求存储半年,而矿工存储3月就把数据删了。
这种情况下,用户可以马上报告给网络,附上当初签订的合约,在网络确认属实(即矿工在其证明中不再包含此数据所在扇区)后,将对矿工进行处罚。处罚来自矿工的承诺质押,同时用户的未支付费用将被返还,矿工的相应存储质押将被自然地没收掉。
被罚没的质押将分为两个部分:
1. 直接销毁
2. 奖励给报告者和执行者
3. 共识选举:
这种共识机制采用VRF(Verifiable Random Function,可验证随机函数),来进行秘密选举出每一轮的领导者,获得出块资格和奖励。这种选举的方式来达成共识,可以有效地减少能源消耗,抵御分叉
预期共识 – 及它的优缺点。这里不再进行过多叙述。预期共识的实现非常简单,它不需要交互,节点自己可以计算是否自己成为领导人,而且公布之后他人可以十分方便地验证。
由于预期共识一轮选举可能产生多个领导人,都当领导,各自产生区块,而且每一个区块都有效。也就是说同一个高度就可能有多个区块。把这些区块再打包,称为一个tipset。因此,在Filecoin中,链并不能完全称为区块链,而应该是tipset链。一个tipset里包含一个或多个区块。也有的轮次中的选举没有领导人,这个高度就是一个空块
每一轮是如何定义的呢?我们知道比特币是靠难度来进行调节的,如果没有计算量来进行抑制,如何实现轮次的时间控制,这就是VDF和VRF的作用了。 预期共识的每一轮选举要依赖一个随机数,这个在系统的实现中称为 ticket,这个ticket的产生中间要走一个 VDF 和 VRF的流程,来保证时间的花费。
当多个Leader打包,形成多个TipSet时,通过计算TipSet的Weight的计算确定“主链”。
一个TipSet的Weight等于TipSet中所有区块的Weight的总和。Weight大的TipSet认为是主链。当两个TipSet的Weight一样大的时候,取Ticket较小者.
由于不同的矿工在同一时代产生区块,一个tipset中的多个区块可能包含相同的消息(由相同的CID标识)。当这种情况发生时,只在第一次以tipset的规范顺序遇到消息时才对其进行处理。消息的后续实例将被忽略.
因此,tipset的执行顺序总结如下:
第一个块奖励
处理第一个街区的选举职位
第一个块的消息(SECP之前的BLS)
第二个块奖励
处理第二个区的选举职位
第二个块的消息(SECP之前的BLS,跳过已遇到的任何消息)
[…后续块…]
注:tipset内 ,块是根据块内ticket值的大小排序。
4. 测试网配置
1. 此次官方为掌握网络主动权,在测试网上线前进行了“预挖”,官方线上3个节点,名称分别为t0222、t0333、t0444 上线算力为1.25TB; 这使得在主网上线一段时间内,大家很难对网络发起强有效的攻击,保护了网络的稳定性,控制了网络的主动权。
2. 对各位矿工的算力上榜设定了门槛“512G”为线 即有效存储证明超过512G,才能在lotus测试网的浏览器上看到 浏览器地址:https://stats.testnet.filecoin.io
3. Filecoin 官方博客宣布,测试网阶段将一直持续到 2020 年 3 月20日,而主网启动窗口时间为 2020 年 3 月 23 日至 4 月 24 日。
其中,测试网又会经历两个主要阶段。
2019.12.12-2020.1.17为测试第一阶段,将对Filecoin进行一些基本功能测试、优化和bug修复,可能会涉及到快速开发和重要代码修改,确保Filecoin协议及其实现达到安全、高性能和可互操作的状态。
2020.1.20-2020.3.20为测试第二阶段,进入第二阶段时,filecoin协议的基本特性将已确定,并且会进行为期至少两个月的正式测试、验证和安全审计。此外第二阶段还会开启可信设置仪式,发布更新主网硬件测试配置,发布开发工具协作包。
4. 官方也明确表示,测试网期间产生的 FIL代币与后续主网代币无关,没有任何价值
5. 疑问
1.矿工之间怎么协商去避免选择重复交易
官方文档只是简单的一句节点间协商从message pool中选择交易,如何协商未做详细解释,在代码架构文档中,有一段注释侧面解释了如何避免重复,其实就是传入矿工地址,这个算法会选择最有利的messages给矿工,具体要看代码实现,个人猜测是每个已经被矿工选中的message被做了标记以此避免重复。
// MostProfitableMessages returns messages that are most profitable
// to mine for this miner.
// Note: This is where algorithms about chosing best messages given
// many leaders should go.
GetMostProfitableMessages(miner addr.Address) [msg.SignedMessage]
2. 矿工如何知道有其他矿工存在
矿工从每一轮生成的ticket就可以自己推算出自己是否能当选这一轮的出块人,并会提交证明表明自己身份,其他矿工可以获知这个矿工存在。
3. tipset如何做到包含全部块,因为有个出块时间,如果矿工就是等着其他人都出块了再把其他人的块都打包进tipset,那每次他的tipset权重都是最大的?
有个 EPOCH_CUTOFF 概念存在,出块时间是由 VDF 和 VRF 算法决定的,矿工无法知道自己需要等多久才可以尽可能多的凑齐其他矿工的block,而可能错过了提交tipset。