One of Filecoin’s launch goals has always been to have multiple independent protocol implementations to help secure the network at launch. In this post, we’ll detail the recent progress and next steps for each of the four major implementations: Forest, built by Chainsafe; Fuhon, developed by Soramitsu; Venus (previously known as go-filecoin), stewarded by IPFSForce; and Lotus, created by Protocol Labs.
Forest is a Rust Filecoin implementation developed by ChainSafe. The project is currently focusing on two main goals, the primary of which is syncing and interoperability with mainnet. The team aims to achieve this in stages, first enabling a direct import of the chain, then progressing to syncing the chain over the network. As a secondary goal, the team is working toward full-node functionality.
Some recent progress toward these aims includes:
- Integrating miner actor changes as of spec actors release 0.9.3
- Releasing a full storage miner implementation
- Incorporating message pool changes, including republishing, revert, and selection logic for messages
- Updating conformance tests to discover and resolve incompatibilities
- Completing a pass-through of the state manager and chain store to identify changes that have occurred since implementation
- Building out a local devnet
- Testing and refactoring the AMT implementation
Forest was one of the first users of the recently created test-vector conformance tests designed to ensure compatibility and correctness between different Filecoin implementations, and the Filecoin specification. This helped the team move very rapidly toward full interoperability thanks to a diverse corpus of message, tipset, and chain-class vectors - which they also helped amend and improve.
The Forest team is looking to integrate storage and retrieval markets over the next few weeks before testing out the go-fil-markets interface.
Fuhon is a C++ Filecoin implementation developed by Soramitsu. The Fuhon team is working towards a standalone devnet, and is currently wrapping up work on a storage miner implementation. As of now, the Fuhon miner and node are compatible with lotus 0.5.4. The project is also preparing to implement and run conformance tests to ensure interoperability. One particularly noteworthy change is a recent TLS fix that enables connections between Lotus and Forest nodes.
Venus (previously known as go-filecoin)
Originally developed by Protocol Labs, go-filecoin - now code-named Venus - was graduated to community maintainership in June. We’re excited to welcome IPFSForce, who will be taking stewardship of the project.
The most immediate concern for the project is catching up on all of the changes introduced into the specification and Lotus over the last four months. Syncing the Space Race chain will serve as a first milestone toward this goal. Progress thus far includes:
- Genesis analysis and import
- Updating data structures to reflect recent changes
- Updating election logic (introducing WinCount)
- Updating project dependencies (e.g. DRAND, used for randomness)
- Test code fixes
At time of writing, the team can partially sync the Space Race chain, but several improvements, particularly around performance, are outstanding. The new team is targeting interoperability with Lotus in one month - an insanely fast timeline. If anyone can achieve it, it’s this team!
Previously, the implementation was focused on preparing for and testing the spec actors upgrade to create a flexible framework for state-breaking upgrades, and the development of lotus-lite, a gateway-based node without a chain store that implements functionality via a remote node. This provides a wallet that can interface directly with miners, without the need to maintain heavyweight components like a synced chain store. The ultimate aim for this work is to have a client that can run on a phone!
Coming next, the team is working on the state upgrade for FIP-0004, which was approved last week by all 4 implementations and has seen strong support from the mining community. They are also working on a major improvement to the storage miner code, which is intended to be delivered in incremental improvements over the next few weeks.