如何通过Axelar实现ERC20Votes跨链代币并支持远程链调用非标准方法
解决方案
1. 先排除调试工具干扰
你看到的debug_traceTransaction错误,是因为BNB链的公共节点大多不开放debug类RPC方法,这只是Remix调试时的工具报错,并非delegate调用失败的根本原因。建议直接发送交易后,通过BSCScan查看失败交易的Revert Reason,这才是定位问题的关键依据。
2. 检查BNB链上跨链代币的合约实现
Axelar跨链门户部署的远程链代币,并非直接复制主链的ERC20Votes合约,而是Axelar封装的代理合约,大概率没默认暴露delegate这类ERC20Votes专属接口。需要确认:
- 主链的ERC20Votes合约是否在实现Axelar跨链接口的同时,配置了同步非ERC20原生方法的逻辑;
- BNB链上的代币合约是否是ERC20Votes的完整实现,还是仅支持基础转账的代理合约。如果是代理,要确保它能将
delegate、getVotes等函数调用转发到对应的实现合约。
3. 验证接口兼容性
在Remix中先调用supportsInterface方法,传入ERC20Votes的接口ID(0x9d61b245),确认BNB链上的合约是否支持该接口。如果返回false,说明合约未完整实现ERC20Votes逻辑,需要:
- 主链的ERC20Votes合约需明确继承
ERC20Votes并声明IERC20Votes接口,部署时告知Axelar同步这些额外接口; - 若Axelar默认不支持转发非标准ERC20方法,需自定义跨链代币逻辑,在BNB链部署完整的ERC20Votes合约,通过Axelar消息服务同步投票委托等状态。
4. 检查交易参数与权限
- 确认调用
delegate时传入的委托地址格式正确,且账户有足够BNB支付Gas; - 部分跨链代币可能对非转账方法设有限制,比如仅允许主链合约触发状态更新,需查阅Axelar跨链代币文档,确认远程链是否支持直接调用
delegate这类方法。
5. 测试简化场景
先在BNB链部署一个独立的ERC20Votes测试合约,调用delegate看是否正常。如果正常,说明问题出在Axelar跨链合约的封装逻辑上;如果仍失败,可能是编译器版本不兼容(主链与BNB链部署时用的编译器版本不一致)或节点异常导致。
内容的提问来源于stack exchange,提问作者codebeastmagic
相关产品推荐
相关产品推荐

