@obscuren obscuren released this May 10, 2016 · 158 commits to release/1.4 since this release

Assets 5

Note: 1.4.3 fixes a regression introduced at the very last minute that affected miners

Release 1.4 is a major release in the history of Go Ethereum and brings you about roughly 6 months worth of work and less crashes. This is the final release of the 1.4 series and marks the end of the release candidates.

This document will describe some of the major features included in this release and list most of the minor features. For a full rundown of features and fixes please refer to the 1.4.0 milestone, 1.4.1 milestone and 1.4.2 milestone.

On chain version update notifications

We've added a Geth release oracle contract to the network which holds the current version of geth with the release hash. All updated clients will check the contract and fetch the version number and check whether the version number is greater than the version you're running. It will emit a notice telling you there's a new client available. More info on #2497 .

New releases need to be signed off by 2 out of 3 current signers (@obscuren, @fjl and @karalabe) to be accepted by the oracle and users be notified of it. Note, that we do not do any automatic upgrades, only display a small CLI notification to the user every once in a while.

The verified contract is live at 0xFA7B9770Ca4cb04296Cac84F37736d4041251CDF. The full contract ABI is available here, but you can also use a reduced ABI that just contains the list of signers and the current release version.

Event Subscriptions

Over the past months we've significantly overhauled our RPC implementation and added several new capabilities and transport layers. At present geth supports the following transport layers:

  • WebSockets (available with the --ws flag)
  • HTTP (available with the --rpc flag)
  • IPC (available with the --ipc flag and enabled by default)

Previously when creating new filters you'd need to poll for them and query to see if there were any pending filter updates. With the new asynchronous implementation we've added an new additional subscription model where, instead of polling, you get notified by the client via pushed updates.

Please refer to the documentation about our new subscription model.

Native Go DApp Development

With the introduction of package accounts/abi which allowed you to create bindings between Ethereum Contracts and Go we've taken it one step further and developed a new tool which can do all the bindings for you given a ABI json structure. Our abigen (which is available in cmd/abigen) can create fully automated Go Bindings to any Ethereum contract without the need for manual fiddling. See our [step-by-step](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go bindings-to-Ethereum-contracts) tutorial for more information.

Private networks

With the interest of private networking growing we've added some new configuration utilities to geth and deprecated some flags that will be removed as of 1.5.

With the coming of Geth 1.4 we've deprecated the --genesis <json_file> flag and replaced with a geth init <json file> sub command. This means that you'll no longer be able to mix the destructive --genesis flag with other flags.

In addition to the above mentioned init subcommand we've added a new field to the genesis file: config which allows you to specify configuration options for the chain. At present the only available option is "homesteadBlock":"0x block_number" and may be extended with more options as we progress. The configuration option is not yet standardised and may not be implemented in other implementations.

Basic build support for iOS and Android platform

Geth should be buildable for iOS and Android platforms. While it's certainly not anywhere near feasible to run Geth in a production environment on an iPhone or on an Android device with the current full node implementation, however this will serve as a foundation for future updates, which will include LES (Light Ethereum Subprotocol) capabilities.

Debugging options

We've added several new debugging features that will allow you to get transaction traces and full block traces:

  • traceTransaction( hash )
  • traceBlockByHash( hash )
  • traceBlockByNumber( number )
  • traceBlockByFile( file_with_rlp_encoded_block )
  • traceBlock( rlp_hex_encoded_string )

The tracer functions can be found in the debug namespace. Please note that these functions are not available within web3 and may only be accessed through either HTTP, IPC, WebSocket RPC and the geth console.

Feature mentions

  • New EVM enabled for a few lucky ones
  • Node refactoring to allow using Geth as a library
  • Fully rewritten RPC layer
  • Pending transaction inspection
  • Many, many fixes other fixes
  • NTP time check
  • General optimisations