历史授权日志保留与定期审计|从月度复查到年度大清理
历史 approve / setApprovalForAll 操作记录在链上,需要定期审计找出过期/可疑授权。本文按 6 步建立审计节奏:每周看异常、每月清理、每季度大扫除、每年总结、跨钱包一致性。
授权审计应该多久做一次?直接答:建立分级审计节奏:(1) 每周快速看一遍是否有异常签名;(2) 每月在 Revoke.cash 上清理一次(撤过期与可疑);(3) 每季度大清理(Unlimited 全部 set 回限额或撤);(4) 每年总结一次跨钱包一致性。核心原则:链上数据永久公开——只能加签新撤销,不能删除历史 Event。
如果你审计完想转资产到交易所,可顺路准备 币安官网 的实名账号,并用 币安官方App 看充币地址。下载入口在 下载页。
4 级审计节奏
| 频率 | 动作 | 时间 |
|---|---|---|
| 每周 | 快速扫一眼异常 | 5 分钟 |
| 每月 | Revoke.cash 多链清理 | 30 分钟 |
| 每季度 | Unlimited 大清理 | 1-2 小时 |
| 每年 | 跨钱包一致性 + 报税 | 半天 |
第 1 步:每周快速审计
| 步骤 | 操作 |
|---|---|
| 1 | 打开 revoke.cash 看主钱包 |
| 2 | 看是否有「这周新增的 approve」 |
| 3 | 异常的立即 Revoke |
| 4 | 没异常关闭 |
A:每周 5 分钟养成习惯——发现钓鱼最快。
第 2 步:每月清理
| 步骤 | 操作 |
|---|---|
| 1 | Revoke.cash 切多链查全部 |
| 2 | 撤超过 30 天没用的(Last Used > 30 天) |
| 3 | 撤所有 EOA Spender |
| 4 | 撤 Unlimited 给陌生合约 |
| 5 | 选 Gas 低谷批量做 |
A:「30 天没用就撤」是黄金标准——很少有真正合理的用例需要持续保留 30 天前的 Unlimited。
第 3 步:每季度大清理
| 步骤 | 操作 |
|---|---|
| 1 | 列所有 Unlimited approve(不分合约) |
| 2 | 评估每个 Unlimited 是否真的需要 |
| 3 | 不需要的全撤 |
| 4 | 必须保留的(如给 Permit2)确认是熟悉合约 |
| 5 | 跨钱包一致性检查 |
第 4 步:每年总结
| 维度 | 检查 |
|---|---|
| 历史损失统计 | 全年是否被钓走过资产 |
| 新增钱包 | 是否需要做新审计 |
| 报税资料 | 配合 CSV 导出 |
| 钱包架构 | 主钱包/操作钱包是否合理 |
| 工具更新 | 钱包扩展是否需要换 |
详见 OKLink 用法 分类的资产快照功能篇。
第 5 步:用 API 自动化监控
# 周扫描脚本
import requests, datetime
KEY = "YOUR_KEY"
addresses = ["0x...A", "0x...B"]
chains = [1, 56, 137]
for addr in addresses:
for chain in chains:
url = f"https://api.etherscan.io/v2/api?chainid={chain}&module=account&action=tokenapproval&address={addr}&apikey={KEY}"
r = requests.get(url).json()
approvals = r.get('result', [])
# 筛选最近 7 天新增的
cutoff = datetime.now() - timedelta(days=7)
recent = [a for a in approvals if a['timestamp'] > cutoff]
if recent:
print(f"WARNING: {addr} chain {chain} 新增 {len(recent)} 个授权")
A:自动每周扫一次发现异常——比手动定期审更敏锐。
第 6 步:建立钱包架构
| 钱包类型 | 用途 | 审计频率 |
|---|---|---|
| 主钱包(冷藏) | 大额资产持有,不连任何 DApp | 每年 1 次 |
| 操作钱包(热) | 日常 DEX / DApp | 每月 |
| 实验钱包 | 新协议尝试 | 每周 |
| 临时钱包 | 一次性操作 | 用完即抛 |
A:多钱包架构 + 分级审计让资产风险分层管理——主钱包 100% 安全,热钱包小额可控。
实战:年度大审计的完整流程
| 步骤 | 操作 | 时间 |
|---|---|---|
| 1 | 列出全部钱包(地址 + 用途) | 30 分钟 |
| 2 | 用 V2 API 拉每个钱包跨链授权 | 5 分钟 |
| 3 | 用 OKLink 资产快照看持仓 | 10 分钟 |
| 4 | 用 Revoke.cash 全清单一次撤 | 1-2 小时 |
| 5 | 主钱包剩余资产是否合理分配 | 30 分钟 |
| 6 | 报税 CSV 导出 + 计算 PnL | 1 小时 |
| 7 | 写年度总结(损失/收益 / 教训) | 30 分钟 |
配合 Etherscan 历史 Event 查
如果想看「过去 1 年某 token 的所有 approve 历史」:
GET https://api.etherscan.io/v2/api
?chainid=1
&module=logs
&action=getLogs
&fromBlock=BLOCK_1_YEAR_AGO
&toBlock=latest
&address=0xTOKEN_CONTRACT
&topic0=0x8c5be1e5... // Approval event signature
&topic1=0x...0xYOUR_ADDRESS // padded address
&apikey=YOUR_KEY
返回该 Token 你历史所有 Approval Event。详见 查交易 分类的 Logs / Events 篇。
风险提示
审计是「发现 + 修正」过程——已发生的损失不会因为审计而恢复。审计的价值在「未来」:避免下一次损失。
如果资产想出金,可借助 币安官网 走 C2C。
实操核对清单
- [ ] 已建立周/月/季/年 4 级审计
- [ ] 每周 5 分钟扫一眼
- [ ] 每月 Revoke.cash 多链清理
- [ ] 每季度大清 Unlimited
- [ ] 每年总结 + 报税 + 钱包架构
- [ ] 自动化监控脚本(高级)
- [ ] 多钱包架构合理
一站式回顾
A:授权审计 = 4 级节奏 + 多钱包架构 + 自动化辅助。核心 4 个动作:周扫、月清、季理、年结。核心 1 个心法:链上数据永久——唯一办法是加签撤销,不是删除。
如果想全面了解链上数据分析,下一步建议看 链上数据分析 分类的入门篇。
常见问题
我能不能让审计自动撤销?
A:技术上能但风险高。自动撤销需要私钥在脚本里——一旦泄漏全账户失守。推荐「自动监控 + 人工确认撤销」。
历史授权 Event 能删除吗?
A:不能。链上数据永久——只能 emit 新的 Approval(spender, 0) 撤销 Event 「叠加」。新撤销操作能让 allowance 归零,但旧的 Approval Event 永远在那。
多签 Safe 钱包怎么审计授权?
A:同方式但流程更长——Safe 撤销要走 multi-sig 流程(threshold 个 owner 签名)。对项目方金库每月审计是标准。
我从未发现过钓鱼,还需要审计吗?
A:需要。审计是「预防 + 发现」双重作用。没发现可能是真的没发生,也可能是已被钓但没察觉——定期审能识别后者。
报税要的授权信息怎么导出?
A:Etherscan / BscScan 等都支持 CSV 导出 Approval Event 历史——或用 V2 API 自己拉。报税软件(Koinly / Cointracker)能直接导入。
多钱包架构会不会增加管理成本?
A:会增加管理成本,但减少风险成本。对持仓 ≥ 10 万 USD 的用户必要——一个被钓最多失去操作钱包,主钱包安全。
年度审计该花多少时间?
A:半天到一天合理。重度 DeFi 用户可能要 2-3 天(多钱包多协议复杂)。普通用户半天即可。
文档发布于 2026-05-08,下次复测计划 2026-08-08(约每 90 天回访一次,确认审计 4 级节奏与 V2 API Logs 查询格式未变)。