Crates.io | fil_builtin_actors_bundle |
lib.rs | fil_builtin_actors_bundle |
version | 7.5.1 |
source | src |
created_at | 2022-03-08 14:35:16.510419 |
updated_at | 2022-05-27 00:30:29.641171 |
description | Bundle of FVM-compatible Wasm bytecode for Filecoin builtin actors |
homepage | |
repository | https://github.com/filecoin-project/builtin-actors |
max_upload_size | |
id | 546324 |
size | 70,918 |
This repo contains the code for the on-chain built-in actors that power the Filecoin network starting from network version 16.
These actors are written in Rust and are designed to operate inside the Filecoin Virtual Machine. A reference implementation of the latter exists at filecoin-project/ref-fvm.
The build process of this repo compiles every actor into Wasm bytecode and generates an aggregate bundle to be imported by all clients. The structure of this bundle is standardized. Read below for details.
This codebase is on track to be canonicalized in FIP-0031. As a result, this actor implementation will be the only one recognized by the network.
Actors for the following network versions are provided as well:
The main output of this repo is a CARv1 archive bundling all Wasm bytecode for all actors into a single file, with the following characteristics:
Map<Cid, i32>
. Every
entry represents a built-in actor.fvm_shared::actor::builtin::Type
enum:
The CARv1 is embedded as a byte slice at the root of the library, and exported
under the BUNDLE_CAR
public const, for easier consumption by Rust code.
Precompiled actor bundles may also be provided as release binaries in this repo, if requested by implementors.
We usually release all actors, the runtime, and the bundle at the same time. That means releasing:
fil_actors_runtime
fil_actor_account
fil_actor_cron
fil_actor_init
fil_actor_market
fil_actor_miner
fil_actor_multisig
fil_actor_paych
fil_actor_power
fil_actor_reward
fil_actor_system
fil_actor_verifreg
fil_builtin_actors_bundle
(in that order)
To make this easier, we've added some helper scripts to the Makefile. Instructions follow.
Install:
jq
(with your favorite package manager)cargo-edit
(with cargo install cargo-edit
).You can bump the runtime, actors, and bundle versions with the bump-version
target. See Versioning to determine the correct version bump.
make bump-version
By default, this bumps the patch version. To bump to a different version, append, e.g. BUMP=major
. Valid options are:
patch
minor
major
alpha
beta
You can also set a specific version with the set-version
target.
make set-version VERSION=7.1.1
Finally, commit the version changes:
git commit -a -m "Release $(make --quiet version)"
NOTE: If you're a not a member of the core FVM team, you'll need help with this step. Please make a PR at this point and ask the core team to publish a release.
Run make publish
to publish all crates to crates.io. This will likely take a while as it re-builds
everything from scratch for validation (multiple times).
NOTE: To do this, you'll need to:
https://crates.io
and confirm your email address (if you haven't already).cargo login
.Finally, bump the versions to the next alpha and commit the changes:
make bump-version BUMP=alpha
git commit -a -m "Release $(make --quiet version)"
There are two options:
Instructions to build from source (option 1):
cargo build
from the workspace root.warning: bundle=/path/to/repo/target/debug/build/filecoin_canonical_actors_bundle-aef13b28a60e195b/out/bundle/bundle.car
All output is printed as a warning only due to limitations in the Cargo build
script mechanisms.Both options are compatible with automation via scripts or CI pipelines.
This part is implementation-specific. Options include:
Once the implementation has validated the authenticity of the bundle, it is expected to do the following:
Because every network version may be backed by different actor code, implementations should be ready to load multiple actor bundles and index them by network version.
When instantiating the ref-fvm Machine, both the network version and the corresponding Manifest root CID must be passed.
A fair question is how crate versioning relates to the protocol concept of
ActorVersion
. We adopt a policy similar to specs-actors:
ActorVersion
.0
.Development versions will use qualifiers such as -rc (release candidate).
As an example of application of this policy to a v10 actor version lineage:
This repo supersedes specs-actors, and fulfils two roles:
This codebase was originally forked from the actors v6 implementation of the Forest client, and was adapted to the FVM environment.
Because this codebase is a common good across all Filecoin client implementations, it serves as a convergence area for all Core Devs regardless of the implementation or project they identify with.
Dual-licensed: MIT, Apache Software License v2, by way of the Permissive License Stack.