Skip to content

Davy Jones' Locker (v1.5.9)

Compare
Choose a tag to compare
@karalabe karalabe released this 13 Feb 17:30

"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 for solc 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.
  • Contract interactions or deploys need to enable Contract data from the Ethereum app Settings.
  • Browser support needs to be turned off from the Ethereum app Settings (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.