# @bitcoinerlab/miniscript 中文文档

规范地址：https://npmcn.com/package/%40bitcoinerlab/miniscript/

版本：2\.0\.1
npm 元数据更新时间：2026-11-05T12:35:40.689Z
中文译文更新时间：2026-11-08T04:09:42.395Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40bitcoinerlab/miniscript
原文对照：https://npmcn.com/package/%40bitcoinerlab/miniscript/?lang=original
项目主页：https://bitcoinerlab.com/modules/miniscript
源码仓库：https://github.com/bitcoinerlab/miniscript

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

- 包体积（解压后）：138 kB，22 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2022-12-25T10:12:25.697Z
- 最新版本发布：2026-11-05T12:35:40.464Z
- 近 30 天下载量：130389（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：16（近 12 个月 2 个）

## 中文简介

比特币Miniscript,一种用于描述比特币消费条件的高级语言. 它包括一名编译员/分析员,并配有一名征兆员--agnostic satisfier,可以产生象征性的证人(例如: " sig(key) " ).

## 安装

```sh
npm install @bitcoinerlab/miniscript
```

也可以使用：`pnpm add @bitcoinerlab/miniscript`、`yarn add @bitcoinerlab/miniscript`、`bun add @bitcoinerlab/miniscript`

## README

# 比特币最小标记

小写是一种结构化的,人性化的表达比特币支出的方式 条件,使脚本更容易解释和分析,同时提供 保证安全 围绕花费行为.

此软件包提供了一个用于编译和分析的 TypeScript 执行 小型标语和用于证人(支出交易必须提供的数据) 提供以解锁输出). 占卜者是可知的标志者 使用占位符等符号式证人堆栈 `<sig(key)>` 和图像 标记,这样你就可以解释没有私钥的满足.

## 安装

要安装软件包, 请使用 npm :

```bash
npm install @bitcoinerlab/miniscript
```

## 使用量

