Trusted evidence pack verification library and CLI for MoonBit.
Dependencies

| 输入 | 交付物 | 复核结果 |
|---|---|---|
| 文件目录 | manifest.json、files/、规范摘要 | 通过,或定位到发生变化的文件 |
| 现有证据包 | 结构化报告、退出码、可读诊断 | 文件变化、清单冲突、版本异常 |
| 外部锚点 | 账本摘要或归档摘要 | 当前证据包和既有记录是否一致 |
flowchart LR
A["原始文件"] --> B["创建证据包"]
B --> C["文件清单"]
B --> D["稳定摘要"]
D -.-> E["归档或链上锚点"]
C --> F["重新验证"]
E -.-> F
F -->|一致| G["通过"]
F -->|发生变化| H["定位文件"]cd showcase
npm ci
npm run dev
git clone https://github.com/wenlittle/MoonEvidence.git
cd MoonEvidence
moon build --target js
$cli = "_build/js/debug/build/src/cmd/main/main.js"
# 验证仓库内的完好样例
node $cli verify examples/valid-pack
# 创建一份新的证据包
$pack = Join-Path $env:TEMP "moon-evidence-review-pack"
Remove-Item -Recurse -Force $pack -ErrorAction SilentlyContinue
node $cli pack examples/valid-pack/files -o $pack --subject-id review --json
node $cli verify $pack
# 修改一个文件并重新验证
Add-Content "$pack/files/a.txt" "tamper"
node $cli explain $packmoon add starlittle/MoonEvidenceimport {
"starlittle/MoonEvidence/src/create",
"starlittle/MoonEvidence/src/diag",
"starlittle/MoonEvidence/src/digest",
"starlittle/MoonEvidence/src/verify",
}fn main {
let files : Map[String, Bytes] = {
"files/report.txt": b"reviewed result",
"files/config.json": b"{\"model\":\"v1\"}",
}
let options : @create.CreateOptions = {
subject: { id: "release-001", kind: "ai-output" },
algorithm: @digest.Sha256,
version_id: "v1",
version_parent: None,
}
let manifest = @create.create_manifest(files, options)
let report = @verify.verify_manifest(manifest, files)
println(@diag.explain(report))
}moon run examples/quickstartverification OK
checked 2 files, 2 passed; merkle root verified; 0 errors, 0 warningsverification FAILED
[E2003] files/a.txt: digest mismatch, expected sha256:a948... got sha256:7509...
checked 2 files, 1 passed; merkle root verified; 1 error, 0 warnings| 用户结果 | 实现方式 |
|---|---|
| 同一内容得到稳定记录 | RFC 8785 规范 JSON;证据包使用 SHA-256 或 SHA-512 |
| 共享密钥场景可以认证字节 | 摘要库单独提供 HMAC-SHA256,不进入 manifest 算法字段 |
| 多文件状态可以整体复核 | RFC 6962 风格 Merkle 根;包含性证明作为独立 API 产物 |
| 变化可以定位到文件 | 七步验证流程、结构化错误码、可读诊断 |
| 多次发布保留连续历史 | 唯一根节点、无环、无分叉的版本链检查 |
| 自动化工具获得稳定接口 | pack、inspect 的版本化回执,verify 的稳定诊断 JSON 和固定退出码 |
| 操作记录可以继续签名复核 | 哈希链审计日志、纯 MoonBit Ed25519 签名和验签 |
| 同一语义覆盖多种入口 | MoonBit 库、native/wasm/wasm-gc/js、CLI、浏览器工作台 |
本地创建和验证 → 规范摘要 → Fabric Gateway → Chaincode → 交易回执
当前证据包 ← 账本查询 ← 原始摘要| 检查项 | 结果 |
|---|---|
| 网络 | Fabric v3.1.4,Org1 和 Org2,evidencechannel |
| 摘要算法 | 本次协议运行使用 SHA-256;合同同时接受规范 SHA-512 摘要 |
| 发布文件 | starlittle-MoonEvidence-0.5.1.zip,完整 SHA-256 见发布实验记录 |
| Fabric 提交 | 状态 VALID,交易 ID 和区块号见发布实验记录 |
| 跨组织查询 | Org1、Org2 返回同一条原始记录 |
| 文件变化 | 本地复核返回 E2003 |
| 清单重建 | 对照原始账本摘要返回 E2004 |
flowchart TB
subgraph I["使用入口"]
A["网页工作台"]
B["命令行"]
C["MoonBit API"]
end
subgraph M["MoonEvidence"]
D["证据包创建"]
E["规范清单和稳定摘要"]
F["验证和诊断"]
end
subgraph X["外部系统"]
G["本地文件"]
H["归档系统"]
J["Hyperledger Fabric"]
end
G --> D
A --> F
B --> D
B --> F
C --> D
C --> F
D --> E
E --> F
E -.摘要.-> H
E -.摘要.-> J
H -.锚点.-> F
J -.锚点.-> F| 证据 | 当前基线 | 来源 |
|---|---|---|
| MoonBit 测试 | 357 个测试声明,353 个可执行测试,4 个基准包装 | 结果记录 |
| 独立参考 | 4 条 RFC 8032 样例、150 条 Google Wycheproof Ed25519 向量、仓库内不调用 MoonBit 代码的 Node.js 摘要和 Merkle oracle | 测试计划 |
| 故障注入 | 18/18 个实现故障被现有测试捕获 | 门禁脚本 |
| 多后端 | native、wasm、wasm-gc、js 进入 CI 检查;CLI PowerShell/bash 各 68/68 | CI |
| 浏览器 | 12 个 MoonBit API 共用 Web Worker,并由 smoke、异常输入和语义属性检查覆盖 | 展示说明 |
| Fabric 适配器 | Chaincode 82.1% 语句覆盖,Gateway 19/19,required CI 持续执行 | 结果记录 · CI |
| Fabric 协议 | v0.5.1 发布包、双组织提交、跨组织查询、幂等重复和摘要回传已留存 | 发布实验记录 |
| MoonBit 源码 | 14,977 行(实现 6,547 + 测试 8,430),12 个产品包和 1 个原生计时工具包 | 结果记录 |
| 任务 | 文档 |
|---|---|
| 开始使用 | 用户指南 · 网页说明 · 演示脚本 |
| 理解设计 | 架构文档 · 开发报告 · 证据包规范 |
| 接入系统 | CLI 契约 · Fabric 规范 · Fabric 指南 |
| 检查质量 | 测试计划 · 测试治理 · 验收清单 |
| 维护项目 | 项目索引 · 决策记录 · 路线图 |
Trusted evidence pack verification library and CLI for MoonBit.
Dependencies