sparshsam/openproof
GitHub: sparshsam/openproof
一个基于 Base 区块链的隐私优先的文件存在性证明应用,通过在本地计算并上链注册文件哈希来实现可验证的时间戳。
Stars: 1 | Forks: 0
# OpenProof
OpenProof 是一个隐私至上、开源的文件存在性证明应用,基于 Base Sepolia 构建。
**成熟度:** 原型。核心工作流功能正常,但可能会有破坏性更新。有关治理和规范层,请参阅 [docs/SYSTEMS_DOCTRINE.md](docs/SYSTEMS_DOCTRINE.md) 和 [rfcs/](rfcs/)。
它允许用户为文件指纹创建带时间戳的区块链证明,而无需上传或存储文件本身。文件在浏览器中使用 SHA-256 进行本地哈希处理,只有生成的 `bytes32` 哈希通过一个极简的 Solidity 合约注册到链上。
[](https://proof.kovina.org)
[](https://github.com/sparshsam/openproof/actions/workflows/ci.yml)
[](LICENSE)
[](https://sepolia.basescan.org/address/0x60d3DD631E6e4F6D76f761689d6FA229945a874a)

## 快速链接
- [在线应用](https://proof.kovina.org)
- [BaseScan 合约](https://sepolia.basescan.org/address/0x60d3DD631E6e4F6D76f761689d6FA229945a874a)
- [架构](docs/ARCHITECTURE.md)
- [凭证规范](docs/spec/receipt-specification.md)
- [JSON Schema](docs/spec/openproof-receipt-schema.json)
- [测试向量](docs/spec/openproof-test-vectors.md)
- [威胁模型](docs/threat-model.md)
- [安全政策](SECURITY.md)
- [贡献指南](CONTRIBUTING.md)
- [隐私政策](docs/PRIVACY.md)
- [服务条款](docs/TERMS.md)
- [平台就绪度](docs/PLATFORM_READINESS.md)
- [更新日志](CHANGELOG.md)
## OpenProof 的功能
OpenProof 为文件哈希创建可验证的时间戳:
1. 在浏览器中选择一个文件。
2. OpenProof 使用 SHA-256 在本地对文件进行哈希处理。
3. 连接 Base Sepolia 上的钱包。
4. 仅将哈希注册到 `OpenProofRegistry` 中。
5. 下载本地 JSON 凭证或分享证明页面。
6. 稍后再次对完全相同的文件进行哈希处理来进行验证。
无需文件上传。无需服务器端存储。无数据库。MVP 不依赖 IPFS。
## 截图
| 创建证明 | 验证证明 |
| --- | --- |
|  |  |
更多截图可在 [`public/screenshots`](public/screenshots) 中找到。
## 功能
| 功能 | 状态 | 备注 |
| --- | --- | --- |
| 本地 SHA-256 哈希处理 | 可用 | 使用浏览器 Web Crypto API。文件字节保留在本地。 |
| 证明注册 | 可用 | 在 Base Sepolia 上注册 `bytes32` 哈希。 |
| 证明验证 | 可用 | 对本地文件重新进行哈希处理并检查注册表。 |
| JSON 证明凭证 | 可用 | 在本地生成并下载;从不由 OpenProof 上传。 |
| 凭证导入 | 可用 | 验证 OpenProof 凭证 JSON 并在链上检查哈希。 |
| 本地证明历史 | 可用 | 仅存储在浏览器本地存储中。 |
| 公开证明页面 | 可用 | `/proof/[hash]` 读取公共注册表状态。 |
| 二维码验证 | 可用 | 对证明页面 URL 进行编码,而不是文件。 |
| 捆绑证明 | 可用 | 为多个本地文件生成确定性的组合哈希。 |
| Base 主网 | 路线图 | 当前 MVP 仅支持 Base Sepolia 测试网。 |
## 基于 Base Sepolia 构建
OpenProof v0 使用 Base Sepolia,以便贡献者和用户可以在没有真实资金的情况下测试证明流程。
- 链:Base Sepolia
- 链 ID:`84532`
- 浏览器:[BaseScan Sepolia](https://sepolia.basescan.org)
- 注册表合约:[`0x60d3DD631E6e4F6D76f761689d6FA229945a874a`](https://sepolia.basescan.org/address/0x60d3DD631E6e4F6D76f761689d6FA229945a874a)
当前的公共应用是一个测试网存在性证明工具。Base 主网部署是路线图上的一项,并非当前的生产声明。
## 隐私模型
OpenProof 的设计围绕本地优先的证明创建:
- 通过浏览器 File API 读取文件。
- 使用 Web Crypto API 在本地进行哈希处理。
- 仅将 SHA-256 哈希发送到智能合约。
- 凭证是本地的 JSON 下载。
- 最近的证明历史保留在浏览器本地存储中。
- 没有 backend 上传 endpoint、数据库、存储桶或账户系统。
重要警告:如果原始文件已知、较小或易于猜测,则公共哈希可能会泄露信息。如果不了解该风险,请勿为敏感且易猜测的内容注册哈希。
## 安全提示
OpenProof 证明一个匹配的哈希在记录的链时间戳被钱包注册。它不证明作者身份、所有权、合法占有、法律有效性或文件内容的真实性。
如果原始文件丢失,OpenProof 无法恢复它。链上仅存储哈希。
如果没有专业建议,请勿将 OpenProof 用于法律、金融、医疗、合规或受监管的声明。请参阅 [`docs/threat-model.md`](docs/threat-model.md) 和 [`SECURITY.md`](SECURITY.md)。
## 安装和运行
要求:
- Node.js 22 或更新版本
- npm
- 来自 Reown Cloud 的 WalletConnect project ID
- 用于合约部署或证明注册的 Base Sepolia 测试 ETH
```
git clone https://github.com/sparshsam/openproof.git
cd openproof
npm install
cp .env.example .env.local
npm run dev
```
打开 `http://localhost:3000`。
在 `.env.local` 中填写这些值:
```
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=
NEXT_PUBLIC_CHAIN_ID=84532
NEXT_PUBLIC_OPENPROOF_CONTRACT_ADDRESS=0x60d3DD631E6e4F6D76f761689d6FA229945a874a
BASE_SEPOLIA_RPC_URL=https://sepolia.base.org
DEPLOYER_PRIVATE_KEY=
```
切勿提交私钥。`.env` 和 `.env.local` 被 git 忽略。
## 从源码构建
```
npm run lint
npm run typecheck
npm run build
npm run test:contracts
```
## 技术栈
- Next.js 16
- TypeScript
- Tailwind CSS
- wagmi, viem, RainbowKit
- Solidity 和 Hardhat
- Base Sepolia
- Vercel
合约命令:
```
npm run compile
npm run test:contracts
npm run deploy:base-sepolia
```
部署需要在 `.env` 中设置 `BASE_SEPOLIA_RPC_URL` 和 `DEPLOYER_PRIVATE_KEY`。
## 部署到 Vercel
OpenProof 作为静态 Next.js 应用部署,不需要 backend 服务。
1. Fork 或克隆此代码库。
2. 将其导入 Vercel。
3. 添加公共环境变量:
- `NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID`
- `NEXT_PUBLIC_CHAIN_ID=84532`
- `NEXT_PUBLIC_OPENPROOF_CONTRACT_ADDRESS`
4. 使用默认的 Next.js 设置进行部署。
MVP 不需要付费域名、数据库、存储桶、文件上传或 IPFS 钉定服务。
## 项目结构
```
contracts/ Solidity registry contract
docs/ Architecture, threat model, deployment notes
docs/spec/ Canonical receipt specification, JSON Schema, test vectors
public/screenshots/ App screenshots used by docs and social previews
scripts/ Contract deployment script
src/app/ Next.js App Router pages
src/components/ Reusable UI and wallet components
src/lib/ Hashing, receipts, contracts, history, proof utilities
test/ Hardhat contract tests
```
## 路线图
OpenProof 应首先保持为一个小型、可信赖的证明工具。该路线图扩展了证明层,而不会将应用变成存储产品、市场、代币系统或过度宣称的法律技术。
### 近期计划
- **分离式签名支持** — 允许用户使用钱包对文件哈希或凭证进行签名,而不必非要在链上注册新的证明。
- **~~更强的凭证格式~~** ✅ *已在 v0.2 中交付* — 版本化、规范化的 JSON 凭证,带有确定性序列化、Ed25519 签名和可移植的验证。请参阅 [`docs/spec/receipt-specification.md`](docs/spec/receipt-specification.md)。
- **凭证验证优化** — 更清晰的成功、不匹配、不支持的链以及格式错误的凭证状态。
- **~~更好的捆绑证明~~** ✅ *已在 v0.2 中交付* — 规范化的捆绑凭证类型,带有排序的提交数组、确定性派生的主体哈希和包含验证。请参阅 [捆绑证明 §7](docs/spec/receipt-specification.md#7-bundle-proofs)。
- **自托管文档** — 更清晰的 Vercel、静态托管、自定义 RPC 和自部署合约的部署说明。
- **扩展威胁模型** — 用更易懂的语言记录哈希猜测风险、已知文件攻击、元数据泄露、钱包隐私和时间戳限制。
### 中期计划
- **Base 主网部署** — 在测试网 UX 和合约假设稳定后,在 Base 主网上部署生产注册表。
- **可重现的部署元数据** — 发布编译器版本、源码验证说明、部署脚本和确定性合约元数据。
- **事件索引选项** — 为较大规模的部署提供轻量级的索引路径,而不会使 backend 成为核心应用的强制性要求。
- **证明集合** — 允许用户在本地将相关证明分组,例如项目文件夹、证据包、发布归档或创意作品包。
- **可移植的证明页面** — 静态、可共享的证明页面,可以保存或镜像,而不必永远依赖 OpenProof 托管。
- **多语言文档** — 翻译核心用法、隐私和风险说明,以提高大众的可访问性。
### 长期愿景
- **~~开放证明标准~~** ✅ *初始规范已交付* — [规范化凭证规范](docs/spec/receipt-specification.md) 定义了可互操作的证明凭证格式。跨应用采用和实施指南是下一阶段的目标。
- **跨应用验证层** — 允许本地 PDF 阅读器、研究笔记本、档案和创作者工具等工具通过相同的凭证模型锚定证明。
- **组织和项目认证** — 为团队、开源维护者、记者、研究人员和创作者提供可选的签名流程,以证明是谁锚定了文件哈希。
- **证明时间轴** — 构建本地时间轴,显示文档、文件夹、发布或捆绑包如何通过连续的哈希值随时间演变。
- **公共利益档案** — 支持可验证的公共数据集、公民文档、开放研究 artifacts 和社区记录,而无需 OpenProof 托管底层文件。
- **离线优先验证器** — 一个可下载的验证器,可以在不使用托管 Web 应用的情况下验证凭证并重新对文件进行哈希处理。
### OpenProof 不会成为什么
- 不是文件托管平台。
- 不是 NFT 市场。
- 没有代币、奖励、质押或 DeFi 层。
- 不声称哈希可以证明作者身份、所有权、真实性、合法性或版权。
- 没有强制性的 backend、账户系统、分析或文件上传 pipeline。
OpenProof 使用 Base 作为平稳的验证基础设施:足够公开以保持持久,又足够精简而不妨碍用户体验。
## 未来理念
OpenProof 是一个更宏大方向的一部分:帮助人们在不放弃事物本身的情况下证明事物的软件。
长期的生态系统理念是:
- **证明优先于平台** — 让用户验证存在性和完整性,而不依赖于公司数据库。
- **隐私优先于便利作秀** — 永远不要仅仅为了让验证感觉很神奇就上传文件。
- **默认本地优先** — 尽可能在用户自己的设备上进行哈希处理、检查和验证。
- **持久而不暴露** — 将公共基础设施用于小型指纹,而不是私人内容。
- **可互操作的平稳工具** — 凭证、哈希和验证流程应该跨项目工作,而不是成为另一个孤岛。
- **Base 作为基础设施,而非投机** — 证明的低成本公共结算,而不是发明代币的理由。
直接目标是简单的:创建和验证可信赖的文件指纹。宏大目标是一个开放的证明层,其他安静、注重隐私的工具可以依赖它。
## 仓库元数据
推荐的 GitHub topics:
```
base, base-sepolia, built-on-base, onchain, proof-of-existence, ethereum,
solidity, viem, wagmi, rainbowkit, web3, cryptography, privacy-first,
nextjs, typescript, tailwindcss, vercel, agplv3, pwa
```
## 支持
对于 bug 报告、功能请求和一般支持,请[提交 GitHub issue](https://github.com/sparshsam/openproof/issues)。对于安全漏洞,请参阅[安全政策](SECURITY.md)。
## 许可证
OpenProof 根据 AGPL-3.0-only 授权。请参阅 [`LICENSE`](LICENSE)。
*最后更新:2026-06-21*
标签:Base, Web3, 区块链, 存证证明, 智能合约, 网络安全, 自动化攻击, 隐私保护