Filecoin面向用户的大部分功能(支付、存储市场、算力表等)都是通过FilecoinVM进行管理的。网络生成一系列区块,并同意哪个区块“链”是正确的。每个区块包含一系列称为消息的状态转换,以及在应用这些消息后当前全局状态的检查点。
这里的全局状态由一组参与者组成,每个参与者都有自己的私有状态。Filecoin区块链中的Actor(参与者)相当于以太坊的智能合约。它本质上是Filecoin网络中的一个“对象”,具有状态和一组可用于与之交互的方法。每个参与者都有一个属于它的Filecoin余额,一个状态指针,一个代码CID来告诉系统其参与者的类型,以及一个随机数(nonce)来跟踪该角色发送消息的数量。
Filecoin虚拟机(VM)是负责执行所有参与者代码的系统组件。在FilecoinVM上执行Actor(即链上执行)会产生Gas成本。
在FilecoinVM上应用(即执行)的任何操作都会以状态树的形式产生输出。最新的状态树是Filecoin区块链中的当前事实来源。该国树是由CID,其存储在IPLD店鉴定。
状态树是在Filecoin区块链上应用的任何操作的执行结果。链上(即VM)状态数据结构是一个映射(以哈希数组映射树-HAMT的形式),它将地址绑定到参与者状态。每次调用actor方法时,VM都会调用当前的状态树函数。
在Actor上调用方法有两种。
第一种,是以系统的外部参与者(即Filecoin的普通用户)的身份调用方法,您必须将已签名的消息发送到网络,并向包含您消息的矿工支付一笔费用。消息上的签名必须与Filecoin的帐户关联的密钥相匹配,并且用户账户里有足够的Filecoin用来支付执行该消息的费用。这里的执行费用就如同于比特币和以太坊中的交易手续费用,它与处理消息的工作量成比例(比特币消息费用为每字节,以太坊使用“gas”的概念。我们也使用“gas”)。
第二种,参与者可以在调用另一个参与者的方法时调用该方法。但是,这种情况唯一可能发生的原因是外部用户消息调用了某个Actor(注意:用户调用的actor可能会调用另一个Actor,然后再调用另一个Actor,执行到可以承受运行的最多层)。