flowchart LR
A["原始文件"] --> B["创建证据包"]
B --> C["文件清单"]
B --> D["稳定摘要"]
D -.-> E["归档或链上锚点"]
C --> F["重新验证"]
E -.-> F
F -->|一致| G["通过"]
F -->|发生变化| H["定位文件"]
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
文件读写和账本连接停留在入口层,验证核心只接收文本和字节。这个边界让 CLI、浏览器、多后端 CI 和 Fabric 集成保持一致结果,也为部署环境保留独立的权限和密钥管理空间。
MoonEvidence
简体中文 | English
面向文件归档、AI 产物审计和上链存证的可信证据包工具。
MoonEvidence 将一组文件整理成可复核的证据包,生成稳定摘要,并在内容发生变化时定位异常文件。核心能力由 MoonBit 实现,可作为库、命令行工具和浏览器工作台运行;可选的 Hyperledger Fabric 适配器提供先验证、再提交的
anchor-pack流程,账本保存规范摘要和首笔提交上下文,后续再将摘要回传给本地验证器。在线体验 · 开始验证 · 查看五分钟流程
概览
一次 MoonEvidence 流程接收原始文件,输出自包含证据包、规范清单、稳定摘要和结构化验证结果。证据包可以随文件一起归档,摘要可以写入数据库、对象存储或共享账本。
复核时,验证器重新计算文件摘要和 Merkle 根,并检查清单、可选版本链和外部锚点。内容变化会形成带路径和错误码的诊断,脚本可以继续处理同一份机器可读结果。
manifest.json、files/、规范摘要使用场景
数据集归档
发布前固定文件清单、字节长度、摘要和版本关系。资料经过迁移、备份或长期保存后,可以重新验证并定位损坏文件。
AI 产物审计
将模型输出、提示词、配置和评估结果放入同一证据包。交付双方使用同一份清单复核内容,验证报告可以进入自动化审计流水线。
上链存证
本地验证通过后提交规范摘要,文件内容继续保留在链下。后续复核同时检查当前文件和原始链上锚点,清单被重新生成时仍能识别历史不一致。
工作流程
flowchart LR A["原始文件"] --> B["创建证据包"] B --> C["文件清单"] B --> D["稳定摘要"] D -.-> E["归档或链上锚点"] C --> F["重新验证"] E -.-> F F -->|一致| G["通过"] F -->|发生变化| H["定位文件"]证据包保留完整检查信息,外部系统只需保存稳定摘要。两者在复核阶段重新汇合,既能发现文件变化,也能识别重新生成清单后的历史冲突。
快速开始
网页体验
在线首页 展示完整工作流程;验证工作台 可以直接加载内置样例或本地文件;篡改实验 会并列显示单字节变化产生的候选文件摘要、候选 Merkle 根和针对原 manifest 的拒绝结论。
计算过程在浏览器 Web Worker 中完成,调用同一套 MoonBit 编译产物。文件无需上传到服务端。
本地启动需要 Node.js 22、npm 和 MoonBit 工具链:
命令行
本地复现需要 Git 2.40+、Node.js 20+ 和 MoonBit 工具链;首次克隆需要网络连接。下面五分钟路径从工具已经安装、终端已经打开时开始计时。
下面的 PowerShell 命令依次验证完好样例、创建新证据包、修改一个文件,再输出定位结果:
最后一条命令返回退出码
1,并指出files/a.txt的摘要不一致。CLI 的稳定退出码为:0表示成功或验证通过,1表示验证完成并拒绝证据,2表示用法、权限、IO 或目录清单扫描不完整。目录模式会完整扫描files/后再报告未登记文件;create的就地 manifest 通过 manifest 文件路径复核,归档交付使用pack。完整命令、批量模式和故障排查见用户指南。
MoonBit 接入
Mooncakes 已发布
starlittle/MoonEvidencev0.5.1:在应用的
moon.pkg中导入需要的包:创建清单后可以直接使用同一组内存文件完成验证:
MoonBit 结构体字段
SubjectInfo.kind会写入 manifest 的subject.type;kind用于避开 MoonBit 关键字。仓库中的完整示例可以直接运行,它会依次创建清单、验证原始文件,再确认修改后的文件被拒绝:
证据包格式和字段语义见证据包规范。
验证结果
完好证据包会给出明确结论和检查统计:
样例中的单字节变化会被定位到具体文件:
verify --json输出相同语义的规范 JSON,便于 CI、网关和审计脚本消费。完整错误码和机器接口见 CLI 契约。文件字节被直接改动时,
E2003对照原 manifest 定位文件。报告中的merkle root verified表示原 manifest 内的文件条目仍与其记录根一致。篡改实验会进一步重算候选条目和候选根;重新生成 manifest 后,外部保存的旧清单摘要通过E2004识别历史变化。核心能力
pack、inspect的版本化回执,verify的稳定诊断 JSON 和固定退出码核心计算不访问文件系统。CLI、浏览器和 Fabric 网关负责输入输出,所有入口共享同一套清单和验证语义。
Fabric 锚定
标准
anchor-pack流程先在链下调用 MoonEvidence 完整验证,再把规范摘要提交到 Hyperledger Fabric。TypeScript Gateway 负责这条流程、网络连接和提交回执。Go Chaincode v1 不提供更新或删除交易,顺序重复提交直接返回已保存的首笔记录。并发首写中,只有提交结果为 Fabric MVCC validation code11,且随后查询确认账本记录与待提交摘要一致时,Gateway 才把失败方归一化为重复成功;其他拒绝保持错误。文件、路径、完整清单和本地验证报告继续留在链下。账本记录能够确认某个 Fabric 身份提交了该摘要,验证结论由 MoonEvidence 报告提供。2026-07-12 的双组织实验直接使用
v0.5.1发布压缩包,留下了可复核记录:evidencechannelstarlittle-MoonEvidence-0.5.1.zip,完整 SHA-256 见发布实验记录VALID,交易 ID 和区块号见发布实验记录E2003E2004实链记录页提供可视化回放,Fabric 集成指南提供部署和调用命令,发布实验记录保存制品哈希、交易、查询和回灌结果。
系统架构
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文件读写和账本连接停留在入口层,验证核心只接收文本和字节。这个边界让 CLI、浏览器、多后端 CI 和 Fabric 集成保持一致结果,也为部署环境保留独立的权限和密钥管理空间。
深入设计见架构文档,外部锚点格式见 Fabric 规范。
质量证据
v0.5.1发布包、双组织提交、跨组织查询、幂等重复和摘要回传已留存测试从标准样例、独立参考结果、随机差分、异常输入、故障注入一路覆盖到 CLI 黑盒和真实账本实验。门禁关注测试能否抓住错误,避免只统计通过数量。
适用范围
当前版本适合可复现归档、数据交付、AI 产物审计、教学研究、竞赛展示和受控业务原型。核心库提供确定性证据语义,外部适配器负责文件权限、网络身份和账本连接。
保护高价值资产的生产部署需要完成独立密码学审查、托管密钥接入、操作系统级文件保护、Fabric 组织治理和持续运行监控。现有分层允许这些控制独立演进,证据包格式和验证接口保持稳定。
当前保障级别、报告渠道和部署检查项见安全说明。
文档索引
开源许可
MoonEvidence 使用 Apache License 2.0。
维护者:陈俊文。GitHub 使用
wenlittle,GitLink 和 Mooncakes 使用starlittle命名空间。GitHub · GitLink · Mooncakes