arturdeluca/SimplesFinance-Audit

GitHub: arturdeluca/SimplesFinance-Audit

一个部署于 Arbitrum 的极简去中心化期权协议,允许用户无预言机、无流动性池地点对点创建和交易条件互换合约。

Stars: 0 | Forks: 0

# Simples Protocol — SwapVault 一个极简的、部署于 Arbitrum 上的去中心化期权协议。用户可以通过点对点的方式创建条件互换合约——无需 oracles,无需流动性池,无需自动定价。 ## 概述 该协议允许任何用户将 token 存入 vault 并自行定义 strike price。买家获取 **VaultKeys**(代表行使互换权利的 ERC-20 token)并手动决定何时行权。结算完全在链上进行;其他所有环节——挂牌、定价、发现——都在前端市场完成。 **盈利模式:** 协议本身是免费且公开的。前端市场作为商业项目,会在行权时向 taker 和 maker 收取费用。 ## 合约 | 合约 | 描述 | |----------|-------------| | `SwapVaultFactory.sol` | 核心协议。负责创建 vault,管理行权、结算以及紧急恢复。 | | `VaultKey.sol` | 代表 vault 行权的 ERC-20 token。每个 vault 对应 100 个 VaultKeys(固定供应量)。 | | `VaultViewer.sol` | 用于批量查询和派生字段的只读辅助工具。 | | `VaultKeyMarketplace.sol` | 用于交易 VaultKey 的去信任市场。基于 approval(无需 escrow)。支持 EIP-712 无 gas 费挂牌。 | | `BuyOrderBook.sol` | 带有 escrow 的链上买单。买家存入付款;卖家以原子方式成交。 | ## 架构 ``` 1. CREATE Alice approves tokenDeposited → calls createVault() → receives 100 VaultKeys 2. SELL (via marketplace) Alice lists VaultKeys → Bob buys them, paying premium to Alice 3. EXERCISE Bob approves (tokenRequired + takerFeeAmount) → calls exercise() → Contract receives totalFromTaker → Alice receives requiredAmount - makerFeeAmount → feeCollector receives takerFeeAmount + makerFeeAmount → Bob receives proportional tokenDeposited 4. EXPIRATION Vault expires → creator or VaultKey holder calls finalizeVault() → Unexercised tokens return to creator 5. EMERGENCY (30 days after expiration) Anyone can call emergencyFinalize() → Prevents permanently locked tokens ``` ### 关键设计决策 - **无 oracles** — 创建者可自由设定 strike price;市场进行自我调节。 - **手动行权** — 持有者自行决定何时行权;没有任何自动化操作会强制干预决策。 - **每个 vault 单独隔离费用** — `lockedTakerFee` 和 `lockedMakerFee` 在创建时被写入 vault 结构体中。全局费用的更改仅影响未来创建的 vault。 - **两种独立费用** — `takerFee`(由行权者在 `amountRequired` 基础上额外支付)和 `makerFee`(从创建者收到的款项中扣除)。两者上限均为 1% (100 bps),初始值为 0%。 - **Fee-on-transfer 保护** — 在存款前后测量 `balanceOf`;若金额不一致则回退。 - **Marketplace 基于 approval** — VaultKey 在被购买前会一直保留在卖家钱包中。 - **BuyOrderBook 基于 escrow** — 买家将款项存入合约中,确保在成交时资金充裕。 ## 已部署合约 (Arbitrum Sepolia Testnet) | 合约 | 地址 | |----------|---------| | SwapVaultFactory | `0xb1c28ae53740D9cf2c7DEd8C6C3AcB9298bfa3b6` | | VaultViewer | `0xFcF53ad3d9e3Af51dA4668E4a49D855030883713` | | VaultKeyMarketplace | `0xDE4dB06151d7ce4dAb61289d00b213408DF7FB65` | | BuyOrderBook | `0x5a54D5E1b96FD9365b3FA6f88FE8398bA4e9c44b` | **Chain ID:** 421614 (Arbitrum Sepolia) **Explorer:** https://sepolia.arbiscan.io ## 技术栈 | 层级 | 技术 | |-------|-----------| | 智能合约 | Solidity ^0.8.20 / ^0.8.28 | | 测试 | Hardhat v3 (同时运行 `.t.sol` Solidity 测试和 `.ts` Mocha/Chai 测试) | | Solidity 测试风格 | forge-std (`vm.prank`, `vm.expectRevert`, 通过 `bound` 进行 fuzz 测试) | | 库 | OpenZeppelin Contracts v5 | | 网络 | Arbitrum (L2) | ## 设置 **要求:** Node.js v20+ 无需安装 Foundry。Hardhat v3 可通过单条命令原生运行 Solidity 测试 (`.t.sol`) 和 TypeScript 测试。 ``` # 克隆并安装 git clone cd swapvault-audit npm install # 编译合约 npx hardhat compile # 运行全部 299 个测试 npx hardhat test ``` ### 环境变量 仅在部署到正式网络时需要——**在本地运行测试时不需要。** 将 `.env.example` 复制为 `.env` 并填入你的值: ``` DEPLOYER_PRIVATE_KEY=0x... ARBITRUM_SEPOLIA_RPC=https://arb-sepolia.g.alchemy.com/v2/YOUR_KEY ``` ## 测试覆盖率 跨两个测试框架的 **299 项测试,0 次失败**。 所有测试均通过 `npx hardhat test` 运行。Solidity 测试 (`.t.sol`) 采用 forge-std 风格;TypeScript 测试 (`.ts`) 采用 Mocha/Chai。 | 文件 | 语言 | 范围 | |------|----------|-------| | `SwapVaultFactory.t.sol` | Solidity | 创建、管理、查看功能 | | `Exercise.t.sol` | Solidity | 包含 taker/maker 费用的行权、边缘情况 | | `FuzzExercise.t.sol` | Solidity | 比例算术、费用计算 (每个运行 256 次) | | `Finalization.t.sol` | Solidity | 结算及紧急结算 | | `ViewFunctions.t.sol` | Solidity | VaultViewer 批量查询 | | `VaultKey.t.sol` | Solidity | ERC-20 合规性、销毁限制 | | `VaultKeyMarketplace.t.sol` | Solidity | 挂牌、层级、无 gas 费购买 | | `BuyOrderBook.t.sol` | Solidity | 订单 CRUD、费用、查看功能 | | `full-lifecycle.ts` | TypeScript | 端到端: 创建 → 出售 → 行权 → 结算 | | `fee-lifecycle.ts` | TypeScript | 费用锁定、taker/maker 费用场景 | | `multiple-exercisers.ts` | TypeScript | 多个买家对同一个 vault 行权 | | `expiration-scenarios.ts` | TypeScript | 7 个基于时间的场景 | | `fee-on-transfer.ts` | TypeScript | Fee-on-transfer token 保护 | | `reentrancy.ts` | TypeScript | Reentrancy 防护验证 | | `rounding-attack.ts` | TypeScript | 分数次行权下的 token 守恒 | | `vault-viewer.ts` | TypeScript | VaultViewer 集成 | | `buy-order-book.ts` | TypeScript | BuyOrderBook 集成 (36 项测试) | ## 许可证 MIT
标签:Arbitrum, DeFi, Solidity, 区块链, 智能合约, 期权交易