@ledgerhq/hw-transport-node-speculos
A transport for https://github.com/LedgerHQ/speculos Nano simulator.
GitHub,
Ledger Devs Discord,
Developer Portal
Getting started
import SpeculosTransport from "@ledgerhq/hw-transport-node-speculos";
const apduPort = 40000;
async function exampleSimple() {
const transport = await SpeculosTransport.open({ apduPort });
const res = await transport.send(0xE0, 0x01, 0x00, 0x00);
}
async function exampleAdvanced() {
const transport = await SpeculosTransport.open({ apduPort });
setTimeout(() => {
transport.button("Rr");
}, 1000);
const res = await transport.send(0xE0, 0x40, 0x01, 0x00, Buffer.from("058000002c8000000080000000000000000000000f"));
}
With ledger-live CLI
It's working with SPECULOS_APDU_PORT and SPECULOS_HOST envs.
SPECULOS_APDU_PORT=40000 ledger-live sync -c btc
SPECULOS_APDU_PORT=40000 ledger-live proxy
To make it work with Docker, I had to expose some port and do this:
docker run -it -p 40000:40000 -v "$(pwd)"/apps:/speculos/apps speculos /bin/bash
$ pipenv shell
$ ./speculos.py -m nanos ./apps/btc.elf --sdk 1.6 --seed "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" --display headless --apdu-port 40000
API
Table of Contents
SpeculosTransportOpts
Type: {apduPort: number, buttonPort: number?, automationPort: number?, host: string?}
Properties
SpeculosTransport
Extends Transport
Speculos TCP transport implementation
Parameters
Examples
import SpeculosTransport from "@ledgerhq/hw-transport-node-speculos";
const transport = await SpeculosTransport.open({ apduPort });
const res = await transport.send(0xE0, 0x01, 0, 0);
button
Send a speculos button command
typically "Ll" would press and release the left button
typically "Rr" would press and release the right button
Parameters
Returns Promise<void>
open
Parameters
Returns Promise<SpeculosTransport>