以太坊DeFi查询与交换服务

一个基于Rust构建的Model Context Protocol (MCP)服务器,使AI代理能够查询以太坊上的余额并执行代币交换操作。

  • by tgscan
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 tgscan-dev/dex-mcp-rs

使用说明

DEX MCP RS - 以太坊去中心化金融(DeFi)MCP 服务器

一个用Rust构建的模型上下文协议(MCP)服务器,它使AI代理能够在以太坊上查询余额并执行代币交换。该服务器提供了与以太坊和Uniswap V2交互的三个核心工具。

特点/特性

  • 获取余额 - 查询任意地址的以太币(ETH)和ERC20代币余额
  • 获取代币价格 - 从Uniswap V2池中获取实时代币的以太坊(ETH)和美元(USD)价格
  • 交换代币 - 在Uniswap V2上模拟代币交换(不在线上执行)

先决条件

  • Rust 1.70 或更高版本
  • 以太坊RPC端点(Infura、Alchemy或本地节点)
  • 用于交易签名的私钥(估算气体费用时必需)

设置说明

1. 克隆仓库

git clone https://github.com/yourusername/dex-mcp-rs.git
cd dex-mcp-rs

2. 配置环境变量

创建一个 .env 项目根目录下的文件:

cp .env.example .env

编辑 .env 并添加您的凭据:

RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY
PRIVATE_KEY=your_private_key_here

⚠️ 安全警告: 永远不要把自己的 .env 不要保存或分享你的私钥!

3. 构建项目

cargo build --release

4. 运行服务器

cargo run --release

服务器将启动并监听标准输入/输出上的MCP请求。

设计决策

为何选择合金? Alloy 是一个现代化的、高性能的 Rust 语言 Ethereum 库,具有出色的类型安全性和模块化设计。与较旧的 ethers-rs 库相比,它提供了更好的用户体验和维护性。

为什么选择Uniswap V2? 与V3的集中流动性模型相比,V2采用了一个更简单的恒定乘积公式(x * y = k),这使得其实现和理解更加容易,同时仍然能为大多数代币对提供准确的定价。

为何采用链上定价? 直接从Uniswap池储备中推导价格,消除了对外部API的依赖,并确保数据始终是最新的且无需信任,尽管这需要更多的RPC调用。

为什么使用 eth_call 进行模拟? 使用 eth_call 它使我们能够在不在线上执行交易的情况下模拟交易,提供准确的燃气费用估算,并在不消耗燃气或要求代币授权的情况下捕获潜在的失败情况。

测试

运行测试套件:

cargo test

注:集成测试用以下标记表示 #[ignore] 默认情况下,它们需要有效的RPC连接才能运行。要运行它们:

cargo test -- --ignored

确保你的 .env 在运行集成测试之前已配置文件。

已知的限制

  • 仅限主网当前已配置为以太坊主网。如需使用测试网,请更新RPC URL和合约地址。
  • 仅限Uniswap V2不支持Uniswap V3或其他去中心化交易所(DEX)。
  • 需要充值钱包估算燃气费用需要一个拥有一定以太币(ETH)余额的钱包。
  • 价格准确性假设WETH和USDC交易对具有足够的流动性。流动性较低的交易对可能定价不准确。
  • 无交易执行交换工具仅用于模拟,并不执行实际的交换操作。

建筑

src/
├── main.rs              # MCP server setup and request routing
├── config.rs            # Configuration management
├── types.rs             # Shared types and request/response structures
├── ethereum/
│   ├── mod.rs           # Ethereum client wrapper
│   └── contracts.rs     # Smart contract ABIs (ERC20, Uniswap V2)
└── tools/
    ├── mod.rs           # Tool module exports
    ├── balance.rs       # get_balance implementation
    ├── price.rs         # get_token_price implementation
    └── swap.rs          # swap_tokens implementation

智能合约地址(主网)

  • Uniswap V2 路由器: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
  • Uniswap V2 工厂: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
  • WETH(Wrapped Ethereum,以太坊封装币): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
  • USDC(美元稳定币): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

发展

项目结构

该项目采用模块化架构:

  • 配置环境与配置管理
  • 以太坊与合金结合的区块链交互层
  • 工具MCP工具实现(平衡、定价、交换)
  • 类型共享数据结构

添加新工具

  1. 定义输入/输出类型于 src/types.rs
  2. 实现工具逻辑在 src/tools/
  3. 在(系统/平台中)注册该工具 src/main.rs 在……中 create_router 函数
  4. 添加测试到 tests/integration_tests.rs

做出贡献

欢迎投稿!请确保:

  • 代码编译无警告: cargo build
  • 所有测试通过: cargo test
  • 代码已格式化: cargo fmt
  • 代码通过了 clippy 的检查: cargo clippy

许可证

麻省理工学院(MIT)

安全

这是一段用于教育目的的演示代码。如需生产环境使用:

  • 使用安全的密钥管理系统(硬件安全模块,密钥管理服务)
  • 实施速率限制
  • 添加全面的错误处理
  • 彻底审计所有代码
  • 切勿在日志或错误信息中暴露私钥

致谢

构建于: