Filecoin 规范解读--入门

介绍

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

以上左边为区块链数据,右边为矿工存储的已加密数据扇区。

基本概念

以下介绍规范经常用到的一些基本概念。
数据结构:由语义标记的数据集合(例如结构体,接口或枚举)。
方法:不依赖外部状态的计算过程(例如数学函数或不引用全局变量的编程语言函数)。
模块:单个软件单元的功能集合,根据特定情况,可能是软件模块,处理特定任务的线程或进程等。
APIs:是可以发送到模块的消息定义。许多功能需要一系列 APIs 组合完成。
节点:符合 Filecoin 协议规范的完整软件和硬件系统。一个节点应该包括上面的模块和对外暴露的 APIs。全节点则是指完整的模块和APIs。
子系统:根据 Filecoin 完整协议规范的概念而划分的子集。比如存储市场,检索市场。它们不一定对应于任何特定的节点或软件模块。
角色:在 Filecoin 虚拟机中的虚拟实体。比如执行智能合约的协议角色,拥有 FIL 加密货币并可以交易的角色等。

Filecoin 虚拟机

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

你可能感兴趣的:(Filecoin)