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'/xby default. - It does not support the
signMessage,signTypedDataorexportAccountmethods, 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.