Update Nimbus - An Ethereum 2.0 Sharding Client_xt.md
This commit is contained in:
parent
0b6fbbad67
commit
502941a388
|
@ -12,43 +12,44 @@
|
|||
- [Requirement: Biweekly Development Reports, Technical Writing, and Promotion](#requirement--biweekly-development-reports--technical-writing--and-promotion)
|
||||
- [Requirement: Bounty-Based Development](#requirement--bounty-based-development)
|
||||
- [Milestones](#milestones)
|
||||
- [Milestone: Formation of the Team, and Detailed Implementation of the Project](#milestone--formation-of-the-team--and-detailed-implementation-of-the-project)
|
||||
- [Milestone: Formation of the Team, and Detailed Project Implementation Timeline](#milestone--formation-of-the-team--and-detailed-project-implementation-timeline)
|
||||
- [January - February 2018](#january---february-2018)
|
||||
- [Completed:](#completed)
|
||||
- [Goals:](#goals)
|
||||
- [Milestone: Compatibility with Ethereum 1.0](#milestone--compatibility-with-ethereum-10)
|
||||
- [January - ~November 2018](#january---november-2018)
|
||||
- [January - November 2018](#january---november-2018)
|
||||
- [Goals:](#goals)
|
||||
- [Milestone: Sharding Phase 1](#milestone--sharding-phase-1)
|
||||
- [July - ~November 2018](#july---november-2018)
|
||||
- [July - November 2018](#july---november-2018)
|
||||
- [Goal:](#goal)
|
||||
- [Auditing of Beta and Security](#auditing-of-beta-and-security)
|
||||
- [~November 2018 - ~March 2019](#november-2018---march-2019)
|
||||
- [Milestone: Auditing of Beta and Security](#milestone--auditing-of-beta-and-security)
|
||||
- [November 2018 - March 2019](#november-2018---march-2019)
|
||||
- [Goal:](#goal)
|
||||
- [Milestone: Implementation of Whisper and PSS](#milestone--implementation-of-whisper-and-pss)
|
||||
- [July - October 2018](#july---october-2018)
|
||||
- [July - November 2018](#july---november-2018)
|
||||
- [Goals:](#goals)
|
||||
- [Milestone: Support for LES](#milestone--support-for-les)
|
||||
- [July - October 2018](#july---october-2018)
|
||||
- [July - November 2018](#july---november-2018)
|
||||
- [Goals:](#goals)
|
||||
- [Milestone: Implementation of Swarm](#milestone--implementation-of-swarm)
|
||||
- [October 2018 - ~March 2019](#october-2018---march-2019)
|
||||
- [Milestone: Sharding Phase 2](#milestone--sharding-phase-2)
|
||||
- [November 2018 - July 2019](#november-2018---july-2019)
|
||||
- [Goals:](#goals)
|
||||
- [Milestone: Implementation of Casper](#milestone--implementation-of-casper)
|
||||
- [December 2018 - Feb 2019](#december-2018---feb-2019)
|
||||
- [Milestone: Release of Sharding Phase 2](#milestone--release-of-sharding-phase-2)
|
||||
- [November 2018 - July 2019](#november-2018---july-2019)
|
||||
- [December 2018 - February 2019](#december-2018---february-2019)
|
||||
- [Milestone: Implementation of Swarm](#milestone--implementation-of-swarm)
|
||||
- [January - July 2019](#january---july-2019)
|
||||
- [Goals:](#goals)
|
||||
- [Milestone: Release of Sharding Phase 3](#milestone--release-of-sharding-phase-3)
|
||||
- [March - August 2019](#march---august-2019)
|
||||
- [Goals:](#goals)
|
||||
- [Milestone: Ongoing Improvements in Sharding](#milestone--ongoing-improvements-in-sharding)
|
||||
- [August 2019 - Onward](#august-2019---onward)
|
||||
- [August - December 2019](#august---december-2019)
|
||||
- [Goals:](#goals)
|
||||
- [Ideas Considered for Implementation](#ideas-considered-for-implementation)
|
||||
- [Resources](#resources)
|
||||
|
||||
<!-- /TOC -->
|
||||
|
||||
# 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 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.
|
||||
|
@ -79,26 +80,25 @@ Nimbus aims to be a [sharding](https://github.com/ethereum/wiki/wiki/Sharding-FA
|
|||
|
||||
7. Focus on marketing and promotion to address community concerns on scalability and to bolster Ethereum’s dominant mindshare.
|
||||
|
||||
|
||||
# Requirements
|
||||
|
||||
## Requirement: Nim
|
||||
|
||||
[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 both in compilation of machine code and in the analysis of static code.
|
||||
[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.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
|
||||
|
||||
- Enables us to easily bring research into production
|
||||
- Has a high degree of reasonability for researchers
|
||||
- Is performant in production
|
||||
1. Enables us to easily bring research into production
|
||||
2. Has a high degree of reasonability for researchers
|
||||
3. Is performant in production
|
||||
|
||||
The core contributors and Nim community have been very supportive and enthusiastic for the project.
|
||||
|
||||
## Requirement: 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.
|
||||
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 played a major role in the successful debut of Ethereum, and they are suitable for full and archival nodes. However, their deployment onto embedded systems has been an afterthought.
|
||||
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).
|
||||
|
||||
|
@ -115,6 +115,7 @@ During the deployment of Status among 40,000 alpha testers, we found that a sign
|
|||
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.
|
||||
|
||||
## Requirement: Extensible, Configurable, and Modular Design
|
||||
|
||||
The application architecture should have modular abstractions for the following:
|
||||
|
||||
1. Networking layer
|
||||
|
@ -137,7 +138,7 @@ Nimbus is committed to open standards and to maintaining consensus with other Et
|
|||
|
||||
## Requirement: User Experience
|
||||
|
||||
Access to shards and the mainchain state should be fast and responsive, the application binary should be lightweight in terms of resources used, and the client should be dependable and robust against crashes.
|
||||
Access to shards and mainchain state should be fast and responsive, the application binary should be lightweight in terms of the resources used, and the client should be dependable and robust against crashes.
|
||||
|
||||
## Requirement: Dual Licensing of MIT and Apache v2.0
|
||||
|
||||
|
@ -146,15 +147,14 @@ One unsolved hurdle faced by Status is the [LGPLv3](https://opensource.org/licen
|
|||
Numerous requests for a static-linking exception have gone unanswered. This has blocked the deployment of any legally sound, full Ethereum client on popular channels for distribution of mobile devices. LGPL also prevents the adoption of Ethereum on closed hardware platforms, such as XBox. Still, we remain optimistic this issue will be rectified.
|
||||
|
||||
We propose that Nimbus be licensed under Apache 2.0 and MIT. A permissive licensing structure with patent protection would
|
||||
|
||||
1. Ensure the compatibility with GPL 2.0 and LGPL 2.0
|
||||
2. Further the reach of the Ethereum platform
|
||||
2. Extend the reach of the Ethereum platform
|
||||
3. Foster the highest degree of adoption by governments and enterprise
|
||||
|
||||
## Requirement: Biweekly Development Reports, Technical Writing, and Promotion
|
||||
|
||||
In addition to the implementation, Nimbus will have a biweekly process for reporting development-related updates.
|
||||
|
||||
A technical writer will document implementation efforts and translate ongoing research discussions into articles easily understood by the community.
|
||||
In addition to the implementation, Nimbus will have a biweekly process for reporting development-related updates. A technical writer will document implementation efforts and translate ongoing research discussions into articles easily understood by the community.
|
||||
|
||||
Within the community at large, we will promote Ethereum as the leader of scalable public blockchains.
|
||||
|
||||
|
@ -164,19 +164,21 @@ To entice the community to accelerate the development, we will attach bounties t
|
|||
|
||||
# Milestones
|
||||
|
||||
Timelines are approximate and affected by research, implementation considerations, and revisions made while the team produces a detailed implementation timeline.
|
||||
Timelines are approximate and subject to research, implementation considerations, and revisions made while the team produces a detailed implementation timeline.
|
||||
|
||||
|
||||
## Milestone: Formation of the Team, and Detailed Implementation of the Project
|
||||
## Milestone: Formation of the Team, and Detailed Project Implementation Timeline
|
||||
|
||||
### January - February 2018
|
||||
|
||||
### Completed:
|
||||
|
||||
1. Form the initial team
|
||||
|
||||
2. Define the project’s scope, architecture, and implementation timelines
|
||||
|
||||
### Goals:
|
||||
|
||||
1. Hire core contributors:
|
||||
|
||||
a. Five (5) full-time core contributors
|
||||
|
@ -188,21 +190,23 @@ Timelines are approximate and affected by research, implementation consideration
|
|||
d. One (1) Technical Writer
|
||||
|
||||
e. Up to ten (10) full-time core contributors by 2019
|
||||
|
||||
atom
|
||||
|
||||
2. Create a detailed timeline for implementing the project as a deliverable
|
||||
|
||||
## Milestone: Compatibility with Ethereum 1.0
|
||||
|
||||
### January - ~November 2018
|
||||
### January - November 2018
|
||||
|
||||
As an initial goal, we will focus on implementing all components required for interoperability with the Ethereum ecosystem. However, before starting the implementation in Nim, we will develop an understanding of the existing implementations of Ethereum: [Go Ethereum](https://github.com/ethereum/go-ethereum/), [Pyethereum](https://github.com/ethereum/pyethereum), [Py-EVM](https://github.com/ethereum/py-evm), and [Parity](https://github.com/paritytech/parity).
|
||||
As an initial goal, we will focus on implementing all components required for interoperability with the Ethereum ecosystem. We will publish these components as independently reusable modules and libraries.
|
||||
|
||||
However, before starting the implementation in Nim, we will develop an understanding of the existing implementations of Ethereum: [Go Ethereum](https://github.com/ethereum/go-ethereum/), [Pyethereum](https://github.com/ethereum/pyethereum), [Py-EVM](https://github.com/ethereum/py-evm), and [Parity](https://github.com/paritytech/parity).
|
||||
|
||||
The code will consist of independently reusable libraries that have the same permissive license as that of Nimbus itself:
|
||||
|
||||
1. [RLP](https://github.com/ethereum/wiki/wiki/RLP) encoding and decoding
|
||||
|
||||
2. Handling of the state database and users’ key files
|
||||
2. [Handling of the state database and users’ key files](https://github.com/status-im/nim-eth-keyfile/blob/master/README.md)
|
||||
|
||||
3. Connecting to the Ethereum network
|
||||
|
||||
|
@ -212,7 +216,6 @@ The code will consist of independently reusable libraries that have the same per
|
|||
|
||||
6. Implementation of EVM
|
||||
|
||||
|
||||
### Goals:
|
||||
|
||||
1. Nimbus is able to
|
||||
|
@ -221,66 +224,79 @@ The code will consist of independently reusable libraries that have the same per
|
|||
|
||||
b. Accurately execute the entire transaction history
|
||||
|
||||
3. The team is familiar with all codebases used to implement Ethereum.
|
||||
|
||||
4. The team understands the main themes from [ethresear.ch](https://ethresear.ch/) and actively participates in EIPs.
|
||||
2. The team is familiar with all codebases used to implement Ethereum.
|
||||
|
||||
3. The team understands the main themes from [ethresear.ch](https://ethresear.ch/) and actively participates in EIPs.
|
||||
|
||||
## Milestone: Sharding Phase 1
|
||||
|
||||
### July - ~November 2018
|
||||
### July - November 2018
|
||||
|
||||
While implementing compatibility with Ethereum 1.0, we will gain early experience with the complete setup of sharding. As a result:
|
||||
|
||||
1. The client will successfully communicate with other sharding clients that support the Phase 1 protocols.
|
||||
|
||||
1. The client will implement the core features necessary for sharding phase 1.
|
||||
2. The team will actively participate in sharding-related EIPs.
|
||||
|
||||
|
||||
### Goal:
|
||||
The architecture of Nimbus supports sharding nodes with split responsibilities.
|
||||
|
||||
The architecture of Nimbus supports sharding nodes.
|
||||
|
||||
## Milestone: Auditing of Beta and Security
|
||||
|
||||
### ~November 2018 - ~March 2019
|
||||
### November 2018 - March 2019
|
||||
|
||||
An independent security partner will continuously perform a security audit on the Nimbus codebase. We will also adopt frequent reviews of code, testing with automated fuzzing frameworks, and other practices that enhance security. In addition, we will develop a Nim-optimized fuzzing framework and will release it for use by the community at large.
|
||||
|
||||
### Goal:
|
||||
|
||||
Deliver a security-audited, production-ready client.
|
||||
|
||||
## Milestone: Implementation of Whisper and PSS
|
||||
|
||||
### July - October 2018
|
||||
### July - November 2018
|
||||
|
||||
We will set and advertise bounties as soon as the P2P layer gets implemented. If no one picks up the bounties by July 2018, then the core team will pick them up and start work in July.
|
||||
We will set and advertise the bounties as soon as the P2P layer gets implemented. The core team will start working on this in July, unless already completed.
|
||||
|
||||
### Goals:
|
||||
|
||||
1. Make Nimbus the leading platform for conducting research into the scalability aspects of Whisper and PSS. We consider this a key requirement for implementing a fully decentralised Status messaging platform within the Ethereum network.
|
||||
|
||||
2. Deliver easy-to-use APIs for conducting large-scale and small-scale experiments within the network.
|
||||
|
||||
|
||||
## Milestone: Support for LES
|
||||
|
||||
### July - October 2018
|
||||
### July - November 2018
|
||||
|
||||
We will optimize the architecture of Nimbus for implementing the [LES protocol](https://github.com/ethereum/wiki/wiki/Light-client-protocol). We will also optimize all internal state-handling operations such that they work efficiently and asynchronously. This will enable on-demand fetching of data from the network. This will also ensure that Nimbus runs with a high degree of concurrency and that the client UI is responsive.
|
||||
|
||||
### Goals:
|
||||
|
||||
1. Enable a Light Mode switch in Nimbus.
|
||||
|
||||
2. Successfully operate Nimbus in a mobile environment, without relying on a proxy service.
|
||||
|
||||
## Milestone: Sharding Phase 2
|
||||
|
||||
### November 2018 - July 2019
|
||||
|
||||
We will focus on achieving compatibility with all other clients. In addition, we will implement an [eWASM](https://github.com/ewasm/design/blob/master/README.md) runtime and will add Nim as one of the languages that can target the new VM.
|
||||
|
||||
### Goals:
|
||||
|
||||
Implement the following in Nim:
|
||||
|
||||
1. CLI tools and APIs for running Phase 2 nodes and for interacting with the Validator Manager Contract (VMC)
|
||||
2. The development tools that will target the eWASM runtime environment
|
||||
|
||||
## Milestone: Implementation of Casper
|
||||
|
||||
### December 2018 - February 2019
|
||||
|
||||
The team will closely follow the development of [Casper](https://blockgeeks.com/guides/ethereum-casper/) and will try to achieve and maintain compatibility with the existing Casper deployments.
|
||||
|
||||
## Milestone: Implementation of Swarm
|
||||
|
||||
### October 2018 - ~March 2019
|
||||
### January - July 2019
|
||||
|
||||
We will set and advertise bounties as soon as the P2P layer gets implemented. If no one picks up the bounties by October 2018, then the core team will pick them up and start work in October.
|
||||
We will set and advertise the bounties as soon as the P2P layer gets implemented. The core team will start working on this in January, unless already completed.
|
||||
|
||||
### Goals:
|
||||
|
||||
|
@ -290,40 +306,11 @@ Implement the following:
|
|||
|
||||
2. Support for the [Ethereum Name Service](https://ens.domains/)
|
||||
|
||||
3. Support for a virtual file-system interface for accessing web content published on Swarm
|
||||
3. Support for a virtual file-system interface for accessing web content published on SwarmSupport for a virtual file-system interface for accessing web content published on Swarm
|
||||
|
||||
4. Reusable APIs for publishing and obtaining content from Swarm
|
||||
|
||||
|
||||
|
||||
|
||||
## Milestone: Implementation of Casper
|
||||
|
||||
### December 2018 - Feb 2019
|
||||
|
||||
The team will closely follow the development of [Casper](https://blockgeeks.com/guides/ethereum-casper/) and will try to achieve and maintain compatibility with the existing Casper deployments.
|
||||
|
||||
|
||||
|
||||
## Milestone: Release of Sharding Phase 2
|
||||
|
||||
### November 2018 - July 2019
|
||||
|
||||
We will focus on achieving compatibility with all other clients. In addition, we will implement an [eWASM](https://github.com/ewasm/design/blob/master/README.md) runtime and will add Nim as one of the languages that can target the new VM.
|
||||
|
||||
|
||||
|
||||
### Goals:
|
||||
|
||||
Implement the following in Nim:
|
||||
|
||||
1. CLI tools and APIs for running Phase 2 nodes and for interacting with the Validator Manager Contract (VMC)
|
||||
|
||||
2. The development tools that will target the eWASM runtime environment
|
||||
|
||||
|
||||
|
||||
|
||||
## Milestone: Release of Sharding Phase 3
|
||||
|
||||
### March - August 2019
|
||||
|
@ -338,19 +325,18 @@ Implement support for the following:
|
|||
|
||||
2. Running stateless executor nodes in deployments of headless servers
|
||||
|
||||
|
||||
## Milestone: Ongoing Improvements in Sharding
|
||||
|
||||
### August 2019 - Onward
|
||||
### August - December 2019
|
||||
|
||||
### Goals:
|
||||
|
||||
1. Become one of the leading production-ready sharding implementations in the Ethereum ecosystem.
|
||||
|
||||
2. Take active part in the effort to specify the new programming models required for cross-shard interactions.
|
||||
|
||||
3. Provide an ongoing research into the applicability and performance characteristics of all super-quadratic sharding designs in a mobile environment.
|
||||
|
||||
|
||||
# Ideas Considered for Implementation
|
||||
|
||||
1. Create [devp2p](https://github.com/ethereum/wiki/wiki/%C3%90%CE%9EVp2p-Wire-Protocol) and an abstraction to allow for
|
||||
|
@ -374,12 +360,10 @@ Implement support for the following:
|
|||
methods](https://github.com/ethereum/wiki/wiki/JSON-RPC) that can be consumed by application bindings: react-native module, IPC, RPC HTTP
|
||||
server, or web sockets
|
||||
|
||||
|
||||
6. Encryption library is a little unclear. [Libgcrypt](https://www.gnupg.org/software/libgcrypt/index.html) has everything we need but might be problematic from the standpoint of LGPL licensing. If we have an abstraction for Libgcrypt, we could use it now and swap it out later for something more permissive.
|
||||
|
||||
Alternatively, we could roll out our own library. However, implementing our own encryption would not be a great idea, and our version would have to be audited and tested. Suggestions are welcome.
|
||||
|
||||
|
||||
7. Monitor
|
||||
[ethereum/py-evm](https://github.com/ethereum/py-evm/tree/sharding). Connect with Chang-Wu Chen, Hsiao-Wei Wang, and anyone else working on sharding.
|
||||
|
||||
|
|
Loading…
Reference in New Issue