28245e92a2 | ||
---|---|---|
.vscode | ||
doc | ||
examples | ||
nimbus | ||
nix | ||
premix | ||
tests | ||
.appveyor.yml | ||
.gitignore | ||
.travis.yml | ||
GeneralStateTests.md | ||
LICENSE-APACHEv2 | ||
LICENSE-MIT | ||
Makefile | ||
PersistBlockTests.md | ||
PrecompileTests.md | ||
README.md | ||
TracerTests.md | ||
default.nix | ||
env.sh | ||
nimbus.nimble |
README.md
Nimbus: an Ethereum 2.0 Sharding Client for Resource-Restricted Devices
Join the Status community chats:
Rationale
Nimbus: an Ethereum 2.0 Sharding Client. The code in this repository is currently focusing on Ethereum 1.0 feature parity, while all 2.0 research and development is happening in parallel in nim-beacon-chain. The two repositories are expected to merge in Q1 2019.
Development Updates
To keep up to date with changes and development progress, follow the Nimbus blog.
Building & Testing
Prerequisites
-
A recent version of Facebook's RocksDB
- Compile from source or use the package manager of your OS; for example, Debian, Ubuntu, and Fedora have working RocksDB packages
- on Windows, you can download pre-compiled DLLs
-
GNU make, Bash and the usual POSIX utilities
Obtaining the prerequisites through the Nix package manager
Users of the Nix package manager can install all prerequisites simply by running:
nix-shell nimbus.nix
Build & Develop
POSIX-compatible OS
To build Nimbus (in "build/nimbus"), just execute:
make
Running ./build/nimbus --help
will provide you with a list of
the available command-line options. To start syncing with mainnet, just execute ./build/nimbus
without any parameters.
To execute all tests:
make test
To pull the latest changes in all the Git repositories involved:
make update
To run a command that might use binaries from the Status Nim fork:
./env.sh vim
Our Wiki provides additional helpful information for debugging individual test cases and for pairing Nimbus with a locally running copy of Geth.
Windows
Install Mingw-w64 for your architecture using the "MinGW-W64 Online Installer" (first link under the directory listing). Run it and select your architecture in the setup menu ("i686" on 32-bit, "x86_64" on 64-bit), set the threads to "win32" and the exceptions to "dwarf" on 32-bit and "seh" on 64-bit. Change the installation directory to "C:\mingw-w64" and add it to your system PATH in "My Computer"/"This PC" -> Properties -> Advanced system settings -> Environment Variables -> Path -> Edit -> New -> C:\mingw-w64\mingw64\bin (it's "C:\mingw-w64\mingw32\bin" on 32-bit)
Install Git for Windows and use a "Git Bash" shell to clone and build Nimbus.
If you don't want to compile RocksDB and SQLite separately, you can fetch pre-compiled DLLs with:
mingw32-make fetch-dlls
This will place the right DLLs for your architecture in the "build/" directory.
You can now follow those instructions in the previous section by replacing make
with mingw32-make
(regardless of your 32-bit or 64-bit architecture).
Development tips
-
you can switch the DB backend with a Nim compiler define:
-d:nimbus_db_backend=...
where the (case-insensitive) value is one of "rocksdb" (the default), "sqlite", "lmdb" -
the Premix debugging tools are documented separately
Troubleshooting
Report any errors you encounter, please, if not already documented!
Sometimes, the build will fail even though the latest CI is green - here are a few tips to handle this:
Using the Makefile
- Turn it off and on again:
make clean update
Using Nimble directly
- Wrong Nim version
- We depend on many bleeding-edge features - Nim regressions often happen
- Use the Status fork of Nim
- Wrong versions of dependencies
- nimble dependency tracking often breaks due to its global registry
- wipe the nimble folder and try again
- C compile or link fails
- Nim compile cache is pretty buggy and sometimes will fail to recompile
- wipe your nimcache folder
License
Licensed and distributed under either of
- MIT license: LICENSE-MIT or http://opensource.org/licenses/MIT
or
- Apache License, Version 2.0, (LICENSE-APACHEv2 or http://www.apache.org/licenses/LICENSE-2.0)
at your option. These files may not be copied, modified, or distributed except according to those terms.