SativusCrocus/AletheiaProtocol

GitHub: SativusCrocus/AletheiaProtocol

一个基于 Base Sepolia 与智能合约的去中心化科学验证协议,通过经济抵押与 VRF 陪审团解决科学主张争议。

Stars: 1 | Forks: 0

Aletheia Protocol

Aletheia 协议

用于科学主张的有效性去中心化账本。

Mycelium Index License: MIT Solidity 0.8.24 Base Sepolia Chainlink VRF v2.5 No admin keys

研究者发布带有 ETH 抵押的研究对象(Research Object)。任何人都可以抵押资金以尝试复现。
争议通过 VRF 抽样陪审团与提交-揭示投票机制解决。
没有期刊。没有编辑。没有管理员密钥。没有创始方信任。

## 存在的原因 同行评审依赖信任、缓慢且不可复现。期刊通过编辑把控可见性,而编辑拥有未披露的激励,“复制危机”并非偶然——它是系统中“无人真正承担风险”的均衡结果。 Aletheia 反转了激励机制:只有当有人将资金押注于主张且无人成功挑战时,该主张才被视为有效。 若 VRF 抽样陪审团判定无效,则主张无效。合约即为裁判。无需游说编辑,无需向期刊付费,也无需向创始方请求收录。 ## 在线部署 | 合约 | 地址 | Basescan | |---|---|---| | **AletheiaLedger** | `0x7D763A1884C115E405EE18a47A9CD96ed722Ba70` | [查看](https://sepolia.basescan.org/address/0x7D763A1884C115E405EE18a47A9CD96ed722Ba70) | | **DisputeArbiter** | `0x8516b6D00E69cE0c2Ad16d7244E64165Ab1FcDA9` | [查看](https://sepolia.basescan.org/address/0x8516b6D00E69cE0c2Ad16d7244E64165Ab1FcDA9) | | **ReputationRegistry** | `0xC81AC0463D2495a5CDc1865d3b077f5fa430a01F` | [查看](https://sepolia.basescan.org/address/0xC81AC0463D2495a5CDc1865d3b077f5fa430a01F) | | **StubZkVerifier** | `0x3A3e8603b3668ca0AFDc3402e7b1EC49501DE066` | [查看](https://sepolia.basescan.org/address/0x3A3e8603b3668ca0AFDc3402e7b1EC49501DE066) | ## 协议流程 ``` NONE │ submitClaimWithCID(cid) + 0.05 ETH bond ▼ PENDING ────── expirePending (3d, no replicator) ─────▶ FAILED │ │ commitReplication(id, hash) + 0.05 ETH stake ▼ REPLICATION_COMMITTED │ │ │ │ expireReplicationCommit (24h, no reveal — 50% slash) │ └──────────────────────────────────────────────▶ PENDING │ │ revealReplication(verdict, cid, salt) [min 1h, max 24h] ▼ UNDER_REVIEW │ │ │ │ challenge(id) + 2× staker ETH │ ▼ │ DISPUTED ── VRF → juror selection → commit → reveal → resolve │ ▼ │ VALIDATED / FAILED / INVALIDATED ◀── terminal │ │ finalizeReplication (2d, no challenge) ▼ VALIDATED / FAILED ◀── terminal ``` ## 仓库结构 ``` . ├── contracts/ Foundry project (Solidity 0.8.24) │ ├── src/ │ │ ├── AletheiaLedger.sol Submit, commit-reveal replication, finalize │ │ ├── DisputeArbiter.sol VRF juror selection + commit-reveal voting │ │ ├── ReputationRegistry.sol Soulbound, monotonic reputation scores │ │ ├── Errors.sol Custom errors │ │ ├── libraries/Economics.sol Pure reward-split math │ │ ├── verifiers/StubZkVerifier.sol │ │ └── interfaces/ IAletheiaLedger, IDisputeArbiter, etc. │ ├── test/ Unit + e2e + invariant tests │ ├── script/ Deploy, FundSubscription, SeedClaims │ └── deployments/ base-sepolia.json ├── frontend/ Next.js 16 + wagmi v2 + RainbowKit │ ├── app/ Pages + /api/upload route │ ├── components/ Action panels │ ├── lib/ Hooks, ABIs, storage helpers │ └── public/ Logo, favicon ├── seed-data/ 10 reproducible Research Object bundles ├── scripts/ │ └── bootstrap.sh One-command deploy + seed ├── LAUNCH.md Complete launch runbook ├── SECURITY.md Disclosure policy + bounty tiers └── README.md ``` ## 快速开始 ### 先决条件 - [Foundry](https://getfoundry.sh)(`curl -L https://foundry.paradigm.xyz | bash && foundryup`) - [Node.js 20+](https://nodejs.org) 和 npm - Base Sepolia 测试网 ETH(可从任意水龙头获取) ### 运行测试 ``` cd contracts forge install forge build forge test -vvv ``` 所有测试均在与真实 RPC 无关的内存分叉上运行,使用模拟的 VRF 协调器。 ### 部署 ``` # 配置环境 cp contracts/.env.example contracts/.env # 填写 DEPLOYER_KEY, BASESCAN_API_KEY, VRF_SUBSCRIPTION_ID # 一键部署 ./scripts/bootstrap.sh ``` 详见 [LAUNCH.md](LAUNCH.md) 获取完整操作步骤。 ### 运行前端 ``` cd frontend cp .env.example .env.local # 从 contracts/deployments/base-sepolia.json 填写合约地址 npm install npm run dev ``` ## 经济参数 | 参数 | 值 | 依据 | |---|---|---| | `MIN_CLAIM_BOND` | **0.05 ETH** | 防止垃圾信息,友好于水龙头 | | `MIN_STAKER_BOND` | **0.05 ETH** | 与提交方对称 | | `CHALLENGE_BOND_MULT` | **2x** | 固定 griefing 税 | | `JUROR_BOND` | **0.005 ETH** | 降低参与门槛以促进池子增长 | | `REVIEW_PERIOD` | **3 天** | 复制窗口 | | `CHALLENGE_WINDOW` | **2 天** | 提交-揭示后争议宽限期 | | `REPLICATION_REVEAL_MIN_DELAY` | **1 小时** | 防止前端跑马 | | `REPLICATION_REVEAL_DEADLINE` | **24 小时** | 提交锁定时间上限 | | `MIN_JUROR_POOL` | **8** | 挑战生效的硬性门槛 | | `MAX_CLAIMS_PER_ADDR_PER_WINDOW` | **3 / 7 天** | 每地址速率限制 | | `MAX_CLAIMS_PER_DAY_GLOBAL` | **50** | 全局 DoS 上限 | ### 争议解决时的奖励分配 奖池为 `submitterBond + stakerBond + challengerBond`: - **胜者方:** 返还自身抵押 + 拿走对方抵押的 40% - **每位陪审员**(已揭示且投票正确):获得对方抵押的 15% - **销毁**(`0x000...dEaD`):对方抵押的 5% - **未揭示的陪审员:** 抵押的 `JUROR_BOND` 被销毁 ### 信誉值变动(单调递增,无衰减) | 事件 | 变动值 | |---|---| | 验证通过的主张 | **+10** | | 成功复制 | **+5** | | 正确投票的陪审员 | **+2** | ## 用户流程 ### 浏览器路径 1. 在 Base Sepolia 连接 MetaMask 2. `/submit` — 上传研究对象压缩包(ZIP),并使用 0.05 ETH 签名 3. 复制方提交承诺并揭示结果(至少等待 1 小时) 4. 在 2 天挑战窗口结束后,调用 `finalizeReplication` 以结算 5. 若存在争议:VRF 选取 3 名陪审员,通过提交-揭示投票机制裁决 ### 直接路径(无前端) ``` # 上传你的 Research Object 到 IPFS w3 up research-object.zip # 将 CID 转换为 bytes32 摘要 node -e "import('multiformats/cid').then(({ CID }) => { const cid = CID.parse('bafkreiabcdef…'); console.log('0x' + Buffer.from(cid.multihash.digest).toString('hex')); });" # 通过 cast 直接提交 cast send $LEDGER 'submitClaimWithCID(bytes32)' 0x \ --value 0.05ether --rpc-url $RPC --private-key $KEY ``` ### 加入陪审员池 ``` cast send $ARBITER 'joinJurorPool()' \ --value 0.005ether --rpc-url $RPC --private-key $KEY ``` 前 **8** 名加入者是关键引导路径——没有他们,任何挑战都无法开启。 ## 安全 ### 设计层面关闭的攻击向量 | # | 攻击向量 | 缓解措施 | |---|---|---| | 1 | **复制方前端跑马** | 承诺为 `keccak256(verdict ‖ cid ‖ salt ‖ sender)`,与地址绑定 | | 2 | **承诺占用** | 未揭示则抵押 50% 被销毁,索赔状态返回 PENDING | | 3 | **陪审员池信任** | 池初始为空,VRF 抽样,排除利益相关方 | | 4 | **VRF 回调 Gas 不足** | 两阶段:回调存储单词,抽样独立运行 | | 5 | **Sybil 速率限制绕过** | 每地址每周最多 3 次,全局每天最多 50 次,每次需 0.05 ETH | | 6 | **重入攻击** | 使用 `nonReentrant` + CEI 模式 + 5,000 gas 推送 + pull 回调 | | 7 | **重复 CID** | 通过 `cidToClaimId` 映射阻止 | | 8 | **自我抵押** | 强制要求 `msg.sender != claim.submitter` | ### 已知权衡(为 MVP 接受) 1. **首次争议延迟**——直到至少 8 名陪审员自然加入后才可发起挑战 2. **有限的承诺占用伤害**——24 小时锁定,抵押 0.025 ETH 3. **3 名陪审员面板**——可能存在合谋;MVP 之后可扩大面板 4. **zkVM 存根**— `StubZkVerifier` 始终返回 true;需替换后重新部署 5. **无信誉衰减**— 仅通过 ETH 抵押进行惩罚 6. **单一复制方**— 每条主张先提交者获胜 7. **IPFS 持久性**— 依赖固定服务;Arweave 可作为 MVP 后的替换方案 8. **每地址速率限制**— 每个地址需消耗 N × 0.05 ETH 以进行 Sybil 攻击 9. **盐值丢失风险**— 清除本地存储 = 失去抵押;提交时 UI 会给出警告 完整披露策略与赏金等级:[SECURITY.md](<_URL_7/>) ## 贡献 MVP 在合并时故意保持最小与冻结。针对本仓库的 PR 仅应修复漏洞或加强安全性。功能开发请自行分叉并发布你的版本。 ## 许可证 代码采用 MIT 许可。协议本身无许可、无版权、无维护者。你可以自由使用、分叉,但不对任何方(包括原始作者)提供信任以保障其持久性。
标签:Base Sepolia, Chainlink VRF, Solidity, VRF 随机抽样, Web3 科研, ZK-proven, ZK证明, 争议解决, 以太坊科学, 区块链科学, 区块链科研平台, 去中心化存储, 去中心化科学, 反取证, 可重复性研究, 同行评审, 安全担保, 安全证明, 安全评估, 开源科学, 承诺揭示投票, 抽签陪审团, 无信任机制, 无管理员权限, 有效性账本, 沙箱, 科学可验证性, 科学声明, 科学激励机制, 科学透明度, 科学验证, 科研债券, 科研对象, 科研激励, 科研诚信, 自动化攻击, 质押复制, 镜像实例, 零知识证明