如何获取Solidity多文件格式合约的完整可交互ABI?
多文件Solidity合约完整ABI获取方案
针对链上多文件验证、单接口仅返回主合约部分ABI的问题,可通过以下三种稳定方案获取完整可交互的ABI:
- 本地编译生成
首先从区块浏览器页面完整复制全部8个源文件,严格按照页面标注的目录结构、文件名保存到本地,确认该合约的编译参数:Solidity编译器版本、EVM版本、是否开启优化、优化运行次数,所有参数和链上验证配置完全一致后,使用对应版本的solc编译器执行编译命令:solc --abi 主合约入口文件名.sol -o 输出目录 [对应编译参数,比如--optimize --optimize-runs=200]
编译完成后输出目录中主合约对应的ABI文件即为包含所有继承方法、事件的完整ABI。 - Remix在线编译
将所有源文件按对应目录结构导入Remix,在编译器设置面板选择和链上完全匹配的编译参数,直接编译主合约,编译完成后从ABI面板复制的内容即为完整ABI。 - 反编译补全
若仅需使用少量主合约未暴露的继承方法,也可先反编译合约获取所有公共方法、事件的选择器,和区块浏览器返回的ABI做对比,手动补全缺失的方法/事件定义即可,补全后需要校验选择器准确性,避免参数配置错误。
注意:所有编译操作必须保证参数和链上验证配置完全一致,否则生成的ABI会出现方法签名不匹配、无法正常交互的问题
内容的提问来源于stack exchange,提问作者Scott Hsiao
相关产品推荐
相关产品推荐

