This document describes the process of contributing to the reference FVM implementation (this project).
If you have a general FVM related question or idea, please either as on the Filecoin Slack, or open a new discussion in fvm-specs.
If you'd like to report a bug or suggest an enhancement in the reference FVM implementation, please file an issue.
To make a change to the FVM.
- When in doubt, open an issue first to discuss the change.
- Make your change.
- Write a test for your change.
- Update the crate's
CHANGELOG.md. If you're making any breaking changes, prefix change with "BREAKING:". - Finally, open a PR.
The primary crates are fvm, fvm_shared, fvm_sdk, and the integration testing framework fvm_integration_tests. These are the crates that have version.workspace = true.
The crates in this workspace have the following structure:
All changes should be well tested.
If you're releasing any non-trivial changes to crates used by the builtin actors, please test them. This includes:
- Any crates in
ipld/exceptcar. shared/(fvm_shared).sdk/(fvm_sdk).
To test:
- Checkout this repo as
ref-fvm/and the builtin-actors repo asbuiltin-actors/in the same directory. - Uncomment the "patch" section in
builtin-actors/Cargo.tomlthat starts with:[patch.crates-io] fvm_shared = { path = "../ref-fvm/shared" } ...
- Run
cargo test --all(or, at a minimum,cargo check --all --tests --lib.
If that works, proceed with releasing these crates.
See RELEASE.md for detailed release instructions.
