Sample Token 代币合约安全审计报告
一套部署于 BNB Chain 的 BEP-20 代币及配套预售、锁仓合约。本次审计共发现 5 个问题, 其中 1 个高危(无上限增发)已在复审中修复,1 个中危待处理,其余为提示性建议。
- 报告编号
- UMB-2026-0007
- 客户
- Sample Token(样例)
- 区块链
- BNB Chain
- 语言
- Solidity 0.8.20
- 报告版本
- v2.0 Final
- 报告日期
- 2026-05-30
- 整体评级
- 中风险
受审合约
本次审计覆盖的合约 / 文件及其可核验身份(commit 与链上地址)。
| 名称 | 类型 | commit | 地址 |
|---|---|---|---|
| Token.sol | 代币合约 | a1b2c3d4e5 | 0x5A1b2C3d4E5f60718293a4B5c6D7e8F901234567 |
| Presale.sol | 预售 / IDO | a1b2c3d4e5 | 0x9F8e7D6c5B4a39281706f5E4d3C2b1A098765432 |
| Vesting.sol | 锁仓 / 释放 | a1b2c3d4e5 | — |
漏洞汇总
高 1中 2低 1提示 1| ID | 标题 | 严重 | 状态 | 类别 |
|---|---|---|---|---|
| TKN-01 | owner 可无限增发代币(无上限 mint 权限) | 高 | Resolved 已修复 | 中心化权限 |
| TKN-02 | 预售合约可被 owner 提前抽走募资 | 中 | Open 未处理 | 中心化权限 |
| TKN-04 | 交易税率上限缺失,可被改至极端值 | 中 | Resolved 已修复 | 貔貅 / 后门 |
| TKN-03 | 锁仓释放计算在边界时间戳取整偏差 | 低 | Acknowledged 已知悉 | 整数运算 |
| TKN-07 | 缺少关键状态变更事件 | 提示 | Acknowledged 已知悉 | 最佳实践 |
执行摘要
本项目为一套部署于 BNB Chain 的 BEP-20 代币及配套预售、锁仓合约。本次审计采用 AI 增强 + 人工复核 的混合模式:自动化引擎对全量代码做高覆盖率初筛,安全工程师对所有 产出逐条人工验证(剔除误报、确认可利用性、编写 PoC),并独立完成业务逻辑与经济模型分析。
整体安全评级为 中风险:唯一的高危「无上限增发」已在复审中修复,剩余中危「预售可提前 提款」建议在主网放量前处理。
本报告是该时间点、该指定 commit 范围内的安全状况快照,不构成对项目绝对安全的保证,亦不 构成任何投资建议。审计后对代码的任何改动均不在覆盖范围内。
TKN-01 · owner 可无限增发代币
严重等级: High 状态: Resolved 类别: 中心化权限 位置: Token.sol:88-95 · mint()
mint() 仅由 onlyOwner 控制,且对增发数量无任何上限或时间锁约束。owner 私钥一旦被控或
团队作恶,可瞬间增发任意数量代币、稀释所有持有者并砸盘退出(典型 rug 向量)。
概念验证(PoC):
// 前置:attacker == owner
function test_unlimitedMint() public {
uint256 before = token.totalSupply();
vm.prank(owner);
token.mint(attacker, 1e30);
assertGt(token.totalSupply(), before); // 供应量被无限拉高
}
修复建议: 移除无上限 mint,或设置硬顶 MAX_SUPPLY;将 mint 权限交由多签 + 时间锁治理;
若不需要增发,构造时一次性铸造并彻底放弃铸币权。
修复情况: 客户已移除 mint(),改为构造时固定供应量并放弃 owner 铸币权,复审验证通过。
TKN-02 · 预售合约可被 owner 提前抽走募资
严重等级: Medium 状态: Open 类别: 中心化权限 位置: Presale.sol:142 · withdraw()
withdraw() 未与预售结束条件或软顶解锁绑定,owner 可在预售进行中随时提走全部募资,参与者
面临资金被提前转移的风险。
修复建议: 将提款绑定到「预售结束且达到软顶」,并引入多签 / 时间锁;未达软顶时应允许参与者 退款。
修复情况: 待客户处理。
TKN-07 · 缺少关键状态变更事件
严重等级: Informational 状态: Acknowledged 类别: 最佳实践 位置: Token.sol:120 · setFee()
setFee() 修改交易税率时未触发事件,链下与社区无法追踪费率变更。建议增加
event FeeUpdated(uint256 oldFee, uint256 newFee); 并在变更时触发。客户知悉,计划下版本处理。