Filecoin implementation in Go, turning the world’s unused storage into an algorithmic market.
Table of Contents
Filecoin is a decentralized storage network that turns the world’s unused storage into an algorithmic market, creating a permanent, decentralized future for the web. Miners earn the native protocol token (also called “filecoin”) by providing data storage and/or retrieval. Clients pay miners to store or distribute data and to retrieve it. Check out How Filecoin Works for more.
WARNING: go-filecoin
is a work in progress and is not ready for production use.
See KNOWN_ISSUES for an outline of known vulnerabilities.
👋 Welcome to Go Filecoin!
Filecoin can build and run on most Linux and MacOS systems with at least 8GB of RAM. Windows is not yet supported.
Clone the git repository:
mkdir -p ${GOPATH}/src/github.com/filecoin-project
git clone https://github.com/filecoin-project/go-filecoin.git ${GOPATH}/src/github.com/filecoin-project/go-filecoin
Now install the tools and dependencies listed below. If you have any problems building go-filecoin, see the Troubleshooting & FAQ Wiki page.
The build process for go-filecoin requires:
- Go >= v1.11.2 AND < 1.12.
- Installing Go for the first time? We recommend this tutorial which includes environment setup.
- Rust >= v1.31.0 and
cargo
pkg-config
- used by go-filecoin to handle generating linker flags- Mac OS devs can install through brew
brew install pkg-config
- Mac OS devs can install through brew
Due to our use of cgo
, you'll need a C compiler to build go-filecoin whether you're using a prebuilt libfilecoin_proofs (our cgo-compatible rust-fil-proofs library) or building it yourself from source. If you want to use gcc
(e.g. export CC=gcc
) when building go-filecoin, you will need to use v7.4.0 or higher.
- You must have libclang on you linker search path in order to build rust-fil-proofs from source. You can satisfy this requirement in most environments by installing Clang using your favorite package manager.
go-filecoin
depends on some proofs code written in Rust, housed in the
rust-fil-proofs repo and consumed as a submodule. You will need to have cargo
and jq
installed.
go-filecoin's dependencies are managed by gx; this project is not "go gettable." To install gx, gometalinter, and other build and test dependencies (with precompiled proofs, recommended), run:
cd ${GOPATH}/src/github.com/filecoin-project/go-filecoin
FILECOIN_USE_PRECOMPILED_RUST_PROOFS=true go run ./build/*.go deps
Note: The first time you run deps
can be slow as a ~1.6GB parameter file is either downloaded or generated locally in /tmp/filecoin-proof-parameters
.
Have patience; future runs will be faster.
# First, build the binary
go run ./build/*.go build
# Install go-filecoin to ${GOPATH}/bin (necessary for tests)
go run ./build/*.go install
# Then, run the tests.
go run ./build/*.go test
# Build and test can be combined!
go run ./build/*.go best
Other handy build commands include:
# Check the code for style and correctness issues
go run ./build/*.go lint
# Test with a coverage report
go run ./build/*.go test -cover
# Test with Go's race-condition instrumentation and warnings (see https://blog.golang.org/race-detector)
go run ./build/*.go test -race
# Deps, Lint, Build, Test (any args will be passed to `test`)
go run ./build/*.go all
Note: Any flag passed to go run ./build/*.go test
(e.g. -cover
) will be passed on to go test
.
If you have problems with the build, please see the Troubleshooting & FAQ Wiki page.
If you're editing rust-fil-proofs
, you need to manage the submodule manually. If you're not editing rust-fil-proofs
you can relax:
deps
build (above) will do it for you. You may need to run deps
again after pulling master if the submodule is
updated by someone else (it will appear modified in git status
).
To initialize the submodule:
cd ${GOPATH}/src/github.com/filecoin-project/go-filecoin
git submodule update --init
Later, when the head of the rust-fil-proofs
master
branch changes, you may want to update go-filecoin
to use these changes:
git submodule update --remote
Note that updating the rust-fil-proofs
submodule in this way will require a commit to go-filecoin
(changing the submodule hash).
The Getting Started wiki page contains a simple sequence to get your Filecoin node up and running and connected to a devnet.
The Commands page contains further detail about specific commands and environment variables, as well as scripts for for setting up a miner and making a deal.
To see a full list of commands, run go-filecoin --help
.
The localfilecoin
IPTB plugin provides an automation layer that makes it easy to run multiple filecoin nodes. For example, it enables you to easily start up 10 mining nodes locally on your machine.
We ❤️ all our contributors; this project wouldn’t be what it is without you! If you want to help out, please see CONTRIBUTING.md.
Check out the Go-Filecoin code overview for a brief tour of the code.
Here are a few places to get help and connect with the Filecoin community:
- Documentation Wiki — for tutorials, troubleshooting, and FAQs
- #fil-dev on Filecoin Project Slack or Matrix/Riot - for live help and some dev discussions
- Filecoin Community Forum - for talking about design decisions, use cases, implementation advice, and longer-running conversations
- GitHub issues - for now, use only to report bugs, and view or contribute to ongoing development. PRs welcome! Please see our contributing guidelines.
Looking for even more? See the full rundown at filecoin-project/community.
There are currently 3 developer networks (aka devnets) available for development and testing. These are subject to frequent downtimes and breaking changes. See Devnets in the wiki for a description of these developer networks and instructions for connecting your nodes to them.
The Filecoin Project is dual-licensed under Apache 2.0 and MIT terms:
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)