Node 0.0 Release Plan
Reference
Document status | APPROVED |
Release status | RELEASED |
Related pages |
Stakeholders
Name | Role | Reviewed? |
Medha Parlikar | CEO, CasperLabs | |
Former user (Deleted) | CTO, Adaptive Holdings |
Development team
Program manager | Project manager | Developer | Developer | Developer | SRE | Page owner |
Medha Parlikar | Rita Allen (Unlicensed) | Former user (Deleted) | Mateusz Gorski | Former user (Deleted) | Tom Vasile (Deactivated) | Rita Allen (Unlicensed) |
Marketing team
Marketing lead | Content owner |
TBD | TBD |
Release summary
Simple overview
This release accomplishes several objectives:
- Proves out our DevOps CI/CD system
- Establishes the viability of our Scala/RUST/WASM architecture after forking the code from the RChain repository
- Creates a baseline for future development
Technical overview
This release will verify our code fork and restructuring by executing a simple "Hello World" smart contract written in RUST. The base architecture is forked from RChain (www.RChain.org) with some major modifications. Unlike RChain, it is not a monolith build, but a series of "components" implemented in different languages chosen to optimize the functioning of each layer and to best position the blockchain for development adoption. There are four layers: Node (NODE) and Consensus (CON), written in Scala; an Execution Engine (EE), a WASM interpreter built in RUST; and Storage (STOR) to persist our blockchain state. The use of different languages requires that the Node layer is extended to include inter-process communications (IPC) to send messages between the Scala/Rust layers. The Storage layer is non-functional in this release as storing blockchain state is not necessary to execute Hello World.
RChain's Rholang interpreter has been replaced by the wasmi interpreter from Parity. Its correctness is verifiable and has been published as referenced here: Papers on WASM Correctness, HAAS et al. 2017, Watt 2018. The CasperLabs interpreter executes contracts in memory, while collecting information to update the blockchain, which is persistent. The updates will be optimized for concurrency in later releases.
The operational platform will be instantiated in the cloud and combine the invocation of sbt and Bazel build tools into a single process. CI/CD is in place to support merging PRs into the appropriate branches. Basic metrics to measure and report our cloud infrastructure usage are in place and visible with a Graphana instance.
Node
The major modifications to the node layer are the introduction of sockets to enhance IPC between processes executing Rust and Scala code. The node layer has also been decoupled from the Rholang interpreter, in order to replace it with our execution engine's wasmi interpreter. The Rholang interpreter specific code has been removed as it is no longer necessary.
Execution Engine
The execution engine executes smart contracts using a WASM interpreter as a Proof of Concept (POC) for a VM. The POC accepts and stores smart contacts, including serialization and deserialization. It accepts a simple contract for "Hello World" and displays the string on the console. The POC successfully validates the ability of the forked blockchain ecosystem to interact with the WASM interpreter through gRPC.
This is strategically significant because it makes this blockchain smart-contract-language-agnostic. The WASM interpreter was chosen so that smart contracts may be written in any language that can compile to WASM - to date, there are many languages that have compilers to WASM. This will allow dApp developers to use the language of their choice for their smart contracts. The POC will execute a simple Hello World contract written in RUST.
Consensus
This will be a fork of the RChain Casper Consensus code written in Scala. There will be no changes to this layer, other than those necessary for it to build in the new architecture.
Storage
This release will not contain a storage layer. The deployed contract will be executed in local memory only.
Operations
This is primarily a test of the production engineering model we will be using once we fork the RChain code. Scala layers will build with sbt while Rust layers will be built with Bazel. CI/CD will be supported with Drone. Grafana will be used to display AWS metrics only.
Node Features
- Demonstrate that WASM can communicate with other portions of the system
- Demonstrate that the Scala components can communicate with each other using IPC
- Demonstrate a basic deploy of hello world, and that the node module can accept a deploy & pass to WASMI
- Demonstrate execution of a node configured for stand-alone mode
Consensus Features
- Removal of the Rholang Interpreter & insertion of wasmi using our execution model.
- Minimal (forked from RChain) consensus running in order to deploy a single smart contract (Hello World).
Operations
- Fork RChain project into CasperLabs instance
- Incorporate WASMI into build
- Stretch: Configure Bazel build system to work with sbt.
- Stretch - implement Drone CI & CD
Execution Engine Features
- Drop in WASMI PoC into the build
- Demonstrate the execution of a single smart contract: Hello World!
Metric for tracking success
Node is built, can run in standalone mode, accept a deployment and run a basic contract.
What is special about this release?
It is our first build since forking from RChain and including the wasmi interpreter written in RUST
Are we doing something differently? If so, why are we doing it this way?
Our virtual machine implements a local and global state. Contracts run in the local VM state (in memory) and cause effects on the global blockchain. In this release we demonstrate the execution of a contract in the local state.
Before these features were available, what were developers able to do?
This is our first release.
After these features launch, what will developers be able (and not able) to do?
Developers will be able to author simple smart contracts in RUST and run these contracts on the node. Developers cannot create blocks or interact with the blockchain state.
Description of release packaging
Release packaging will include:
- Docker image (Supported on Linux only)
- Debian package
- RPM package
- tar.gz file
Where do developers go to learn more and get started?
At release, links to installation packages and relevant documentation is available at
Packages available at: http://3.16.171.155/casperlabs/repo/
Docs available on GitHub.
Where will bugs be filed?
Where do developers go for support? What is the SLA? Who is on point?
NA
Tickets for this Release
Bug Fixes In This Release
Test Plan
Feature | Test Method | Executed by | Result |
Build | Build ecosystem and execute | Tom Vasile (Deactivated) | Build and post artifacts |
deploy | Run Node and Deploy a smart contract | Rita Allen (Unlicensed) | Contract is deployed |
Accept deploy | Run Node and see the smart contract is accepted an executed | Rita Allen (Unlicensed) | Contract is executed |
CI/CD | Merge at least one PR | Tom Vasile | Drone does its thing |
Metrics | Run Node and view Grafana Dashboards | Medha Parlikar | See CPU and Memory usage in Grafana |