Monthly Dev Update #3 | Q1 Core Development Review

Stevan Lohja
6 min readApr 23, 2019

ETC Labs Core launched in January to support and move the Ethereum Classic ecosystem forward. In the first few months, we reached important milestones with ETC-ETH compatibility, vital data analytic tooling, fundamental specifications to improve the DApp development environment, and significantly grew the team with prominent developers in the blockchain space.

Team

  • Core dev. team size up 75%

The team began with Constantine Kryvomaz, Meowbits, Michael Collison, Mike Lubinets, Shane Jonas, Stevan Lohja, and Zachary Belford . We’re proud to have on-boarded additional developers since, including Alan Li, Devon Wesley, Jake Lang, Talha Cross, Zac Mitton, and Zane Starr.

Constantine, Meowbits, and Talha form our client team with Meowbits being our lead client developer. Together, they are contributing network analytic tooling, supporting Classic Geth, Multi-Geth, and championing network upgrades.

Alan Li, Jake Lang, Michael C., and Mike L. form our EVM/ Compiler team with Michael C. our lead compiler developer. They are driving the ETC JIT Compiler and EVM LLVM projects which will dramatically improve EVM and smart contract execution performance.

Shane and Zachary Belford co-lead the tooling team with Devon, Mitton, Zane as our new DApp tooling developers. The DApp tooling team are working on projects to support the DApp developer environment including the OpenRPC Specification which is a game changing innovation for how peer to peer applications communicate with each other and the blockchain.

Stevan Lohja is our team contact and contributing web, documentation, and team coordination. Stevan is working on projects to advocate education on our technologies and developer documentation.

First-Quarter 2019 Achievements

Client Team

We’ve proposed ECIP-1054 upgrade, code named Atlantis, which has tremendous support throughout the community. The specification contains proposed test-net and main-net target block heights, but there needs to be more discussion with client developer groups at this time. The motivation of the ECIP-1054 upgrade fork is to enable maximum ETC-ETH compatibility and performance improvements.

  • ECIP-1054: Atlantis, EVM and Protocol Upgrades
  • ECIP-1053: Add OpenRPC Service Discovery to JSON-RPC Services
  • Contributed to Kotti network, a public Ethereum Classic test network based on Proof of Authority.
  • Continued support and maintenance for Classic Geth and Multi-Geth clients.

Client team has remained focused on the task of providing high quality network-driving software, empowering developers to build decentralized and peer to peer applications. In 2019 Q1, we’ve addressed a number of issues alongside achieving this goal. Early in Q1 we had a double spend attack in the form of a 51% mining attack. We responded with monitoring tools to help users of the network adjust number of confirmations accordingly.

EVM/ Compiler Team

Sputnik-VM

  • Implemented a versatile Dynamic Path API that has feature-wise configuration from Geth clients.
  • Implemented integration layer from Multi-Geth EVM.
  • SputnikVM passes all ETH test-suit hard-forks. Enough for enabling Atlantis, but more testing is required.
  • Repo housekeeping (CI config on Jenkins. Rust code formatting enabled by default. Code updated for Rust 2018 edition)
  • Implemented Rust bindings from EVMC API and began assessing compatibility concerns for SVM.

Just-In-Time Compiler (JIT)

  • Completed foundational subsystems: gas metering, exception handling, and runtime manager (Unit test for all subsystems).
  • Completed phase 1 of the external interface subsystem (function signature provider)
  • Implemented a wrapper API for constructing LLVM type declarations inline

Unexpected:

  • Had to write attribute and intrinsic managers due to lack of support in inkwell and llvm-C API
  • Found a leak related to LLVM context deallocation
  • Began work on refactoring the JIT to have clearer lifetime model that doesn’t depend on singletons

LLVM EVM Backend

  • Designed the LLVM EVM backend pipeline and workflow (Including stackify pass which translates LLVM virtual registers to stack operations).
  • Implemented preliminary LLVM code generator.
  • Designed EVM code generator optimization framework.

Tooling Team

Etherlog

  • Completed an initial ELK-based logging setup that will run an ethereum client, ElasticSearch, Logstash, and Kibana It preloads some dashboards that are prefect for monitoring the health of the ETC network.

OpenRPC

