Updates
This commit is contained in:
parent
916bc49d81
commit
729edc7611
|
@ -3,112 +3,86 @@ id: building
|
||||||
title: Getting Started with Nimbus
|
title: Getting Started with Nimbus
|
||||||
---
|
---
|
||||||
|
|
||||||
This document will explain how to install, test, and run Nimbus on your local machine. For a full guide, see the [Nimbus for Newbies](https://our.status.im/nimbus-for-newbies/) post.
|
This document will explain how to install, test, and run Nimbus on your local machine. To learn about what Nimbus is, see the [intro post](https://our.status.im/nimbus-for-newbies/).
|
||||||
|
|
||||||
## Getting Started
|
## Installing prerequisites
|
||||||
|
|
||||||
- [install Nim](https://bitfalls.com/nim1)
|
_Right now, Nimbus is only available on non-Windows operating systems. We're working on Windows support. If you don't have a Linux or OS X machine, please consider using our [pre-configured Vagrant box](https://github.com/status-im/nim-vagrant)._
|
||||||
- be on a command-line friendly system (i.e. access to Terminal / Console / Cmder / [Git Bash](https://git-scm.com) / Powershell)
|
|
||||||
|
|
||||||
Alternatively, [download our pre-configured Vagrant box](https://our.status.im/setting-up-a-local-vagrant-environment-for-nim-development/).
|
We use Makefiles to quickly and easily build our binaries. Before you begin, please make sure you have [RocksDB installed](https://github.com/status-im/nimbus#rocksdb). Then, run:
|
||||||
|
|
||||||
_Note: the Nimbus build system uses Makefiles to make the process identical across platforms, easy to update, and compatible with any OS. We don't use Nim's package manager Nimble because it's fundamentally broken._
|
|
||||||
|
|
||||||
### Installing
|
|
||||||
|
|
||||||
Clone Nimbus.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone git@github.com:status-im/nimbus
|
git clone https://github.com/status-im/nimbus
|
||||||
cd nimbus
|
cd nimbus
|
||||||
|
make update deps # Downloads and builds submodules, dependencies, and even Nim itself
|
||||||
|
./env.sh bash # Optional, but useful. Sets the current shell's environment to use the version of Nim language the `make update deps` command just built
|
||||||
```
|
```
|
||||||
### Dependencies
|
|
||||||
|
|
||||||
To run Nimbus, we'll need the RocksDB database and a newer version of Nim. On OS X, execute:
|
### Building and Running Nimbus
|
||||||
|
|
||||||
```bash
|
To run Nimbus in Ethereum 1.0 mode:
|
||||||
brew install rocksdb
|
|
||||||
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
|
|
||||||
```
|
|
||||||
|
|
||||||
On Linux, this should do it:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo apt-get install librocksdb-dev rocksdb # or your own Linux distribution's equivalent
|
|
||||||
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
|
|
||||||
```
|
|
||||||
|
|
||||||
On Windows, please first make sure you have `make` installed - either in the form of `MinGW32make.exe` via [MinGW website](http://www.mingw.org) or regular old make installed through Git Bash or a package manager like Chocolatey:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
choco install make
|
|
||||||
```
|
|
||||||
|
|
||||||
_Note - Windows requires you to add programs you want to be able to execute from anywhere on your machine to your PATH environment variable. This is done by simply opening the Start Menu, searching for "Env", selecting "Edit the system environment variables", clicking on Environment Variables in the popup, and then editing the PATH variable in the list by adding a new entry that corresponds to the folder into which you installed your version of `make` (Choco takes care of this for you, only applies if you installed manually). [This is what mine looks like](https://imgur.com/a/yQIi6Qa)._
|
|
||||||
|
|
||||||
Next, run:
|
|
||||||
|
|
||||||
```
|
|
||||||
make fetch-dlls
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```
|
|
||||||
mingw32make.exe fetch-dlls
|
|
||||||
```
|
|
||||||
|
|
||||||
This downloads the rocksdb and sqlitedb DLL files into `nimbus/build` so that the built program can read them.
|
|
||||||
|
|
||||||
_In the content below, `make` will refer to `make` or `mingw32.exe`, depending on which you're using. Make the change to your commands accordingly._
|
|
||||||
|
|
||||||
### Building, Testing, Running
|
|
||||||
|
|
||||||
To build Nimbus:
|
|
||||||
|
|
||||||
On OS X / Linux:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make
|
|
||||||
```
|
|
||||||
|
|
||||||
The Nimbus client will now be in `build/nimbus` on any OS and can be run with the same command:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
make nimbus
|
||||||
./build/nimbus
|
./build/nimbus
|
||||||
```
|
```
|
||||||
|
|
||||||
It should synchronize up to block 49439 and then crash, as mentioned above. Look at flags and options with `build/nimbus --help`.
|
Nimbus will now run and attempt to synchronize with the Ethereum 1.0 blockchain. It can currently reach block 1.5 million.
|
||||||
|
|
||||||
To test, run:
|
### Building and Running the Ethereum 2.0 local beacon chain simulation
|
||||||
|
|
||||||
|
The beacon chain simulation runs several beacon nodes on the local machine, attaches several local validators to each, and builds a beacon chain between them. This is a precursor to our [testnet](https://our.status.im/the-nimbus-mvp-testnet-is-here/).
|
||||||
|
|
||||||
|
Enter the Ethereum 2.0 realm of Nimbus:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make test
|
cd vendor/nim-beacon-chain
|
||||||
```
|
```
|
||||||
|
|
||||||
To update the source files for a rebuild:
|
There, use this submodule's Make commands. To run the simulation:
|
||||||
|
|
||||||
```bash
|
|
||||||
make update
|
|
||||||
```
|
|
||||||
|
|
||||||
To clean the slate and start with a fresh build:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make clean
|
|
||||||
```
|
|
||||||
|
|
||||||
### Ethereum 2.0
|
|
||||||
|
|
||||||
To run and test the Ethereum 2.0 version of Nimbus (the network simulation):
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make eth2_network_simulation
|
make eth2_network_simulation
|
||||||
```
|
```
|
||||||
|
|
||||||
You should now see attestations and blocks being produced and confirmed and a bunch of other details from the nodes as they do their thing.
|
If you'd like to clean the previous run's data:
|
||||||
|
|
||||||
![Beacon nodes communicating](/img/beacon.jpg)
|
```bash
|
||||||
|
make clean_eth2_network_simulation_files eth2_network_simulation
|
||||||
|
```
|
||||||
|
|
||||||
|
If you'd like to see the nodes running on separated sub-terminals inside one big window, install [Multitail](https://www.vanheusden.com/multitail/), then:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
USE_MULTITAIL="yes" make eth2_network_simulation
|
||||||
|
```
|
||||||
|
|
||||||
|
You'll get something like this (click for full size):
|
||||||
|
|
||||||
|
[![](https://i.imgur.com/Pc99VDO.png)](https://i.imgur.com/Pc99VDO.png)
|
||||||
|
|
||||||
|
To change the number of validators and nodes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
VALIDATORS=512 NODES=50 make eth2_network_simulation
|
||||||
|
```
|
||||||
|
|
||||||
|
Find out more about the simulation [here](https://our.status.im/nimbus-development-update-03/).
|
||||||
|
|
||||||
|
### Building and Running the Ethereum 2.0 local state transition simulation
|
||||||
|
|
||||||
|
The state transition simulation measures how fast it can process the tasks in the beacon chain's state transition.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd research
|
||||||
|
nim c -d:release -r state_sim --help
|
||||||
|
```
|
||||||
|
|
||||||
|
Use the output of the help command to pass desired values to the sim - change number of validators, nodes, etc. to get different results.
|
||||||
|
|
||||||
|
### Nimbus Ethereum 2.0 Testnet
|
||||||
|
|
||||||
|
We have a publicly available testnet running between Nimbus nodes. Read all about it and learn how you can join it [here](https://our.status.im/the-nimbus-mvp-testnet-is-here/).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ id: contributor_guide
|
||||||
title: Contributor Guide
|
title: Contributor Guide
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# How To Get Involved with Nimbus' development
|
# How To Get Involved with Nimbus' development
|
||||||
|
|
||||||
- look around [the repo](https://github.com/status-im/nimbus), especially the [open issues](https://github.com/status-im/nimbus/issues)
|
- look around [the repo](https://github.com/status-im/nimbus), especially the [open issues](https://github.com/status-im/nimbus/issues)
|
||||||
|
@ -11,10 +10,25 @@ title: Contributor Guide
|
||||||
- check out some [more open bounties](https://gitcoin.co/explorer?keywords=nimbus&order_by=-web3_created)
|
- check out some [more open bounties](https://gitcoin.co/explorer?keywords=nimbus&order_by=-web3_created)
|
||||||
- learn about the source code by [dissecting](https://github.com/status-im/nimbus/tree/master/tests) and [debugging](https://github.com/status-im/nimbus/wiki/Understanding-and-debugging-Nimbus-EVM-JSON-tests) the tests
|
- learn about the source code by [dissecting](https://github.com/status-im/nimbus/tree/master/tests) and [debugging](https://github.com/status-im/nimbus/wiki/Understanding-and-debugging-Nimbus-EVM-JSON-tests) the tests
|
||||||
|
|
||||||
|
To configure your setup for development:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/status-im/nimbus
|
||||||
|
cd nimbus
|
||||||
|
make update deps
|
||||||
|
./env.sh bash # configures your environment with dependencies like a locally installed Nim, etc.
|
||||||
|
```
|
||||||
|
|
||||||
|
[Build](/docs/building.html) and start hacking!
|
||||||
|
|
||||||
## Thought Experiments
|
## Thought Experiments
|
||||||
|
|
||||||
If you have research ideas you'd like to throw at us, exotic hardware you'd like to test on, or anything else revolutionary cooking up in your mind that you think might be bite too big for Geth or Parity to chew, let us know. We'll gladly experiment!
|
If you have research ideas you'd like to throw at us, exotic hardware you'd like to test on, or anything else revolutionary cooking up in your mind that you think might be bite too big for Geth or Parity to chew, let us know. We'll gladly experiment!
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
You can join a testnet by following instructions [here](https://our.status.im/the-nimbus-mvp-testnet-is-here/).
|
||||||
|
|
||||||
## Guidelines
|
## Guidelines
|
||||||
|
|
||||||
Whatever you might expect to see in other projects applies here:
|
Whatever you might expect to see in other projects applies here:
|
||||||
|
@ -23,4 +37,4 @@ Whatever you might expect to see in other projects applies here:
|
||||||
- when evaluating PRs, focus exclusively on the quality of the code
|
- when evaluating PRs, focus exclusively on the quality of the code
|
||||||
- if submitting code, make sure it's tested. All code MUST come with tests. To speed up the review, ping a [team member](/docs/team).
|
- if submitting code, make sure it's tested. All code MUST come with tests. To speed up the review, ping a [team member](/docs/team).
|
||||||
- if submitting typo fixes or documentation changes, speed up the review process by pinging a team member. [Swader](https://github.com/swader) will usually review those very quickly.
|
- if submitting typo fixes or documentation changes, speed up the review process by pinging a team member. [Swader](https://github.com/swader) will usually review those very quickly.
|
||||||
- if submitting a tutorial for inclusion on the [official blog](), also feel free to ping [Swader](https://github.com/swader).
|
- if submitting a tutorial for inclusion on the [official blog](https://our.status.im/tag/nimbus), also feel free to ping [Swader](https://github.com/swader).
|
|
@ -8,12 +8,14 @@ In talking to people both familiar and complete strangers to Ethereum clients, t
|
||||||
|
|
||||||
### Q: When do you expect to have it production-ready?
|
### Q: When do you expect to have it production-ready?
|
||||||
|
|
||||||
Soon. We've got some network simulations already running for [Ethereum 2.0](https://out.status.im/tag/two-point-oh), and we're syncing up to block 50000 on Ethereum 1.0. To stay in the loop, please follow our development updates on [our blog](https://our.status.im/tag/nimbus).
|
Soon. We've got some network simulations and a [public testnet](https://our.status.im/the-nimbus-mvp-testnet-is-here/) already running for [Ethereum 2.0](https://out.status.im/tag/two-point-oh), and we're syncing up to block 1.5 million on Ethereum 1.0. To stay in the loop, please follow our development updates on [our blog](https://our.status.im/tag/nimbus).
|
||||||
|
|
||||||
### Q: How is a super-light node different from just calling Infura through Web3js?
|
### Q: How is a super-light node different from just calling Infura through Web3js?
|
||||||
|
|
||||||
A Web3js or any similar JavaScript package for communicating with the blockchain is basically a more advanced XMLHttpRequest / Fetch wrapper. What we mean by this is that these packages retrieve information from another node and trust it implicitly. They ask "has this transaction been confirmed?" and get a response that's either "yes" or "that transaction is unknown". With light nodes, they ask "give me the data to check if this transaction has been confirmed" and then check on their own. This is a trust-minimized setup which combines the best of both worlds - very little storage and processing power required while allowing for cryptographic verification of the full node's claims.
|
A Web3js or any similar JavaScript package for communicating with the blockchain is basically a more advanced XMLHttpRequest / Fetch wrapper. What we mean by this is that these packages retrieve information from another node and trust it implicitly. They ask "has this transaction been confirmed?" and get a response that's either "yes" or "that transaction is unknown".
|
||||||
|
|
||||||
|
With light nodes, they ask "give me the data to check if this transaction has been confirmed" and then check on their own. This is a trust-minimized setup which combines the best of both worlds - very little storage and processing power required while allowing for cryptographic verification of the full node's claims.
|
||||||
|
|
||||||
### Q: What's the plan for mobile?
|
### Q: What's the plan for mobile?
|
||||||
|
|
||||||
While true that Nimbus only compiles to C, C++ and JavaScript and iOS and Android don't support C natively (and we definitely don't want a JS version of Nimbus running on a mobile device), native compiles with Nim work for both Android and iOS, just like geth written in go works. It's all NDK/C API. We'll soon have published specific instructions on how to compile it for all manner of devices, but you can already give it a go by following the [build instructions](/docs/building.html).
|
While true that Nimbus only compiles to C, C++ and JavaScript and iOS and Android don't support C natively (and we definitely don't want a JS version of Nimbus running on a mobile device), native compiles with Nim work for both Android and iOS, just like geth written in go works. It's all NDK/C API. We'll soon have published specific instructions on how to compile it for all manner of devices, but you can already give it a go by following the [build instructions](/docs/building.html). Nimbus already runs just fine on OS X and any flavor of Linux, including a [NanoPC-T4 ARM](https://twitter.com/bitfalls/status/1111329152928485377) computer.
|
|
@ -34,10 +34,6 @@ Dustin is the team's Pure Quickwitted Indianglassfish.
|
||||||
|
|
||||||
Bruno is the technical writer and team's DX guy. He's been in blockchain for 3 years after 15 years of web. His passion for decentralization and forwarding the world's truly censorship-free internet is what drove him to Nimbus. What little free time he has, he tries to spend on sports, board games and VR. You can add him on Oculus and Steam as theswader.
|
Bruno is the technical writer and team's DX guy. He's been in blockchain for 3 years after 15 years of web. His passion for decentralization and forwarding the world's truly censorship-free internet is what drove him to Nimbus. What little free time he has, he tries to spend on sports, board games and VR. You can add him on Oculus and Steam as theswader.
|
||||||
|
|
||||||
### [Peter Munch-Ellingsen](https://github.com/PMunch)
|
|
||||||
|
|
||||||
Peter has been working with Nim since discovering it during his studies back in 2016. Since a young age he's been interested in programming. Starting out with games, but touching in on everything from web to high-performance and distributed computing through his work and studies.
|
|
||||||
|
|
||||||
### [Ștefan Talpalaru](https://github.com/stefantalpalaru)
|
### [Ștefan Talpalaru](https://github.com/stefantalpalaru)
|
||||||
|
|
||||||
Ștefan comes from a decade of professional web development and a decade and a half of amateur free software contributions in a wide range of domains and programming languages. His claim to fame in the Nim world is the grafting of a Go runtime to the Nim compiler by way of the pluggable garbage collector API.
|
Ștefan comes from a decade of professional web development and a decade and a half of amateur free software contributions in a wide range of domains and programming languages. His claim to fame in the Nim world is the grafting of a Go runtime to the Nim compiler by way of the pluggable garbage collector API.
|
||||||
|
|
|
@ -144,14 +144,6 @@
|
||||||
<span><a href="https://github.com/swader"><img src="../img/arrow_ogn.png" /></a></span>
|
<span><a href="https://github.com/swader"><img src="../img/arrow_ogn.png" /></a></span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="contribute">
|
|
||||||
<img class="contributor" src="../img/peter.jpg" />
|
|
||||||
<h3>Peter Munch-Ellingsen</h3>
|
|
||||||
<p><a href="https://get.status.im/user/0x04910559b94b70d7c2cd7237f2e6ef3b8110c5fc726e7ef40fc9f3c59eeece2efb69bc9a255a8064f061e16a7b8149fae43ec81559199a50b46f6e4ff8e029c0fe" style="color: #939ba1;">Imaginative Admirable Elephant</a></p>
|
|
||||||
<p><a href="https://github.com/PMunch">See Github profile</a>
|
|
||||||
<span><a href="https://github.com/PMunch"><img src="../img/arrow_ogn.png" /></a></span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="contribute">
|
<div class="contribute">
|
||||||
<img class="contributor" src="../img/stefan.jpg" />
|
<img class="contributor" src="../img/stefan.jpg" />
|
||||||
<h3>Ștefan Talpalaru</h3>
|
<h3>Ștefan Talpalaru</h3>
|
||||||
|
|
Loading…
Reference in New Issue