An implementation of MetaMask's Keyring interface, that uses a ledger hardware wallet for all cryptographic operations.
In most regards, it works in the same way as eth-hd-keyring, but using a Ledger device. However there are a number of differences:
- Because the keys are stored in the device, operations that rely on the device will fail if there is no Ledger device attached, or a different Ledger device is attached. A LedgerKeyring instance is bound to the attached Ledger device when the first account is created.
- The default HD derivation path differs from
eth-hd-keyring, (which uses
m/44'/60'/0'/0/x
). For compatibility with existing Ledger clients, it usesm/44'/60'/0'/x
by default. - It does not support the
signMessage
,signTypedData
orexportAccount
methods, because Ledger devices do not support these operations.
As per the keyring interface, its constructor accepts an object with options. The options it supports are:
- hdPath: The base path to use for derivations. If not provided, defaults to
m/44'/60'/0'
. - accounts: The accounts that are expected to be found on the device. If not provided, this will be initialised when the first account is created.
- transport: An transport object, implementing the interface given in Ledger's hw-transport module, used to interface with the physical device. If not provided, will be initialised with a U2F transport.
npm test
The tests use hw-transport-mocker
to allow test to be re-run without a physical device. If you run tests with
RECORD_LEDGER_TESTS=true
, then it will use a physical device, and record the
interaction, to use as an oracle when the tests are re-run.