Releases: ethereum/go-ethereum
EDGE (1.4.6)
As Ethereum got more popular, the peer-to-peer networking infrastructure became extremely versatile (we have 3G peers in New Zealand and Satellite peers in the US). Certain assumptions that Geth made about the network when we've launched became untrue in the last months, especially with TheDAO bringing in an unexpected number of new users and environments. In this newly expanded network, the original assumptions caused Geth to be too aggressive with which peers are useful and which are not.
Geth 1.4.6 "EDGE" aims to solve the synchronization issues resulting from this newly found heterogeneity: it introduces a lot more download concurrency to avoid bottlenecks caused by badly connected remote machines, and also introduces adaptive quality-of-service tuning to make peer selection less aggressive for users with more restricted connectivity.
The result is a newly polished sync mechanism that can churn out a 7-8MB/s download speed in the current Ethereum main network (if your connectivity allows it), but also provide a solid and stable stream for all users, verified for as low as EDGE connections (440ms latency, 200 kbps upstream, 220kbps downstream).
We'd like to shout out a big thanks to @ellis2323 for the tireless benchmarking and re-benchmarking of our polishes on high end machines and connectivity (reaching 3 hours full sync times and 20 minutes fast sync times) as well as to @JasonCoombs for verifying connectivity and sync stability on extremely high latency satellite links.
A breakdown of the sync changes:
- Concurrent header retrievals to prevent sync bottlenecks #2315
- Disable transaction processing during initial sync cycle #2574, #2649
- Download state trie concurrently with blockchain during fast sync #2627
- Adaptive quality of service tuning for restricted connectivity #2630
- Fast-sync critical-section download failure resiliency #2647
- Enterprise grade hand-tuned multi-level heuristic smart caching #2585
Polishes and bugfixes:
- Refactor JavaScript console for external library reuse #2535, #2656
- Re-enable bad block reporting to track any strange activity #2614
- Fix a transaction pool data-race for extreme tests #2655
- Fix eth_getTransactionCount on the testnet for non existent accounts #2626
- Fix compiler path and listing for Solidity compilation #2613, #2612
- Fix an extremely rare downloader hang after a successful sync #2637
- Fix a CI server
go vet
annoyance with mutex copying #2580
drop table users (1.4.5)
This is a bug fix release and includes the following changes:
Gethasaurus (1.4.4)
Credit for the release name goes to @sjalq. (See gitter discussion)
Security fixes
eth protocol vulnerabilities have been discovered by bounty hunters.
We'll give out more details at a later time along with the full report that we have received.
- Fixed: DoS attack vector in the block downloader
- Fixed: theoretical (but impractical) method of increasing the local minimum block difficulty
This release also fixes a couple of bugs:
Gethy McGethface (1.4.3)
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
Gethy McGethface (1.4.2 final)
Gethy has moved on to 1.4.3.
Knoxjonesi (1.4.1)
Note: all binaries have been cross compiled to the various platforms. If any of the binaries do not work for your platform please raise an issue.
Release 1.4 is a major release in the history of Go Ethereum and brings you about roughly 6 months worth of work. For this release we've planned several RCs (Release Candidates) so we can test the release together with our community and gather feedback for the final release.
If you want to build this release from source, please use the release/1.4
branch.
$ git checkout release/1.4
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 and 1.4.1 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
Bursarius (1.4.0)
Note: all binaries have been cross compiled to the various platforms. If any of the binaries do not work for your platform please raise an issue.
Release 1.4 is a major release in the history of Go Ethereum and brings you about roughly 6 months worth of work. For this release we've planned several RCs (Release Candidates) so we can test the release together with our community and gather feedback for the final release.
If you want to build this release from source, please use the release/1.4
branch.
$ git checkout release/1.4
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 milestone.
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
Release 1.3.6
This release fixes an issue that fails to strip eol in some cases where a password is required.
Release 1.3.5
This release contains a crucial network hotfix #2285
This release contains all changes from the homestead release (1.3.4).
Homestead (1.3.4)
UPDATE: Please use the 1.3.5
release which contains a network hotfix
This is the first minor protocol upgrade that will set in at 1.150.000
's block (Testnet = 494.000
). This release includes the following changes to the protocol and fixes:
Protocol changes
- EIP-7: New EVM opcode
DELEGATECALL
- EIP-2: Consensus rules changes:
- The gas cost for creating contracts via a transaction is increased from 21000 to 53000;
- All transaction signatures whose s-value is greater than
secp256k1n/2
are now considered invalid; - OOG
CREATE
calls when there's insufficient gas for storing the code (as opposed to silently ignoring the code storage); - Difficulty adjust algorithm has changed to
block_diff = parent_diff + parent_diff // 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99) + int(2**((block.number // 100000) - 2))
Fixes / Other
- Increased artificial gas floor #2266
- Decreased minimum accepted gas price #2273
- Fixed windows p2p discover bug #2146
- Fixed transaction sorting #2143
- Implement EIP-8 p2p protocol upgrade #2091
- Fixed downloader OOM #2265
Miners
The minimum accepted gas price for both relaying and block inclusion has changed with #2273 to 20 Shannon (from 50 Shannon), this because of the recent changes in the price of Ether. You can change this setting with the --gasprice
flag when starting up the client and restore the old gas price if desired.