[论文解读] SIF: A Framework for Solidity Code Instrumentation and Analysis
SIF 是一个基于 C++ 的全面框架,用于 Solidity 智能合约的分析、代码插桩和代码生成,使开发人员能够通过其抽象语法树(AST)查询、转换和生成 Solidity 代码。它支持 7 个实用工具,用于漏洞检测、代码分析和调试,并在 1,838 个真实以太坊合约上成功评估,展现出高可用性和自动化程度,证明了其作为智能合约开发统一工具链基础设施的可行性。
Solidity is an object-oriented and high-level language for writing smart contracts that are used to execute, verify and enforce credible transactions on permissionless blockchains. In the last few years, analysis of smart contracts has raised considerable interest and numerous techniques have been proposed to check the presence of vulnerabilities in them. Current techniques lack traceability in source code and have widely differing work flows. There is no single unifying framework for analysis, instrumentation, optimisation and code generation of Solidity contracts. In this paper, we present SIF, a comprehensive framework for Solidity contract analysis, query, instrumentation, and code generation. SIF provides support for Solidity contract developers and testers to build source level techniques for analysis, understanding, diagnostics, optimisations and code generation. We show feasibility and applicability of the framework by building practical tools on top of it and running them on 1838 real smart contracts deployed on the Ethereum network.
研究动机与目标
- 为解决当前依赖零散的低级别字节码分析或不完整的源码到中间表示(IR)转换,缺乏统一的 Solidity 代码分析、插桩和转换框架的问题。
- 为 Solidity 开发者和测试人员提供一个类似 C/C++ 的 Clang LibTooling 的高级、可重用且可扩展的框架。
- 实现端到端的源码级别程序分析、转换和代码生成,确保与原始 Solidity 源码的强可追溯性。
- 通过可重用的帮助函数和简洁的 C++ 接口,支持自定义工具的开发,用于安全分析、诊断和测试。
- 通过在 1,838 个真实以太坊智能合约上的实际部署,评估框架的可用性、性能和可扩展性。
提出的方法
- 该框架使用基于 C++ 的 Solidity AST 中间表示,为 AST 遍历和操作提供清晰且可扩展的接口。
- 提供帮助函数用于查询 AST 节点、插入插桩(例如断言),以及执行代码转换,如重命名或引入缺陷。
- 通过从修改后的 AST 重建 Solidity 源码来支持代码生成,同时提供禁用默认代码输出的功能,以适用于纯分析任务。
- 该框架支持 AST 级别的语法差异比对、调用图和控制流图生成,以及通过静态分析 AST 节点实现漏洞检测。
- 支持基于文本和 JSON 格式的 AST 输入,并通过性能分析识别出 JSON AST 解析中的性能瓶颈。
- 该框架具有可扩展性:用户可使用提供的接口实现新工具,内置支持通过前置/后置访问器函数在 AST 节点间维护状态。
实验结果
研究问题
- RQ1能否构建一个统一的、基于源码级别的 Solidity 框架,支持插桩、分析和代码生成,并实现与源码的完整可追溯性?
- RQ2该框架在开发人员和测试人员构建和部署自定义分析工具时,其可用性和自动化程度如何?
- RQ3基于 AST 的代码生成和分析在真实世界智能合约上的性能开销如何?
- RQ4该框架在支持漏洞检测、代码转换和诊断等多种用例方面的有效性如何?
- RQ5该框架能否被全球开发社区扩展并采纳,用于实际的智能合约工具开发?
主要发现
- SIF 成功处理了全部 1,838 个真实世界以太坊智能合约,证实了该框架的稳健性和可扩展性。
- 基于 SIF 开发的 7 个工具——如断言分析器、调用图生成器和故障注入器——经三位用户评估者验证,输出结果均正确。
- 用户对工具和框架的可用性评价很高,平均易用性评分为 3.7 / 5,且认为这些工具几乎完全自动化。
- 对于大多数合约,AST 代码生成效率很高:代码行数少于 1,000 行的合约,生成时间均在 4 秒以内。
- 对于一个大型合约(6,183 行代码),代码生成耗时 85.6 秒,主要原因是频繁的根级 JSON AST 查询;该瓶颈已被识别并正在优化。
- 框架发布后获得国际关注,社区反馈推动了关键修复(如未初始化变量检测)和功能增强(如可选代码生成、详细的 AST 文档)。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。