5 unstable releases

0.3.1 Dec 3, 2020
0.3.0 Nov 10, 2020
0.2.1 Aug 25, 2020
0.2.0 May 22, 2020
0.1.0 May 18, 2020

#150 in Emulators

Download history 90/week @ 2020-09-24 204/week @ 2020-10-01 70/week @ 2020-10-08 72/week @ 2020-10-15 107/week @ 2020-10-22 19/week @ 2020-10-29 163/week @ 2020-11-05 110/week @ 2020-11-12 123/week @ 2020-11-19 79/week @ 2020-11-26 82/week @ 2020-12-03 132/week @ 2020-12-10 51/week @ 2020-12-17 39/week @ 2020-12-24 84/week @ 2020-12-31 44/week @ 2021-01-07

430 downloads per month
Used in 4 crates


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.


~67K SLoC