# @decidio/verify 中文文档

规范地址：https://npmcn.com/package/%40decidio/verify/

版本：0\.13\.2
npm 元数据更新时间：2026-10-31T22:32:37.004Z
中文译文更新时间：2026-10-31T22:50:19.765Z
软件包许可：Apache-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40decidio/verify
原文对照：https://npmcn.com/package/%40decidio/verify/?lang=original
项目主页：https://decidioai.com/receipt-spec/

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

- 包体积（解压后）：66.2 kB，7 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20\.6
- 运行依赖：0 个
- 首次发布：2026-08-28T21:44:58.289Z
- 最新版本发布：2026-10-31T22:32:36.819Z
- 已发布版本数：39（近 12 个月 39 个）

## 中文简介

独立的，零依赖的Decidio权威收据验证器（W3C VC, Ed25519 did:key）。验证密封收据的签名+内容绑定+离线链订单-不依赖于Decidio。 `npx @decidio/verify receipt.json`.

## 安装

```sh
npm install @decidio/verify
```

也可以使用：`pnpm add @decidio/verify`、`yarn add @decidio/verify`、`bun add @decidio/verify`

## README

# @decidio /验证

**独立的，零依赖的决定授权收据验证器。** 验证密封收据的签名、内容绑定和链单 **离线-没有Decidio依赖**． 你只能用供应商的软件来验证的记录并不是真正拥有的；这就是为什么“客户拥有记录”这句话是真的，而不是夸夸其谈。

```bash
# A receipt from Decidio's hosted service: no flag needed - the trust anchor is built in.
npx @decidio/verify receipt.json
npx @decidio/verify r1.json r2.json r3.json      # each + the chain order (one issuer end to end)

# Any other issuer (a self-hosted Decidio): pin its DID yourself - take it from that host's
# <api>/api/did, never from the receipt. An explicit --issuer always wins over the built-in anchor.
npx @decidio/verify --issuer did:key:z6Mk… receipt.json

# A structural check only is a named choice, and its verdict carries the UNPINNED warning:
npx @decidio/verify --allow-unpinned receipt.json
```

