Packing in significantly more features than initially expected, the Go Ethereum team is excited to announce the release of the first version of the 1.6 Geth release series! Taking a look at the commit list, this is set to be an extensive post!
Toml configuration files
For a considerable time, users have been advocating for the inclusion of configuration files to assist in switching between various public and private chains. We had not concentrated much on private networks, so we consistently directed users to utilize shell scripts in those instances. While these scripts are adequate for numerous situations, they lack portability across diverse operating systems, especially Unix and Windows.
At popular request, we’ve revamped the entire configuration and flag management for Geth 1.6, ultimately implementing this highly requested capability. The configuration file adopts the TOML format, and the fields that can be specified correlate directly to the config structures go-ethereum employs internally. Certain fields have been left out to prevent sensitive information from being included in configuration files.
Determining how to craft a “proper” config file for your node with all the necessary fields arranged precisely as you desire – whatever their names might be – can be overwhelming. Instead, Geth 1.6 includes a command that you can run to display the exact config file you’ll require based on your specific invocation flags (geth –your-favorite-flags dumpconfig). This output can subsequently be loaded via geth –config yourfile.toml. We also aim to enable the embedding of genesis configurations, though that needs further consideration to finalize.
Pure Go ethash
From the outset, Ethereum has featured a C ethash implementation, shared across various clients. This arrangement minimized maintenance burdens while the algorithm evolved, albeit at the cost of incorporating a significant amount of complex C code into go-ethereum.
As time went on, this became increasingly problematic. Lacking C expertise within the Go Ethereum team, we were unable to adequately address performance issues and couldn’t execute optimizations crucial for mobile devices. The architecture of the C ethash precludes it from functioning on big endian processors, which would necessitate a major redesign. Ultimately, our reliance on C code severely impacts our portability and maintainability.
Beginning with Geth 1.6, we’ve discontinued our usage of the original C ethash and fully reimplemented it in Go. This allows us to generate mining DAGs concurrently across all available CPUs, eliminate outdated mining DAGs instead of keeping them indefinitely, utilize memory mapped verification caches vital for rapid mobile startup times, and operate on any platform supported by Go. For specifics, performance metrics, and CLI flags, please refer to the pure Go ethash PR.
Router CPU compatibility
We have consistently taken pride in maintaining the go-ethereum codebase on a variety of unique platforms, which have been significantly constrained by the demands of a full node. However, with the light client gradually maturing, it increasingly makes sense to broaden our platforms towards previously impractical avenues.
With the Geth 1.6 release series, we are further pushing boundaries by introducing compatibility for MIPS CPUs, predominantly found in consumer router devices. Geth 1.6 functions on both 64-bit and 32-bit MIPS CPUs in both little endian and big endian modes (thanks to our new ethash code). You can now discover pre-built stable and development binaries for these MIPS CPUs on our downloads page.
While we’ve managed to deploy a consumer router on the mainnet, there is still a great deal of work needed to ensure a smooth experience. The most prominent hindrance is the memory intensity of ethash, necessitating substantial amounts of storage and memory capacity… yet another reason to transition to PoS! 😉
Plugable consensus engines
Throughout the previous releases, we have gradually progressed towards decoupling consensus-related concepts within our codebase, with the long-term objective of preparing for Casper and proof-of-stake. It was a lower priority feature as many other tasks were taking precedence. Priorities shifted after the Ropsten testnet was overwhelmed to a state where it became unusable.
The fundamental reason for the attack’s success was that a proof-of-work network is only as secure as the computational power supporting it. Initiating a fresh testnet from scratch would not resolve much, as an attacker could execute the same strategy repeatedly. The time appeared appropriate to invest effort into the consensus model within go-ethereum and enable alternatives to proof-of-work for smaller networks, where a different security framework is more appropriate.
The outcome is that Geth 1.6 includes a plugable consensus model, enabling developers who wish to create their own Ethereum fork with distinct methods of agreeing on block validity to do so by implementing a straightforward Go consensus engine interface. The current ethash-based proof-of-work consensus model is also “just” another implementation of this interface.
Clique PoA (proof-of-authority) protocol
With the previous Ropsten testnet having faltered, various groups hurried to establish a new testnet that would fit their needs, but might not cater well to others. These initiatives led to the creation of a modified Ropsten testnet by the Parity team (which relies on custom soft-fork code, bootnodes, and blacklists) and the Kovan testnet from a Parity“`html
conglomerate (depending on a previously undocumented Parity consensus mechanism). Both approaches exclude other clients.
Our approach was to introduce a cross-client proof-of-authority consensus mechanism known as Clique (EIP 255). The primary design aspects considered for Clique were straightforwardness (i.e. lessen the difficulty of integrating with various clients) and interoperability (i.e. accommodate existing synchronization technologies in all clients). The proposal received unanimous acceptance from all client developers on the 17th of March, 2017.
With our 1.6.0 version, go-ethereum also includes a complete implementation of the Clique proof-of-authority consensus engine. Beyond all the consensus-related features, the engine additionally allows customizable block times for private network scenarios. As for how you can establish your own Clique network… 😉
Puppeth network manager
Are you fond of setting up a private network? Don’t respond to that! To be honest, if you’ve ever attempted to configure your own private Ethereum network – whether for enjoyable purposes, business activities, or hackathon assistance – you’ll undoubtedly comprehend the frustrations involved in doing so. Setting up a genesis block is one aspect, but when you tackle bootnodes, full nodes, miners, and light clients, things quickly become tiresome… and we haven’t even touched on monitoring, explorers, faucets, wallets. It’s chaotic.
Geth 1.6 introduces a new utility named puppeth, which aims to alleviate this particular issue. Puppeth is a CLI wizard that assists in creating a new Ethereum network down to the genesis, bootnodes, signers, ethstats, faucet, dashboard, and more, without the complexity that would typically be involved in configuring all these services individually. Puppeth utilizes SSH to connect to remote servers and constructs its network components from Docker containers using Docker Compose. The user is guided through the process via a command-line wizard that handles the heavy lifting and topology configuration automatically behind the scenes.
Puppeth isn’t a cure-all. If you have extensive in-house Ethereum deployments relying on your own orchestration tools, it’s generally wiser to utilize existing infrastructure. However, if you need to establish your own Ethereum network without fuss, Puppeth could genuinely assist you with that… swiftly. Everything is deployed into containers, ensuring your system remains unblemished by unusual packages. Yet, it’s Puppeth’s initial release, so proceed with caution and avoid deploying onto critical systems.
Rinkeby test network
As noted previously, the Ropsten testnet became unstable a few months ago. There are ongoing initiatives to restore it, as it remains a crucial element of the Ethereum ecosystem. Nonetheless, we deem it vital to offer developers a network they can depend on, one that can’t be easily compromised. One such network is the latter part of the EIP 255 proposal, the Rinkeby testnet.
On the 10th of April, we launched the alpha version of Rinkeby, a novel proof-of-authority testnet based on the Clique protocol. Rinkeby is currently maintained by three (3) Foundation signing nodes, but we are eagerly anticipating promoting external entities as well, to enhance the network’s resilience. The network also includes a public GitHub authenticated faucet that is available to everyone on equal terms. Regarding its designation as an alpha version, Rinkeby represents the first live version of Clique, and we have yet to evaluate how it performs under global load.
So, how can you reach it? Being an alpha, we haven’t yet incorporated a flag for it into Geth 1.6, but we’ve gone out of our way to make it exceptionally easy to connect and utilize… through its own website at https://www.rinkeby.io/! Dashboard, ethstats, faucet, and connectivity tutorials for Geth, Wallet/Mist, and Android/iOS! If you’re curious about how we developed all this, Puppeth, of course! This is precisely what Puppeth was designed for, and you can replicate the same for your own private networks too!
Mounting swarm data
If you’ve previously engaged with our experimental swarm implementation, you’ll understand that working with files is straightforward enough, but when it comes to handling entire directories – possibly nested – it can become taxing. Acceptable for a program, but less so for manual user engagement.
In an attempt to address this limitation, the Swarm implementation included in our latest release offers several key features, particularly the capacity to upload and download complete directories via tarball streams in the HTTP interface, as well as integrating an entire folder into your local filesystem using FUSE! This should render Swarm significantly more practical both for file backup needs and for easily navigating complex directory structures.
In addition to these exciting features, Swarm experienced various stability enhancements and bug fixes, acquired the ability to manipulate manifests via the command line, and the capability to create listings/sitemaps from them.
64 bit gas calculations
The Ethereum Yellow Paper indicates that gas included with transactions may be any arbitrary value up to the extraordinary amount of 2^256 (which could encompass nearly as many transactions as there are atoms in the observable universe). Consequently, the go-ethereum EVM was designed to function with these vast numbers for gas calculations, resulting in proportionately large performance penalties while executing each transaction.
As there is simply no logical reason to employ big-number arithmetic for gas calculations, Geth 1.6 transitioned to utilizing 64-bit values, which is a hardware-supported type on any contemporary CPU. Should you wonder whether this introduces any limitations, a single block with a gas limit of 64-bits could encompass 44 times more transactions than there are red blood cells in the human body. I think we’re secure for the foreseeable future.
“`future.
In terms of enhancing performance, while we lack a precise figure, it’s reasonable to assert that reducing hundreds of memory allocations for each transaction can only be advantageous.
Alongside all the features mentioned prior, a significant number of bug corrections have also been integrated, including issues related to ethstats reporting, singleton miner networks, star topology propagation resolutions, and further improvements. Please refer to the Geth 1.6.0 release notes for a streamlined overview.
Additional minor features incorporate ongoing enhancements to the light protocol, significant advancements in the Whisper protocol (nearing a public v5 release), and we have completely replaced our logging system with a far superior and more resilient version.
As usual, Geth can be installed through your preferred package manager, or you can download a pre-compiled binary for a range of supported platforms.
Enjoy your puppetheering! The go-ethereum Authors.
IMPORTANT NOTICE
Given the circumstances surrounding this release, which features considerable reworking of gas calculations within the Ethereum virtual machine and substantial reconfigurations of the plugable consensus engine division, we urge production users to proceed with caution during the upgrade process. We regard Geth 1.6 as a pre-release until extensive stability is assured.*
It is crucial for all production users to recognize the potential risks associated with new releases like this one. There may exist undiscovered bugs and unforeseen effects that could result in losses or other undesired outcomes. This release is targeted toward experienced production users who are familiar with the Geth platform, its implications for users, and the associated risks new releases of this sort may entail.
