美文网首页
Filecoin 技术原理

Filecoin 技术原理

作者: 雪落无留痕 | 来源:发表于2021-04-15 01:26 被阅读0次

    Filecoin 是一个点对点的分布式文件存储网络,通过经济激励保证文件的可靠存储。用户支付FIl代币进行文件存储,存储矿工通过存储文件赚取Fil奖励,矿工需要持续提供存储证明。

    Filecoin工作原理

    网络

    Filecoin是一个分布式的点对点网络,节点之间可以传送blocks和messages信息。

    节点

    节点之间可以同步和验证区块链,并验证每个块的信息,并提供全局状态。节点可以管理Filecoin钱包并接收Fil。

    节点可以广播不同的Messages, 例如发送FIL到另一个地址; 存储或检索文件的交易。

    矿工

    矿工主要提供存储和检索服务,并且每30s生成一个块。矿工需要生成相关存储证明,需要较高的硬件配置。

    Deals

    主要有两种:存储交易和检索交易。当矿工存储数据后,需要向链上重复提供数据一直在存储的证明,否则会受到惩罚,损失FIL。数据检查在链下执行,用户通过支付道通增量支付接收的数据。

    证明

    矿工需要提供两种证明:

    (1)存储了用户的完整数据;

    (2) 在整个交易(deal)生命周期一直在存储数据;

    前一种采用PoRep(Proof of Replication)证明,矿工可以编码存储的数所与它们的物理存储相关,其它的矿工无法复制(对于两个deal, 同一个数据不能使用同样的磁盘存储)。

    在整个交易的生命周期内,矿工采用PoSt (Proof of Spacetime)证明其始终存储数据,主要采用随机抽查部分数据的方式。

    其它的矿工会持续验证每个区块中证明的有效性,保证安全性,惩罚作恶矿工。

    Gas费用

    交易的Gas费用一部分销毁,一部分作为矿工奖励。

    Actors

    Actor类似EVM中的智能合约,主要用来管理状态,例如账户余额,任何对Filecoin状态的改变需要由Acotr触发。

    地址

    Filecoin有四类地址,主要为:

    • 0 ID Address, 示例: f033259
    • 1 SECP256K1 公钥地址,示例: f1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za
    • 2 Actor地址,账户创建输出的sha256哈希值,与公钥无关, 示例:f2plku564ddywnmb5b2ky7dhk4mb6uacsxuuev3pi
    • 3 BLS公钥地址, 以f3开头。

    Filecoin上交易

    FIL 转账

    使用send 命令进行FIL转账

    # lotus send --from=<sender address> <target address> <FIL amount>
    lotus send --from f1zp2... f15zt... 3.141
    

    数据存储

    (1)用户将数据打包中CAR文件;

    (2)用户发起存储deal, 然后由矿工确认;

    (3)用户数据线下传送给矿工;

    (4) 存储deal上链;

    (5)矿工将数据置于sector, 然后封装,生成PoRep证明,证明再上链;

    数据检索

    (1) 用户根据 CID 对存储矿工提出检索请求;

    (2) 当矿工确认后,用户发起检索的deal;

    (3) 当用户接收到数据后,验证其正确性,然后支付费用。

    lotus client retrieve --miner <miner ID> <Data CID> <outfile>
    

    当前Lotus只支持用户直接向存储矿工检索,未来计划支持独立的 矿工检索,采用DHT等技术实现。

    存储验证

    PoRep

    (1)构造 Sector

    用户首先需要将存储的文件转换为IPLD DAG, 然后再序列化为CAR文件,填充成为一个Filecoin PiecePiece有一个CID, 作为CommP (Piece Commitment)。

    当发起存储交易时,交易由CID和其它的一些存储数据的相关参数创建,还有用户和矿工的身份信息。

    lotus client deal <data CID> <miner> <price> <duration>
    

    用户将交易(Deal Proposal)发送给矿工。当矿工确认后,用户再将数据发送给矿工。矿工验证数据和CID匹配后,再将交易发布到区块链上。

    矿工将多个Deal Proposal (可能来自不同的用户)中的Piece组装成 Sector, Sector中Filecoin中的基本存储单元,具有不同的大小。

    Sector填满的时候,矿工计算其数据的承诺 CommD , 代表所有Piece CID的根节点。

    (2) 数据封装 (Seal)

    数据封装将 `Sector` 经过一系统图和Hash处理生成一个唯一的复制,其Merkle树的根为 `CommRLast`。
    

    CommRLastCommC (证明生成过程中的另外一个Merkle树根) 通过Hash生成 CommR (Commitment of Replica),作为复制的承诺。

     `CommR`会记录在区块链上; `CommRLast`由矿工秘密保存,用于随后的PoSt证明中。
    
     数据封装的编码过程必须计算复杂,并且速度慢,以防止矿工作弊。
    
     采用zk-SNARKs可以压缩封装编码的验证过程,PoRep证明在链上存储,网络节点都可验证。        
    

    PoSt

       矿工只需要运行一次PoRep证明其完整存储了数据,但需要持续运行PoSt, 以证明其始终在交易的生命周期中始终存储了数据。
    
       PoSt 利用`replica`, 密秘输入`CommRLast` 和 公开输入`CommR`构建。
    
       PoSt根据随机挑战选择部分编码的叶子节点数据,利用`CommRLast` 和公开的`CommR` 证明数据存储的有效性。
    
       最后采用zk-SNARK将证明压缩,方便链上验证。
    

    Filecoin协议实现

    Filecoin有4种协议的实现:

    • lotus, 采用Go开发,功能最完备
    • forest, 采用rust开发
    • fuhon, 采用C++开发
    • Venus, 采用Go开发

    硬件配置

    Lotus节点配置

    • macOS或Linux系统,暂不支持Windows

    • 8核CPU, 32GiB RAM, CPU支持SHA扩展针大幅加速

    • 足够的存储lotus链的空间,目前每周增加12 GiB

    矿工硬件配置

    矿工的计算复杂度和sector的大小有关(主网支持的size有32GiB, 64GiB),对于32GiB的sector, 硬件要求如下:

    • 最低8核CPU,最好支持SHA指令扩展;

    • 最低128G RAM

    • 推荐采用GPU加速SNARK计算

    • 最低1TiB的基于NVMe的磁盘空间,用于数据封装,缓存Filecoin参数等

    • 额外数据存储空间

    Filecoin浏览器

    参考

    https://github.com/filecoin-project/venus

    https://spec.filecoin.io/

    https://ipfs.io/ipfs/QmWimYyZHzChb35EYojGduWHBdhf9SD5NHqf8MjZ4n3Qrr/Filecoin-Primer.7-25.pdf

    https://research.filecoin.io/assets/proof-of-replication.pdf

    https://research.filecoin.io/

    https://proto.school/tutorials

    https://docs.ipld.io/#what-is-ipld

    https://github.com/multiformats/cid

    https://github.com/ipld/specs/blob/master/block-layer/content-addressable-archives.md#summary

    相关文章

      网友评论

          本文标题:Filecoin 技术原理

          本文链接:https://www.haomeiwen.com/subject/fwvrnhtx.html