美文网首页
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