Paxeer Docs logo

Ledger Setup (EVM)

Set up your Ledger hardware wallet for signing EVM transactions on Paxeer, including device configuration, Ethers.js integration, and a simple transfer example.

This guide covers connecting a Ledger hardware wallet to Paxeer's EVM for signing transactions with Ethers.js. For Cosmos-side signing with the @sei-js/ledger package, see the @sei-js/ledger reference.

Prerequisites

  1. Ledger App Installation

    On your Ledger device, open the Manager in Ledger Live and install either the Paxeer app or the Ethereum app. The Ethereum app supports any EVM chain (like Paxeer), but the native Paxeer app may provide optimal compatibility.

  2. Enable Blind Signing

    In the Ledger device's Ethereum or Paxeer app settings, enable "Blind signing". This permits the device to sign arbitrary EVM transactions and contract calls (e.g. precompiles), which would otherwise be rejected.

  3. USB Permissions (Linux only)

    You'll need a udev rule so your process can talk to the Ledger over USB/HID. Clone the official rules from LedgerHQ/udev-rules, copy 49-ledger.rules into /etc/udev/rules.d/, then run sudo udevadm control --reload-rules and replug your Ledger.

  4. Install Dependencies

    npm install ethers @ethers-ext/signer-ledger @ledgerhq/hw-transport-node-hid

Connecting Your Ledger

import { LedgerSigner } from '@ethers-ext/signer-ledger';
import TransportNodeHid from '@ledgerhq/hw-transport-node-hid';
import { ethers } from 'ethers';

const rpcUrl = 'https://evm-rpc-testnet.sei-apis.com';
const provider = new ethers.JsonRpcProvider(rpcUrl);
const signer = new LedgerSigner(TransportNodeHid, provider);

const addr = await signer.getAddress();
console.log('Using Ledger address:', addr);

Every transaction sent through this signer will require physical confirmation on the Ledger device.

Sending a Transfer

A simple example sending HPX from your Ledger to another address:

import { LedgerSigner } from '@ethers-ext/signer-ledger';
import TransportNodeHid from '@ledgerhq/hw-transport-node-hid';
import { ethers } from 'ethers';

const provider = new ethers.JsonRpcProvider('https://evm-rpc-testnet.sei-apis.com');
const signer = new LedgerSigner(TransportNodeHid, provider);

const tx = await signer.sendTransaction({
  to: '0xRECIPIENT_ADDRESS',
  value: ethers.parseEther('1.0')
});

console.log('TX sent:', tx.hash);
const receipt = await tx.wait();
console.log('Confirmed in block:', receipt.blockNumber);
This signer works with any contract interaction - you can pass it to ethers.Contract constructors to sign precompile calls, ERC-20 transfers, or any other EVM transaction.

Troubleshooting

  • Timeouts: If the Ledger times out, increase the HID timeouts or ensure the device stays awake during signing.
  • "Blind signing required" errors: Double-check that blind signing is enabled in the app settings on the device itself.
  • Connection failures: Make sure no other application (e.g. Ledger Live) is holding the USB connection to your device.