Node 0.0 Release Plan

Reference

Document status

APPROVED

Release status

RELEASED

Related pages


Milestones

Start date

 


Sprint 1

 

Report

Sprint 2

 

Report

Demo

 

Release

 


Test Net

N/A 


Stakeholders

Name

Role

Reviewed?

Medha ParlikarCEO, CasperLabs
  •  
Former user (Deleted)CTO, Adaptive Holdings
  •  

Marketing team

Marketing lead

Content owner

TBDTBD

Release summary

Simple overview

This release accomplishes several objectives:

  1. Proves out our DevOps CI/CD system
  2. Establishes the viability of our Scala/RUST/WASM architecture after forking the code from the RChain repository
  3. 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 CorrectnessHAAS et al. 2017Watt 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

key summary assignee status
Loading...
Refresh

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).

key summary assignee status
Loading...
Refresh

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

key summary assignee status
Loading...
Refresh

Execution Engine Features

  • Drop in WASMI PoC into the build
  • Demonstrate the execution of a single smart contract: Hello World!

key summary assignee status
Loading...
Refresh

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?

Report a bug

Where do developers go for support? What is the SLA? Who is on point?

NA



Tickets for this Release

key summary assignee status sprint
Loading...
Refresh

Bug Fixes In This Release

key summary assignee status
Loading...
Refresh


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 contractRita Allen (Unlicensed)Contract is deployed
Accept deployRun Node and see the smart contract is accepted an executedRita Allen (Unlicensed)Contract is executed
CI/CDMerge at least one PRTom VasileDrone does its thing
MetricsRun Node and view Grafana DashboardsMedha ParlikarSee CPU and Memory usage in Grafana