用途:在通过区块链 RPC 与智能合约交互时使用,涵盖读取合约状态(view/pure 函数)、写入交易(改变状态的调用)、ABI 数据编解码、直接或经工厂部署合约、处理代理模式(EIP-1967、UUPS、Transparent)、以及通过 Multicall3 批量读取。
前置依赖:需要 MCP 的 blockchain-rpc-server;已知协议 ABI 需 defi-protocol-server;未知合约需 security-audit 筛查。护栏要求交互前先验证合约。
工作流:
- 合约验证:任何写交互前,检查合约是否在区块浏览器(Etherscan API)已验证;未验证则比对字节码哈希,与已知良好不匹配则阻止;运行拉地毯模式检查;确认地址不在制裁名单。
- 读调用:优先使用带显式区块标签的 eth_call,示例:const result = await provider.call({ to: contractAddress, data: iface.encodeFunctionData('balanceOf', [userAddress]) }, 'latest'); 可用 Multicall3(0xcA11bde05977b3631167028862bE2a173976CA11)批量读取。
- 写调用:用 ABI 编码函数调用;估算 gas(eth_estimateGas 加 20% 缓冲);将 from 设为签名者通过 eth_call 模拟;检查代币授权,若为 type(uint256).max 给予警告;以合适 gas 参数提交交易。
- 部署:直接部署用于简单不可变合约;CREATE2 用于跨链确定性地址;EIP-1967 代理用于可升级逻辑合约;UUPS 用于节省 gas 的升级(逻辑合约持有升级权);最小代理(EIP-1167)用于克隆工厂模式。
- 代理交互:读取实现地址使用存储槽 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;始终与代理地址而非实现地址交互;验证实现合约在无时间锁时不可自毁。
ABI 资源:knowledge-base/standards/ 提供 ERC 接口 ABI;defi-protocol-server 提供预索引协议 ABI;未知合约可查 Etherscan 已验证源码。
限制:资料未提供具体支持链、代币标准范围、gas 上限或错误处理细节;使用需先配置所列 MCP 服务。