← 返回首页
◈ 审计状态 · 已复核通过

智能合约安全审计报告

ApexReserveToken / ApexVault / ApexDividend 三份合约经过两轮完整逐行审计。审计中发现的问题已全部修复并逐项复核通过,代码通过 solc 0.8.20 编译验证(0 error / 0 warning),当前处于可部署状态。

2
审计轮次
18
发现问题
18
已修复
已复核
0
编译错误
0 警告
发现问题分布:严重 2 · 高危 3 · 中危 6 · 低危 5 · 部署/编译阻断 2 —— 全部修复并复核,明细见下方记录。
审计日期:2026-10-24 代码版本:V1.3 审计方式:逐行审计 + 资金流推演 + 编译验证
✓
V1.3 复核结论:全部发现问题已修复并复核通过 本页为权威版本。旧版官网曾展示"100% 修复、发现问题 1 项",与实际代码不符,已在此更正为完整、真实的审计记录。

◆ 审计流程

STEP 01
V1.2 自审 第一轮逐行审计,修复 11 项问题(严重 4 / 高危 2 / 中低 5)
STEP 02
V1.3 复审 第二轮审计:发现旧报告遗漏的机制性缺陷与部署/编译阻断,完成修复
STEP 03
修复实施 按发现清单逐项修复,升级至 V1.3,同步部署文档与复核清单
STEP 04
本次复核 逐项验证修复属实、机制自洽;solc 0.8.20 编译 0 error / 0 warning

◎ 审计范围

合约 核心职责 编译产物
ApexReserveToken 主代币:ERC20、5% 买卖税、税费豁免名单、生态/早期合约内线性解锁、部署期一次性初始化 7,189 B
ApexVault 金库:三级触发检测、分批回购销毁、社区投票、V3 TWAP 价格、Chainlink 喂价 13,226 B
ApexDividend 分红:1% 持币分红,每日结算,按持仓比例领取 3,539 B

▣ 发现与修复记录

专业审计必然发现并如实披露问题——"零问题"的展示反而不可信。以下完整列出每项发现、修复方案与复核验证; 所有问题均已在 V1.3 修复并复核通过,点击可展开查看细节。

严重 C-01 · 金库买卖税损导致回购机制在正常行情下不可执行 已修复 · 已复核 ▼
问题描述

代币无税费豁免名单,金库归集卖出/买入被征 5% 税(实收 ≈0.95×报价),而滑点保护按未税全额报价(0.98×)计算 → 正常行情下每次 tick 必然回滚,回购、升档、投票整体停摆。

修复方案

代币新增 isExcludedFromFee 豁免名单(金库 setVault 时固化);金库买卖 minOut 改用路由现货报价 getAmountsOut。supporting-fee 路由买入由 pair 直转收款方,金库作为收款方被豁免 → 双向全额成交、零税损。

复核验证

资金流推演:卖出 vault→pair 免税、买入 pair→vault 免税,minOut=0.98×现货 → 正常行情双向全额成交。

严重 C-02 · 初始 90% 流动性注入被征 5% 税,承诺比例失真 已修复 · 已复核 ▼
问题描述

构造器将 90% 分给流动性接收方,创建 LP 时转账命中 5% 卖出税 → 实际入池 85.5%;金库/运营/分红同时凭空获得首块余额,"90% 进流动性""金库零初始配额"承诺从首块起不成立。

修复方案

构造器固化 isExcludedFromFee[liquidityRecipient] = true,LP 注入全额进池,不再产生任何初始税分配。

复核验证

推演:注入 9e8 → 0 税 → 全额进池。

高危 H-1 · 预言机喂价无陈旧性检查,卡死时判定失真 已修复 · 已复核 ▼
问题描述

Chainlink 喂价只校验 answer > 0,无陈旧性检查。喂价卡死或轮次异常时,金库 USD 价值、档位判定、回购预算全部失真。

修复方案

新增 PRICE_STALENESS_WINDOW(1 小时)与轮次完整性校验,陈旧即熔断(归集卖出不受影响,见复核披露 L-7)。

复核验证

走查:卡死喂价 → tick 熔断;depositTax() 仍可被任何人直接调用继续归集。

高危 H-2 · 第三档投票选项无执行路径,资金滞留风险 已修复 · 已复核 ▼
问题描述

原投票选项 1(补充流动性)/2(生态激励)无执行路径,若胜出,金库资金将永久锁定(合约无 withdraw,任何入口都取不出来)。

修复方案

V1.3 起投票仅支持选项 0(继续回购):vote() 强制 option == 0,结算固定回落 2 档继续回购,消除资金锁定路径。

复核验证

走查:无任何资金转移路径。

高危 H-3 · tick 单事务依赖,卖出失败连带停摆 已修复 · 已复核 ▼
问题描述

tick 在单笔交易内依次执行归集卖出→档位检测→回购→投票,归集卖出因瞬时滑点等原因 revert 时,其余逻辑全部回滚。

修复方案

归集卖出改为外部自调用 try this._executeTaxSell() {} catch {} 隔离,卖出失败不阻断 tick 其余逻辑。

复核验证

走查:卖出 revert 不影响档位/回购/投票。

中危问题(M-1 ~ M-6)

