It’s been a while, I know, but these are pretty busy days.
I am writing this from a Starbucks in Shanghai located behind the Great Firewall, capable of peeping only occasionally. I was in Asia with Marek for the last two weeks, mainly for meetings, workshops and technical meetings. During this time we have seen the Olympic testnet launch, fight and survive, a very clear sign that a multi-tenant system would be far superior to today’s monoculture. We’ve seen the start of the second external audit of Go, mainly to check for regressions, but also to offer feedback and critiques on things that have changed in the meantime, like Go’s network layer and sync strategy. We have seen Mix and Solidity continue to progress and mature. And through continued development and progression of APIs, we’ve seen all clients become cleaner, faster, and more resilient.
exchanges
We continue to work with exchanges, now Marek and Konstantin provide substantial technical support, helping exchange coders understand the vast differences between using standard cryptocurrency APIs and Ethereum’s smart contract-based approach. In order to better support them and maximize adoption, we have designed and introduced a middleware JSON RPC proxy that allows for a much more familiar interface to Ethereum for exchanges.
C++
On the C++ side, we’re introducing PV61, a new version of the Ethereum network protocol (backwards compatible so as not to hinder the Frontier for Go release schedule) that provides super-fast parallel hash string downloads and much better resistance to hacker attacks. dirty hash strings. . Arkadiy is helping code that for C++ in the hope that it can be worked on in Go before Homestead.
Meanwhile, Solidity has progressed substantially: Solidity can now structurally predict gas usage, optimize code size and storage access very well, and support dynamically typed inner function calls, along with a host of other features. Liana continues to hack into that base code along with Christian.
Mix, under the direction of Aeron and Jutta with Avsa providing visual design input and hacking from Yann, is seeing a substantial UX polish and refactoring, with the overall goal of making it an ultra-usable, yet powerful IDE for developer development. contracts. ÐApplications can now be deployed to the network in a simple 3-stage process, and the blockchain/state management layer is being greatly improved, introducing a single pane of glass view from which you can easily see all transactions, calls and records and propagate transactions across the chain is easily updated.
Alex continues to work on the low-level network layer, now with the help of Vlad. We had a summit in Zug 3 weeks ago where I presented the plans for our libp2p network layer and how the Whisper and Ethereum protocols fit into that. Vlad, our first full-time developer on Whisper, will continue to hack libp2p and Whisper, making the protocol more resistant to various Ethereum network attacks while continuing R&D for the point-specific asynchronous signaling protocol. end p2p.
Working out of Warsaw, Pawel has continued with the EVM and EVM JIT libraries, optimizing stack usage and helping to fix the stack depth issues we were seeing on Mac OS X. Meanwhile, Vladimir continues his work. test and Marian with the network statistics page which has recently proven its usefulness in more ways than one. Those who have been experimenting with mining setups on the Olympic testnet will probably recognize the work of Lefteris taking over the Ethash implementation and updating, refactoring, and generally supporting Tim Hughes’ OpenCL implementation. A special thanks to each of the community members who have helped in one way or another with the development of this code. You know who you are (-: Christoph, meanwhile, is now working on test coverage for the core classes, as well as helping to fix various issues in the core classes.
In addition to working with the Mix, Arkadiy and Marek teams, I’ve been coding the new C++ secret store/wallet code (a revamped format and compatibility with Go and Python), optimizing the core (import times for at least one gas- heavy block recently measured as ~10x faster than Python and ~3x faster than Go), kernel bug fixes, implementation of new ‘ethvm’ binary to run the EVM in standalone mode and ‘ethkey’ binary ‘ for wallet management and, more recently, coding a much better interactive console interface, similar to Go’s Javascript console. I also hope to get a much better blockchain download diagnostic screen soon on AlethZero.
Auditing
The internal audit of the C++ codebase has begun, with Christoph working on tests for all the core classes and Arkadiy helping with some of the core optimizations. Christian has already audited the SecretStore and Wallet classes, which lends credence that the C++ client is reasonably secure for managing private keys. The external C++ audit will begin in three short weeks.
Since substantial testnet failure caused by issues at only one of three customers, including issues that survived two audit procedures, it has become clear to us that auditing, external or internal, is not a panacea. While we are committed to providing the best software and will continue our audit program, let’s be clear: there is nothing magical about having a Go customer go through an audit process. Our goal is for all clients to go through at least a basic audit process for the release of Homestead and I see no reason to use the Go client over other clients (C++ or Python) at this stage, nor, for the vast majority of users, during Frontera. No customer comes with any guarantee. In fact, there is an argument that minority customers, being a smaller target, are less likely to be attacked.
Forward
We are continuing our preparations for the launch of Frontier. While we’re still not sure of a precise release date, we’re increasingly pleased with the strength of the Olympic Testnet. As the Olympic test net failure continued, the adversity prompted some reflection on how we might mitigate such issues in the future. The depth and duration of the consensus failure can, broadly speaking, be attributed to two issues: First, there was a bug in Go’s codebase that caused it to accept invalid blocks (in this case, blocks with a test invalid job). in the meantime); secondly, there was a big problem with the network update, as miners continued to mine on the “bad” chain and were slow to update their nodes to mine on the correct chain. Essentially, the first was a forensic problem and the second was an organizational problem.
To make sure this never gets too deep or too broad in the future, I designed two new protocols: the bad chain canary and the Bad Block Reporting API. The bad canary of the chain is a simple contract. It is controlled by a single key (although there can be several) and sits silently until touched by its owner. I will be one of those owners, Vitalik and Jeff another two and there will probably be a fourth, Christoph. When he gets poked, he is assigned a block hash and block number pair; this pair refers to a recent block on a bad chain. If they match the chain that the contract thinks it is in, it is placed in the “bad chain” state. This allows the core Ethereum developers to inform everyone who is running a client on an incorrect chain (i.e. one that does not conform to the Yellow Book due to a bug) that it is so. The default on clients (easily overridden) is not to mine on such strings (since doing so would be a waste of power), but rather to inform the user to update as soon as possible.
The Bad Block Reporting API is a simple JSON RPC that allows several of our nodes to run in “sentinel” mode. In this mode, if they come across a bad block, they automatically compile a standardized report of what went wrong, including expected transaction receipts, VM traces, proof of work, and block error information. This report is then instantly sent to an ÐΞV server where you can activate an early warning system and if the release czar (which would be Taylor) deems necessary, alert the core developers. Through standardization and the use of a simple format, it is designed so that we can easily code a JSON matching engine to quickly diagnose where the consensus problem lies.
Future work is to combine the two so that JSON-RPC can also handle reporting canary information; in this case, a user can set up a sentinel server to receive an email every time the contract reports that mining has ceased and/or they should upgrade their node to continue mining.
Base
Finally, the three directors of the Ethereum Foundation (Vitalik with three votes, then Taylor and Mihai with one vote each) will soon meet, in Vitalik’s words, in a “kind of big event to pass the baton.” Kelley, ÐΞV’s indomitable COO, has spearheaded the search for proven candidates from a variety of fields who can add real value to the foundation both in terms of fundraising and driving adoption. We are extremely grateful for all of his hard work in this regard.