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://img.shields.io/badge/live-proof.kovina.org-0052FF?style=for-the-badge)](https://proof.kovina.org) [![CI](https://img.shields.io/github/actions/workflow/status/sparshsam/openproof/ci.yml?branch=main&style=for-the-badge&label=CI)](https://github.com/sparshsam/openproof/actions/workflows/ci.yml) [![许可证: AGPL v3](https://img.shields.io/github/license/sparshsam/openproof?style=for-the-badge)](LICENSE) [![基于 Base Sepolia 构建](https://img.shields.io/badge/Built%20on-Base%20Sepolia-0052FF?style=for-the-badge)](https://sepolia.basescan.org/address/0x60d3DD631E6e4F6D76f761689d6FA229945a874a) ![OpenProof 主页](https://static.pigsec.cn/wp-content/uploads/repos/cas/02/02026264b3c8e88e7dab02385e315436f6a3866c5465ee052a8e0b9c396468c9.png) ## 快速链接 - [在线应用](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。 ## 截图 | 创建证明 | 验证证明 | | --- | --- | | ![创建证明界面](https://static.pigsec.cn/wp-content/uploads/repos/cas/cd/cdf4926ca435e5d07f2982209ee5f735f06d2ba6ec20fc371c9b2d3242b6b84f.png) | ![验证证明界面](https://static.pigsec.cn/wp-content/uploads/repos/cas/33/3378aa99c736d62b25c1fdc430d0a5f207a0ece827eaa8c8788e67a656548312.png) | 更多截图可在 [`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, 区块链, 存证证明, 智能合约, 网络安全, 自动化攻击, 隐私保护