npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@nomicfoundation/hardhat-ledger

v3.0.1

Published

Hardhat plugin for the Ledger hardware wallet

Readme

Hardhat Ledger plugin

This plugin allows Hardhat to integrate seamlessly with a connected Ledger wallet.

Note: Currently, EIP-7702 is not supported, as the underlying Ledger library doesn't implement it. A newer library does support EIP-7702, and migration to that library is on our roadmap.

Installation

To install this plugin, run the following command:

npm install --save-dev @nomicfoundation/hardhat-ledger

When using pnpm, you need to include the option --allow-build=node-hid to permit the native build of the node-hid dependency:

pnpm install --save-dev --allow-build=node-hid @nomicfoundation/hardhat-ledger

and add the following statements to your hardhat.config.ts file:

import { defineConfig } from "hardhat/config";

import hardhatLedgerPlugin from "@nomicfoundation/hardhat-ledger";

export default defineConfig({
  plugins: [hardhatLedgerPlugin],
});

Configuring your Ledger accounts

In your hardhat.config.ts file, also add the following property to list the accounts you control via your Ledger device:

import { defineConfig } from "hardhat/config";

export default defineConfig({
  networks: {
    yourNetworkName: {
      type: "edr-simulated",
      ledgerAccounts: [
        // Set your ledger address here
        "0xa809931e3b38059adae9bc5455bc567d0509ab92",
        "0xda6a52afdae5ff66aa786da68754a227331f56e3",
        "0xbc307688a80ec5ed0edc1279c44c1b34f7746bda",
      ],
    },
  },
});

This will make those three accounts available to the Hardhat. If you try to send a transaction or sign something using any of those accounts, the plugin will try to connect to the Ledger wallet and find a derivation path for that address. By default, the derivation paths that are tried start from m/44'/60'/0'/0'/0 and go up to m/44'/60'/20'/0'/0.

An optional derivationFunction configuration allows setting the derivation path, supporting 'legacy' or otherwise non-standard addresses:

import { defineConfig } from "hardhat/config";

export default defineConfig({
  networks: {
    yourNetworkName: {
      type: "edr",
      ledgerAccounts: [...],
      ledgerOptions: {
        derivationFunction: (x) => `m/44'/60'/0'/${x}` // legacy derivation path
      }
    },
  },
});

Usage

To sign transactions with your Ledger, first ensure the appropriate app is open on the device. Then call the desired methods (e.g., eth_sign, eth_sendTransaction). If the sender account matches one of your Ledger accounts, the device will automatically connect, allowing you to review and either approve or decline the transaction.

Usage Example with Viem:

import hre from "hardhat";
import { stringToHex } from "viem";

const { viem } = await hre.network.connect("yourNetworkName");

const ledgerAddress = "0x..."; // Your ledger address

const [senderClient] = await viem.getWalletClients();

const hexMsg = stringToHex("Hello world");

const signature = await senderClient.request({
  method: "eth_sign",
  params: [ledgerAddress, hexMsg],
});

Usage Example with the provider:

import hre from "hardhat";

const { provider, ethers } = await hre.network.connect("yourNetworkName");

const ledgerAddress = "0x..."; // Your ledger address

const msg = ethers.toUtf8Bytes("Hello world");
const hexMsg = ethers.hexlify(msg);

const signature = await provider.request({
  method: "eth_sign",
  params: [ledgerAddress, hexMsg],
});