# @exodus/ledger-bitcoin 中文文档

规范地址：https://npmcn.com/package/%40exodus/ledger-bitcoin/

版本：0\.3\.0-exodus\.0
npm 元数据更新时间：2026-10-06T21:00:55.852Z
中文译文更新时间：2026-11-14T03:59:37.403Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40exodus/ledger-bitcoin
原文对照：https://npmcn.com/package/%40exodus/ledger-bitcoin/?lang=original
项目主页：https://github.com/ExodusMovement/ledger-live/tree/master/packages/ledger-bitcoin
源码仓库：https://github.com/ExodusMovement/ledger-live

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：78 kB，29 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=14
- 运行依赖：3 个
- 首次发布：2023-12-05T20:48:42.856Z
- 最新版本发布：2026-06-24T18:57:09.039Z
- 近 30 天下载量：15730（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：11（近 12 个月 2 个）

## 中文简介

Ledger 硬件钱包比特币应用程序客户端

## 安装

```sh
npm install @exodus/ledger-bitcoin
```

也可以使用：`pnpm add @exodus/ledger-bitcoin`、`yarn add @exodus/ledger-bitcoin`、`bun add @exodus/ledger-bitcoin`

## README

# Ledger 比特币应用程序客户端

## 概览

Ledger 比特币应用程序的TypeScript客户端. 支持应用程序2.1.0及以上版本.

主要储存和文件: [https://github.com/LedgerHQ/app-bitcoin-new 页面存档备份,存于互联网档案馆](https://github.com/LedgerHQ/app-bitcoin-new)

以835245ee9dd93f7f8aa6f2bdf16a7002059cb94d标价

## 安装

```bash
$ yarn add ledger-bitcoin
```

或者如果你喜欢使用 npm:

```bash
$ npm install ledger-bitcoin
```

## 大楼

```bash
$ yarn

$ yarn build
```

## 开始

以下示例显示了《公约》的所有主要方法: `Client`'是接口.

测试 `signPsbt` 方法需要有效的 PSBT,并提供相应的钱包策略;在下面的例子中默认跳过它.

```javascript
import { AppClient, DefaultWalletPolicy, WalletPolicy } from 'ledger-bitcoin';
import Transport from '@ledgerhq/hw-transport-node-hid';

// This examples assumes the Bitcoin Testnet app is running.
// Make sure to use addresses compatible with mainnet otherwise, by using paths where the BIP-44 coin_type
// is "0'" and not "1'".

async function main(transport) {
    const app = new AppClient(transport);

    // ==> Get the master key fingerprint
    const fpr = await app.getMasterFingerprint();
    console.log("Master key fingerprint:", fpr.toString("hex"));

    // ==> Get and display on screen the first taproot address
    const firstTaprootAccountPubkey = await app.getExtendedPubkey("m/86'/1'/0'");
    const firstTaprootAccountPolicy = new DefaultWalletPolicy(
        "tr(@0/**)",
        `[${fpr}/86'/1'/0']${firstTaprootAccountPubkey}`
    );

    const firstTaprootAccountAddress = await app.getWalletAddress(
        firstTaprootAccountPolicy,
        null,
        0,
        0,
        true // show address on the wallet's screen
    );

    console.log("First taproot account receive address:", firstTaprootAccountAddress);

    // ==> Register a multisig wallet named "Cold storage"

    const ourPubkey = await app.getExtendedPubkey("m/48'/1'/0'/2'");
    const ourKeyInfo = `[${fpr}/48'/1'/0'/2']${ourPubkey}`;
    const otherKeyInfo = "[76223a6e/48'/1'/0'/2']tpubDE7NQymr4AFtewpAsWtnreyq9ghkzQBXpCZjWLFVRAvnbf7vya2eMTvT2fPapNqL8SuVvLQdbUbMfWLVDCZKnsEBqp6UK93QEzL8Ck23AwF";

    const multisigPolicy = new WalletPolicy(
        "Cold storage",
        "wsh(sortedmulti(2,@0/**,@1/**))", // a 2-of-2 multisig policy template
        [
            otherKeyInfo, // some other bitcoiner
            ourKeyInfo,   // that's us
        ]
    )

    const [policyId, policyHmac] = await app.registerWallet(multisigPolicy);

    console.log(`Policy hmac: ${policyHmac.toString("hex")}. Store it safely (together with the policy).`);

    console.assert(policyId.compare(multisigPolicy.getId()) == 0)  //  should never fail

    // ==> Derive and show an address for "Cold storage" that was just registered

    const multisigAddress = await app.getWalletAddress(multisigPolicy, policyHmac, 0, 0, true);
    console.log(`Multisig wallet address: ${multisigAddress}`);

    // ==> Sign a psbt

    // TODO: set a wallet policy and a valid psbt file in order to test psbt signing
    const psbt = null; // a base64-encoded psbt, or a binary psbt in a Buffer
    const signingPolicy = null; // an instance of WalletPolicy
    const signingPolicyHmac = null; // if not a default wallet policy, this must also be set
    if (!psbt || !signingPolicy) {
        console.log("Nothing to sign :(");
        await transport.close();
        return;
    }

    // result will be a list of triples [i, partialSig], where:
    // - i is the input index
    // - partialSig is an instance of PartialSignature; it contains a pubkey and a signature,
    //   and it might contain a tapleaf_hash.
    const result = await app.signPsbt(psbt, signingPolicy, signingPolicyHmac);

    console.log("Returned signatures:");
    console.log(result);

    await transport.close();
}

Transport.default.create()
    .then(main)
    .catch(console.log);
```

## 常见问题

### @exodus/ledger-bitcoin 是什么？

Ledger 硬件钱包比特币应用程序客户端

### 如何安装 @exodus/ledger-bitcoin？

在项目目录运行 npm install @exodus/ledger-bitcoin，或使用 pnpm add / yarn add / bun add。

### @exodus/ledger-bitcoin 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @exodus/ledger-bitcoin 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @exodus/ledger-bitcoin 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=14。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @exodus/ledger-bitcoin 可以商用吗？

@exodus/ledger-bitcoin 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @exodus/ledger-bitcoin 的下载量有多少？

根据 npm 官方下载统计，@exodus/ledger-bitcoin 在 2026/10/14 – 2026/11/12 这 30 天内被下载 15,730 次，日均约 524 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @exodus/ledger-bitcoin 还在维护吗？

最新版本 0\.3\.0-exodus\.0 发布于 2026/06/25（4 个月前）；至今共发布 11 个版本，其中过去 12 个月发布了 2 个；首次发布于 2023/12/06。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

