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!
/// 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 { ... }}
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.
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 virtualoverride 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);}}
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.
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.
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.
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.
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.
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.
Bleeding edge releases of the Filecoin EVM runtime are deployed every 1-2 weeks to the Wallaby developer testnet. The community is invited to participate in alpha testing to provide early feedback.
A new stable developer testnet called Hyperspace will be launched as the pre-production testnet. The community is invited to participate in heavy functional, technical, and security testing. Incentives and bounties will be available for developers and security researchers.
The Filecoin EVM runtime is deployed on Filecoin mainnet via the Filecoin nv18 Hygge upgrade.
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.
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.
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!).