利用 Slither-MCP 提升 Solidity 智能合约的 LLM 工具链能力

本文介绍了 Trail of Bits 新发布的 Slither-MCP 工具,它将 Slither 强大的静态分析引擎通过 MCP 协议暴露给大型语言模型,旨在提升智能合约编写和审计的效率与准确性,包括其工作原理、使用示例和简单设置步骤。

利用 Slither-MCP 提升 Solidity LLM 工具链

我们发布了 Slither-MCP,这是一款新工具,它通过 Slither 无与伦比的静态分析引擎来增强大型语言模型(LLM)。Slither-MCP 通过工具暴露 Slither 的静态分析 API,允许 LLM 更快地查找关键代码、更高效地浏览代码库,并最终提升智能合约编写和审计的性能,几乎对 LLM 的所有用例都有益处。

Slither-MCP 如何工作

Slither-MCP 是一个 MCP(模型上下文协议)服务器,它封装了 Slither 的静态分析功能,使其可以通过 MCP 访问。它可以分析 Solidity 项目(如 Foundry、Hardhat 等),并生成关于合约、函数、继承层次结构等的全面元数据。

当 LLM 使用 Slither-MCP 时,它不再需要依赖像 grepread_file 这样的基础工具来识别特定函数在何处实现、谁是函数的调用者以及其他复杂且容易出错的任务。

因为 LLM 是概率性系统,在大多数情况下,它们只是概率上正确。Slither-MCP 利用传统的静态分析为基于 LLM 的分析设定了一个基准事实:它减少了令牌使用量,并增加了提示得到正确回答的概率。

示例:简化审计任务

考虑一个包含两个 ERC20 合约的项目:一个用于生产部署,另一个用于测试。LLM 的任务是审计合约对 ERC20.transfer() 的使用,并需要定位该函数的源代码。

在没有 Slither-MCP 的情况下,LLM 有两个选择:

  1. 尝试解析 ERC20 合约的导入路径,然后尝试调用 read_file 来查看 ERC20.transfer() 的源代码。此选项通常需要多次调用 read_file,特别是当对 ERC20.transfer() 的调用是通过从 ERC20 继承的子合约进行的时。无论如何,此选项容易出错且工具调用密集。
  2. 尝试使用 grep 工具来定位 ERC20.transfer() 的实现。根据 grep 工具调用的结构方式,它可能会返回错误的 ERC20 合约。

这两个选项都不理想,容易出错,并且不太可能以高置信区间保证正确性。

使用 Slither-MCP,LLM 只需调用 get_function_source 来定位函数的源代码。

简单设置

Slither-MCP 易于设置,可以使用以下命令将其添加到 Claude Code:

1
claude mcp add --transport stdio slither -- uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp

通过将以下内容添加到您的 ~/.cursor/mcp.json 文件中,也很容易将 Slither-MCP 添加到 Cursor:

  1. 运行 sudo ln -s ~/.local/bin/uvx /usr/local/bin/uvx
  2. 然后使用此配置:
1
2
3
4
5
6
7
{
  "mcpServers": {
    "slither-mcp": {
      "command": "uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp"
    }
  }
}

目前,Slither-MCP 暴露了 Slither 分析引擎的一个子集,我们认为 LLM 消费这些功能会获益最大。这包括以下功能:

  • 提取给定合约或函数的源代码进行分析
  • 识别函数的调用者和被调用者
  • 识别合约的派生成员和继承成员
  • 根据签名定位函数的潜在实现(例如,为 IOracle.price(...) 寻找具体定义)
  • 运行 Slither 全面的检测器套件并过滤结果

如果您对新 MCP 工具有请求或建议,我们很乐意听取您的意见。

许可

Slither-MCP 采用 AGPLv3 许可,与 Slither 使用的许可证相同。如果您在 Web 服务或 SaaS 产品中使用它,该许可证要求您发布应用程序的完整源代码。对于许多工具来说,这是不可接受的妥协。

为了帮助解决这个问题,我们现在为 Slither 和 Slither-MCP 提供双重许可。通过提供双重许可,Slither 和 Slither-MCP 可以用于支持基于 LLM 的安全 Web 应用程序,而无需发布您的整个源代码,也无需花费数年时间来复现其功能集。

如果您目前正在商业 Web 应用程序中使用 Slither,或者有兴趣使用它,请联系我们。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计