Although the core concept was proven last summer when lead developers Vitalik Buterin, Gavin Wood, and Jeffrey Wilcke started the PoC (proof of concept) series in Python, C++, and Go, a lot of engineering effort has gone into solidifying these implementations. . We are all looking forward to releasing a stable command line client and issues reported in the external audit are being resolved as they are discovered. As soon as this process is complete, a general release should be just around the corner. Meanwhile, the rest of the ecosystem continues to evolve towards more refined versions.
One of the challenges with a project of this scope and complexity is simply agreeing on anything in particular. Translating human abstractions into code is a difficult task, since even the words we choose influences different ways of expressing ideas with code. As we build more on these core ideas and truly experience reality meets theory, we can refine the underlying specifications to remove ambiguity. All of this pays off as the team shares a clean, well-understood vision that should translate effectively to other developers in different disciplines.
Number of git commits over time
Complementing this, a variety of test suites add an important level of confidence that various implementations adhere to a specification. On the consensus front, we have used a series of VM and state tests to simulate known outcomes and have added randomization and fuzzing to increase this test space. A series of network and system tests are also being run, ensuring that clients communicate as expected or respond to certain networking scenarios in predictable ways.
Tests are not only designed for success, but all sorts of error conditions are built into the test suites to ensure that known errors (such as running out of gas or abruptly disconnecting from a partner) are reported correctly. What this means is that when changes to customer behavior are made, the decision is based on data and metrics, rather than theory and intuition.
Graphing node connectivity allows us to visually inspect the state of the network
Beyond core component testing, we’ve begun implementing testing on the outer layers to ensure that clients respond to a multitude of underlying system calls in the same way with easy-to-consume JSON. These specifications are linked on the wiki and drive implementation and communication between various teams. This helps ensure that what we have in mind is reliably translated into code, and that all of this is tested and audited.
All of these improvements are important to the health of the overlay ecosystem and help highlight otherwise subtle issues. In addition to refining the core virtual machine and serialization layers, security audits were initiated with an outside company with expertise in decentralization and cryptographic technologies.
A rough snapshot of development efforts.
So how does all this underlying tech jargon get exposed to the general user? For the Frontier release, our goal is to release stable binaries on all major operating systems (Mac, Windows, Linux). The main interfaces will mainly consist of the command line client, the interactive JavaScript console, and JSON-RPC. At go-ethereum, we recently renamed this client to “Geth”, a nod to both mass effect Y Old English.
Using the command line client will be a familiar process to many. For example, you can create a new account with new geth account, at which point the program will ask you for a password to protect the account. You can start geth as a miner by calling it with a parameter, like so: geth-mine. This is a great way to start interacting with the system, but it has its own limitations. For example, once you have started mining, how do you pause it?
Using the Geth Interactive JavaScript Console
For a more useful way of controlling the program, Geth has a JavaScript console backed by a javascript api. Start with a simple command: console geth. With Geth, this initiates the interactive console, giving users the familiarity of JavaScript scripts to control the system from the terminal. For example, to get more information about the local node, run admin.nodeInfo().
This control is partially powered by ethereum.js, a JavaScript library that helps provide a friendly interface not only for the console, but also for DApps. It is based on a well documented JSON-RPC interface for automated processing or integration into existing infrastructure. Work on many of these components is ongoing, as a rigorous effort is underway to ensure that the implementations speak the same language and are as compatible as possible across the board.
A quick view of the build status
Of course, all of this is built publicly on GitHub and includes various aspects of continuous integration, such as automated builds and reporting on all major platforms. This is not a program that defines a specification, it is a specification implemented and tested among machines and humans around the world.
At the same time, work is progressing on several other components of the ecosystem, including GUI interfaces for Mist (the DApp browser) and Mix (the IDE). Many of the tools we use and build on are new and sometimes require upstream patching to ensure everything works as expected. This is a huge benefit to all open source development, and one of the many positive by-products of all the hours put into software engineering. While the wait may seem long, progress and continued confidence in the entire system is constantly increasing.
Beyond the technical ins and outs of development, our communications team has continued to engage with the community to produce public education material such as tutorials and videos. Plus, our administrative staff help process payments and comply with various local laws, including tedious things like employment taxes.
Who needs sleep?
Being part of the Ethereum project has been an exceptional experience full of excitement. What started as just an idea A little over a year ago it has spawned an exceptional engineering effort led by professionals implementing all the necessary infrastructure to build a revolutionary decentralized application platform.
When Netflix introduced chaos monkeythey asserted, “We have found that the best defense against major and unexpected failures is to fail frequently. By frequently causing failures, we force our services to be built in a way that is more resilient.”. In the development process of Ethereum, we have experienced first-hand the benefits that come from continually force a system.
And while being tasked with creating the platform you dream of is a great honor, we built it because we want it to exist. Thank you for your patience as we think, sleep, eat, and dog food the platform. We are as eager as anyone to see what kind of DAapps will be released after mainnet goes live!