Forest is an implementation of Filecoin written in Rust.

Overview

GitHub Workflow Status Codecov GitHub release (latest by date) License Apache 2.0 License MIT Twitter Discord

Forest is an implementation of Filecoin written in Rust. The implementation will take a modular approach to building a full Filecoin node in Rust from the Filecoin Protocol Specification, specifically the virtual machine, blockchain, and node system.

Our crates:

component description/crates
forest the command-line interface and daemon (1 crate/workspace)
node the networking stack and storage (7 crates)
blockchain the chain structure and synchronization (6 crates)
vm state transition and actors, messages, addresses (9 crates)
key_management Filecoin account management (1 crate)
crypto cryptographic functions, signatures, and verification (1 crate)
encoding serialization library for encoding and decoding (1 crate)
ipld the IPLD model for content-addressable data (9 crates)
types the forest types (2 crates)
utils the forest toolbox (12 crates)

Dependencies

  • Rust rustc >= 1.58.1
  • Rust WASM target wasm32-unknown-unknown
rustup install stable
rustup target add wasm32-unknown-unknown
  • OS Base-Devel/Build-Essential
  • Clang compiler
  • OpenCL bindings
# Ubuntu
sudo apt install build-essential clang ocl-icd-opencl-dev

# Archlinux
sudo pacman -S base-devel clang ocl-icd

Installation

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

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

To create release binaries, checkout the latest tag and compile with the release feature. GitHub release (latest by date)

git checkout $TAG
cargo build --release --bin forest --features release

Config

Run the node with custom config and bootnodes

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

Example of config options available:

" genesis_file = "" [network] listening_multiaddr = "" bootstrap_peers = [""]">
data_dir = ""
genesis_file = ""

[network]
listening_multiaddr = ""
bootstrap_peers = [""]

Example of a multiaddress: "/ip4/54.186.82.90/tcp/1347/p2p/12D3K1oWKNF7vNFEhnvB45E9mw2B5z6t419W3ziZPLdUDVnLLKGs"

Forest will look for config files in the following order and priority:

  • Paths passed to the command line via the --config flag.
  • The environment variable FOREST_CONFIG_PATH, if no config was passed through command line arguments.
  • If none of the above are found, Forest will look in the systems default configuration directory ($XDG_CONFIG_HOME on Linux systems).
  • After all locations are exhausted and a config file is not found, a default configuration is assumed and used.

Logging

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

Testing

# To run base tests
cargo test # use `make test-release` for longer compilation but faster execution

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

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

Joining the testnet

Build with the interopnet config with:

make interopnet

# Run and import past the state migrations to latest network version
./target/release/forest --import-snapshot ./types/networks/src/interopnet/snapshot.car

Importing the snapshot only needs to happen during the first run. Following this, to restart the daemon run:

./target/release/forest

Interacting with Forest via CLI

When the Forest daemon is started, an admin token will be displayed. You will need this for commands that require a higher level of authorization (like a password). Forest, as mentioned above, uses multiaddresses for networking. This is no different in the CLI. To set the host and the port to use, if not using the default port or using a remote host, set the FULLNODE_API_INFO environment variable. This is also where you can set a token for authentication.

:/ip4//tcp//http">
FULLNODE_API_INFO=":/ip4//tcp//http

Note that if a token is not present in the FULLNODE_API_INFO env variable, the colon is removed.

Forest developers will prepend this variable to CLI commands over using export on Linux or its equivalant on Windows. This will look like the following:

FULLNODE_API_INFO="..." forest auth api-info -p admin

Documentation

Work in progress.

Contributing

ChainSafe Security Policy

Reporting a Security Bug

We take all security issues seriously, if you believe you have found a security issue within a ChainSafe project please notify us immediately. If an issue is confirmed, we will take all necessary precautions to ensure a statement and patch release is made in a timely manner.

Please email a description of the flaw and any related information (e.g. reproduction steps, version) to security at chainsafe dot io.

License

Forest is dual licensed under MIT + Apache 2.0.

