用途:在审计、评审、编写或测试 TON 智能合约(Tolk 语言)时使用,帮助识别 TON 异步 actor 模型特有的漏洞类别。
主要能力:基于 34 次审计、29 个项目、11 家机构中的 233 个漏洞整理,高频问题为逻辑错误(70)、权限(25)、中心化(19)。提供参考文件:vulnerabilities.md(漏洞目录与代码示例)、audit-checklist.md(审计清单)、tolk-security.md(Tolk 语言陷阱)、tvm-async.md(TVM 内部、异步模型、弹回消息,Tolk 1.2 / TVM 12)、tolk-best-practices.md(语言最佳实践)。
核心要点:TON 与 EVM 差异显著——异步消息传递、无同步跨合约调用、无经典重入、失败需手动弹回处理、Jetton 每用户独立钱包、Gas 耗尽无法被 try/catch 捕获、需手动实现 seqno 重放保护、手动 cell 序列化(65536 cell 上限)、账户可因存储欠费冻结删除。
十大关键漏洞:1) 缺少权限校验;2) 整数溢出/下溢(Tolk int 为 257 位有符号,定长类型算术静默溢出,仅在序列化时以退出码 5 暴露);3) 异步消息重入;4) lazy 字段绕过校验;5) union 类型 match 非穷尽(else 吞掉未知消息);6) 消息模式标志错误(如 64 后接 64、128+32 需授权、+2 静默失败);7) 存储反序列化漏洞(缺 assertEndAfterReading 可注入多余数据);8) 不安全空断言 !(TVM 退出码 7);9) 弹回消息处理错误(BounceMode.Only256BitsOfBody 仅回 256 位,TVM 12 的 BounceMode.RichBounce 回完整消息体,前缀 0xFFFFFFFE);10) Gas 耗尽/资金流失。
使用方式:按清单逐项检查——状态变更函数校验 sender、lazy 字段加载后再校验、match 穷尽、避免对不可信数据用 !、算术前后检查溢出、createMessage 标志与 BounceMode 正确、不关闭 assertEndAfterReading、外部消息含 seqno+过期+签名、异步流程发送依赖消息前先扣减余额。采用 carry-value 模式,把关键值嵌入消息而非查询状态。
工具:Tolk 编译器(tolk-js@1.2.0,目标 TVM 12)、Misti 静态分析(42 个检测器,可接入 CI/CD)、TSA 符号执行、@ton/sandbox(printTransactionFees())、BugMagnifier 异步竞态模拟、verifier.ton.org 源码验证。建议至少运行 Misti,生产环境做专业审计。
限制:资料未提供具体安装命令、价格、平台支持范围与效果数据;内容聚焦 Tolk 1.2 / TVM 12,其他语言或版本适用性暂未提供。