/waves-ledger-js

Primary LanguageJavaScriptApache License 2.0Apache-2.0

Waves sign data by ledger in browser

Install

$ npm install --save @waves/ledger

Usage

Create connection
const WavesLedger = require('@Waves/ledger');
const ledger = new WavesLedger();

WavesLedger can have optional arguments.

    import TransportNodeHid from '@ledgerhq/hw-transport-node-u2f';

    const options = {
        debug: true, //boolean,
        openTimeout: 3000, //number,
        listenTimeout: 30000, //number,
        exchangeTimeout: 30000, //number,
        networkCode: 87, //number,
        transport: TransportNodeHid
    };

    const ledger = new WavesLedger(options);
Where:

debug enable or not logs of the binary exchange. openTimeout is a delay number in ms for waiting connection.
listenTimeout is a delay number in ms for waiting listen request to U2F device.
exchangeTimeout is a timeout (in milliseconds) for the exchange call. Only some transport might implement it. (e.g. U2F).
networkCode is Waves network code (87 - for mainet)
transport is U2F Transport implementation. (hw-transport-u2f by default)

Read about transport

WavesLedger API

  • probeDevice

    probeDevice(): Promise. If device available and ready, Promise returned true.

      const canIUse = async () => {
          return await ledger.probeDevice();
      }
  • tryConnect

    tryConnect(): Promise<>. reconnect to Transport and init ledger libs.

      const isLedgerReady = async () => {
          try {
              return await ledger.tryConnect();
          } catch (e) {
              ///...error handlers
          }
      };
  • getUserDataById

    getUserDataById(id): Promise. Get user from ledger, where user is: { id: number, path: string, wavesAddress: string, publicKey: string }

    id - is number from 0
    path - is string in internal ledger format
    wavesAddress - is string in base58 format
    publicKey - is string in base58 format

    ledger.getUserDataById(id)
        .then(
            (user) => {...},
            (err) => {...}
        );
  • signTransaction

    Sign waves transaction bytes (ledger show detailed transaction info)

        ledger.signTransaction(userId, asset, data)

    userId - number
    data - Array number form 0 to 255 asset - {precision: number, ...}

    Result is Promise with signature string in base58 format

  • signSomeData

    Sign any bytes (ledger can't show detail info)

      ledger.signSomeData(userId, data)

    userId - number
    data - Array number form 0 to 255

    Result is Promise with signature string in base58 format

  • signRequest

    Sign any bytes (ledger can't show detail info)

      ledger.signRequest(userId, data)

    userId - number
    data - Array number form 0 to 255

    Result is Promise with signature string in base58 format

  • signMessage

    Sign any string (ledger can't show detail info)

    ledger.signMessage(userId, data)

    userId - number
    data - string

    Result is Promise with signature string in base58 format