# 离线演示

**可运行的教学示例 · v0.1.0 · Node.js 22+ · 仅使用合成证据。** 这不是生产级 P21 SDK，也不是实时区块链验证器。

## 下载与运行

在构建后的网站打开 [/demo/](https://proof21.xyz/demo/)，下载并检查 `proof21-demo.mjs`。在该文件所在目录运行：

```bash
node proof21-demo.mjs
```

不需要 npm 安装、API 密钥、钱包、网络调用或文件写入。使用 `--json` 获取结构化输出。在包含此示例的仓库副本中，可直接在根目录运行 `npm run demo`，无需安装依赖。

## 演示要说明什么

接收方使用固定的示例 Ed25519 公钥验证紧凑 JWS 签名，再把已签名的合成观察结果与独立的本地指令比较。它不会接受由回执自行选择的密钥或策略。

| 输入 | 签名 | 比较结果 | 接收方决定 |
| --- | --- | --- | --- |
| 匹配样例 | VALID | PASS | REVIEW |
| 接收方错误，但签名真实 | VALID | FAIL | REJECT |
| 缺少付款证据 | VALID | INDETERMINATE | REVIEW |
| 签名后载荷被修改 | INVALID | INDETERMINATE | REJECT |

第二行是重点：有效签名不能使行动正确。第一行仍需 REVIEW，因为合成证据不能证明真实付款。

## 精确范围

代码使用 Node 内置的 Ed25519 验证，以及 JWS 紧凑签名输入规则。刻意受限的解析器只支持此示例的固定头部、模式、来源类型和紧凑 JSON 编码；其他格式直接拒绝，不做近似处理。它不是通用 JOSE 库、规范化 JSON 实现，也不是最终 P21 报告格式。

证据和支付资产均属虚构；新鲜度相对于**固定演示时钟**进行比较。不会连接比特币或 EVM 节点。演示不包含持久化防重放、密钥发现／吊销、交易最终性、DMT/TAP 推导、熵、x402/B402 结算或 MCP 运行时。允许重复运行样例是有意设计。

## 安全使用

执行前检查下载的源代码。不要安装未经核实的同名 npm 软件包。文件旁的校验和可检测意外更改，但不能独立认证已被攻陷的发布方。生产安装程序需要单独审查和发布验证流程。

示例不含签名私钥。合成样例在开发时一次性签署；随附接收方程序仅包含公钥及签名数据。它只输出控制台结果，不对钱包采取行动。

## 测试

在仓库中运行 `npm run test:demo`。测试涵盖四个公开示例、字段不匹配、不支持的输入、无效签名、替换密钥、畸形编码、固定时钟失败和独立 CLI 进程。通过这些测试不等于密码学审计，也不是生产就绪的证明。

## 参考资料

- [Node crypto](https://nodejs.org/api/crypto.html)
- [JSON Web Signature，RFC 7515](https://www.rfc-editor.org/rfc/rfc7515)
- [JOSE 中的 EdDSA，RFC 8037](https://www.rfc-editor.org/rfc/rfc8037)
