@ledgerhq/hw-transport-node-speculos
TypeScript icon, indicating that this package has built-in type declarations

6.28.6 • Public • Published

@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(() => {
    // in 1s i'll click on right button and release
    transport.button("Rr");
  }, 1000); // 1s is a tradeoff here. In future, we need to be able to "await & expect a text" but that will need a feature from speculos to notify us when text changes.
  // derivate btc address and ask for device verification
  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

# starts an http proxy with speculos (http proxy that works with LLD and LLM)
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
  • command any

Returns Promise<void>

open

Parameters

Returns Promise<SpeculosTransport>

Package Sidebar

Install

npm i @ledgerhq/hw-transport-node-speculos

Weekly Downloads

340

Version

6.28.6

License

Apache-2.0

Unpacked Size

57.5 kB

Total Files

17

Last publish

Collaborators

  • thomas.coudray
  • ldg-github-ci
  • aboissiere
  • vbouzon
  • gbrahm-ledger
  • sergii-shkolin
  • phenry-ledger