-
Notifications
You must be signed in to change notification settings - Fork 985
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2 from status-im/develop
Develop
- Loading branch information
Showing
16 changed files
with
242 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,12 @@ | ||
docs: | ||
Nimbus: | ||
introduction: index.html | ||
building: building.html | ||
options: options.html | ||
libs: libs.html | ||
milestones: milestones.html | ||
design: design.html | ||
ideas_for_implementation: ideas_for_implementation.html | ||
resources: resources.html | ||
team: team.html | ||
faq: faq.html | ||
contributor_guide: contributor_guide.html | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
--- | ||
id: building | ||
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. | ||
|
||
## Getting Started | ||
|
||
- [install Nim](https://bitfalls.com/nim1) | ||
- be on a command-line friendly system (i.e. access to Terminal / Console / Git Bash / Powershell) | ||
|
||
## Prerequisites | ||
|
||
- install [RocksDB](https://rocksdb.org/) via official instructions or by running the below commands: | ||
|
||
- on OS X: | ||
```bash | ||
brew install rocksdb | ||
curl https://nim-lang.org/choosenim/init.sh -sSf | sh | ||
``` | ||
- on Linux | ||
```bash | ||
sudo apt-get install rocksdb # or your own Linux distribution's equivalent | ||
curl https://nim-lang.org/choosenim/init.sh -sSf | sh | ||
``` | ||
|
||
## Install Nimbus | ||
|
||
```bash | ||
git clone https://github.com/status-im/nimbus | ||
cd nimbus | ||
nimble install | ||
nimble test | ||
``` | ||
|
||
Run Nimbus with `nimbus` or look at flags and options with `nimbus --help`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
--- | ||
id: faq | ||
title: Frequently Asked Questions | ||
--- | ||
|
||
In talking to people both familiar and complete strangers to Ethereum clients, these questions were asked more than once. | ||
|
||
|
||
### Q: When do you expect to have it production-ready? | ||
|
||
Not for a while. Sharding is a long ways off, and until then we'll be focusing on getting Ethereum v1 tests to pass in our full node mode. The full node will be ready in 2019, but the super-light implementation might take longer. | ||
|
||
### 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. | ||
|
||
### Q: What's the plan for mobile? You speak of deploying to mobile devices, but Nimbus only compiles to C, C++ and JavaScript and iOS and Android don't support C natively. Will you be compiling to JS and deploying with a web wrapper? That doesn't sound performant! | ||
|
||
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. |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
title: An Ethereum 2.0 Sharding Client | ||
--- | ||
|
||
## Overview | ||
|
||
Nimbus aims to be a [sharding](https://github.com/ethereum/wiki/wiki/Sharding-FAQ) client implementation for the Ethereum Blockchain Application Platform. Because the largest deployment of Ethereum will potentially be on embedded systems, Nimbus will be designed to perform well on IoT and personal mobile devices, including older smartphones with resource-restricted hardware. The extensible, configurable, and modular design of Nimbus will make it production ready for Web 3.0 and will ensure that it can be supported and maintained across all goals of Ethereum 2.0. | ||
|
||
|
||
## GOALS | ||
|
||
|
||
1. Create an Ethereum implementation suitable for resource-restricted devices. | ||
1. Create an implementation team for the [Applied Research Objectives](https://hackmd.io/s/HkLkj55yb#objectives-in-applied-research) of [Ethereum Research](http://ethereumresearch.org/) (aka Ethereum Asia Pacific Limited), with focus on the following: | ||
1. Proof of Stake (PoS) | ||
1. Sharding | ||
1. Stateless Clients | ||
1. LES2 | ||
1. eWASM | ||
1. Close the gap between research modeling and production. | ||
1. Pledge to participate in, help implement, and conform to the [Ethereum Improvement Proposal](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md). | ||
1. Implement permissive licensing. | ||
1. Focus on production-ready [Web 3.0](https://medium.com/@matteozago/why-the-web-3-0-matters-and-you-should-know-about-it-a5851d63c949) Stack ([Whisper](https://github.com/ethereum/wiki/wiki/Whisper), [PSS](https://github.com/nolash/psstalk/blob/master/README.md), and [Swarm](https://swarm-guide.readthedocs.io/en/latest/introduction.html)) and its ongoing research and development. | ||
1. Focus on marketing and promotion to address community concerns on scalability and to bolster Ethereum's dominant mindshare. | ||
|
||
|
||
## REQUIREMENTS | ||
|
||
[Nim](https://nim-lang.org/) is an efficient, general-purpose systems programming language with a Python-like syntax that compiles to C. Nim will allow us to implement Ethereum rapidly and to take advantage of the mature C-language tooling: in compilation of machine code, and in the analysis of static code. | ||
|
||
With Ethereum research currently modeled in Python, the end result of implementing in Nim should be code that: | ||
|
||
1. Enables us to easily bring research into production | ||
1. Has a high degree of reasonability for researchers | ||
1. Is performant in production | ||
|
||
The core contributors and Nim community have been very supportive and enthusiastic for the project. | ||
|
||
|
||
## Development on Embedded Systems | ||
|
||
We believe that the largest successful deployment of Ethereum will reside on embedded systems: IoT devices and mobile personal devices, such as smartphones. Although Nimbus will support archival nodes, its first implementation will be as a light client, with focus on Proof of Stake and sharding. | ||
|
||
Existing implementations of Ethereum have focused on desktop computers and servers. These implementations have played a major role in the initial success of Ethereum, and they are suitable for full and archival nodes. However, their deployment onto embedded systems has been an afterthought. | ||
|
||
In addition, throughout the development of Status, we have found that the dominant Ethereum implementations, Geth and Parity, are unsuitable for our target platform unless they are profiled and optimised (in progress). | ||
|
||
During the deployment of Status among 40,000 alpha testers, we found that a significant portion (23.6%) of users were still running old mobile devices. In addition, recently discovered [Spectre vulnerabilities](https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)) have led to an increase in the demand for open processors. For these reasons, we propose a self-imposed constraint and a requirement that Status perform well on the following: | ||
|
||
|
||
1. 2014 [SoC](https://en.wikipedia.org/wiki/System_on_a_chip) architectures, such as the [Cortex-A53](https://developer.arm.com/products/processors/cortex-a/cortex-a53) (Samsung Note 4 & [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b/)) and the Apple A8 (iPhone 6) | ||
1. [MIPS](https://en.wikipedia.org/wiki/MIPS_architecture)-based architectures, such as the [Onion Omega2](https://onion.io/omega2/) | ||
1. Open-source processors, such as [RISC-V](https://en.wikipedia.org/wiki/RISC-V) | ||
|
||
When the 2020 scalability goal is fully realised, this constraint will help ensure that Ethereum runs performantly on resource-restricted hardware that is at least 6 years old. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
id: libs | ||
title: Software Libraries | ||
--- | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
--- | ||
id: options | ||
title: Beyond the Basics | ||
--- | ||
|
||
Let's look |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.