**每次运行首先打印其信任锚** -判决被钉在发行人身上，以及在哪里 来自(`--issuer`，或者 `built in: Decidio hosted service, decidio-api.onrender.com`）. 这个 内置列表(`KNOWN_ISSUERS`（导出）包含一个条目：托管服务的颁发者， `did:key:z6MkmLGeR5NjJ87a1yU5ygqju49CtnUrt38esqM54Y9tXnKq`，出版于 [https://decidio-api.onrender.com/api/did](https://decidio-api.onrender.com/api/did)． 没有 `--issuer`，即指定任何其他开票人的收据 拒绝了（出口2）的补救办法：收据自己的 `issuer` Field是一种主张，而不是信任的锚， 所以验证者永远不会锁定它。这个列表是故意的 **不** 包括验证工具包 已发布的示例发行者——它的私钥是公开的，因此信任它可以验证伪造。

### VALID是什么意思（在编写退出代码之前先阅读）

验证回答两个独立的问题，其中只有一个是免费的：

-   **该文件内部是否一致且未被修改？** 回答与 `--allow-unpinned`.
-   **是由您期望的一方签发的吗？** 由信任主播回答-内置的决定 发行人，或者你用的那个 `--issuer`.

由……签字的收据 **自发的关键** 内部是一致的，所以是未固定的支票 报告 `VALID` 并退出 `0` ——没错，因为没人问 _谁_ 签署了它。这是 为什么命令行从来不会脱机运行，除非你说 `--allow-unpinned`一份完全伪造的外部审查 这样的收据和出口密码表明可以。一个 锻造pair甚至报告一个完整的链：一个链证明链接成立，而不是起源。所以 `decidio-verify receipts/*.json && promote` 只促进由信托锚发出的收据 打印运行;错误的签名者退出非零，将问题命名为颁发者，而不是将责任归咎于 内容。

```ts
import { verifyReceipt, verifyChain } from "@decidio/verify";
const r = verifyReceipt(vc);   // { valid, issuer, contentBound, recordId, reason? }
```

## 它检查什么（脱机，仅使用收据中的公共DID）

1.  **内容绑定** ——re-derives `sha256((prevHash||"") + recordCanonical)` 确认它等于带符号的 `contentHash`，因此签名提交到实际内容（防篡改）。
2.  **签名** -验证W3C数据完整性证明(`DataIntegrityProof`, cryptosuite `eddsa-jcs-2022`， Ed25519 via `did:key`)超过整个收据：签名输入为 `SHA-256(JCS(proof options))` 紧随其后的是 `SHA-256(JCS(receipt without proof))`,每 [数据完整性EdDSA加密套件v1.0](https://www.w3.org/TR/vc-di-eddsa/) §3.3。 验证只需要SHA-256， Ed25519， base58和RFC 8785 -没有JSON-LD，没有上下文 抓取，没有DID解析，没有网络。 _在2026-08-04之前密封的收据在名称下带有预标准的Decidio格式 `eddsa-2022`;这些文件会被拒绝，并有明确的理由，不会被报告为被篡改。_
3.  **链** （`verifyChain`) -每张收据 `prevHash` 链接到先验 `contentHash`，并且每个收据都独立验证。

签名+内容+链验证 **离线**． 撤销/状态是一个单独的、网络绑定的检查——收据是篡改证据，而不是活动检查。

## 一个政策检查，证明与印章(`verifyCheckEntry`）

一份代理收据的密封记录清楚地写明了保单的名称 **决定** 请求 （`authority.decidingPolicies`：每一个阻止它的政策，或者每一个把它发给一个人的政策， 否则——每一项通过的政策——只有第一个)，并承诺 **每一个** 检查它的策略 只有一个根(`authority.checkCommitment`、算法 `decidio.check-merkle.v1`)两者皆非 哪些政策，多少政策。Decidio将他们可能看到的每张支票——事实、一份盐和一份 证明——任何人都可以根据收据离线确认：

```ts
import { verifyCheckEntry } from "@decidio/verify";
const r = verifyCheckEntry(vc, { entry, salt, proof }, "did:key:z6Mk…"); // { valid, policyId, result, reason? }
```

它首先验证收据（当您通过发行者时固定），然后折叠条目的叶子 `SHA-256(salt ‖ JCS(entry))` -通过其证明的五个兄弟哈希，每个节点 `SHA-256(0x01 ‖ min ‖ max)`，并将结果与密封的根进行比较。32个叶子是 条目和记录的键填充，排序，所以证明的长度和位置没有说明如何 检查了许多政策。有效条目证明了一个策略对该请求的结论 没有其他的。在Decidio承诺其支票之前密封的收据没有根和 是这样报道的。

## 整张支票，证明是完整的(`verifyCheckComplete`）

条目证明它在承诺中；它不能证明没有其他条目被遗漏。为此, 决定手 **工作空间的管理** -谁可以看到每一个政策，所以是显示每一个条目- 记录的 **完整性的关键**：该记录的填充键，而不是其他记录的填充键。有了它, 完整的列表将重建密封根目录：

```ts
import { verifyCheckComplete } from "@decidio/verify";
// `check` is the admin's answer from GET /api/records/:id/check: { entries, completenessKey, … }
const r = verifyCheckComplete(vc, check, "did:key:z6Mk…"); // { valid, count, policyIds, reason? }
```

它验证收据，计算每个条目的叶子，加上32−k的pad `HMAC-SHA256(completenessKey, JCS([i]))` 对于I = 0,1，…，对32个叶子进行排序并重建树。 只有当根是密封的根时，它才有效：条目被遗漏、添加、给出两次或更改； 或者一个错的键，根键就会移动。键告诉它的持有者有多少个策略检查了请求， 这就是为什么迪迪奥只把它交给行政部门。一个只有 `verifyCheckEntry` 与之前完全一样检查相同的收据条目：对它来说，一个pad只是一个兄弟散列。

`verifyCheckEntry` 和 `verifyCheckComplete` 只存在于这个TypeScript包中；Python验证器 还没有。

## 奇偶校验

Python验证器进入 `decidio[verify]` （`python -m decidio.verify`）. 两个验证器都接受 **相同** 真正的Decidio密封-在跨语言一致性套件中得到验证。零依赖 `node:crypto` (TS) / `cryptography` (Python)。

## 常见问题

### @decidio/verify 是什么？

独立的，零依赖的Decidio权威收据验证器（W3C VC, Ed25519 did:key）。验证密封收据的签名\+内容绑定\+离线链订单-不依赖于Decidio。 npx @decidio/verify receipt\.json\.

### 如何安装 @decidio/verify？

在项目目录运行 npm install @decidio/verify，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 decidio-verify，可以用 npx decidio-verify 直接运行。

### @decidio/verify 支持 TypeScript 吗？

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

### @decidio/verify 支持 ESM 还是 CommonJS？

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

### @decidio/verify 需要什么版本的 Node\.js？

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

### @decidio/verify 可以商用吗？

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

### @decidio/verify 还在维护吗？

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

