go-filecoin 0.2.2 is released

We’re happy to announce go-filecoin 0.2.2. go-filecoin is the Go implementation of the Filecoin protocol. The up-to-date changelog can always be found at go-filecoin/CHANGELOG.md.

This release is heavy on behind-the-scenes upgrades, including support for filesystem repo migrations and storage disputes, a better message pool, proofs improvements, and bumps to libp2p and go-libp2p-kad-dht versions for more reliable relays and DHTs. User-facing improvements such as new commands and options, better status messages, and lots of bugfixes are also included. Get pumped!

Install and Setup

⌛ Chain syncing status

When a filecoin node is first created, it must download and verify the chain. We call this “chain syncing”. While initial commands (such as tapping the faucet or dashboard streaming) can be run immediately, any other commands (such as mining commands) will return errors until chain syncing is complete. Currently, this can take several hours.

To clarify, we’ve added wiki updates, better status messages, and cleaner console output for chain syncing. In future releases, we’ll also address the underlying problem of slow chain syncing.

💠 Sector storage configuration

Where would you like the filecoin node to store client data? You can now choose! There are two ways to specify the location of the sector storage directory: the sectorbase.rootdir config entry, or the --sectordir option to go-filecoin init.

If you don’t specify a location, data is stored in $HOME/.filecoin_sectors by default. More details are in the wiki.

Features

🍄 Upgradeable repo

In addition to sealed client data, Filecoin nodes also store other data on-disk such as configuration data, blockchain blocks, deal state, and encryption keys. As development progresses, we need a way to safely change the type and schema of this data. In this release, we include an accepted design for filesystem repo migrations, and an initial layout for the migration tool. This paves the way for filecoin nodes to seamlessly update when running in production.

For more information, check out the help text:

tools/migration/go-filecoin-migrate --help

💎 Storage payments

This release includes work towards storage protocol dispute resolution. Payment channels can now contain conditions that will query another actor before a voucher is redeemed. Payment channels can also be canceled by the payer. This will trigger an early close if the target of the channel does not redeem a payment. These features can be used together with piece inclusion proofs (coming soon) to enforce proof of storage when storage clients pay storage miners.

🐛 New debugging commands

Three new commands (inspect, protocol, and bitswap) are now available for your debugging and exploring adventures:

  • go-filecoin inspect all prints all the necessary information for opening a bug report on GitHub. This includes operating system details, your current go-filecoin config, and a few other commonly needed stats.
  • go-filecoin protocol prints details regarding parameters for a node’s protocol, such as autoseal interval and sector size. These are helpful for debugging some of the internals of Filecoin’s proofs and protocol systems.
  • go-filecoin bitswap prints details about a node’s libp2p bitswap system, such as blocks, data, and messages received and sent. These are commonly used in network debugging.

For more details, run any command followed by the --help flag.

Performance and Reliability

🙌 Upgrade libp2p to 0.0.16

libp2p recently landed a bunch of improvements to relay functionality, addressing heavy resource usage in some production relay nodes. We’ve upgraded to go-libp2p 0.0.16 to enjoy the same fixes in filecoin.

🌳 Upgrade go-libp2p-kad-dht to 0.0.8

After the 0.2.1 release, we found a bug in the dht (#2753) that caused some nodes to panic. This was fixed by bumping the go-libp2p-kad-dht version from 0.0.4 to 0.0.8 (#2754).

📬 Better message validation

We’ve taken several steps to harden the message pool. The pool now rejects messages that will obviously fail processing due to problems like invalid signature, insufficient funds, no gas, or non-existent actor. It also tracks nonces to ensure that messages are correctly sequenced, and that no account has too many messages in the pool. Finally, the pool now limits the total messages it will accept.

🔗 Proofs integration

Behind the scenes, much groundwork has been laid for more flexible and powerful storage proofs. This release includes more efficient memory utilization when writing large pieces to a sector. It also includes initial support for piece inclusion proofs, multiple sector sizes, and variable proof lengths.

🔮 Proofs performance

Over in rust-fil-proofs, progress is accelerating on more complete and efficient implementations. This includes switching to mmap for more efficient merkle trees, abstractions over the hasher, limiting parallelism when generating groth proofs, and calculating and aggregating challenges across partitions.

Refactors and Endeavors

🏁 FAST (Filecoin Automation & System Toolkit)

We have significantly improved the FAST testing system for Filecoin since the last release. FAST now automatically includes relevant log data and messages from testing nodes in the event of a test failure. FAST also has an all-new localnet tool to quickly and easily set up local Filecoin node clusters for testing and experimentation. See the localnet readme for details.

👾 Go modules

With Go 1.11’s preliminary support for versioned modules, we have switched to Go modules for dependency management. This allows for easier dependency management and faster updates when dealing with updates from upstream dependencies.

😍 Design documents

We regularly write design docs before coding begins on important features or components. These short documents are useful in capturing knowledge, formalizing our thinking, and sharing design intent. Going forward, you can find new design docs in the designdocs repo.

Version notice

go-filecoin 0.2.1 was released on May 8, 2019 and included most of the changes above. Shortly after, maintenance release 0.2.2 was created to address a bug in the dht (#2753) that caused some filecoin nodes to panic.

As a reminder, only the latest version of go-filecoin will connect to the user devnet until model for change work is complete. Users must be running go-filecoin 0.2.2 to connect to the user devnet.

Changelog

A full list of all 177 PRs in this release, including many bugfixes not listed here, can be found on Github.

Contributors

❤️ Huge thank you to everyone that made this release possible! By alphabetical order, here are all the humans who contributed to this release via the go-filecoin, rust-fil-proofs, and specs repos:

🙌🏽 Want to contribute?

Would you like to contribute to the Filecoin project and don’t know how? Here are a few places you can get started:

⁉️ Do you have questions?

The best place to ask your questions about go-filecoin, how it works, and what you can do with it is at discuss.filecoin.io. We are also available at the community chat on Matrix/Slack.

Filecoin is an open-source cloud storage marketplace, protocol, and cryptocurrency.
icon_client
filecoin_request_icon
filecoin_data_icon
filecoin_data_icon_black
icon_miner
icon_miner_other
filecoin_data_icon_black