# @fairdatasociety/bmt-js 中文文档

规范地址：https://npmcn.com/package/%40fairdatasociety/bmt-js/

版本：2\.1\.0
npm 元数据更新时间：2026-11-09T14:18:14.462Z
中文译文更新时间：2026-11-14T09:01:32.989Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40fairdatasociety/bmt-js
原文对照：https://npmcn.com/package/%40fairdatasociety/bmt-js/?lang=original
项目主页：https://github.com/fairDataSociety/bmt-js#readme
源码仓库：https://github.com/fairDataSociety/bmt-js

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

- 包体积（解压后）：787 kB，35 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2022-03-25T10:40:32.660Z
- 最新版本发布：2023-07-07T09:13:15.384Z
- 近 30 天下载量：26894（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 0 个）

## 中文简介

二进制墨克勒 数据上的树形操作

## 安装

```sh
npm install @fairdatasociety/bmt-js
```

也可以使用：`pnpm add @fairdatasociety/bmt-js`、`yarn add @fairdatasociety/bmt-js`、`bun add @fairdatasociety/bmt-js`

## README

# BMT-JS 导弹

这个 JavaScript 库确实有 [二进制默克勒树](https://en.wikipedia.org/wiki/Merkle_tree) (BMT)数据操作.

库会计算出任何数据的内容地址,同时也提供功能,用于执行其中任何32个字节的廉价紧凑包含证明.

# 安装

```sh
npm install @fairdatasociety/bmt-js --save
```

# 如何运作

首先,它把数据分成 `chunks` 默认拥有最大4KB有效载荷的,但这一条件及其 `span` 字节长度( 8 字节) , 表示字节有效载荷包含在块下多久 .

如果有效载荷字节长度不能完全与这个块分割相匹配,则最右块的数据会被零相加以得到BMT操作的固定长度数据.

还需要这一基本单位有效分发与分散储存系统有关的数据 _有理可辩_, (中文(简体) ), _垃圾收集_, (中文(简体) ), _负载平衡_ 还有别的. 详情请访问 出现了沼泽 完全执行这一逻辑的网页.

使用的散列算法是 `keccak256` 函数导致32字节长 `segment`。 。 。 .

在块数据上执行 BMT 散列将定义 `BMT root hash` 的块. 出于完整性考虑 BMT 根散列由从左边取取出块的相间被散列 `Chunk address`。 。 。 .

![BMT Hashing](https://npmcn.com/package/%40fairdatasociety/bmt-js/docs/bmt-hashing.png)

为了参考同样具有单一32字节段的文件,有效载荷的块地址必须采用同样的方式,直至 `File address`数字 :

块可以默认地将128个块地址封装在随后的 BMT 树级上. 这种块叫做 `Intermediate chunks` 由 BMT 树的属性,块将结束于 `Root chunk` 是指以下所有块(直接或间接地),其地址是: `File address` 还有.

人们可以意识到,BMT水平可以在最右边有一个孤儿块,不能用邻居块来散开,因为它没有邻居块(例如129/129块). 当它发生时,它没有感想将这个孤儿块散放在每个BMT级别上,因为它将用零数据被BMT散去. 这就是为什么算法处理孤儿块作为 `Carrier chunk` 并尝试将其放入BMT树级,其中块地址可以被封入其他地址.

数据的这种 BMT 散列允许引用任何名为32 字节独有地址的文件 _地址内容_。 。 。 .

![File BMT calculation](https://npmcn.com/package/%40fairdatasociety/bmt-js/docs/file-bmt.png)

尽管如此,它也允许进行轻量级 _紧凑的包含证明_ 数据. 这种证明要求提供的数据数量很少,以证明文件地址下是否有特定部分(32字节)的数据.

这个特性可以围绕32字节文件地址引用的数据创建逻辑,数据段值必须满足一些条件. 可通过执行验证功能的智能合同,检查所提供的验证功能,实现这方面的第一个/最佳使用案例 `inclusion proof segments` 实际包含在已承诺的文件引用中.

为了获得这些包含区段,库从BMT树上收集所有所需的区段,用于输入智能合同验证参数.

![Inclusion proof](https://npmcn.com/package/%40fairdatasociety/bmt-js/docs/inclusion-proof.png)

# API 密码

您可以直接从 : `@fairdatasociety/bmt-js`数字 :

## 类型

-   用于在块数据上执行 BMT 动作的 Chunk # 帮助对象接口
    -   有效载荷 # 物体初始化时所经过的字节有效载荷.
    -   最大负载 Length # 最大负载字节长度 。 这是4096 默认.
    -   basinLength # 为周期序列化保留的字节长度 。 默认是8字节.
    -   数据( ) # 返回该块的数据 `maxPayloadLength` 长
    -   横跨 () # 块的序列化横跨值
    -   地址( ) # 返回数据计算出的块地址
    -   包含 Proof( sectionIndex) # 给回用于在给定索引下校正该段的包含证明段 .
    -   bmt () # 将块数据的二进制墨克勒树还原
-   被截断 在文件数据上执行 BMT 动作的帮助对象的文件 # 接口
    -   有效载荷 # 物体初始化时所经过的字节有效载荷.
    -   叶春克 () # 文件数据块
    -   rootChunk () # 文件 BMT 中最上块
    -   地址( ) # 返回文件数据计算出的块地址
    -   横跨 () # 文件的序列化横跨值
    -   bmt () # 返回文件数据的 二进制墨克勒树
-   Chunk 包含 Proof # group 块块块块块 块块块块块的跨值
-   ChunkAddress # 块地址来自 BMT 散列数据。 它也被使用 Fole 文件地址
-   Span # 字节格式的跨值 。 显示包含在 Chunk/文件下的数据数量

## 职能

-   切开 文件 # 制作 `Chunk` 文件数据中执行 BMT 动作的帮助对象
-   {\\fn方正粗倩简体\\fs12\\an8\\1cHFFFF00\\b0}让春克来 `Chunk` 在块数据上执行 BMT 动作的帮助对象
-   \# 让序列化 `Span` 表示数据包含在 Chunk/ 文件下的字节数组
-   将SpanValue #去序列化数据输入 `number` 承运人 `Span`
-   rootHash From Including Proof # 从提供的包含验证段及其相应的段索引计算 BMT 根散列
-   获取 BmtIndexOffSpecment # 获取特定有效载荷段指数在 BMT 树上的位置
-   包含 Proof BottomUp # 给回特定有效载荷段索引中所需的姊妹段以进行包含证明
-   file AddressFrom IncludingProof # 还原了仅通过包含证明段和相应的被证明段及其位置来计算出的文件地址.

## 其他对象

-   Utils # 主要字节相关的工具函数

# 汇编

为了编译代码运行

```sh
npm run compile
```

您可以在 `dist` 文件夹.

类型汇编,运行

```sh
npm run compile:types
```

# 测试

测试需要运行Bee客户端节点进行整合测试. 你可以设置 `BEE_POSTAGE` 具有有效邮资批次的环境变量或测试会为您创建一个.

Bee 调试 API 端点的默认值是 `http://localhost:1635`。 。 。 . 如果你的地址有出入,请设置 `BEE_DEBUG_API_URL` 系统环境变量与您的.

运行测试执行

```sh
npm run test
```

## 常见问题

### @fairdatasociety/bmt-js 是什么？

二进制墨克勒 数据上的树形操作

### 如何安装 @fairdatasociety/bmt-js？

在项目目录运行 npm install @fairdatasociety/bmt-js，或使用 pnpm add / yarn add / bun add。

### @fairdatasociety/bmt-js 支持 TypeScript 吗？

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

### @fairdatasociety/bmt-js 支持 ESM 还是 CommonJS？

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

### @fairdatasociety/bmt-js 可以商用吗？

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

### @fairdatasociety/bmt-js 的下载量有多少？

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

### @fairdatasociety/bmt-js 还在维护吗？

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

