gamween/coincoin

GitHub: gamween/coincoin

基于 EIP-7702 的自托管链上防火墙,在检测到实时漏洞利用时自动将用户的链上资产及 DeFi 头寸撤离至安全保险库。

Stars: 0 | Forks: 0

coincoin # coincoin **一个基于 EIP-7702 的链上防火墙,它能检测到实时的漏洞利用,并在非原子性攻击留下的反应窗口期内,将您的资金——包括已存入 DeFi 的头寸——撤离到您控制的保险库中。** [![在线演示](https://img.shields.io/badge/live-coincoin--five.vercel.app-000000?style=flat-square)](https://coincoin-five.vercel.app/) [![已部署](https://img.shields.io/badge/deployed-Robinhood%20Chain%20testnet%20(46630)-7af7c0?style=flat-square)](#deployed-addresses) [![Solidity](https://img.shields.io/badge/Solidity-0.8.24-363636?style=flat-square&logo=solidity)](contracts/) [![CI](https://img.shields.io/github/actions/workflow/status/gamween/coincoin/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/gamween/coincoin/actions/workflows/ci.yml) [![License](https://img.shields.io/badge/License-MIT-F5D90A?style=flat-square)](LICENSE)
coincoin 是一个面向 EOA 的、由开发者运行的守护者——它包含一个 CLI 监控 daemon 以及一组 EIP-7702 合约。它针对的是一种特定的、技术性的故障模式:在非原子性漏洞利用期间,钱包的密钥已被窃取但资金尚未被完全转移,且用户端在此期间没有任何应对操作的窗口期。这是其刻意设计的专攻领域。 ## 目录 - [问题所在](#the-problem) - [工作原理](#how-it-works) - [架构](#architecture) - [已上线功能 vs. 路线图](#whats-live-vs-roadmap) - [技术栈](#tech-stack) - [仓库结构](#repository-structure) - [快速入门](#getting-started) - [已部署地址](#deployed-addresses) - [安全与信任模型](#security--trust-model) - [测试](#testing) - [Buildathon](#buildathon) - [License](#license) ## 问题所在 如今的钱包安全几乎完全处于*签名前*阶段:模拟交易、标记恶意签名、撤销过期的授权。一旦密钥泄露,这些机制都无济于事,而且它们也无法触及已经提供给协议的资金。有两个事实定义了这一盲区: - **Drainer 转向了签名后和链上。** 在 2025 年,钱包 drainer 和钓鱼攻击从 **106,106 名受害者手中窃取了 8385 万美元**([Scam Sniffer](https://www.scamsniffer.io/))。攻击者现在将 **EIP-7702 本身**武器化——超过 90% 的链上 7702 委托是掠夺者,会在下一次转入时将资产洗劫一空。 - **大多数协议漏洞利用是非原子性的。** 从第一笔恶意交易到资金被彻底抽干,间隔大约在 **4 分钟到 5 天**不等(Defimon)。这个间隔就是一个*响应窗口*——而在用户端,没有任何东西会在其中做出反应。 签名前工具(如 Blockaid、Revoke.cash)在其生命周期中所处的节点对此无能为力。Harpie 是最接近的现有技术——提供密钥泄露后的保护——但它只能与攻击者进行脆弱的抢跑竞争,且从未覆盖过已质押的头寸,最终在 2025 年停止运营。 coincoin 通过 **EIP-7702**(一种在 Harpie 之后出现的原语)在账户层面进行强制执行,并将 **DeFi 头寸视为一等公民**,从而填补了这一空白:这些资产因为不存放在钱包中而被大多数保护工具所忽略。 ## 工作原理 分为四个部分。核心产品是监控 daemon 和合约;没有强制要求的 UI。 1. **委托(一次性)。** EOA 签署一份指向 `GuardianModule` 的 EIP-7702 授权,并在同一笔交易中调用 `configure()` 来设置其策略:一个**冻结的**安全保险库(只能设置一次——泄露的密钥无法重新指向它)以及一个授权的 **keeper** 集合。策略也可以通过中继器提交的 **EIP-712 签名**来安装(`configureWithSig`)——这为 `/app` 仪表板中的**一键式、无 gas 引导**提供了支持(钱包只需签名;由中继器支付费用)。 2. **监控。** 一个 TypeScript/viem daemon(`ChainThreatSource`)直接从链上轮询受监控协议的 `Drained` 日志——无需第三方数据源,也不依赖 websocket。它会在有界的 `getLogs` 窗口内更新至最新区块。 3. **响应。** 在验证威胁后,**keeper**(在加密学上被限制为只能执行两项操作)会调用 `exitAaveV3()` 将存入的头寸解除并退回账户,然后调用 `evacuateERC20()` 将所有 token 清算转入安全保险库。 4. **防火墙(主动防御)。** 通过 `execute()` 路由的调用会由无状态的 `RulesEngineV1` 进行评分;针对不受信任的调用方发起的无限额 `approve` / `increaseAllowance` / EIP-2612 `permit` / 一揽子 `setApprovalForAll` 操作,会在落地之前在账户层面直接回滚。 ## 架构 ``` on-chain Drained log ─────────────────────────▶ ┌───────────────────────────────┐ │ watcher (ChainThreatSource) │ TS / viem daemon │ polls getLogs · zero deps │ └───────────────┬───────────────┘ │ threat alert ▼ your EOA ──EIP-7702──▶ GuardianModule ┌───────────────────────────────┐ (delegate + configure) │ keeper (bounded) │ can ONLY: │ 1. exitAaveV3() unwind DeFi │ │ 2. evacuateERC20() sweep │ └───────────────┬───────────────┘ ▼ ┌───────────────────────────────┐ │ SafeVault (owner-only) │ └───────────────────────────────┘ proactive: EOA.execute(to, value, data) ─▶ RulesEngineV1.score() ─▶ revert if risk ≥ threshold ``` - **`GuardianModule`** —— EIP-7702 委托合约。持有策略(冻结的保险库、keeper 集合、签名策略的 nonce)、清算/退出逻辑以及防火墙钩子。状态保存在每个受保护的 EOA 中,而不是保存在实现地址中。 - **`SafeVault`** —— 仅限所有者提款的接收目的地,为每个用户单独部署。 - **`RulesEngineV1`** —— 防火墙调用的无状态风险评分器;设计为可替换(Stylus 已在路线图上)。 - **watcher** —— 链下操作者:检测源、风险敞口注册表、keeper 客户端和编排器,具有端到端的运行器。 ## 已上线功能 vs. 路线图 除非另有说明,均在 **Robinhood Chain 测试网 (链 46630)** 上部署并进行了测试验证。 | 状态 | 功能 | |---|---| | ✅ | EIP-7702 委托 + 自配置 · ERC-20 清算 · 撤销授权 | | ✅ | 冻结的保险库 · 签名的多 keeper 策略 (EIP-712 `configureWithSig`) | | ✅ | **浏览器内无 gas 引导** —— 钱包进行签名(EIP-712 策略 + EIP-7702 授权);中继器 (`site/api`) 部署用户的确定性 `SafeVaultFactory` 保险库,并赞助委托+配置交易(用户零 gas 费用) | | ✅ | 本地防火墙 (`RulesEngineV1`) —— 无限额授权 / `permit` / `setApprovalForAll` 规则 | | ✅ | 真实的链上检测 → 救援循环,已进行端到端运行(静止资金**以及**已存入的 DeFi 头寸在一个 keeper 驱动的序列中成功获救) | | ✅ | DeFi 退出引擎 (`exitAaveV3`) —— 已构建并通过 Arbitrum One 分叉测试,针对**真实的 Aave V3 Pool** 进行了验证 | | 🛣️ | **原生 Aave V3 集成** —— 已构建并准备就绪;将在 Aave V3 部署到 Robinhood Chain 的当天上线。等待的是可用性,而不是代码。 | | 🛣️ | **GMX V2 头寸退出** —— 相同的模式,一旦 GMX 在目标链上可用即生效 | | 🛣️ | 更广泛的防火墙覆盖范围 —— Permit2、multicall、直接转账启发式检测 | | 🛣️ | 策略资产/协议范围界定 · Stylus 规则引擎 · 安全审计 | ## 技术栈 | 层级 | 技术栈 | |---|---| | 合约 | Solidity 0.8.24、Foundry、OpenZeppelin、EIP-7702、EIP-712 | | 监控器 | TypeScript、viem、Vitest | | 链 | Arbitrum Orbit (Robinhood Chain 测试网),通过 Alchemy 进行 RPC 调用 | | 前端 | React 19、Vite、Tailwind(落地页 + `/app` 仪表板) | ## 仓库结构 ``` coincoin/ ├── contracts/ Foundry — GuardianModule (EIP-7702), RulesEngineV1, SafeVault(+Factory), mocks, scripts ├── watcher/ TypeScript/viem detection → rescue daemon (onboard · watch · exploit · revoke) ├── site/ Vite/React/Tailwind landing + /app dashboard + api/ (gasless onboarding relayer) ├── deployments/ On-chain address records (robinhood-testnet.json, arbitrum-sepolia.json) ├── docs/readme/ README images ├── video/ Remotion pitch + demo videos (code → MP4) ├── .env.example Config template (RPC, disposable keys, demo addresses) └── LICENSE MIT ``` ## 快速入门 在 Robinhood Chain 测试网上复现检测 → 撤离循环。 **前置条件:** [Foundry](https://getfoundry.sh)、Node ≥ 22、[pnpm](https://pnpm.io)、一个有测试币余额的钱包。 ``` git clone --recursive https://github.com/gamween/coincoin.git # --recursive pulls Foundry deps (submodules) cd coincoin cp .env.example .env # RPC + disposable testnet keys — see .env.example # contracts: 构建 + 测试(已经非递归克隆过了?运行:git submodule update --init --recursive) cd contracts && forge test # set ARBITRUM_ONE_RPC to also run the live-Aave fork test # deployment runbook: watcher/README.md → Deployment # watcher: 产品(在每个步骤各自的终端中运行) cd ../watcher && pnpm install pnpm onboard # one-time: EIP-7702 delegation + policy config pnpm watch # the guardian, watching real on-chain logs pnpm exploit # (separate terminal) replay an exploit → real Drained log # → watch detects it and evacuates to the vault pnpm revoke # remove the delegation in one tx ``` ## 已部署地址 Robinhood Chain 测试网(链 `46630`)—— [浏览器](https://explorer.testnet.chain.robinhood.com/)。完整记录:[`deployments/robinhood-testnet.json`](deployments/robinhood-testnet.json)。 | 合约 | 地址 | |---|---| | `GuardianModule` (EIP-7702 守护者) | [`0x9953BB30cFef2ac842C74417eA6DC661b492E8dA`](https://explorer.testnet.chain.robinhood.com/address/0x9953BB30cFef2ac842C74417eA6DC661b492E8dA) | | `RulesEngineV1` (防火墙) | [`0xc20A9d7D38B07a9C74A1fD87A2e25CA1973Cbc52`](https://explorer.testnet.chain.robinhood.com/address/0xc20A9d7D38B07a9C74A1fD87A2e25CA1973Cbc52) | | `SafeVaultFactory` (确定性用户专属保险库) | [`0x1ef2B2539fa842A9c7e4EA07790aA6dBc47ec4A5`](https://explorer.testnet.chain.robinhood.com/address/0x1ef2B2539fa842A9c7e4EA07790aA6dBc47ec4A5) | | `SafeVault` (演示) | [`0x530921CFFCeCc01B3Ad20E48A8c1707d27204b91`](https://explorer.testnet.chain.robinhood.com/address/0x530921CFFCeCc01B3Ad20E48A8c1707d27204b91) | `GuardianModule` 最初也在 Arbitrum Sepolia 上进行了部署和 **Arbiscan 验证**,地址为 [`0x6671…200F`](https://sepolia.arbiscan.io/address/0x6671b4B73b79c284A710B00ef777d8E65f55200F)。 ## 安全与信任模型 在设计上是非托管的,但属于**实验性且未经过审计**——这是一个部署在测试网上的研究原型。 **信任假设** - 所有者保留其密钥;守护者是一个委托合约,而不是托管方。 - 安全保险库在首次配置后被**冻结**——泄露的密钥无法将资金重定向到其他地方。 - keeper 是**受限的**:它只能触发向已注册保险库的撤离并撤销授权。轮换 keeper 集合会撤销前一代 keeper 的权限;泄露的 keeper 密钥无法更改策略。 - 该委托**可在单笔交易中撤销**。 **已知限制** - 防火墙仅保护通过 `execute()` 路由的调用,并且仅涵盖四种授权向量——暂不支持 Permit2、multicall 或直接转账(尚未支持——见路线图)。 - 策略资产/协议范围界定尚未实现。 - 原生 Aave V3 / GMX V2 集成已构建并验证,但需等待这些协议在 coincoin 运行的链上部署。 **负责任的披露:** 在提交公开 issue 之前,请通过 [X (@dvb_fianso)](https://x.com/dvb_fianso) 或 [Telegram](https://t.me/dvb_fianso) 私下报告问题。 ## 测试 95 个测试,采用测试优先原则编写。 ``` cd contracts && forge test # 69 unit/integration tests (+1 fork test, gated on ARBITRUM_ONE_RPC) ARBITRUM_ONE_RPC= forge test # includes AaveRealFork.t.sol against the live Aave V3 Pool cd ../watcher && pnpm test # 25 watcher tests (vitest) ``` `AaveRealFork.t.sol` 针对 **Arbitrum One 上的真实 Aave V3 Pool**(分叉)进行真实头寸的退出——这与守护者运行的代码路径完全相同。监控器测试套件涵盖了警报 schema、风险敞口注册表、keeper 客户端以及端到端编排器。无 gas 引导路径已通过测试网上的 `pnpm onboard:gasless` 完成了端到端验证(一个全新的、无余额的 EOA 进行签名;由中继器赞助委托+配置交易)。 ## Buildathon 为 **[Arbitrum Open House London](https://arbitrum-london.hackquest.io/)** 构建——由 Arbitrum Foundation 主办的项目。在线 Buildathon 于 2026 年 5 月 25 日至 6 月 14 日举行(由 HackQuest 提供支持);coincoin 目标是参与 **Robinhood Chain** 赛道。使用的赞助商技术:Robinhood Chain、Alchemy、OpenZeppelin。公开构建日志:[@dvb_fianso](https://x.com/dvb_fianso)。 ## License [MIT](LICENSE) © 2026 coincoin
为 Arbitrum Open House London 2026 构建 · Robinhood Chain 赛道
标签:DeFi, EIP-7702, Solidity, Web3安全, 以太坊, 区块链, 智能合约, 自动化攻击