新版Remix无法复制ABI求助:复制后仅显示[]
解决新版Remix复制ABI显示"[]"的问题
我之前也碰到过新版Remix里这个烦人的ABI复制问题!试试下面这些方法,大概率能解决:
先确认合约是否成功编译
很多时候是空ABI的问题根源在于合约没编译通过或者编译状态异常。先切换到Remix的「Solidity Compiler」标签,检查目标合约旁边有没有绿色的对勾标记。如果没有,先解决所有编译报错(比如语法错误、依赖缺失),重新编译后再尝试复制ABI。检查ABI复制的入口是否正确
新版Remix的ABI复制有几个入口,别选错了:- 编译完成后,在「Solidity Compiler」标签里找到你的合约,点击旁边的「ABI」按钮直接复制;
- 或者切换到「Deploy & Run Transactions」标签,成功部署合约后,在已部署合约的下拉菜单里找到「Copy ABI」选项。
要是误点了未编译的空文件或者未部署的合约条目,就会复制出空数组[]。
刷新页面并清除缓存
有时候Remix的前端缓存会抽风,导致ABI无法正确加载。试试刷新浏览器页面,或者清除浏览器缓存后重新打开Remix,重新编译合约再尝试复制。导出JSON文件手动提取ABI
如果上面的方法都不管用,可以直接导出编译后的JSON文件来获取ABI:
在「Solidity Compiler」标签里,点击合约旁边的「JSON」按钮下载文件,用文本编辑器打开后,找到"abi"字段对应的数组内容,直接复制这段代码即可。检查合约是否无公开接口
如果你的合约里没有任何公开函数、事件或者可外部调用的方法,ABI确实会是空数组[]——这是正常情况。只要给合约添加至少一个公开接口(比如function test() public pure returns (uint) { return 1; }),重新编译后就能生成正常的ABI了。
内容的提问来源于stack exchange,提问作者anthonyoride
相关产品推荐
相关产品推荐