In Q4 2018 we identified the there was a strong need for high level software quality at the base layer for most application developers whom engage with JSON-RPC. We examined solutions such as Open API and gRPC but they were not a fitting solution. The idea of a tool to bring Ethereum Classic, as well as all other blockchains, up to speed with Open API and gRPC was started. So far we have achieved a “no breaking change” of completeness in addition to releasing the spec with a number of complimenting tools.

In addition to ECIP-1053 for Ethereum Classic, it can level up the entire ecosystems tooling so we’ve contributed OpenRPC improvement proposals to Bitcoin and Ethereum:

Mock Server

  • Completed a Mock Server to provide a JSON-RPC backend that will respond to methods defined in an OpenRPC document.
npm install -g @open-rpc/mock-server

open-rpc-mock-server -s \
-s <OpeRPC Document Reference>

This gives a fully functioning server to test against.

Generator Client

  • Completed a generator client-sdk in (eventually) any language.
  • Currently supports Rust, TypeScript, and JavaScript

Given an OpenRPC document, you may generate the client as simpls as:

npm install -g @open-rpc/generator-client

open-rpc-generator-client \
-s <OpenRPC Document Reference>

Playground

  • Completed web IDE for OpenRPC

In-browser editor coupled with OpenRPC Meta schema and docs-react to provide interactive documentation / OpenRPC document editing experience. You can try it our at https://playground.open-rpc.org/.

Docs React

  • Completed React Docs Component for OpenRPC documents

Docs React is a react component that will render documentation for a given OpenRPC document.

To use, simply:

npm install –save @open-rpc/docs-react

Then inside your React app:

import React from ‘react’;
import ReactDOM from ‘react-dm’;
import Documentation from “@open-rpc/docs-react”;import {petstore} from “@open-rpc/examples”;
ReactDOM.render(<Documentation schema={petstore} />, document.getElementById(“root”));

Jenkins

  • Completed Jenkins setup allowing to provide builds of our tools for multiple platforms while working locally on windows, linux, and OSX. It also includes a terraform configuration for easy deployment to AWS.
git clone https://github.com/etclabscore/jenkins-vagrant
cd jenkins-vagrant
vagrant up
# or
terraform up

Ethash Client Setups

Ready to use miner clients. By simply editing the `start_miner.bat` file with a desired pool server and payment address, a miner can easily begin mining ETC.

PhoenixMiner.exe -pool <INSERT POOL SERVER> -worker Rig001 -wal <INSERT PAY ADDRESS> -pass x -retrydelay 2

Forward Quarterly Goals

Q2

Client:

  • Contribute to service discovery (OpenRPC) implementation to Multi-Geth.
  • Analyze implications of EWASM

EVM:

  • Release SVM versions 0.11 and 0.12
  • Sputnik-VM-Dev improvements; Updated to work with latest SVM, run integration tests, and experiment with ‘miri’ tests runtime.
  • Stabilize EVMC binding and prototyping SVM support for EVMC.

JIT:

  • Complete external (sload/store, etc), memory, stack, and 256-bit arithmetic sub-systems.
  • Begin main compiler code generation.
  • Implement a helper subsystem for external callbacks that don’t require blockchain access.

LLVM EVM:

  • Implement the remaining components to make LLVM framework work.
  • Implement EVM optimization in LLVM.
  • Integrate with contract language frontend (such as Vyper or Solidity)
  • Reach at least 90% of performance of Solidity compiler.

Tooling:

  • Complete service runner.
  • Contribute to OpenRPC adoption in ETC clients.
  • Infrastructure progress for Jade DApp framework.

Education:

  • Launch open source dev portal for developer resources and documentation.

Q3

Client:

  • Atlantis fork upgrades.

EVM:

  • Atlantis fork upgrades.

JIT:

  • Complete JIT.

LLVM EVM:

  • Continued progress.

Tooling:

  • Multi-network Explorer
  • Smart contract deployment tool.

ETC Labs Core in the Media

ETC Labs is working on the Atlantis hard fork proposal to introduce compatibility to the Ethereum Virtual Machine…bitcoinexchangeguide.com

Interested in getting more involved with ETC? We’re focused on accelerating the development of Ethereum Classic and need your help! Reach out to us to see how you can get more involved today!

We’re hiring!https://www.linkedin.com/jobs/view/1144896854/

Our team links: Github, Medium, Twitter

Come chat with us on Discord

--

--