本文主要来自Filecoin的官方文档,时间:2023.10
<!--StartFragment-->
本文主要来自Filecoin的官方文档,时间:2023.10
FIL的链是tipset的链,而不是block的链。一个tipset里包含多个块,它们有同样的高度,并且链接到上一个同样的tipset。
存储供应商可以在一个epoch里各自创建多个block,来扩展链的吞吐量。
每个tipset都有一定重量,链会选择最重的链来延长。
Actors就是智能合约,有很多官方内置actor,也可以有用户自定义的actor。
Drand是FIL用的可验证去中心化随机数,用来做共识中的leader选举。
有多种类型的节点:
一般来说,每个节点都会提供链验证服务,也就是它会运行链验证者节点。所以最常用的应该就是两种节点:
服务者(同时是链验证者,存储供应者,检索供应者)
客户端(用户侧,用来上传,检索,下载文件)
有多种类型的地址,主网地址以f开头,测试网地址以t开头
预期共识(Expected Consensus, EC)
概率性共识,拜占庭容错,每个epoch一个块。
用存储证明选举,中奖几率正比于提供的存储能力。开奖依赖于Drand。
EC获取epoch中的所有区块,用权重函数选择权重最高的来添加区块。
特性:
流程:在每个epoch中,按如下流程进行共识:
强制的软性最终性。在第N轮,所有矿工都会拒绝N - F轮前的分叉的所有块,F = 900。
PoRep,复制证明,证明存储着已经存了客户端发来的副本
PoSt,时空证明,在存储的生命周期内,不断证明有存储数据,有两种挑战:\
\
有两种情况下会被slash
Providers:有两种provider:storager provider (SP)和Retrieval provider (RP)。
Deals:SP和RP通过deal向用户提供服务,deal包括价格,数据大小,服务时长,抵押品等。deal是在链下的,达成一致后被发到链上。
Sectors:Sector是衡量存储的基本单位。SP在其上存储用户数据并生成PoST,sector具有大小和声明周期,SP可以在其生命周期结束前延长它们。有32GB和64GB两种。
存储市场是deal达成的地方,deal(交易)分为4个阶段:
目标是最大化FIL网络上的有用存储,为经过认证的客户提供廉价甚至免费的存储服务。该服务是围绕datacap开展的,datacap是分配给经过认证的客户端的存储份额,用于存储数据,并提高对SP的激励。
经过验证的客户可以使用Datacap将数据加载到FIL中。datacap可以从经过社区选择的公证人处领取。收到datacap的SP可以获得10倍存储权重,最终提高它的获奖概率。
基本检索:
节点支持从最初上传数据的SP处检索,客户需提交检索请求并支付FIL作为检索费用。检索请求包括:
专门的检索服务市场。用于在FIL网络上检索存储的数据。有独立的检索服务商(RP)提供高性能服务。
一旦数据倍提交到fil上,不必下载数据,就能对它们进行一些计算。
常见的是数据转换,数据计算是基于IPLD进行的。有些工作组在进行这方面的开发工作。
FVM是FIL上的合约运行环境。允许用户进行有限制的运算,例如对存储和获取数据加规则。
FVM被设计用来运行可以编译为wasm的native actor,或者EVM合约。内置的refrence FVM用rust写的。
roadmap:一开始支持EVM,后续支持所有能编译成wasm的语言。(不知道EVM当前支持的如何了)
FIL支持创建data DAO,可以让一群人或组织管理数据权限,并将其token化,并将收益汇集到金库中。可以在peers之间交换这些token,并请求对数据进行计算服务,如验证,分析,提取等,从而支持机器学习。
有修复和复制机器人工具,可以帮助用户永久存储其数据。这需要合约和SP配合完成。
用户可以根据矿工的历史业绩 ,将FIL借给矿工用作抵押。可以通过多重签名进行自动还款。
可根据历史成绩投保,让SP免受机房故障,币价下跌等的损失
长期来看的一些基础设施,不一定与存储有关,如DEX,跨链桥等。
在FVM上虚拟出来的EVM,兼容EVM。并且File coin节点提供了Json RPC支持,所以各种EVM开发工具,如hardhat等,也可以直接用。
详细文档:https://docs.filecoin.io/smart-contracts/fundamentals/filecoin-evm-runtime/
FEVM的性能会比FVM差,因为它是FVM上模拟出来的EVM。
FEVM可以与内置的actor交互,达成普通EVM上不能做的功能。可以调用filecoin-solidity库来实现,示例:https://github.com/lotus-web3/client-contract
分为内置合约和用户合约。很多功能都是由内置合约完成的,例如验证存储证明和分发奖励,如下:
块包含:
内置数据,如块高
状态树指针,CID。状态树是个Merkle DAG。指向Actor数据,以及当前块中的Messages。
消息树指针,CID,也是Merkle DAG。一个message包括:\
\
filcoin上,是tipset的链,一个tipset里可以包含多个块。
块跟其他链的差不多,包含块头,msg列表,以及签名。
在EC共识中,在一个epoch中会选出多个block producer,也就是一个epoch中会有不止一个有效块被创建,它们有共同的高度,以及指向同一个父区块。这些块被打包在一起称为tipset。
为什么要有多个块呢?这个想法跟以太坊的叔块有点像,可以最大化有效的出块能力;但是在filecoin里,所有的块都是有效的,它们可能包含重复的msg,所以msg集是按照块的出现顺序,把重复的msg去重后的执行顺序。
生成方法:把数据本身,SP的id,封装时间做hash即可。
SP被选中出块时要提供的证明,证明当前时间点持有数据拷贝。这个证明的提交时间非常短,所以SP没有时间来伪造。如果成功了,可以获得:
所有SP均需提交,用于证明在承诺期内有存储用户的数据。一个deal的时长需在180-540天之间。
一个证明期是24h,会被分成48个dead line,每个dead line 30分钟。sector归属于partition(2349个sector,约80TB或160TB)。一个partition会被指定一个证明区间,这个partition内的所有sector需要都在这个证明区间内完成证明。
一个SP承诺封装的sector越多,它需要提供的证明就越多,它需要在每个证明期内重新封装数据,以证明自己真的有封装存储数据,虽然不合理,但没办法,这是必须的。链上会有一个WindowPoSt挑战,SP需要在30min 内生成一个zk-SNARK来证明自己有存储数据,并提交到链上,来完成这个证明,没完成挑战的话,一部分质押的FIL就会被转到f099燃烧地址烧掉,同时storage power也会减少。
\
用途:
精度:
\
\
公证人,用户,SP通过发放和花费DataCap来配合,来增加网络效应。
基于FIP 0003的指导原则,提高 Filecoin 的有效性,使其成为人类最重要信息的去中心化存储网络。
公证人获取并分配DataCap给可信的用户,用户可以用DataCap来赞助它的存储交易。收到DataCap的SP,在它收到这个deal的存储区内,可以获得10倍quality-adjusted-power,这将增大它的区块奖励。这激励SP存储有用信息。
智能合约也可以像client一样获得和使用DataCap。可以直接通过一个verify程序获取32GB的DataCap。DataCap在合约间不能转让,是一次性授予的。
需要有一个能接收DataCap的file coin 地址。DataCap是一次性授予的,如果需要更多DataCap,需要重新申请,可以多次授予。
client可以向公证人申请获得DataCap。对于第一个32GB的DataCap,可以直接用自动审核。例如如果关联的github账号有注册超过180天,且近30天没用过自动审核的,就可以直接申请。
对于存储数据量比较大,要商用的,有两个方法:
申请流程可见https://docs.filecoin.io/basics/how-storage-works/filecoin-plus/
花费时也要注意设定参数,参考:https://docs.filecoin.io/basics/how-storage-works/filecoin-plus/#spend-datacap
piece是client和SP协商存储文件的单位,即在deal中使用的单位。一个piece没有特定的大小,但它不得大于sector的大小,如果大于sector,则需要拆分为多个piece。
piece的数据结构设计是为了方便生成各种证明。它的结构如下:
\
\
从用户的文件,到SP存储到sector中的内容,中间经历了很多处理。
流程如下:
1-3在client端处理,4同时在client和SP端处理,剩下的都在SP端。
在1-3中,Fr32的具体实现可以有偏差,它的关键在于让client和SP能够对deal里的CommP达成一致。
详见https://spec.filecoin.io/systems/filecoin_files/data_transfer/
Storage Power Consensus (SPC) ,每个存储矿工的有效存储能力都被记录在一个表里,并达成共识。实际执行的共识流程是EC(预期共识),SPC是描述存储矿工挖矿能力的。
SPC的功能:
在Filecoin里有两种方式赚FIL:
因为参加共识必须是以storage power为依据,所以共识矿工一定是存储矿工,但反之不一定。共识矿工需要多一些证明,所以多一些计算开销,但是这些开销并不大。
Quality-adjusted power (QAP)是针对每个sector的存储质量的函数,由如下内容确定:
QAP是矿工在leader选举中所占有的选票,随着承诺的有用存储增加而线性增长。
QAP = 原始存储大小 * SQM (见上面的4).
要参与共识挖矿,拥有的算力必须大于最小算力要求:MIN_MINER_SIZE_STOR,我看源码里是100TB,不知道现实中有没有改过。
不能单纯像比特币那样指数递减,因为这会导致大量的币在早期挖出,然后矿工们可能就不存用户数据了,就退出了,这不利于长期发展。因此filecoin的挖矿奖励分为两部分:简单奖励和基线奖励。简单奖励就像比特币,按指数递减,占总挖矿奖励的30% (3.3亿枚);基线奖励是指网络达到一定的存储量(占世界存储总量的比例),就释放一部分代币。基线从1EB(不到当今世界存储的 0.01%)开始,以每年 200% 的速度增长(高于通常世界存储 40% 的年增长率)。当网络提供全球 1-10% 的存储空间时,社区可以齐心协力减缓增长速度。
矿工们的收入来源不只是挖矿,还有服务。在网络不同的发展阶段,网络会有不同的目标,矿工们的收入来源会有很大变化。
\
\
详见https://spec.filecoin.io/systems/filecoin_token/block_reward_minting/,还是挺复杂的
简单奖励
简单奖励释放所有挖矿奖励的30%,即3.3亿枚。每6年减半。
基线奖励
基线奖励是指网络达到一定规模,就释放一定奖励。它受很多因素影响:
,是网络封顶字节率,
\= min(R(t), b(t) ),其中b(t)是基线公式。
,即在某个时候,基线应该是多少。其中b0是初始基线,g是基线增长率
奖励分配
上面定义了每个epoch能铸造多少币,现在看这些币怎么分配。
铸币是增量发生的,而且也是离散增量的。定期形成由多个获胜者组成的“tipsets”,每个获胜者都会获得相等的、有限数量的奖励。单个矿工可能多次获胜,但可能只提交一个区块,但仍可能获得奖励,就好像他们提交了多个获胜区块一样。多次获胜奖励的机制是乘以一个名为 的变量WinCount,因此我们将每次获胜铸造和奖励的有限数量称为“每次奖励WinCount”或“每次获胜奖励”。
有一堆复杂的公式可以计算出一个矿工在一次铸造中能获得多少币。
代币分配
\
\
FIL总量20亿。
矿工:55%,即11亿枚。\ 矿工挖到的矿,25%立刻拿到,75%在后续的180天里线性发放。\
\
sector是存储的基本单位,有32GB和64GB两种大小,承诺服务时间也是重要参数,最长时间18个月,也就是sector的生命周期,周期结束时可以延长生命。
如果一个sector只有部分装了deal,剩下的部分就叫承诺容量(committed capacity);没有装deal的sector叫做承诺容量扇区(committed capacity sector)。
有的矿工会为了追求承诺容量而仅仅扩大sector,而不去存用户数据,因为它可能更看重区块奖励,而不是用户的服务费。这对网络是不利的。因此网络设计了DataCap,来验证矿工是否存储了有效数据,存储有效数据的矿工可以获得更高的capacity。验证并不意味着稀缺——任何拥有存储在 Filecoin 上的真实数据的人都可以很容易地获得验证。
一旦扇区已满(无论是包含客户端数据还是作为承诺容量),未密封的扇区将由证明树组合成单个根UnsealedSectorCID。然后,密封过程将未密封扇区编码(使用 CBOR)为密封扇区,根为SealedSectorCID。
\
\
sector的密封和证明(使用了随机性):https://spec.filecoin.io/systems/filecoin_mining/sector/sealing/
https://spec.filecoin.io/systems/filecoin_mining/storage_mining/mining_cycle/
\
有3种类型抵押品
文档:https://spec.filecoin.io/systems/filecoin_mining/miner_collaterals/
初始质押是保证网络安全所需要的,就像PoS里的S一样。它分为两部分:存储质押和共识质押
初始质押 = 存储质押 + 共识质押
SectorInitialPledge=SectorInitialStoragePledge+SectorInitialConsensusPledge
通过一开始就提供存储质押,可以向用户保障服务质量,因为没有服务质量就会被slash。存储质押需要足够小,以便矿工可以进入网络;存储质押也需要足够大,从而为故障,罚款,交易费等提供抵押。使用区块奖励和未归属奖励作为额外的存储抵押,可以减少初始存储抵押,而不会对网络激励一致性产生影响。使用能够覆盖未来7天的sector fault fee和sector fault detect fee的初始存储抵押,是一个平衡点,这是用预计sector未来的奖励来衡量的。
SectorInitialStoragePledge=Estimated20DaysSectorBlockReward
初始存储质押 = 预计20天区块奖励
由于每sector的存储质押是未来该sector可能的存储奖励,所以存储质押与网络总存储量无关。全网总存储质押取决于未来区块奖励。存储质押提供了一种方法来决定是否有必要增加sector,但它无法向网络提供长期安全保障,随着区块奖励降低,这会让针对共识攻击的成本降低。所以初始质押的第二部分:共识质押,取决于两部分:由sector带来的QAT(quality-adjusted power)数量;以及网络流通供应量(network circulating supply)
矿工可能会与client达成deal,但是后续因为成本等原因放弃deal,不存储客户数据。如果这样的话,网络信用会变得很差。因此为了防止这种情况,引入区块奖励质押。对于未能履行deal承诺的矿工,会进行惩罚。另外使用区块奖励质押可以降低初始质押的量,让网络得到发展。
经过各种权衡后,区块奖励的发放被设计成次线性的。
该类型抵押是用于存储交易的。
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!