Smart contracts + provable storage = FVM
Possibilities

The FVM unlocks boundless possibilities, ranging from programmable storage primitives (such as storage bounties, auctions, and more), to cross-chain interoperability bridges (e.g. trustlessly connecting Filecoin with Ethereum, Solana, NEAR, and more), to data-centric Decentralized Autonomous Organizations (DAOs), to Layer 2 solutions (such as reputation systems, data availability sampling, computation fabrics, and incentive-aligned Content Delivery Networks), and more.

Here are some of the things we're excited to see deployed on the Filecoin network. It's up to you to make them happen!

Chat with developers ➝
/// A Filecoin actor brokering decentralized compute jobs.
/// For illustration purposes only.
#[fvm_actor(state=ComputeState, dispatch="method_num")]
impl ComputeActor {
/// Creates a job with an input DAG, WASM compute logic,
/// data affinity, geographical bounds, and timeout.
pub fn create_job(req: CreateJobReq, st: ComputeState)
-> CreateJobRes { ... }
/// Allows a compute node to claim a job by proving it
/// satisfies the requirements and staking collateral.
pub fn claim_job(req: ClaimJobReq, st: ComputeState)
-> ClaimJobRes { ... }
/// Proves that a compute node finished running a job,
/// posts the result, and claims the reward.
pub fn prove_done(req: ProveDoneReq, st: ComputeState)
-> ProveDoneRes { ... }
}
Decentralized Compute
Data DAOs
Enabling L2 networks
Cross-network interoperability bridges
New storage market primitives
Perpetual storage
Replication workers
Repair workers
Staking Protocols
Insurance protocols
Storage derivatives
A robust WASM-based VM

The FVM is a WASM-based polyglot execution environment for IPLD data. It is designed to support native Filecoin actors written in languages that compile to WASM, as well as smart contracts written for foreign runtimes including the Ethereum Virtual Machine (EVM), Secure EcmaScript (SES), and eBPF.

The initial version of the FVM is relatively simple and deliberately conservative in features. This enables developers onboard quickly, and serves as a rock-solid foundation for many innovations to come.

Examples of future ideas include: async programming via continuations/futures, capability-orientation, time-locked transactions (using external beacons), parallel execution, native primitives for cross-chain interoperability, computation correctness proofs, and more.

The reference FVM and SDK are written in Rust. If you'd like to contribute, explore ideas, or build alternative implementations in other languages, please reach out.

View in GitHub ➝
EVM compatibility

The FVM supports EVM smart contracts out of the box. It emulates EVM bytecode at the low-level, supporting contracts written in Solidity, Vyper, and Yul.

You can continue using all the developer tooling you're familiar with: Remix, Truffle, Hardhat, OpenZeppelin SDK, and more. Most smart contracts ported to Filecoin shouldn't require changes nor auditing.

The EVM foreign runtime is based on pre-existing OSS libraries including SputnikVM and revm. It is the first of several foreign runtimes we plan to support.

Support for EVM smart contract deployment is expected to go live in Milestone 2 (see below).

Curious about technical details? Find out more in the EVM <> FVM mapping specification.

//
// The standard ERC-721 contract from OpenZeppelin SDK.
//
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
function balanceOf(address owner) public view virtual
override returns (uint256)
{
require(owner != address(0),
"ERC721: balance query for the zero address");
return _balances[owner];
}
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
}
Roadmap

The Filecoin Virtual Machine is being introduced incrementally. This minimizes the risk of disruption to the network, and gives developers plenty of opportunities to engage early on.

Feb 2022
Milestone 0: Lotus mainnet canaries with FVM support

The reference FVM implementation has been integrated into a fork of Lotus (the Filecoin reference client). A fleet of canary nodes have been launched on mainnet, running WASM-compiled built-in actors on the FVM. The canaries are monitored for consensus faults and to gather telemetry. This milestone is a testing milestone that's critical to collect raw execution data to feed into the overhaul of the gas model, in preparation for user-programmability. It implies no network upgrade.

Mar 2022
Milestone 0.5: Ability to run FVM node and sync mainnet

Any node operator can sync the Filecoin Mainnet using the FVM and Rust built-in actors, integrated in lotus, venus, forest, and fuhon implementations. It implies no network upgrade.

May 2022
Milestone 1: Introduction of non-programmable WASM-based FVM

Mainnet will atomically switch from the current legacy VMs to the WASM-based reference FVM. A new gas model will be activated that accounts for actual WASM execution costs. Only Rust built-in actors will be supported at this time. This milestone requires a network upgrade.

Nov 2022
(Est.)
Network Version 17 (nv17): Initial protocol refactors for programmability

An initial set of protocol refactors targeting built-in actors, including the ability to introduce new storage markets via user-defined smart contracts. Review the full planned scope of Filecoin Network Version 17.

        
Milestone 2.1: Ability to deploy EVM contracts to mainnet (FEVM)

The Filecoin network will become user-programmable for the first time. Developers will be able to deploy smart contracts written in Solidity or Yul, and compiled to EVM. Smart contracts will be able to access Filecoin functionality by invoking built-in actors. Existing Ethereum tooling will be compatible with Filecoin. This milestone requires a network upgrade.

Nov 2022
(Est.)
FEVM buildernet goes live

The Filecoin EVM runtime is deployed on a dedicated preview network. The community is invited to participate in heavy functional, technical, and security testing. Incentives and bounties may be available for developers and security researchers.

Feb 2023
(Est.)
FEVM live on mainnet

The Filecoin EVM runtime is deployed on Filecoin mainnet through a network upgrade.

Q1 2023 
(Est.)
Milestone 2.2: Ability to deploy Wasm actors to mainnet

Developers will be able to deploy custom smart contracts written in Rust, AssemblyScript, or Go, and compiled to WASM bytecode. SDKs, tutorials, and other developer materials will be generally available. This milestone requires a network upgrade.

    2023
Milestone 3+: Further incremental protocol refactors to enhance programmability

A series of additional incremental protocol upgrades (besides nv17) to move system functionality from privileged space to user space. The result will be a lighter and less opinionated base Filecoin protocol, where storage markets, deal-making, incentives, etc. are extensible, modular, and highly customizable through user-deployed actors. Enhanced programming features such as user-provided cron, async call patterns, and more will start to be developed at this stage.

Get ready to build

Actors are the equivalent of smart contracts in Filecoin. Deploy existing EVM smart contracts as Filecoin actors, or write native actors from scratch using the reference Rust SDK (or create your own SDK!).