

FilCloud解读Filecoin 规范解读:入门篇
Filecoin 是一个基于区块链技术的分布式文件存储网络。本系列文章主要介绍 Filecoin 的设计规范,无论哪个版本的 Filecoin 实现都需要按照此规范实现。
Filecoin 中为网络提供存储容量的节点称为矿工,矿工通过定期产生的时空证明以证明其存储有效性,以此获取 Filecoin 加密货币 FIL 。FIL 可以通过区块链技术进行交易。矿工在共识协议里的存力和其存储数据量成正比。
Filecoin 区块链不仅维护 FIL 的交易,而且实现 Filecoin 虚拟机,用于执行链上交易获取当前网络状态。这些交易包括客户向矿工支付 FIL 以存储特定文件的存储交易等。

以上左边为区块链数据,右边为矿工存储的已加密数据扇区。
以下介绍规范经常用到的一些基本概念。
Filecoin 虚拟机主要管理了 Filecoin 的用户功能,比如付款,存储市场,存力表等。虚拟机的运行原理主要是选择网络生成一系列区块链中正确的那条链,每个区块里都包含一系列可以使状态变更的消息,虚拟机执行这些消息形成一个新的全局状态的检查点,每生成一个新的区块,就会在原来的全局状态之上生成一个新的全局状态。全局状态包括一组角色,每个角色都有其自己的私有状态。
lotus 中的 chain/vm/vm.go 展示了虚拟机的数据结构定义:
type VM struct { cstate *state.StateTree base cid.Cid cst *cbor.BasicIpldStore buf *bufbstore.BufferedBS blockHeight abi.ChainEpoch inv *invoker rand Rand Syscalls runtime.Syscalls }
其中包含当前区块高度 blockHeight,全局状态 cstate,ipld 数据接口 cst 等。
Filecoin 网络里的角色相当于Ethereum中的智能合约。包括当前的状态和一组可以调用的方法,每个角色都有余额,指向当前状态的指针,标记角色类型的角色代码和标记发送消息数的值。
有两种调用角色的方法。第一种,通过向区块链网络发送已签名的消息,并支付交易费让矿工打包消息以执行方法。第二种,是一个角色的方法调用另一个角色的方法。
角色在 specs-actors 子系统中实现,以下定义了目前预先定义好的角色及其代码:
SystemActorCodeID = makeBuiltin("fil/1/system") InitActorCodeID = makeBuiltin("fil/1/init") CronActorCodeID = makeBuiltin("fil/1/cron") AccountActorCodeID = makeBuiltin("fil/1/account") StoragePowerActorCodeID = makeBuiltin("fil/1/storagepower") StorageMinerActorCodeID = makeBuiltin("fil/1/storageminer") StorageMarketActorCodeID = makeBuiltin("fil/1/storagemarket") PaymentChannelActorCodeID = makeBuiltin("fil/1/paymentchannel") MultisigActorCodeID = makeBuiltin("fil/1/multisig") RewardActorCodeID = makeBuiltin("fil/1/reward") VerifiedRegistryActorCodeID = makeBuiltin("fil/1/verifiedregistry") // Set of actor code types that can represent external signing parties. CallerTypesSignable = []cid.Cid{AccountActorCodeID, MultisigActorCodeID}
以上各个角色都有其特定的功能,后续会具体介绍。
后续将会介绍 Filecoin 系统节点的规范。
End
非常感谢您对 IPFS&Filecoin 项目的持续支持。我们很高兴继续与您一起,为人类信息建立一个强大的,去中心化和高效的基础。
FilCloud 帮你迅速了解 IPFS 领域的热点技术和应用
公众号:filcloud