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
-
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.
-
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.
-
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.rulesinto/etc/udev/rules.d/, then runsudo udevadm control --reload-rulesand replug your Ledger. -
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);
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.