Comments
  • Automatically download snapshots

    Automatically download snapshots

    Summary of changes Changes introduced in this pull request:

    • Ask the user when applicable if they would like forest to download a snapshot from a trusted source using RPC methods when running without --detach
    • Add --download-snapshot flag to download a snapshot prior to syncing for use when stdin is not available (such as running fresh node with --detach)

    Reference issue to close (if applicable)

    Closes #1847

    Other information and links

    opened by connormullett 32
  • Find bottlenecks in cryptographic primitives

    Find bottlenecks in cryptographic primitives

    Issue summary

    Rough benchmarking shows that 60% to 70% of the validation time is spent in the cryptographic primitives ops. From the flamegraph, it appears that batch_verify_seals is the prime offender but it's hard to tell for sure.

    We should create a custom Kernel that measures the performance costs of the cryptographic primitives. Many of these primitives return a boolean value and will return true most of the time. This means there's an opportunity to run them opportunistically in background threads. But first we need to identify which primitives take up the lion's share of time.

    • [x] Create new Kernel that forwards calls to the default FVM kernel.
    • [x] Annotate CryptoOps with performance metrics. Possibly using prometheus.
    • [x] Rank the CryptoOps according to their runtime cost.

    Other information and links

    CryptOps trait: https://github.com/filecoin-project/ref-fvm/blob/5f3e586a75c4ba11a253e6503544985db3faaf0b/fvm/src/kernel/mod.rs#L274

    Priority: 2 - High Status: Needs Triage Performance Ready 
    opened by lemmih 18
  • allow export of sha256sum for snapshots

    allow export of sha256sum for snapshots

    Summary of changes Changes introduced in this pull request:

    • adds an option to export a sha256 checksum after exporting the snapshot. This step adds around 20 seconds to the total export time for calibnet. Unfortunately, it would be tricky to do it with chunk hashing during snapshot creation.

    Reference issue to close (if applicable)

    Other information and links

    Part of https://github.com/ChainSafe/forest/issues/1899

    opened by LesnyRumcajs 18
  • SignedMessage::new_from_part result in 'Secp signature verification failed' error because of Network value

    SignedMessage::new_from_part result in 'Secp signature verification failed' error because of Network value

    Describe the bug Cannot build SignedMessage using new_from_part because the recovered address has the wrong network.

    See here : https://github.com/ChainSafe/forest/blob/main/crypto/src/signature.rs#L150

    To Reproduce See this issue with the test case using testnet and mainnet address : https://github.com/Zondax/filecoin-signing-tools/issues/422

    Expected behaviour I expect the recovered address to have the same network value than in the unsigned message.

    Other information and links All the step https://github.com/ChainSafe/forest/blob/4eb74f908375d7ea0f97fa8e47a3da0e2e619357/vm/message/src/signed_message.rs#L29 https://github.com/ChainSafe/forest/blob/main/crypto/src/signature.rs#L105 https://github.com/ChainSafe/forest/blob/main/crypto/src/signature.rs#L136 https://github.com/ChainSafe/forest/blob/main/crypto/src/signature.rs#L150 https://github.com/ChainSafe/forest/blob/main/crypto/src/signature.rs#L187 https://github.com/ChainSafe/forest/blob/main/crypto/src/signature.rs#L200

    Bug 
    opened by rllola 17
  • Fix state mismatch

    Fix state mismatch

    Summary of changes Changes introduced in this pull request:

    • Refactor verify_consensus_fault to make it look easier to compare with Lotus
    • Don't return an error on verify_block_signature failures

    What's still needed:

    • [x] Check height 2,226,489
    • [x] Check height 2,293,819
    • [x] Sync up to HEAD
    • [ ] Tests?

    Reference issue to close (if applicable)

    Closes #2083

    Other information and links

    Status: Needs Review 
    opened by elmattic 13
  • Terminate Forest gracefully

    Terminate Forest gracefully

    Describe the bug

    When sending SIGTERM (ctrl + c) Forest should gracefully shut down. Seems the signal is handled right now but not really well. We should investigate it.

    To Reproduce Steps to reproduce the behaviour:

    1. Run forest, e.g. target/release/forest --target-peer-count 50 --encrypt-keystore false
    2. Terminate it with ctrl + c
    3. See the error.

    Log output

    On Fedora 35 with coredumps enabled (e.g. ulimit -S -c unlimited)

     2022-06-28T10:41:39.747Z INFO  rpc                    > Ready for RPC connections
    ^C 2022-06-28T10:41:40.105Z WARN  forest::cli            > Got interrupt, shutting down...
     2022-06-28T10:41:40.106Z INFO  utils                  > Permissions set to 0600 on File { fd: 178, path: "/home/rumcajs-work/.forest/keystore.json", read: false, write: true }
     2022-06-28T10:41:40.108Z INFO  forest::daemon         > Forest finish shutdown.
    fish: Job 1, 'target/release/forest --target-…' terminated by signal SIGSEGV (Address boundary error)
    

    On Ubuntu 20.04 LTS

     2022-06-28T10:37:26.136Z INFO  rpc                    > Ready for RPC connections
    ^C 2022-06-28T10:37:27.372Z WARN  forest::cli            > Got interrupt, shutting down...
     2022-06-28T10:37:27.372Z INFO  utils                  > Permissions set to 0600 on File { fd: 37, path: "/home/rumcajs/.forest/keystore.json", read: false, write: true }
     2022-06-28T10:37:27.390Z INFO  chain_sync::chain_muxer > Local node is behind the network, starting BOOTSTRAP from LOCAL_HEAD = 1936320 -> NETWORK_HEAD = 1936874
    Downloading headers 0 / 554 [--------------------------------------------------------------------------------------------------------------------------------------------------] 0.00 % 0.00/s
     2022-06-28T10:37:27.494Z INFO  forest::daemon          > Forest finish shutdown.
    Segmentation fault (core dumped)
    

    Expected behaviour

    No errors should occur after Forest is terminated and coredump should not be dumped.

    Screenshots

    Environment (please complete the following information):

    • OS: Fedora 35, Ubuntu 20.04
    • Rust version rustc 1.62.0-nightly (cb1219871 2022-05-08)
    • Branch/commit main 1ef1c1a09b6d572ba01fb64cffaec10c230d6c14

    Other information and links

    Bug CLI Ready 
    opened by LesnyRumcajs 13
  • fix: disable WAL in `put_keyed` to fix #2260

    fix: disable WAL in `put_keyed` to fix #2260

    Summary of changes Changes introduced in this pull request:

    • Disable WAL in put_keyed and ~~flush db at the end of validate_tipset ~~
    • ~~Turn on auto compaction to merge fragmented sst files.~~
    • ~~Set sst file size~~

    Issue: ~~This PR generated fragmented sst files, not ready to merge yet.~~

    Reference issue to close (if applicable)

    Closes https://github.com/ChainSafe/forest/issues/2260

    Other information and links

    opened by hanabi1224 12
  • Benchmark aggressive DB configuration during tipset validation

    Benchmark aggressive DB configuration during tipset validation

    Issue summary

    We can benchmark Forest's tipset validation performance by loading a snapshot and re-validating the last 2000 tipsets:

    # Clear out the old database files
    rm -rf ~/.local/share/forest/mainnet/
    # Load the snapshot into our database and quit
    ./forest --import-snapshot file.car --halt-after-import
    # Re-validate the last 2k tipsets in the database
    ./forest --import-snapshot file.car --skip-load --halt-after-import --height EPOCH
    

    The in above snippet, EPOCH should be the height of the snapshot minus 2000.

    We want to test if increasing the SST file size from the default of 64 to, say, 1G has negative effects. And we want to test if setting the compaction_type to none has negative effects. This is the configuration to benchmark:

    [rocks_db]
    max_open_files            = -1
    compression_type          = "none"
    compaction_style          = "none"
    optimize_for_point_lookup = 256
    

    Note that there's currently no option for changing the SST file size. It will have to be added. See set_target_file_size_base.

    As a bonus, it would be interested to measure the effect of compression_type. How much space is saved and does it change the runtime performance?

    Start with benchmarking calibnet as this will be much faster. When you're confident in the numbers for calibnet, run the benchmarks on mainnet.

    Other information and links

    Priority: 2 - High Performance Ready 
    opened by lemmih 12
  • chore: do not build libzstd-sys by default

    chore: do not build libzstd-sys by default

    Summary of changes Changes introduced in this pull request:

    • make rocksdb compression types optional
    • exclude rocksdb/zstd from default features to reduce build time cuz it's one of the slowest, see table in https://github.com/ChainSafe/forest/pull/2089
    • improve tests

    Reference issue to close (if applicable)

    Closes part of https://github.com/ChainSafe/forest/issues/2088

    Other information and links

    opened by hanabi1224 12
  • Update proof parameters file to most recent version.

    Update proof parameters file to most recent version.

    Summary of changes Changes introduced in this pull request:

    • Some parameter files were apparently implicit in the past but have to be explicit now. Not exactly sure but this update should fix the sync issues.

    Reference issue to close (if applicable)

    Other information and links

    opened by lemmih 12
  • Improve Ubuntu build instructions

    Improve Ubuntu build instructions

    Issue summary

    In the readme it is written:

    # Ubuntu
    sudo apt install build-essential clang ocl-icd-opencl-dev libssl-dev
    

    This is not enough for building forest on Ubuntu 20.04.4 LTS. It looks like m4 and pkg-config are missing.

    And I think we should always be explicit about which version of Ubuntu we are speaking.

    Other information and links

    Priority: 2 - High Status: Needs Triage Ready 
    opened by elmattic 11
  • chore: release forest v0.6.0

    chore: release forest v0.6.0

    Summary of changes Changes introduced in this pull request:

    • Summarize the changes in the upcoming 0.6.0 release.

    Reference issue to close (if applicable)

    N/A

    Other information and links

    N/A

    opened by jdjaustin 0
  • chore: use upstream `bitswap` crate

    chore: use upstream `bitswap` crate

    Summary of changes Changes introduced in this pull request:

    • move back to upstream bitswap crate

    Reference issue to close (if applicable)

    Closes

    Other information and links

    https://github.com/ipfs-rust/libp2p-bitswap/pull/42

    opened by hanabi1224 0
  • Add names to Tokio tasks

    Add names to Tokio tasks

    Issue summary

    Now that Forest is using tokio runtime we would like to improve debuggability thanks to naming tasks.

    A proposal would be to prefix the name with the epoch at which the task is launched (or any other helpful information).

    Some unique string should be used as well so it's easy to search for it in Forest codebase. Ie:

    2478000-chkblkmsgs for this task.

    Task summary

    • [ ] Identify all non-blocking and blocking tasks we have
    • [ ] Use the task builder API to build a task with a name

    Acceptance Criteria

    • [ ] Make sure all tasks have a meaningful name using tokio-console

    Other information and links

    https://docs.rs/tokio/1.23.0/tokio/task/struct.Builder.html

    Enhancement Node 
    opened by elmattic 0
  • Add memory leak non-regression test

    Add memory leak non-regression test

    Issue summary

    On macOS we can run the BSD leaks command like this:

    $ leaks --atExit --list -- ./target/release/forest --encrypt-keystore false --target-peer-count 50 --import-snapshot ../../Snapshots/2478000_2023_01_02T08_00_00Z.car --halt-after-import

    Output:

    Process:         forest [39912]
    Path:            /Users/USER/*/forest
    Load Address:    0x1046b0000
    Identifier:      forest
    Version:         ???
    Code Type:       ARM64
    Platform:        macOS
    Parent Process:  leaks [39911]
    
    Date/Time:       2023-01-02 14:45:25.461 +0100
    Launch Time:     2023-01-02 14:33:11.144 +0100
    OS Version:      macOS 12.6.2 (21G320)
    Report Version:  7
    Analysis Tool:   /usr/bin/leaks
    
    Physical footprint:         246.3M
    Physical footprint (peak):  2.0G
    ----
    
    leaks Report Version: 3.0
    Process 39912: 1144 nodes malloced for 1079 KB
    Process 39912: 0 leaks for 0 total leaked bytes.
    

    This command also returns an exit status which come in handy to check if some leak occurred.

    Task summary

    • [ ] Find an equivalent command of leaks on Linux
    • [ ] Write a Ruby script to abstract platform differences, and check that there are no leaks in various Forest steps (snapshot import, syncing up to HEAD, following chain for a few epochs)
    • [ ] Add the script to our CI pipeline
    • [ ] Make sure it's ok to run the script on calibnet (this would be preferable because less heavy than mainnet)

    Acceptance Criteria

    • [ ] New memory leaks should be catch by this script

    Other information and links

    https://www.manpagez.com/man/1/leaks/ https://dr-rost.medium.com/detect-memory-leaks-on-macos-4cf257529aa

    Node CI & Testing 
    opened by elmattic 2
  • chore(deps): bump paste from 1.0.10 to 1.0.11

    chore(deps): bump paste from 1.0.10 to 1.0.11

    Bumps paste from 1.0.10 to 1.0.11.

    Release notes

    Sourced from paste's releases.

    1.0.11

    • Documentation improvements
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • A lot of tasks remain idle

    A lot of tasks remain idle

    Issue summary

    Looking at tokio-console a lot of tipset-state tasks from tipset syncer stick to IDLE State, but this should not happen.

    This results in the tasks have lost their waker warning.

    idle_tasks

    Acceptance Criteria

    • [ ] We can run forest and the number of IDLE tasks should stay low (<150)
    • [ ] Those tasks should end with the DONE State
    Bug Node 
    opened by elmattic 0
Releases(v0.5.1)
  • v0.5.1(Dec 1, 2022)

  • v0.5.0(Dec 1, 2022)

  • v0.4.1(Oct 7, 2022)

  • v0.4.0(Sep 30, 2022)

    Notable updates:

    • Support for nv16.
    • Built-in method of downloading snapshots.
    • Vastly improved automated testing.

    Added

    • New forest chain export command for generating snapshots.
    • New forest chain fetch command for downloading recent snapshots.
    • Logging settings are now part of the configuration file rather than only being accessible through an environment variable.
    • A --detach flag for running the Forest node in the background.
    • A --halt-after-import for exiting Forest directly after importing a snapshot.
    • Delegated Consensus: A consensus mode useful for testing.
    • FIP-0023: Break ties between tipsets of equal weight.

    Changed

    • Improve error messages if Forest isn't initiated with a valid database.
    • Formatting clean-up in the forest wallet.
    • Improved pretty-printing of debugging statediffs.
    • Several dozen spelling fixes in the documentation.
    • Fixed dead links in documentation (with automated detection).
    • Avoided a segmentation fault caused by an improper shutdown of the database.
    • Bump required rust version from nightly-2022-09-08 to nightly-2022-09-28.

    Removed

    • Support for the sled database.
    Source code(tar.gz)
    Source code(zip)
    forest-v0.4.0-linux-amd64.zip(19.54 MB)
    forest-v0.4.0-macos-amd64.zip(17.89 MB)
  • v0.3.0(Jul 4, 2022)

    This release supports Filecoin network version 15.

    Notable updates:

    • Support nv15 entirely through the FVM.
    • Resolve two security concerns by removing legacy code (RUSTSEC-2020-0071 and RUSTSEC-2021-0130).
    • Fixed Docker image and released it to GH container registry.
    • Network selection (ie mainnet vs testnet) moved to a CLI flag rather than a compile-time flag.

    All changes

    • implement NetDisconnect by @leviathanbeak in https://github.com/ChainSafe/forest/pull/1531
    • docs: update changelog by @q9f in https://github.com/ChainSafe/forest/pull/1521
    • Use anyhow::Error where possible. by @elmattic in https://github.com/ChainSafe/forest/pull/1519
    • Upgrade to nv15 (actors v7, fvm v0.8) by @lemmih in https://github.com/ChainSafe/forest/pull/1487
    • cleanup Forest to make CI green by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1538
    • Add tyshkor to CODEOWNERS. by @lemmih in https://github.com/ChainSafe/forest/pull/1540
    • Remove native implementation of the v6 (nv14) actors. by @lemmih in https://github.com/ChainSafe/forest/pull/1559
    • Remove native smart-contract backend. by @lemmih in https://github.com/ChainSafe/forest/pull/1542
    • Move CID-related constants to FVM-owned crates. by @lemmih in https://github.com/ChainSafe/forest/pull/1543
    • Runtime network selection by @elmattic in https://github.com/ChainSafe/forest/pull/1482
    • Running config dump subcommand on a new machine fails by @tyshko5 in https://github.com/ChainSafe/forest/pull/1564
    • Fix Forest docker image by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1565
    • Make event logging less verbose in steady-state mode. by @lemmih in https://github.com/ChainSafe/forest/pull/1557
    • Remove audit exceptions for RUSTSEC-2020-0071 and RUSTSEC-2021-0130 by @lemmih in https://github.com/ChainSafe/forest/pull/1547
    • PR 1534 LLVM code coverage by @tyshko5 in https://github.com/ChainSafe/forest/pull/1558
    • use FVM ApplyRet and remove Forest's by @connormullett in https://github.com/ChainSafe/forest/pull/1567
    • Remove ipld/hamt source code by @elmattic in https://github.com/ChainSafe/forest/pull/1572
    • Subset of Forest Maintenance Tasks (Part 1) v2 by @jdjaustin in https://github.com/ChainSafe/forest/pull/1568
    • remove commcid in favor of the fvm commcid by @connormullett in https://github.com/ChainSafe/forest/pull/1570
    • Use GasTracker from fvm by @tyshko5 in https://github.com/ChainSafe/forest/pull/1566
    • Remove utils/bigint in favor of fvm_shared::bigint by @tyshko5 in https://github.com/ChainSafe/forest/pull/1574
    • Remove disabled code for handling older actor versions. by @tyshko5 in https://github.com/ChainSafe/forest/pull/1583
    • Fix docker certs by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1588
    • Remove the clock crate. by @tyshko5 in https://github.com/ChainSafe/forest/pull/1586
    • Refactor chain-specific database location code by @tyshko5 in https://github.com/ChainSafe/forest/pull/1582
    • Update proof parameters file to most recent version. by @lemmih in https://github.com/ChainSafe/forest/pull/1595
    • use fvm-ipld-bitfield by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1597
    • improve pretty-print of BigInt byte values by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1593
    • remove forest ipld amt by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1600
    • Subset of Forest Maintenance Tasks (Part 2) by @jdjaustin in https://github.com/ChainSafe/forest/pull/1571
    • switch to nightly on release workflow by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1607
    • Propagate FVM error values. by @lemmih in https://github.com/ChainSafe/forest/pull/1604
    • Update changelog for upcoming release. by @lemmih in https://github.com/ChainSafe/forest/pull/1606
    • Remove PriceList in favor of fvm::gas::PriceList by @tyshko5 in https://github.com/ChainSafe/forest/pull/1592
    • Remove dead code from the VM. by @tyshko5 in https://github.com/ChainSafe/forest/pull/1608
    • Get rid of the dirs dependency. #1577 by @tyshko5 in https://github.com/ChainSafe/forest/pull/1584
    • Move to anyhow::Error by @elmattic in https://github.com/ChainSafe/forest/pull/1605

    New Contributors

    • @tyshko5 made their first contribution in https://github.com/ChainSafe/forest/pull/1564

    Full Changelog: https://github.com/ChainSafe/forest/compare/v0.2.2...v0.3.0

    Source code(tar.gz)
    Source code(zip)
    forest-v0.3.0-linux-amd64.zip(29.91 MB)
    forest-v0.3.0-macos-amd64.zip(28.59 MB)
  • v0.2.2(Apr 6, 2022)

    Forest v0.2.2 alpha is a service release improving performance and stability. This release supports Filecoin network version 14.

    Notable updates:

    • Forest now supports Calibnet: make calibnet (nv14)
    • FVM is available both native and as external crate: ref-fvm
    • Reading config from a default config location unless a file is specified.
    • Improved logging and display of synchronization progress.
    • Defaulting to Rust Edition 2021 from now on.

    | System | Architecture | Binary | SHA-256 Checksum | | :-: | - | - | - | | lin | x64 | forest-v0.2.2-linux-amd64.zip | 189d8bb2d19d56c93b5a7acaaf69a2b0484954f5fea74680a9d8caf8daf1bed9 | | mac | x64 | forest-v0.2.2-macos-amd64.zip | ee2dc148fe0fabc3df92c38bc2f55556215ec689f985b16c34c72dfc4b0e6e81 | | win | x64 | soon(TM) | N/A | | | | | | | System | Option | - | Resource | | sys | Compile from Source | | git checkout v0.2.2 && cargo build --release --bin forest --features release |

    All changes:

    • Log: don't override default filters (#1504) by @jdjaustin in #1530
    • Crates: bump wasmtime by @q9f in #1526
    • Ci: add wasm target to release script by @q9f in #1524
    • Ci: add codecov target threshold tolerance of 1% by @q9f in #1525
    • Node: demote noisy warnings to debug by @q9f in #1518
    • Workaround fix for prometheus endpoint by @LesnyRumcajs in #1516
    • Fixed bug label for bug template by @LesnyRumcajs in #1514
    • Crates: purge unused dependencies by @q9f in #1509
    • Github: update code owners by @q9f in #1507
    • Ci: enable rustc version trinity for builds by @q9f in #1506
    • Crates: bump dependencies by @q9f in #1503
    • Re-use some code from ref-fvm by @LesnyRumcajs in #1500
    • Connor/default config location by @connormullett in #1494
    • Deps: simplify os dependencies by @q9f in #1496
    • Use exports from ref-fvm by @LesnyRumcajs in #1495
    • Start the prometheus server before loading snapshots. by @lemmih in #1484
    • Config dump with tests by @LesnyRumcajs in #1485
    • Use the v6 version of the actor's bundle. by @lemmih in #1474
    • Exposed more rocksdb options, increased max files by @LesnyRumcajs in #1481
    • Parametrize current rocksdb settings by @LesnyRumcajs in #1479
    • Use progress bars when downloading headers and scanning the blockchain. by @lemmih in #1480
    • Night job scripts by @LesnyRumcajs in #1475
    • Add more metrics of syncing by @LesnyRumcajs in #1467
    • Limit RocksDB to 200 open files. by @lemmih in #1468
    • Ci: Include conformance tests in code coverage results by @lemmih in #1470
    • Show a progressbar when downloading tipset headers. by @lemmih in #1469
    • Add 'fvm' backend in parallel to our native backend. by @lemmih in #1403
    • Update regex to v1.5.5 (from 1.5.4) to avoid performance vulnerability. by @lemmih in #1472
    • Ci: Allow codecov policies to fail. by @lemmih in #1471
    • Improve docker-compose for monitoring stack by @LesnyRumcajs in #1461
    • Revert "Enforce max length when serializing/deserializing arrays" by @lemmih in #1462
    • Introduce serde_generic_array by @clearloop in #1434
    • Fixed new clippy warnings by @LesnyRumcajs in #1449
    • Improve license check script by @LesnyRumcajs in #1443
    • Elmattic/actors review f26 by @elmattic in #1340
    • Calibnet Support by @connormullett in #1370
    • Blockchain/sync: demote chain exchange warning to debug message by @q9f in #1439
    • Fix clippy fiascoes introduced in #1437 by @LesnyRumcajs in #1438
    • Fix signature verification fiasco by @LesnyRumcajs in #1437
    • Clippy for tests by @LesnyRumcajs in #1436
    • Rustc: switch to rust edition 2021 by @q9f in #1429
    • Forest: bump version to 0.2.2 by @q9f in #1428
    • Move from chrono to time crate by @LesnyRumcajs in #1426

    New Contributors

    • @jdjaustin made their first contribution in https://github.com/ChainSafe/forest/pull/1530

    Full Changelog: https://github.com/ChainSafe/forest/compare/v0.2.1...v0.2.2

    Source code(tar.gz)
    Source code(zip)
    forest-v0.2.2-linux-amd64.zip(26.78 MB)
    forest-v0.2.2-macos-amd64.zip(25.26 MB)
  • v0.2.1(Feb 14, 2022)

    Forest v0.2.1 alpha is a service release improving performance and stability.

    | System | Architecture | Binary | SHA-256 Checksum | | :-: | - | - | - | | lin | x64 | forest-v0.2.1-linux-amd64.zip | 6c0581e462b099ea2d0fe6d93136f1cc128c1d4d5cdc3f3ad5c59716c0502b9c | | mac | x64 | forest-v0.2.1-macos-amd64.zip | daf70bfb21381260be251d3a2e42fb24ff8c4c0f278e0a209024a48f29fce793 | | win | x64 | soon(TM) | N/A | | | | | | | System | Option | - | Resource | | sys | Compile from Source | | git checkout v0.2.1 && cargo build --release --bin forest --features release |

    What's Changed

    • Move /docs to /documentation by @connormullett in https://github.com/ChainSafe/forest/pull/1390
    • fix 1369 by @willeslau in https://github.com/ChainSafe/forest/pull/1397
    • Include network in forest version string. by @lemmih in https://github.com/ChainSafe/forest/pull/1401
    • chore: bump rocksdb to 0.17 by @q9f in https://github.com/ChainSafe/forest/pull/1398
    • Use human readable units when loading snapshots. by @lemmih in https://github.com/ChainSafe/forest/pull/1407
    • Update conformance test vectors (and fix test driver) by @lemmih in https://github.com/ChainSafe/forest/pull/1404
    • Improve snapshot parsing performance by ~2.5x by @lemmih in https://github.com/ChainSafe/forest/pull/1408
    • fix exit code mismatch by @noot in https://github.com/ChainSafe/forest/pull/1412
    • forest: bump version to 0.2.1 by @q9f in https://github.com/ChainSafe/forest/pull/1417
    • vm/actor: remove unused fields in paych actor tests by @q9f in https://github.com/ChainSafe/forest/pull/1415
    • ci: temporarily ignore RUSTSEC-2022-0009 by @q9f in https://github.com/ChainSafe/forest/pull/1424
    • add LesnyRumcajs to CODEOWNERS by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1425
    • crates: replace monkey-patched cs_* crates by upstream deps by @q9f in https://github.com/ChainSafe/forest/pull/1414
    • Fail CI on failed fmt or other linting file changes by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1422
    • add shellcheck to CI by @LesnyRumcajs in https://github.com/ChainSafe/forest/pull/1423
    • Add assert in debug mode and tests by @elmattic in https://github.com/ChainSafe/forest/pull/1416
    • feat(encoding): add max length check for bytes by @clearloop in https://github.com/ChainSafe/forest/pull/1399
    • ci: fix documentation in release workflow by @q9f in https://github.com/ChainSafe/forest/pull/1427

    New Contributors

    • @willeslau made their first contribution in https://github.com/ChainSafe/forest/pull/1397
    • @LesnyRumcajs made their first contribution in https://github.com/ChainSafe/forest/pull/1425
    • @clearloop made their first contribution in https://github.com/ChainSafe/forest/pull/1399

    Full Changelog: https://github.com/ChainSafe/forest/compare/v0.2.0...v0.2.1

    Source code(tar.gz)
    Source code(zip)
    forest-v0.2.1-linux-amd64.zip(21.43 MB)
    forest-v0.2.1-macos-amd64.zip(20.75 MB)
  • v0.2.0(Jan 25, 2022)

    ChainSafe System's second alpha release of the Forest Filecoin Rust protocol implementation. This release fixes a series of bugs and performance issues and introduces, among others, support for:

    • Full mainnet compatibility
    • Filecoin network version 14 "Chocolate"
    • Forest actors version 6
    • Further audit fixes

    To compile release binaries, check out the v0.2.0 tag and build with the release feature.

    | System | Architecture | Binary | SHA-256 Checksum | | :-: | - | - | - | | lin | x64 | forest-v0.2.0-linux-amd64.zip | ea051b1cff24c3689546a1ae515f1d0864043a2fd08a6fd551ea75f9ae5572fc | | mac | x64 | forest-v0.2.0-macos-amd64.zip | b37cf58979285708de93a96961be23c56790e9669170bbe64bd715faa26244f8 | | win | x64 | soon(TM) | N/A | | | | | | | System | Option | - | Resource | | sys | Compile from Source | | cargo build --release --bin forest --features release |

    What's Changed

    • docs: add release notes by @q9f in https://github.com/ChainSafe/forest/pull/1246
    • Add MdBook Documentation by @olibearo in https://github.com/ChainSafe/forest/pull/1249
    • Build and deploy Mdbook by @olibearo in https://github.com/ChainSafe/forest/pull/1250
    • Remove extra step for docs deployment in CI by @olibearo in https://github.com/ChainSafe/forest/pull/1251
    • Add Guillaume to code owners by @connormullett in https://github.com/ChainSafe/forest/pull/1283
    • update codeowners by @noot in https://github.com/ChainSafe/forest/pull/1306
    • Elmattic/actors review F2 by @elmattic in https://github.com/ChainSafe/forest/pull/1289
    • ci: add gh actions workflows by @noot in https://github.com/ChainSafe/forest/pull/1317
    • Fix clippy errors for the new cargo 1.57.0 by @elmattic in https://github.com/ChainSafe/forest/pull/1316
    • ci: attempt to improve gh actions time by @noot in https://github.com/ChainSafe/forest/pull/1319
    • Fix logic to be the same as in the spec actors by @elmattic in https://github.com/ChainSafe/forest/pull/1292
    • Elmattic/actors review F4 by @elmattic in https://github.com/ChainSafe/forest/pull/1294
    • Elmattic/actors review F5 by @elmattic in https://github.com/ChainSafe/forest/pull/1295
    • Elmattic/actors review F6 by @elmattic in https://github.com/ChainSafe/forest/pull/1296
    • Elmattic/actors review F8 by @elmattic in https://github.com/ChainSafe/forest/pull/1298
    • Elmattic/actors review F7 by @elmattic in https://github.com/ChainSafe/forest/pull/1297
    • Elmattic/actors review F10 by @elmattic in https://github.com/ChainSafe/forest/pull/1308
    • Elmattic/actors review F14 by @elmattic in https://github.com/ChainSafe/forest/pull/1309
    • Elmattic/actors review F16 by @elmattic in https://github.com/ChainSafe/forest/pull/1310
    • Elmattic/actors review F1 by @elmattic in https://github.com/ChainSafe/forest/pull/1293
    • Elmattic/actors review F12 by @elmattic in https://github.com/ChainSafe/forest/pull/1290
    • add to troubleshooting docs by @connormullett in https://github.com/ChainSafe/forest/pull/1282
    • v6 actors upgrade by @noot in https://github.com/ChainSafe/forest/pull/1260
    • Elmattic/actors review f18 by @elmattic in https://github.com/ChainSafe/forest/pull/1321
    • Laudiacay/actors review f15 by @laudiacay in https://github.com/ChainSafe/forest/pull/1314
    • laudiacay actors review F11 fix by @laudiacay in https://github.com/ChainSafe/forest/pull/1312
    • laudiacay/actors review F21 by @laudiacay in https://github.com/ChainSafe/forest/pull/1311
    • laudiacay actors review f13 fix by @laudiacay in https://github.com/ChainSafe/forest/pull/1313
    • Elmattic/actors review f20 by @elmattic in https://github.com/ChainSafe/forest/pull/1322
    • laudiacay/actors review f9 fix by @laudiacay in https://github.com/ChainSafe/forest/pull/1315
    • laudiacay/actors review F24 by @laudiacay in https://github.com/ChainSafe/forest/pull/1323
    • remove .swp file by @noot in https://github.com/ChainSafe/forest/pull/1326
    • fix market actor publish_storage_deals by @noot in https://github.com/ChainSafe/forest/pull/1327
    • laudiacay/actors review f23 by @laudiacay in https://github.com/ChainSafe/forest/pull/1325
    • laudiacay/actors review f17 by @laudiacay in https://github.com/ChainSafe/forest/pull/1324
    • Elmattic/actors review f27 by @elmattic in https://github.com/ChainSafe/forest/pull/1328
    • v6: fix market actor bug by @noot in https://github.com/ChainSafe/forest/pull/1341
    • drand v14 update: fix fetching around null tipsets by @noot in https://github.com/ChainSafe/forest/pull/1339
    • ci: --ignore RUSTSEC-2021-0130 by @q9f in https://github.com/ChainSafe/forest/pull/1350
    • Elmattic/actors review f25 by @elmattic in https://github.com/ChainSafe/forest/pull/1342
    • Elmattic/actors review f28 by @elmattic in https://github.com/ChainSafe/forest/pull/1343
    • v6: fix market and power actors to match go by @noot in https://github.com/ChainSafe/forest/pull/1348
    • fix market logic by @noot in https://github.com/ChainSafe/forest/pull/1356
    • docs: fix snapshot retrieval command by @noot in https://github.com/ChainSafe/forest/pull/1353
    • The 'base64' dependency for key_management is no longer optional. by @lemmih in https://github.com/ChainSafe/forest/pull/1372
    • catch panic in verify_window_post by @ec2 in https://github.com/ChainSafe/forest/pull/1365
    • Apply clippy lints from rust-1.58 by @lemmih in https://github.com/ChainSafe/forest/pull/1378
    • Add David to repo maintainers by @elmattic in https://github.com/ChainSafe/forest/pull/1374
    • Disable test 'test_optimal_message_selection3' because it is inconsistent by @lemmih in https://github.com/ChainSafe/forest/pull/1381
    • networks: Show an informative error message if the selected feature set is invalid. by @lemmih in https://github.com/ChainSafe/forest/pull/1373
    • Use pre-made action to deploy documentation to gh-pages. by @lemmih in https://github.com/ChainSafe/forest/pull/1380
    • ci: documentation dry-run for PRs. by @lemmih in https://github.com/ChainSafe/forest/pull/1383
    • ci: run github actions on buildjet by @q9f in https://github.com/ChainSafe/forest/pull/1366
    • fixing by adding max index computation in bitfield validation by @laudiacay in https://github.com/ChainSafe/forest/pull/1344
    • Remove unused lint exceptions. by @lemmih in https://github.com/ChainSafe/forest/pull/1385
    • Auto-detect available cores on Linux and MacOS. by @lemmih in https://github.com/ChainSafe/forest/pull/1387
    • Fix command line for running conformance tests. by @lemmih in https://github.com/ChainSafe/forest/pull/1394
    • Fix encoding size constraints for BigInt and BigUint not enforced by @elmattic in https://github.com/ChainSafe/forest/pull/1367
    • Elmattic/actors review c1 by @elmattic in https://github.com/ChainSafe/forest/pull/1368
    • release forest v0.2.0 alpha by @q9f in https://github.com/ChainSafe/forest/pull/1393

    New Contributors

    • @elmattic made their first contribution in https://github.com/ChainSafe/forest/pull/1289
    • @lemmih made their first contribution in https://github.com/ChainSafe/forest/pull/1372

    Full Changelog: https://github.com/ChainSafe/forest/compare/v0.1.0...v0.2.0

    Source code(tar.gz)
    Source code(zip)
    forest-v0.2.0-linux-amd64.zip(20.10 MB)
    forest-v0.2.0-macos-amd64.zip(19.51 MB)
  • v0.1.0(Oct 19, 2021)

    ChainSafe System's first alpha release of the Forest Filecoin Rust protocol implementation.

    • It synchronizes and verifies the latest Filecoin main network and is able to query the latest state.
    • It implements all core systems of the Filecoin protocol specification exposed through a command-line interface.
    • The set of functionalities for this first alpha-release include: Message Pool, State Manager, Chain and Wallet CLI functionality, Prometheus Metrics, and a JSON-RPC Server.

    | System | Architecture | Binary | SHA-256 Checksum | | :-: | - | - | - | | lin | x64 | forest-linux-v0.1.0.tar.gz | e3e59f586ef1f7c5780ded3a92cbf85dc07a658244f0232e0bf5ac8cbfe9e31b | | mac | x64 | soon | N/A | | win | x64 | soon | N/A | | | | | | | System | Option | - | Resource | | sys | Compile from Source | | cargo build --release --bin forest --features release |

    To compile release binaries, checkout the v0.1.0 tag and build with the release feature.

    git checkout v0.1.0
    cargo build --release --bin forest --features release
    ./target/release/forest --help
    

    The Forest mono-repository contains ten main components (in logical order):

    • forest: the command-line interface and daemon (1 crate/workspace)
    • node: the networking stack and storage (7 crates)
    • blockchain: the chain structure and synchronization (6 crates)
    • vm: state transition and actors, messages, addresses (9 crates)
    • key_management: Filecoin account management (1 crate)
    • crypto: cryptographic functions, signatures, and verification (1 crate)
    • encoding: serialization library for encoding and decoding (1 crate)
    • ipld: the IPLD model for content-addressable data (9 crates)
    • types: the forest types (2 crates)
    • utils: the forest toolbox (12 crates)

    For a full list of changes, please refer to the CHANGELOG.

    Source code(tar.gz)
    Source code(zip)
    forest-linux-v0.1.0.tar.gz(18.84 MB)
Owner
ChainSafe
building the infrastructure for web3
ChainSafe
A prototype implementation of the Host Identity Protocol v2 for bare-metal systems, written in pure-rust.

Host Identity Protocol for bare-metal systems, using Rust I've been evaluating TLS replacements in constrained environments for a while now. Embedded

null 31 Dec 12, 2022
An implementation of NZ COVID Pass verification written in Rust

NZCP Rust   An implementation of NZ COVID Pass verification, New Zealand's proof of COVID-19 vaccination solution, written in Rust ?? We also have a J

Vaxx.nz 7 Nov 24, 2022
An easy-to-use, high-performance Interledger implementation written in Rust

Interledger implementation in Rust ?? Requirements All crates require Rust 2018 edition and are tested on the following channels: stable Connecting to

Interledger.rs 184 Dec 13, 2022
Next-generation implementation of Ethereum protocol ("client") written in Rust, based on Erigon architecture.

?? Martinez ?? Next-generation implementation of Ethereum protocol ("client") written in Rust, based on Erigon architecture. Why run Martinez? Look at

Arthur·Thomas 23 Jul 3, 2022
An implementation of the SuperNova protocol, written in Rust

SuperNova Warning: this implementation is experimental and not audited. Please use at your own risk. This repository contains an implementation of the

null 11 Jan 26, 2023
IBC modules and relayer - Formal specifications and Rust implementation

ibc-rs Rust implementation of the Inter-Blockchain Communication (IBC) protocol. This project comprises primarily four crates: The ibc crate defines t

Informal Systems 296 Dec 31, 2022
A Rust implementation of BIP-0039

bip39-rs A Rust implementation of BIP0039 Changes See the changelog file, or the Github releases for specific tags. Documentation Add bip39 to your Ca

Infincia LLC 49 Dec 9, 2022
Official Rust implementation of the Nimiq protocol

Nimiq Core implementation in Rust (core-rs) Rust implementation of the Nimiq Blockchain Core Nimiq is a frictionless payment protocol for the web. Thi

Nimiq 72 Sep 23, 2022
Rust implementation of Zcash protocol

The Parity Zcash client. Gitter Blog: Parity teams up with Zcash Foundation for Parity Zcash client Installing from source Installing the snap Running

Parity Technologies 183 Sep 8, 2022
A (mostly) pure-Rust implementation of various cryptographic algorithms.

Rust-Crypto A (mostly) pure-Rust implementation of various common cryptographic algorithms. Rust-Crypto seeks to create practical, auditable, pure-Rus

null 1.2k Dec 27, 2022
A pure-Rust implementation of group operations on Ristretto and Curve25519

curve25519-dalek A pure-Rust implementation of group operations on Ristretto and Curve25519. curve25519-dalek is a library providing group operations

dalek cryptography 611 Dec 25, 2022
[INACTIVE] TLS 1.2 implementation in Rust

suruga is Rust implementation of TLS 1.2. It currently implements some core parts of TLS 1.2, NIST P-256 ECDHE and chacha20-poly1305. Usage extern cra

klutzy/defunct 123 Dec 27, 2022
An implementation of the FP-Growth algorithm in pure Rust.

fp-growth-rs An implementation of the FP-Growth algorithm in pure Rust, which is inspired by enaeseth/python-fp-growth. Usage Add this to your Cargo.t

JmPotato 13 Dec 20, 2022
A pure-Rust implementation of various threshold secret sharing schemes

Threshold Secret Sharing Efficient pure-Rust library for secret sharing, offering efficient share generation and reconstruction for both traditional S

Snips 137 Dec 29, 2022
A Rust implementation of the Message Layer Security group messaging protocol

Molasses An extremely early implementation of the Message Layer Security group messaging protocol. This repo is based on draft 4 of the MLS protocol s

Trail of Bits 109 Dec 13, 2022
Pure Rust implementation of the RNCryptor cryptographic format by Rob Napier

rncryptor Rust Implementation of the RNCryptor spec This library implements the specification for the RNCryptor encrypted file format by Rob Napier. d

null 7 Jun 29, 2022
Implementation of the Web Cryptography specification in Rust.

[wip] webcrypto Implementation of the Web Cryptography specification in Rust. This crate hopes to ease interoperability between WASM and native target

Divy Srivastava 5 Mar 7, 2022
Implementation of Plonk by Hand in rust

plonk-by-fingers This is a toy implementation of the excellent Joshua Fitzgerald Plonk by hand (part2) (part3) tutorial all written from scratch, do n

adria0.eth 34 Dec 19, 2022
A Rust implementation of Trojan with QUIC tunnel, Lite-TLS and more.

Trojan-Oxide A Rust implementation of Trojan with QUIC tunnel, Lite-TLS and more. Overview Full support for the original Trojan Protocol, including TC

null 13 Oct 17, 2022