Skip to content

DigixGlobal/react-ledger-container

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ffd3011 · Mar 30, 2022

History

28 Commits
Feb 16, 2022
Feb 16, 2022
Mar 31, 2017
Mar 31, 2017
Feb 25, 2018
Feb 16, 2022
May 7, 2017
Mar 30, 2022
Mar 30, 2022

Repository files navigation

React Ledger Container (WIP)

⚠️ Works with the 1.2+ Ledger firmware. EIP155 Replay protection only works with 1.3+

❗️ Use with cation; Developer accepts no liability for loss of funds!

React component that implements the Ledger Wallet API.

Features

  • Ledger Wallet config automatically passed as props
    • version
    • arbitraryDataEnabled
    • eip155
  • Auto-configured ethLedger methods injection
    • signTransaction
    • getAddress (TODO)
    • signPersonalMessage (TODO)
  • More convenient API
    • Pass transaction object rather than rawTx (and handle compatibility)
    • Automatically self-configures raw transaction data based on device version
    • Polls for connectivity, with intelligent poll times for enhanced UX
  • expect option for validating address
  • onReady event handler for triggering actions

Example

import React, { PropTypes, Component } from 'react';
import LedgerContianer from '@digix/react-ledger-container';

export default class SignLedgerTransaction extends Component {
  constructor(props) {
    super(props);
    this.handleSign = this.handleSign.bind(this);
  }
  handleSign({ signTransaction }) {
    // txData = { to, nonce, gasPrice, value, data, gas } (w/ optional `from` for validating)
    const { txData, account, publishTransaction } = this.props;
    // kdPath = "44'/60'/0'/0";
    const { kdPath } = account;
    // signTransaction method will show the signing UI on ledger screen
    signTransaction(kdPath, txData).then((signedTx) => {
      publishTransaction({ signedTx });
    })
  }
  render() {
    const { kdPath, address } = this.props.account;
    return (
      <LedgerContianer
        expect={{ kdPath, address }}
        onReady={this.handleSign}
        renderReady={({ config }) => <p>Ready to sign! Using ledger version {config.version}.</p>}
      />
    );
  }
}

SignLedgerTransaction.propTypes = {
  publishTransaction: PropTypes.func.isRequired,
  account: PropTypes.object.isRequired,
  txData: PropTypes.object.isRequired,
};

TODO

  • Test with new version of Ledger firmware
  • getAddress & signPersonalMessage
  • Support for Bitcoin API

About

React component that implements the Ledger Wallet API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published