Development has steadily continued over the last month and a half as we approach the launch of Metropolis. Over a series of core dev calls over the last few months, we have specified and finalized the EIPs for Metropolis, and made the appropriate changes to the Yellow Paper. Metropolis has now been split up into two consecutive forks, named “Byzantium” and “Constantinople”. EIPs for Byzantium (Metropolis part one) are essentially finalized, and the last remaining work to be done has to do with writing tests and making sure that all clients are passing all tests.

The Ethereum network continues to see all-time highs in transaction usage, and the network has maintained stability through this period with consistently low uncle rates.

Research

Geth

Implemented the following:

Currently working on:

Mist

ENS

The weekend of August 11-13 in London was the first community-driven ENS workshop, where representatives of the community at large including representatives of multiple wallets, individuals working on ethereum projects and other ENS stakeholders discussed the current state and future of ENS. A summary post is available here, but here are some highlights:

Web3.js

In the last two weeks, web3.js beta was released and immediately and widely used by the community. A few packages already started integrating the new version into their libraries. Since the first beta release, issues were found and fixed and improvements have been added so that the beta is currently at beta.18.

Once web3.js 1.0 is ready for prime time, a separate blog post will introduce its new features.

To try it out yourself, either clone the 1.0 branch or install it via npm install web3@1.0.0-beta.18

Please add issues and suggested improvements to the GitHub issues.

Light Client

C++

Solidity

We added support for “experimental” features that can be switched on via a “pragma” statement in the source code. One of these features is the new ABI encoder, which can encode arbitrarily nested arrays! Another experimental feature that will soon be available is the automated verification of assertions and overflow conditions using an SMT solver. We also fixed two bugs in the code generator. Apart from that, we implemented many smaller changes that improve error messages, added new warnings and improved security. Lastly, work has begun on implementing view and pure function specifiers.

Remix

EVMJIT

Metropolis support was added to EVMJIT; all tests were passed. Also EVM-C has been updated to support new features for Metropolis, like support for REVERT and return buffers. The EVM-C interface is evolving slowly, but only VM trace support is missing to mark it as fully functional.

Swarm

While the swarm testnet has migrated to new hardware, the team is busy churning out the new features for our POC3 roadmap planned for after Metropolis. The team has been working on a devp2p network simulation and testing framework for the past nine months, and the module is now ready to merge to go-ethereum. PSS (bzz whispered), our new node-to-node messaging protocol, now fully incorporates whisper’s encryption module and supports remote peer sessions with Diffie-Helmann key exchange for udp-like protocols. The biggest component of our forthcoming release is the complete rewrite of the swarm network layer. As part of this endeavor, the connectivity (kademlia overlay topology) and the discovery (topology bootstrapping) components are ready to merge.

The final missing piece for a proper dropbox backend (to complement FUSE and ENS) is

chunk-level encryption for privacy. We came up with an elegant solution: the Keccak-Feistel blockcypher, which will be included in POC3.

The team has started working on the third orange paper describing generalised swap, swear and swindle games (courtroom contract suite) to drive decentralised services by providing scalable payment, incentivisation and service guarantees. Videos of talks from the Berlin Swarm Summit in June are available on the summit website on swarm http://swarm-gateways.net/bzz:/summit2017.ethersphere.eth/.

Whisper

Ewasm

Ewasm itself is close to finished in its current form. Work on Hera, an implementation of Ewasm that is compatible with the VM API using in Ethereum C++, is being resumed since EVM-C interfaces matured significantly.

EthereumJS

Issues with handling large numbers and certain edge cases have been identified and fixed. Implementation of Byzantium changes is ongoing. The most challenging area is the elliptic curve pairing precompiles. To support these precompiles, we will use Zcash’s Rust implementation compiled to asm.js. There is also work being done to support the new tracing format and optimise the VM for speed.

EthereumJ

A team of two developers has started working on bringing EthereumJ up to compatibility with Byzantium in preparation for the first Metropolis hard fork.

Pyethereum

Some bug fixes have been made as well as updated to related libraries (eg. rlp.hex_decode and rlp.hex_encode in pyrlp). Metropolis EIPs are essentially implemented, and Byzantium state and block test compliance are continuing to improve.

Py-EVM

Py-EVM is a new implementation of the EVM written in python. The library is heavily influenced by the existing Pyethereum library, with the key difference being a more modular architecture.

Recent development includes:

Web3.py

Recent improvements to the library include:

Security

We have received numerous bug bounty submissions, and have awarded Juno Im with 5000 points for a Mist-vulnerability. A Solidity-bug regarding ecRecover has been patched (see https://github.com/ethereum/solidity/releases/tag/v0.4.14).

We are continuing to improving testing, using Hive and as well as fuzzing the various raw VMs, with internal state inspection after each opcode. See Testing (below).

New opcodes and precompiles in Metropolis are being benchmarked for finalization of gas costs.

Testing

We made a number of infrastructure improvements:

Work in progress includes:

We are also exploring more advanced techniques and closer collaboration with the community:

Viper

Viper has seen substantial progress over the last month and a half, and contributions from outside contributors are increasing. New security features such as payable and internal modifiers have been added, along with more tests, and the language now also has support for accepting and returning fixed-size lists as inputs and outputs.

See the https://github.com/ethereum/viper/blob/master/README.md and commit history for a changelog.

Bamboo

Bamboo is a programming language for Ethereum contracts.  At the end of July, the first release of Bamboo became available in the OCaml package manager opam install bamboo.  Bamboo is now capable of implementing a simple payment channel and an ERC20 token. Moreover, a few contributors have started working on both enhancements and as well as documentation.

Eth-Isabelle

Eth-Isabelle specifies the Ethereum Virtual Machine for theorem provers such as Isabelle/HOL and Coq. The project received substantive pull-requests. Separation logic tactics from @seed shortens many proofs by half. The proof that a non-owner cannot harm a wallet is more structured than ever. An independent JULIA interpreter by @mrsmkl serves as an executable specification of JULIA (an intermediate language in the Solidity compiler). It would be fruitful to test this interpreter against the implementation. This interpreter can also be used as a basis for a proven-correct compiler from JULIA to EVM.

For testing eth-isabelle with BlockchainTests, ECDSA recover was needed in OCaml, so @pirapira made a contribution.

Yellow Paper

The pull-requests for Metropolis are up-to-date although the pull-requests need to be classified into two phases: Byzantium and Constantinople.