您可以使用在线游乐场演示来测试本节中的实例 [https://bitcoinerlab.com/modules/miniscript. 互联网档案馆的存檔,存档日期2014-12-11](https://bitcoinerlab.com/modules/miniscript)。 。 。 .

### 将政策编译为小写和比特币脚本

政策是描述开支的更高级、人能读取的语言 条件(例如:和/或条款、时间间隔和密钥检查)。 政策 编译由配套软件包提供 [`@bitcoinerlab/miniscript-policies`](https://github.com/bitcoinerlab/miniscript-policies)。 。 。 .

```javascript
const { ready, compilePolicy } = require('@bitcoinerlab/miniscript-policies');
await ready;

const policy = 'or(and(pk(A),older(8640)),pk(B))';
const { miniscript } = compilePolicy(policy);
```

### 将迷你文字编入比特币脚本

要将 Miniscript 编译为 Bitcoin ASM, 您可以使用 `compileMiniscript` 函数 :

```javascript
const { compileMiniscript } = require('@bitcoinerlab/miniscript');

const miniscript = 'and_v(v:pk(key),or_b(l:after(100),al:after(200)))';
const { asm } = compileMiniscript(miniscript);
```

### 生成脚本证人

从 Miniscript 生成脚本证人, 您可以使用 `satisfier` 函数.

这个 `satisfier` 运行最小标记 [静态类型 系统](https://bitcoin.sipa.be/miniscript/) 分析时抛出 小标语不是正常的。 正常的小标语遵循共识和标准 规则:它避免可移动的仅限路径(更多在后期),不混合 单个分支上的时锁单元,不包含重复的密钥.

证人以象征性形式(例如:, `<sig(key)>`, (中文(简体) ), `<sha256_preimage(H)>`),所以即使没有签名,也可以分析解决方案:

```javascript
const miniscript =
  'c:or_i(andor(c:pk_h(key1),pk_h(key2),pk_h(key3)),pk_k(key4))';

const { nonMalleableSats } = satisfier(miniscript);
```

在上述例子中 `nonMalleableSats` 为:

```javascript
nonMalleableSats: [
  {asm: "<sig(key4)> 0"}
  {asm: "<sig(key3)> <key3> 0 <key1> 1"}
  {asm: "<sig(key2)> <key2> <sig(key1)> <key1> 1"}
]
```

,在递增的重量单位大小中命令满足,因此可以 选择最小的证人,并支付较少的费用.

何况 `asm`,返回的溶液可能带有时间锁要求,当 需要:

```typescript
{
  asm: string;
  nSequence?: number;
  nLockTime?: number;
}
```

如果解决方案包括 `nSequence` 或者说 `nLockTime`,支出交易必须 将这些字段设置在输入或交易级别(CSV使用) `nSequence` 百分比 输入; CLTV 使用 `nLockTime` (b) 为交易提供方便).

**处理可溶性**

SegWit消除了经典的txid可容性,但目击者可容性仍然 已存在: 开支可以有多个有效的证人堆栈, 保存 txid 在修改交易权重和收费标准的同时,保持不变。 攻击者可以 将一个有效的证人换成另一个证人,使交易规模大或小, 可能会影响收费政策或集资接受。 因此,宰相 将不可调解的解决方案(稳定、独特的证人)与可调解的解决方案分开 (可改变重量的替代有效证人). **只使用不可调用 建造花费时设定.**

```javascript
const { malleableSats, nonMalleableSats } = satisfier(miniscript);
```

**管理满意度 增长**

有些脚本可以产生许多满意,可以进行计算 昂贵甚至不可行 为了保持这种可控性, 萨提斯菲勒执行 默认上限 `1000` 解决方案。 上限计算所有衍生解决方案,包括: 中间组合和投掷一度超过. 你可以举起它 或以 `satisfier(miniscript, { maxSolutions: null});`。 。 。 .

然而,建议避免指数性爆炸的方法是利用 `unknowns`。通过 `unknowns` 与非信息块 现有,例如, `<sig(key)>` 签名或预想标记 `<ripemd160_preimage(H)>`。 。 。 .

例如:

```javascript
const miniscript =
  'c:or_i(andor(c:pk_h(key1),pk_h(key2),pk_h(key3)),pk_k(key4))';
const unknowns = ['<sig(key1)>', '<sig(key2)>'];

const { nonMalleableSats, malleableSats } = satisfier(miniscript, { unknowns });
```

生产:

```javascript
nonMalleableSats: [
  {asm: "<sig(key4)> 0"}
  {asm: "<sig(key3)> <key3> 0 <key1> 1"}
]
```

和抛弃物:

```javascript
{
  asm: '<sig(key2)> <key2> <sig(key1)> <key1> 1'
}
```

作为参考, `multi(2,key1,...,key20)` 产生190项满意度和 在笔记本电脑上用大约200ms完成,同时 `multi(4,key1,...,key20)` 产量 4,845次满意,需要6秒左右.

如果只知道6个签名,则查核结果将达到15个满意(`C(6,4) = 15`并且几乎马上完成.

改为 `unknowns`,用户可选择提供互补 参数 `knowns`数字 : `satisfier(miniscript, { knowns })`。这一论点 对应已知唯一一条信息。 这很重要 说明 `knowns` 或者说 `unknowns` 必须提供,但不能同时提供。 若为 既不提供论据 也不认为所有签名和预想 已经知道.

建模对手时,包括 `knowns` 一切攻击者可能 不仅拥有你自己的秘密 如果你留下攻击者的材料 `knowns`,你可以错误地将可移动路径归类为安全路径. 安全图案 包括所有攻击者可获得的材料 `knowns`选择一个 仅使用自己材料的不适性满足.

为调试或教育目的,您可以计算丢弃的未知数据 通过设定满足 `computeUnknowns: true`。这个集合 `unknownSats` 包含未知数据的解决方案:

```javascript
const { nonMalleableSats, unknownSats } = satisfier(miniscript, {
  unknowns,
  computeUnknowns: true
});

nonMalleableSats: [
  {asm: "<sig(key4)> 0"}
  {asm: "<sig(key3)> <key3> 0 <key1> 1"}
]
unknownSats: [ {asm: "<sig(key2)> <key2> <sig(key1)> <key1> 1"} ]
```

默认 `computeUnknowns` 被禁用,以控制解决方案的数量,所以 未知的满意程度被压抑 `unknownSats` 未返回.

### 标签上下文

最小标记的有效性取决于脚本上下文. 有两条关键规则 更改:

1.  `MINIMALIF` 是共识,所以 `d:X` 包装成为单位.
2.  多相图用途 `multi_a` (CHECKSGRADD) 而不是说 `multi` (CHECKMULTISIG) (CHECMULTISIG) (中文(简体) ).

因为Satisfier先运行静态分析器 你必须通过 `tapscript: true` 使用自定义小标记工作时:

```javascript
const miniscript = 'multi_a(2,key1,key2,key3)';
const { nonMalleableSats } = satisfier(miniscript, { tapscript: true });
```

有些脚本只在脚本下正常. 譬如说, `and_v(v:pk(key1),or_d(d:v:1,pk(key2)))` 在 SegWit v0 (P2WSH) 中不是正常的, 但它在脚印上变得有效,因为 `d:v:1` 下为单位 `MINIMALIF`。 。 。 .

## TL; DR; 建议使用

-   打电话 `analyzeMiniscript` (或检查) `issane` 从 `compileMiniscript`改为: 在证人到来之前,确保小写正常.
-   在花费时,建造证人 **仅限** 从 `nonMalleableSats`。 。 。 .
-   处理 `malleableSats` (和 `unknownSats` 当启用时)作为诊断和 永远不要用它们来生产.

提示: 使用 `unknowns`编号 :`knowns` 保持满足感,特别是 multi(4,20) 风格的脚本(参见"管理满意度增长"). 启用 `computeUnknowns` 只检查丢弃的解决方案.

## 作者和贡献者

该项目最初是开发的,目前由 [何塞-路易斯·兰达巴索](https://github.com/landabaso)欢迎其他开发者的贡献和帮助.

以下是一些帮助您开始捐款的资源:

### 从源头建楼

要下载源代码并构建项目,请遵循这些步骤:

1.  清除仓库 :

```
git clone https://github.com/bitcoinerlab/miniscript.git
```

2.  安装依赖性 :

```
npm install
```

3.  构建工程 :

```
npm run build
```

4.  运行测试套件 :

```
npm test
```

这将构建工程并生成必要的文件 `dist` 目录.

### 文档

为了生成程序员的文档,其中描述了库的编程接口,使用以下命令:

```
npm run docs
```

这将生成文件 `docs` 目录.

### 测试

在实施任何代码之前,确保通过运行来通过所有测试:

```
npm run tests
```

## 许可证

这个项目根据麻省理工学院的许可证获得许可.

## ++ 支持者

BitcoinerLAB项目得到下列机构的自豪支持: [打开卫星](https://opensats.org/) 组织.

[![OpenSats logo](https://raw.githubusercontent.com/bitcoinerlab/.github/main/profile/assets/opensats.svg)](https://opensats.org/)

## 常见问题

### @bitcoinerlab/miniscript 是什么？

比特币Miniscript,一种用于描述比特币消费条件的高级语言\. 它包括一名编译员/分析员,并配有一名征兆员--agnostic satisfier,可以产生象征性的证人\(例如: " sig\(key\) " \)\.

### 如何安装 @bitcoinerlab/miniscript？

在项目目录运行 npm install @bitcoinerlab/miniscript，或使用 pnpm add / yarn add / bun add。

### @bitcoinerlab/miniscript 支持 TypeScript 吗？

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

### @bitcoinerlab/miniscript 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @bitcoinerlab/miniscript 可以商用吗？

@bitcoinerlab/miniscript 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @bitcoinerlab/miniscript 的下载量有多少？

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

### @bitcoinerlab/miniscript 还在维护吗？

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

