Skip to main content

Library to interface with ledger-app-eth on Ledger hardware wallets

Project description

ledger-eth-lib

This is a WIP. Consider it alpha

This is a library to interact with ledger-app-eth, the Ethereum app for the Ledger hardware wallets. It's goal is to make interfacing with the Ledger nice and simple with well known Ethereum+Python tools.

Web3.py Integration

ledger-eth-lib provides a Web3.py middleware. It will automatically intercept the relevant JSON-RPC calls and respond with data from your Ledger device.

from web3.auto import w3
from ledgereth.web3 import LedgerSignerMiddleware
w3.middleware_onion.add(LedgerSignerMiddleware)

Intercepted JSON-RPC methods:

  • eth_sendTransaction
  • eth_accounts

Quickstart

Get Accounts

Fetch the availible accounts (currently only default).

from ledgereth import get_accounts
accounts = get_accounts()
my_account = accounts[0]

Create and Sign a Transaction

Create a transaction object and sign it.

from ledgereth import create_transaction
tx = create_transaction(
    '0xb78f53524ae9d465279e7c3495f71d5db2419e13',  # to
    '0x4dae53ee778a324bd317bd270d6227406b6bd4ec',  # from
    int(1e18),  # value
    int(1e5),  # gas limit
    int(1e9),  # gas price
    1  # nonce
)
# TODO: Double check this
signature = '0x{}{}{}'.format(
    hex(tx.v)[2:],
    hex(tx.r)[2:],
    hex(tx.s)[2:],
)

Sign an Existing Transaction Object

Sign a Transaction object from pyethereum(or similar RLP serializable):

from ledgereth import sign_transaction
tx = sign_transaction(tx)
# TODO: Double check this
signature = '0x{}{}{}'.format(
    hex(tx.v)[2:],
    hex(tx.r)[2:],
    hex(tx.s)[2:],
)

API

get_accounts(dongle: Any = None)

Fetch a List of accounts.

NOTE: This will currently only return the default/primary account from the device.

sign_transaction(tx: Serializable, dongle: Any = None)

Sign a rlp.Serializable transaction.

create_transaction(to: bytes, sender: bytes, value: int, gas: int, gas_price: int, nonce: int, data: bytes, dongle: Any = None)

Create and sign an rlp.Serializable transaction from provided params

TODO

  • Add fake dongle support to pytest suite so tests can be run without a real Ledger and human interaction
  • Fill out tests
  • Add messaging signing support
  • Add support for multiple accounts(different derivations?)

Project details


Release history Release notifications

This version

0.1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for ledgereth, version 0.1.0
Filename, size File type Python version Upload date Hashes
Filename, size ledgereth-0.1.0-py3-none-any.whl (8.8 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size ledgereth-0.1.0.tar.gz (7.7 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page