Skip to Content
Open SourceHydraFeatures@exodus/hw-ledger

@exodus/hw-ledger

Usage

import createLedgerDiscover from '@exodus/hw-ledger';
import Transport from '@ledgerhq/hw-transport-node-speculos';
 
// Initialize transport factories depending on the platform
const ledgerDiscovery = createLedgerDiscover({
  logger,
  transports: {
    tcp: Transport, // emulator transport over tcp
  },
});
 
const ledgerDescriptors = await ledgerDiscovery.list();
// [
//   {
//       manufacturer: 'ledger',
//       transportType: 'tcp',
//       get: function () => { ... }
//   }
// ]
 
let ledgerDevice = null;
try {
  ledgerDevice = await ledgerDescriptors[0].get();
} catch (err) {
  // Instantiating the device may fail, deal with this.
  // e.g unplugged, udev issues, no networking
  logger.error(`Unable to connect to device.`, err);
}
 
if (ledgerDevice) {
  const address = await ledgerDevice.getAddress({
    assetName: 'bitcoin',
    derivationPath: `m/86'/0'/0'/0/0`,
  });
  logger.log(`bitcoin address is ${address}`);
  // bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr
}

Development

If you’re on Linux then it’s highly likely that you’ll want to setup your udev rules.

Clone the speculos repository & change your current working directory

git clone https://github.com/LedgerHQ/speculos.git --branch v0.3.5 --single-branch --depth 1 speculos-0.3.5
cd speculos-0.3.5

Get the Docker image

docker image pull ghcr.io/ledgerhq/speculos:sha-8241dc2 # v0.3.5
docker image tag ghcr.io/ledgerhq/speculos:sha-8241dc2 speculos

Get the Docker image for ARM (M1/M2)

docker image build -t ghcr.io/ledgerhq/speculos-builder:latest -f build.Dockerfile .
docker image build -t speculos:latest .

Launch the emulator while within the speculos directory

docker container run --rm -it -v "$(pwd)"/apps:/speculos/apps:ro \
-p 127.0.0.1:4000:4000 -p 127.0.0.1:40000:40000 speculos \
--display headless --api-port 4000 --apdu-port 40000 --seed "secret" --model nanos --sdk 2.0 ./apps/btc.elf

Now visit http://127.0.0.1:4000  to interact with the emulator.

MacOS launch issues:

  • port XXXX is already in use: re-map any available host port (doc )

Install udev rules for real devices (Linux only)

If you want to talk with real devices then you might require setting up udev rules.

sudo ./scripts/setup_udev.sh

Start building

XO

Request Demo

Schedule a call with our team

Select a product
Arrow right

Start building
Grateful

Contact Us

We're here to help