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 Piece
。 Piece
有一个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`。
CommRLast
和 CommC
(证明生成过程中的另外一个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://filscan.io/tipset/chain?height=608709
-
查看区块,示例: https://filscan.io/tipset/chain?hash=bafy2bzaceccriyuvs7e3bksrjefauekgeltmbfpldsb7whhzobt2s6rfahiim
参考
https://github.com/filecoin-project/venus
https://ipfs.io/ipfs/QmWimYyZHzChb35EYojGduWHBdhf9SD5NHqf8MjZ4n3Qrr/Filecoin-Primer.7-25.pdf
https://research.filecoin.io/assets/proof-of-replication.pdf
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
网友评论