Filecoin VM #
The majority of Filecoin’s user facing functionality (payments, storage market, power table, etc) is managed through the Filecoin Virtual Machine (Filecoin VM). The network generates a series of blocks, and agrees which ‘chain’ of blocks is the correct one. Each block contains a series of state transitions called
messages, and a checkpoint of the current
global state after the application of those
global state here consists of a set of
actors, each with their own private
actor is the Filecoin equivalent of Ethereum’s smart contracts, it is essentially an ‘object’ in the filecoin network with state and a set of methods that can be used to interact with it. Every actor has a Filecoin balance attributed to it, a
state pointer, a
code CID which tells the system what type of actor it is, and a
nonce which tracks the number of messages sent by this actor. (TODO: the nonce is really only needed for external user interface actors, AKA
account actors. Maybe we should find a way to clean that up?)
There are two routes to calling a method on an
actor. First, to call a method as an external participant of the system (aka, a normal user with Filecoin) you must send a signed
message to the network, and pay a fee to the miner that includes your
message. The signature on the message must match the key associated with an account with sufficient Filecoin to pay for the messages execution. The fee here is equivalent to transaction fees in Bitcoin and Ethereum, where it is proportional to the work that is done to process the message (Bitcoin prices messages per byte, Ethereum uses the concept of ‘gas’. We also use ‘gas’).
actor may call a method on another actor during the invocation of one of its methods. However, the only time this may happen is as a result of some actor being invoked by an external users message (note: an actor called by a user may call another actor that then calls another actor, as many layers deep as the execution can afford to run for).
For full implementation details, see the VM Subsystem.