Davy Jones' Locker (v1.5.9)
"Roses are red, Violets are blue, Geth now supports Hardware wallets too!"
Geth v1.5.9 is a feature release working towards hardware and HD (hierarchical deterministic) wallets. The first step consists of support for the Ledger Nano S and Ledger Blue (USB only) HD hardware wallets (#3592), also laying the groundwork for supporting subsequent hardware and software HD wallets.
Other notable changes:
- Genesis JSON additions and polishes for black box testing #3635, #3656
- Split off Android builds into Linux build jobs #3662
- Swarm manifest manipulation commands #3645
- Slim down versioned Alpine Docker images #3670
Bugfixes:
- Fix data race in transaction pool nonce retrieval #3625
- Support swarm in-process restarts #3651
- Fix
abigen
contract parsing forsolc
v1.4.8+ #3648 - Fix shutdown issue for swarm running in a docker container #3649
For a full rundown, please see the v1.5.9 milestone.
Binaries and mobile libraries are available on our download page.
Ledger ProTips
- Signing EIP155 transactions requires at least v1.0.3 of the Ethereum app on the Ledger.
- You may sign non-EIP155 transactions using the
go-ethereum
library directly.
- You may sign non-EIP155 transactions using the
- Contract interactions or deploys need to enable
Contract data
from the Ethereum appSettings
. Browser support
needs to be turned off from the Ethereum appSettings
(different protocol).- Windows support requires a USB driver (official Red Hat): https://github.com/daynix/UsbDk/releases
- May be bundled into our installer later, we're curious how well it holds up in the wild first.
- Linux support might require granting the user write access to the Ledger
- Accounts are automatically derived, searching for non zero balance or non zero nonce.
- First empty account is always listed (sending it funds will derive the next empty account).
- Mist doesn't know about Ledger, if asked for a password, enter empty and confirm tx on device.
- If in doubt, unplug and replug :P
Go API changes
Just to emphasize, the section below is about the Go API (i.e. go-ethereum
library) changes. The RPC did not incur any backwards incompatible changes. If you do find something, it's a bug, please report it.
Until now the go-ethereum
codebase assumed that accounts are equivalent to individual private keys stored on disk inside a keystore. To support hardware and HD wallets however, this invariant breaks, requiring a new API with different constructs and mechanisms. We've tried our best to introduce this new API in such a way that it's trivial to transition to it for anyone already using go-ethereum
as a library from Go or Java/ObjC/Swift.
The first breaking change is that while previously the accounts.Manager
(or AccountManager
on mobile) was a glorified keystore, now it changed its scope to handle Wallet
objects, which may contain multiple accounts, as well as may be backed by different backends (keystore or hardware). The previous keystore is kept intact, just renamed to Keystore
within the keystore
package (arguably a better name and location). If you used the account manager in your own code, a simple swap to the keystore should more or less just work™.
The other breaking change you need to be aware of is that while previously transaction signing in the keystore only required a hash of the transaction, the new code requires the entire transaction object. This is needed to support hardware wallets which require the transaction details for user confirmation UI elements.