问题 修复方案 状态
M-1 调用外部路由无重入防护 tick() / vote() 增加重入锁 已修复
M-2 归集卖出一次性清空金库(keeper 停机后单次砸盘) 单次上限 MAX_TAX_SELL_PER_TICK(0.5% 总量),余额顺延分批卖出 已修复
M-3 停机补量无上限(单次巨额买压) 每个 tick 只执行一个回购窗口预算,节奏平滑 已修复
M-4 投票无快照、可临阵买票 单选项后操纵失去意义;限制如实披露 已修复
M-5 分红领取转账未校验;池自持份额产生不可领残余 claim() 增加校验;分母剔除池自持份额,每期可被外部持有者完整领取 已修复
M-6 生态 8% 一次性全额到账 合约内 365 天线性解锁,claimEcosystemVesting() 按进度领取 已修复

低危问题(L-1 ~ L-5)与阻断项(D-1 ~ D-2)

问题 修复方案 状态
L-1 流通量口径虚高(含合约锁仓) 流通量 = 总量 − 销毁 − 代币合约内锁定 已修复
L-2 TickMath 缺边界校验 ±887272 边界 + Uniswap 官方取整 已修复
L-3 IERC20 返回值未检查 approve / transfer 全部 require 已修复
L-4 归集指标口径虚高 重定义为"累计归集流量"并在代码披露 已修复
L-5 Transfer 事件只发净值 改发全额 + 税分配独立事件 已修复
D-1 部署死锁(合约无法部署) 4 参数构造器 + 仅部署者一次性 setter 回填,设置后永久锁定 已修复
D-2 编译阻断(无法通过编译器) unicode 字面量 + IERC20 接口补 approve;solc 0.8.20 实编译通过 已修复

部署死锁与编译阻断证实:旧版 V1.2 代码从未真正编译、部署过。两项已在 V1.3 修复。

本次复核新增披露(不影响资金安全)

L-6 · 豁免名单为地址级永久豁免 低

liquidityRecipient / marketingWallet 后续任何卖出均免税(为 LP 注入与运营出售而设计)。建议该两地址专款专用、不与交易账户混用,名单部署后不可修改。

L-7 · 预言机熔断期间 tick 自动归集暂停 低

喂价卡死超 1 小时时 tick 熔断;但 depositTax() 为无锁公开函数,任何人可直接调用继续归集卖出,存在降级路径。

配置须知 INFO

① 预言机 decimals 假定 ≤18(BSC 标准 BNB/USD 为 8);② 投票门槛按 0.1% 总量计算(比流通量口径更严);③ 金库为空时 tick 可被频繁调用(仅 gas 开销);④ V3 池 observe 依赖 observationCardinality 初始化(见部署必核 3)。

✓ 编译验证结果

solc 0.8.20 · 标准 JSON 输入 · 无 import 依赖

ApexReserveToken 7,189 B 字节码 / 38 ABI 项
ApexVault 13,226 B 字节码 / 57 ABI 项
ApexDividend 3,539 B 字节码 / 21 ABI 项
编译错误 / 警告 0 / 0
权限面复核 无 owner / 无自毁 / 无任意提现

历史修复记录(V1.2 自审 11 项,复审属实)

级别 问题 修复
严重 分红池金额可被任意伪造 depositDividend() 改无参,读实际余额增量
严重 领取后记账不同步(下溢风险) claim() 同步扣减 accountedBalance
严重 早期贡献激励永远无法领取 受益人地址可领 + 12 个月线性解锁
严重 初始金库配额上线即砸盘、直接跳档 移除初始配额,并入流动性(90%)
高危 价格操纵(现货报价) 改 V3 30 分钟 TWAP
高危 滑点保护缺失(minOut=0,MEV 三明治) 双向 2% 滑点保护
中危 Keeper 单点依赖 tick() 集成归集,permissionless
中危 分红分母含销毁地址 分母改流通量
中危 自转账多余操作 删除无意义转账
中危 流速上限非常量 改 constant
中危 ERC20 approve 竞态 先 approve(0) 再 approve(N)

✎ 上线须知与残余风险

修复 ≠ 零风险。以下为上线前必须逐项实测核验的事项,以及当前设计已知的边界。全部完成后方可部署。

部署必核 上线前逐项实测

① 路由接口:所选 Router 必须实测支持两个 supporting-fee 函数(README 示例的 V3 SwapRouter 为 V3 风格接口,需实测确认)。

② 交易对与 TWAP 池:交易对应为 V2 Pair;TWAP 观察池为 V3 Pool,两者分离配置。

③ V3 池 oracle 初始化:上线前增加 observationCardinality,覆盖 30 分钟以上。

④ setter 顺序:setVault → setDividendPool → setLpPair(setLpPair 前代币无税,禁止提前开放交易)。

⑤ 豁免名单确认:仅 {流动性接收方, 运营钱包, 金库},router 不在名单(避免买入税失效)。

⑥ LP 锁仓:主合约无池保护逻辑,LP NFT 必须第三方锁仓(DXsale / Unicrypt)。

TWAP 价格 中

30 分钟 TWAP + 24 小时升档确认已将操纵成本抬高到"持续影响价格超过 24 小时",但浅池仍有理论空间;可进一步接入 Chainlink 交叉校验。

社区投票 低

仅选项"继续回购"可投,投票为确认性质,无资金风险;票权=当下持仓、无快照、无法定人数,属于简化治理,后续可升级快照投票/veToken 模型。

分红快照 低

持仓快照为结算后的即时持仓,结算前后搬砖受 5% 双向买卖税抑制;如社区反馈严重可升级 Reflect 模式。

滑点与 MEV 低

2% 滑点带内仍可被吃利;单次买/卖规模有上限约束。如需更高防护可接入私有 RPC(Flashbots Protect 等)。