Filecoin建立在空间证明(ProofofSpace)的改进之上。这与股权证明(ProofofStake)有关。股权不仅还以证明存储的形式确定矿工开采区块的可能性。简单来说,PoS代表有效存储空间,即存储能力。
预期共识(ExpectedConsensus)是Filecoin区块链的主要出块共识。它是一种概率拜占庭容错共识机制,目标是使矿工出块的权益与自己对存储的贡献成正比。也就是说,矿机(矿池)被使用的有效存储空间在整个网络中的总使用空间中所占比例,就是此矿机(矿池)能够出块的概率。
其他主要证明方式还包括:复制证明Proof-of-Replication,PoRep和时空证明Proof-of-Spacetime,PoSt。复制证明PoRep是PoS的进阶版,可以证明矿工已将数据存储,并保证每份数据存储的独立性,同时防止女巫攻击、外源攻击和生成攻击。时空证明PoSt是基于复制证明实现的,矿工证明自己花费了Spacetime资源,即一定时间内的存储空间的使用。即使验证者不在线,也能够在未来去验证矿工在该段时间内生成了证明链,有效防止临时生成数据攻击。
另外还有数据持有性证明Provable-Data-Possession,PDP和可检索证明Proof-of-Retrievability,PoRet。矿工完成了用户存储数据的订单后,为了证明数据已经被自己存储,用户可以多次验证矿工是否将其数据保持存储的状态。与PDP类似,可检索证明PoRet证明矿工存储的数据是可以用来查询的。
总结:在预期共识中,矿工赢得选举的可能性跟矿工当前的存储能力成正比,而存储能力则由复制证明和时空证明来衡量。
再用一张图来详解这几个证明机制之间的关系。
对Filecoin共识机制有了大体了解之后,我们循序渐进,来看看Filecoin的出块流程。包含3个阶段:
阶段一密封:矿工会先获取存储订单,把数据切成256KB的小块,用特定算法(StackedDRG)进行密封生成副本。这个过程最耗时,数据越多时间越长。初期,大家硬盘都是空的,就比谁存储速度更快,即"密封速度"。这会涉及软件算法的优化、CPU、内存、以及硬盘的读写能力。这个过程会让硬盘几周内就被写满。
阶段二复制证明:接下来就是生成"复制证明zksnark"的过程,用特定算法对存储数据生成一个"零知识证明",以验证密封的数据来源于客户的源数据。需要在指定时间内(30秒)完成,并广播到全网,让别人确认该出块的有效,然后上链。这个过程要用到GPU加速,如果30秒内完不成,将得不到块奖励。
阶段三Sector(扇区)证明:矿工会将客户提供的数据存放于网络中,这个区域称为扇区Sector。每个扇区会包含存储文件内容及承诺存储时长,确保客户在约定存储时长中可以自由运用自身存储的数据。矿工添加一个扇区至Filecoin网络时,需要质押一笔锁定币(自身持有的FIL通证以及部分区块奖励)。
链上的miner智能合约会验证提交的证明是否正确,这可以达到毫秒级处理速度。
以上是完整Filecoin出块流程的基本介绍。矿工在赢得区块奖励后,仍然需要持续证明存储的数据没有丢失,因此就到了最后一环时空证明。
时空证明:矿工必须每1小时左右,提交一次复制证明,证明数据还在。链上也会在每个出块时间随机发出挑战challenge,来验证数据是否存在。如果失败,则被扣除抵押币。