/fendermint

IPC implementation atop CometBFT

Primary LanguageRustOtherNOASSERTION

Fendermint

Fendermint is an effort to implement IPC with Tendermint Core. There is a preliminary roadmap that lays out the tasks towards implementing subnets that run IPLD and FVM under the Filecoin rootnet, sharing components with the Lotus/Eudico based implementation.

Quick Start

Docs

Please have a look in the docs to see an overview of the project, how to run the components, and previous demos.

Testing

The following command runs unit and integration tests:

make test

while the next command builds docker images and runs an end-to-end test using the SimpleCoin and the ethers examples:

make e2e

IPC Solidity Actors

We generate Rust bindings for the Solidity actors we need to invoke from the ipc-solidity-actors library, some of which are deployed during the genesis process. The bindings live in ipc_actors, and are generated automatically during the build, or with the following command:

make ipc-actors-abi

To run it, you will have to install forge.

The list of contracts for which we generate Rust bindings are in build.rs and needs to be maintained by hand, for example if a new "diamond facet" is added to a contract, it has to be added here. Diamond facets also have to be added manually in ipc.rs where the contracts which need to be deployed during genesis are described. These facets cannot be divined from the ABI description, so they have to be maintained explicitly.

To test whether the genesis process works, we can run the following unit test:

cargo test --release -p fendermint_vm_interpreter load_genesis

Pre-built Docker Image

The CI build publishes a Docker image to Github Container Registry upon a successful build on the main branch. This is the same image as the one used in the End-to-End tests; it contains the built-in actor bundle and IPC Solidity actors, ready to be deployed during genesis.

The image can be pulled with the following command:

docker pull ghcr.io/consensus-shipyard/fendermint:latest