# Changelog

## [Unreleased]

## 4.8.2 [2026-04-17]

- Add `NetworkVersion::V29` and label `V28` as FireHorse.

## 4.8.0 [2026-04-16]

- chore: update proofs dependency and rust toolchain [#2265](https://github.com/filecoin-project/ref-fvm/pull/2265)

## 4.7.5 [2025-11-15]

## 4.7.4 [2025-10-06]

- feat: nv28 skeleton [#2220](https://github.com/filecoin-project/ref-fvm/pull/2220)
- fix: propagate errors in Amt::for_each_cacheless [#2218](https://github.com/filecoin-project/ref-fvm/pull/2218)
- chore(deps): bump serde_ipld_dagcbor from 0.6.3 to 0.6.4 [#2222](https://github.com/filecoin-project/ref-fvm/pull/2222)
- chore(deps): bump serde_tuple from 0.5.0 to 1.1.2 [#2199](https://github.com/filecoin-project/ref-fvm/pull/2199)
- chore(deps): bump criterion [#2217](https://github.com/filecoin-project/ref-fvm/pull/2217)

## 4.7.3 [2025-08-22]

- chore(deps): update replace_with and slab transitive dependencies [#2197](https://github.com/filecoin-project/ref-fvm/pull/2197)
- chore(deps): bump filecoin-proofs-api from 18.1.0 to 19.0.0 [#2200](https://github.com/filecoin-project/ref-fvm/pull/2200)
- chore(deps): bump serde_ipld_dagcbor from 0.6.2 to 0.6.3 [#2201](https://github.com/filecoin-project/ref-fvm/pull/2201)
- chore: remove the nv27-dev feature flag [#2202](https://github.com/filecoin-project/ref-fvm/pull/2202)

## 4.7.2 [2025-05-01]

- feat: add nv27-skeleton [#2175](https://github.com/filecoin-project/ref-fvm/pull/2175)
- chore: use workspace fields for license & repository url [#2172](https://github.com/filecoin-project/ref-fvm/pull/2172)
- Update to 2024 edition everywhere else [#2170](https://github.com/filecoin-project/ref-fvm/pull/2170)
- fix: correctly deserialize test vectors [#2168](https://github.com/filecoin-project/ref-fvm/pull/2168)
- Switch to rust 2024 edition [#2162](https://github.com/filecoin-project/ref-fvm/pull/2162)

## 4.7.1 [2025-04-15]

This is an important bugfix release as v4.7.0 won't perform correct signature validation in some cases.

- fix: accept malleable secp256k1 signatures (per EVM, etc.) [#2156](https://github.com/filecoin-project/ref-fvm/pull/2156)

## 4.7.0 [2025-04-09]

- Swap libsecp256k1 for k256 [#2135](https://github.com/filecoin-project/ref-fvm/pull/2135)
  - `signature::ops::recover_secp_public_key` now returns a fixed length byte array
- Update other dependencies [#2136](https://github.com/filecoin-project/ref-fvm/pull/2136), [#2145](https://github.com/filecoin-project/ref-fvm/pull/2145), [#2146](https://github.com/filecoin-project/ref-fvm/pull/2146), [#2146](https://github.com/filecoin-project/ref-fvm/pull/2146)
- Update to Rust 1.86.0 [#2121](https://github.com/filecoin-project/ref-fvm/pull/2121)
- Remove code that is not relevant to the FVM [#1986](https://github.com/filecoin-project/ref-fvm/pull/1986)
    - `BLOCK_GAS_LIMIT`: Neither the FVM nor the builtin actors care about the block gas limit. And if they did, it would have to be a runtime parameter passed from the client.
    - `EPOCH_DURATION_SECONDS`: Different networks may have different block times, this constant is useless.
    - `math`, `reward`, `smooth`: part of the reward actor calculations, not relevant to the FVM itself (moved to the builtin actors).
    - `TOTAL_FILECOIN`, `TOTAL_FILECOIN_BASE`: Network parameter, not a concern of the FVM.
    - `BLOCKS_PER_EPOCH`: protocol parameter, moved to the builtin actors.
    - `MAX_SECTOR_NUMBER`: moved to the builtin actors.
    - `Spacetime`, `SectorQuality`: moved to the builtin actors.
    - `ZERO_ADDRESS`, `*_LOOKBACK`, `ALLOWABLE_CLOCK_DRIFT`, `NetworkParams`, `DefaultNetworkParams`: unused.

## 4.6.0 [2025-03-14]

- Rename `window_post_partitions_sectors` on both the `RegisteredPoStProof` and `RegisteredSealProof` types to `window_post_partition_sectors` to match the builtin actors (from @zhinqiangxu). This is a small breaking change. [#1805](https://github.com/filecoin-project/ref-fvm/pull/1805)
- Add Tock / nv26 and nv27 TBD network versions [#2107](https://github.com/filecoin-project/ref-fvm/pull/2107)
- Update `ipld-core` and `serde_ipld_dagcbor` [#2104](https://github.com/filecoin-project/ref-fvm/pull/2104)

## 4.5.3 [2024-12-04]

- chore: remove the nv25-dev feature flag [#2093](https://github.com/filecoin-project/ref-fvm/pull/2093)

## 4.5.2 [2024-11-21]

- feat: add `nv25-dev` feature flag [#2076](https://github.com/filecoin-project/ref-fvm/pull/2076)

## 4.5.1 [2024-11-08]

Remove unnecessary features from `multihash-codetable`.

## 4.5.0 [2024-10-31]

- Update `cid` to v0.11 and `multihash` to v0.19.
- Update to `fvm_ipld_blockstore` 0.3.0 and `fvm_ipld_encoding` 0.5.0.

You will have to update your multihash and cid crates to be compatible, see the [multihash release notes](https://github.com/multiformats/rust-multihash/blob/master/CHANGELOG.md#-2023-06-06) for details on the breaking changes.

## 4.4.3 [2024-10-21]

- Update wasmtime to 25.0.2.
- Fixes long wasm compile times with wasmtime 24.

## 4.4.2 [2024-10-09]

- Update wasmtime to 24.0.1.

## 4.4.1 [2024-10-04]

- chore: remove the `nv24-dev` feature flag [#2051](https://github.com/filecoin-project/ref-fvm/pull/2051)

## 4.4.0 [2024-09-12]

- Update to wasmtime 24.
- Switch from mach ports to unix signal handlers on macos.
- Update misc dependencies.

## 4.3.2 [2024-08-16]

- feat: add `nv24-dev` feature flag [#2029](https://github.com/filecoin-project/ref-fvm/pull/2029)

## 4.3.1 [2024-06-26]

- chore: remove the `nv23-dev` feature flag [#2022](https://github.com/filecoin-project/ref-fvm/pull/2022)

## 4.3.0 [2024-06-12]

- feat: FIP-0079: syscall for aggregated bls verification [#2003](https://github.com/filecoin-project/ref-fvm/pull/2003)
- fix: install rust nightly toolchain for clusterfuzzlite [#2007](https://github.com/filecoin-project/ref-fvm/pull/2007)
- chore: upgrade rust toolchain to 1.78.0 [#2006](https://github.com/filecoin-project/ref-fvm/pull/2006)
- fix: remove the pairing feature from fvm_shared [#2009](https://github.com/filecoin-project/ref-fvm/pull/2009)
- Small tidy-ups in CONTRIBUTING.md [#2012](https://github.com/filecoin-project/ref-fvm/pull/2012)
- NI-PoRep support [#2010](https://github.com/filecoin-project/ref-fvm/pull/2010)

## 4.2.0 [2024-04-29]

- chore: update to wasmtime 19.0.1 [#1993](https://github.com/filecoin-project/ref-fvm/pull/1993)
- Enable nv23 support behind the `nv23-dev` feature flag [#2000](https://github.com/filecoin-project/ref-fvm/pull/2000)
- feat: fvm: remove once_cell [#1989](https://github.com/filecoin-project/ref-fvm/pull/1989)
- feat: shared: check bls zero address without lazy_static [#1984](https://github.com/filecoin-project/ref-fvm/pull/1984)

## 4.1.2 [2024-01-31]

feat: allow CBOR events

## 4.1.1 [2024-01-25]

Enable nv22 support by default.

## 4.1.0 [2024-01-24]

- Pretty-print addresses when debug-formatting, instead of printing the raw bytes as a vector.
- Move the `ActorState` struct to this crate (from the `fvm` crate).
- Add an `upgrade` module to this crate to support the new (disabled by default) actor-upgrade syscall.

## 4.0.0 [2023-10-31]

Final release, no changes.

## 4.0.0-alpha.4 [2023-09-28]

- Add back some proof types that were mistakenly removed, and fix some of the constants.

## 4.0.0-alpha.3 [2023-09-27]

- Remove support for v1 proofs.

## 4.0.0-alpha.2 [2023-09-21]

- Implement FIP-0071, FIP-0072, FIP-0073, FIP-0075

## 4.0.0-alpha.1 [2023-09-20]

Unreleased. This release simply marks the change-over to v4.

## 3.6.0 [2023-09-06]

- BREAKING: Upgrade the proofs API to v16.
- BREAKING (linking): upgrade blstrs to v0.7 and
- BREAKING: update the minimum rust version to 1.70.0
- Update & trim some dependencies.
- Add support for the new proofs in v16.

## 3.5.0 [2023-08-18]

- Add the V21 network version constant

## 3.4.0 [2023-06-27]

Breaking Changes:

- Update cid/multihash. This is a breaking change as it affects the API.

## 3.3.1 [2023-05-04]

Fix some address constants (lazy statics, to be precise) when the current network is set to "testnet". Previously, if said constants were evaluated _after_ switching to testnet mode (calling `address::set_current_network`), they'd fail to parse and crash the program when dereferenced.

## 3.3.0 [2023-04-23]

- Fixes an issue with proof bindings.

## 3.2.0 [2023-04-04]

- Remove unused dependencies.
- Remove unused dependencies.
- BREAKING: Drop unused `registered_seal_proof` method. This appears to have been unused by anyone.

## 3.1.0 [2023-03-09]

Update proofs. Unfortunately, this is a breaking change in a minor release but we need to do the same on the v2 release as well. The correct solution is to introduce two crates, fvm1 and fvm2, but that's a future project.

## 3.0.0 [2022-02-24]

- Final release for NV18.

## 3.0.0-alpha.20 [2022-02-06]

- Change the `BLOCK_GAS_LIMIT` constant to a `u64` to match all the other gas values.

## 3.0.0-alpha.19 [2022-02-06]

- Change the event datastructure to take a codec and not double-encode the value.
- Make the message version and gas limits `u64`s instead of `i64`s.

## 3.0.0-alpha.18 [2022-02-01]

- Improve rustdocs around events and gas premium.

## 3.0.0-alpha.17 [2022-01-17]

- Add `hyperspace` feature to loosen up network version restrictions.

## 3.0.0-alpha.16 [2023-01-12]

- Remove uses of the Cbor trait
- Refactor: Move Response from SDK to shared

## 3.0.0-alpha.15 [2022-12-14]

- Refactor: ChainID was moved from FVM to shared
- Implement Ethereum Account abstraction
  - Removes the f4-as-accont feature, and support for Delegated signature validations

## 3.0.0-alpha.14 [2022-12-07]

- Remove GasLimit from the message context.
- Add the message nonce to the message context
- Add the chain ID to the network context.

## 3.0.0-alpha.13 [2022-11-29]

- Remove deprecated SYS_INVALID_METHOD exit code
- Add a read-only mode to Sends
  - Adds ContextFlags to MessageContext, and a special ReadOnly error 

## 3.0.0-alpha.12 [2022-11-17]

- Refactor network/message contexts to reduce the number of syscalls.

## 3.0.0-alpha.11 [2022-11-15]

- Add support for actor events (FIP-0049).

## 3.0.0-alpha.10 [2022-11-14]

- Split `InvokeContext` into two (#1070)
- fix: correctly format negative token amounts (#1065)

## 3.0.0-alpha.9 [2022-11-08]

- Add support for state-tree v5.

## 3.0.0-alpha.8 [2022-10-22]

- fix compile issues with f4-as-account feature.

## 3.0.0-alpha.7 [2022-10-21]

- Temporary workaround: allow validating signatures from embryo f4 addresses

## 3.0.0-alpha.6 [2022-10-20]

- Make the f4 address conform to FIP0048 (use `f` as the separator).
- Implement `TryFrom<Payload>` for `DelegatedAddress` (and make `DelegatedAddress` public).

## 3.0.0-alpha.5 [2022-10-10]

- Bumps `fvm_ipld_encoding` and switches from `cs_serde_bytes` to `fvm_ipld_encoding::strict_bytes`.

## 3.0.0-alpha.4 [2022-10-10]

- Small f4 address fixes.

## 3.0.0-alpha.3 [2022-10-10]

- Switch to rust 2021 edition.
- Add network version 18.
- BREAKING: Allow changing the address "network" at runtime.
- BREAKING: Update the f4 address format and include a checksum.
- BREAKING: Add the gas premium and gas limit to the `vm::context` return type.

## 3.0.0-alpha.2 [2022-09-16]

- Add basic f4 address support (without checksums for now).
- Change TokenAmount::from_whole to take any `Into<BigInt>` parameter.
- Add nv17 to the network versions.

The only breaking change is the change to `Address`/`Protocol` (in case anyone is exhaustively matching on them).

## 3.0.0-alpha.1 [2022-08-31]

- Bump base version to v3.
- Add `origin` to `vm::Context`.

## 2.0.0...

See the `release/v2` branch.

- Add recover secp public key syscall.
- Removed `actor::builtin::Type` (moved to the actors themselves).
- Add additional hash functions to the hash syscall.
- Add blake2b512
- Change TokenAmount from a type alias to a struct wrapping BigInt

## 0.8.0 [2022-06-13]

- Add a new proofs version type.

## 0.7.1 [2022-05-26]

Add a shared `MAX_CID_LEN` constant.

## 0.7.0 [2022-05-16]

- Updates the blockstore.
- Removes unnecessary chrono dep.
- Removes the `DomainSeparationTag` type. This is moving into the actors themselves as the FVM
  doesn't care about it.
      - Downstream crates should just replicate this type internally, if necessary.
- Adds a new `crypto::signature::verify` function to allow verifying signatures without creating a
  new `Signature` object. This allows verifying _borrowed_ signatures without allocating.
- Updates for the syscall refactor (see `fvm_sdk` v0.7.0):
    - Adds a `BufferTooSmall` `ErrorNumber`.
    - Marks `ErrorNumber` as non-exhaustive for future extension.
    - Changes the syscall "out" types for the syscall refactor.

## 0.6.1 [2022-04-29]

- Added `testing` feature to have `Default` derive on `Message`. Extended this feature to `Address` and `Payload`.
- Improve `ErrorNumber` documentation.
- Update `fvm_ipld_encoding` for the cbor encoder switch.

## 0.6.0 [2022-04-14]

BREAKING: Switch syscall struct alignment: https://github.com/filecoin-project/fvm-specs/issues/63

Actors built against this new version of fvm_shared will be incompatible with prior FVM versions,
and vice-versa.

- Added `Display` trait to `Type` for error printing. 
- Added _cfg = "testing"_ on `Default` trait for `Message` structure.

## 0.5.1  [2022-04-11]

Add the `USR_ASSERTION_FAILED` exit code.

## 0.5.0 [2022-04-11]

- Enforce maximum big-int size to match lotus.
- Make signature properties public.
- Major error type refactor.

The largest change here is a major error type refactor.

1. It's now a u32 with a set of pre-defined values instead of an enum.
2. The error codes have been reworked according to the FVM spec.

Both of these changes were made to better support user-defined actors.
