3 unstable releases

0.2.1 Aug 25, 2020
0.2.0 May 22, 2020
0.1.0 May 18, 2020
Download history 5/week @ 2020-06-06 4/week @ 2020-06-13 1/week @ 2020-06-20 2/week @ 2020-06-27 4/week @ 2020-07-04 4/week @ 2020-07-11 6/week @ 2020-07-18 80/week @ 2020-07-25 245/week @ 2020-08-01 67/week @ 2020-08-08 22/week @ 2020-08-15 275/week @ 2020-08-22 111/week @ 2020-08-29 71/week @ 2020-09-05 147/week @ 2020-09-12 68/week @ 2020-09-19

355 downloads per month
Used in forest_message


1.5K SLoC

License License: MIT Discord

Forest is an implementation of Filecoin written in Rust. The implementation will take a modular approach to building a full Filecoin node in two parts — (i) building Filecoin’s security critical systems in Rust from the Filecoin Protocol Specification, specifically the virtual machine, blockchain, and node system, and (ii) integrating functional components for storage mining and storage & retrieval markets to compose a fully functional Filecoin node implementation.

Current development should be considered a work in progress.

Our crates:

crate description
blockchain Chain structures and syncing functionality
crypto Verification and signature definitions
encoding Forest encoding and decoding
ipld IPLD data model for content-addressable data
node Networking synchronization and storage
vm State transition and actor, message and address definitions


rustc >= 1.40.0


# Clone repository
git clone --recursive https://github.com/chainsafe/forest
cd forest

# Install binary to $HOME/.cargo/bin and run node
make install

protoc and OpenCL are also required to build. Installation for protoc can be found here.


Run the node with custom config and bootnodes

forest --config /path/to/your_config.toml

Example of config options available:

data_dir = "<directory for all chain and networking data>"
genesis_file = "<relative file path of genesis car file>"

listening_multiaddr = "<multiaddress>"
bootstrap_peers = ["<multiaddress>"]

Example of a multiaddress: "/ip4/"


The Forest logger uses Rust's log filtering options with the RUST_LOG environment variable.
For example:

RUST_LOG="debug,forest_libp2p::service=info" forest

Will show all debug logs by default, but the forest_libp2p::service logs will be limited to info


# To run base tests
cargo test # add --release flag for longer compilation but faster execution

# To pull serialization vectors submodule and run serialization tests
make test-vectors

# To run all tests and all features enabled
make test-all





Forest is dual licensed under MIT + Apache 2.0.


~66K SLoC