【问题标题】:Ethers.js: Solidity method arguments of type "contract": Error: invalid address or ENS nameEthers.js:“合约”类型的 Solidity 方法参数:错误:地址或 ENS 名称无效
【发布时间】:2022-08-20 20:19:57
【问题描述】:

我正在尝试从 ethersjs 调用以下可靠性函数 (它需要另一个合同作为参数):

function getReservesData(IPoolAddressesProvider provider) public view override ...

我试过这段代码:

 const provider = new ethers.providers.JsonRpcProvider(env.network);
 
 const contract = new ethers.Contract(
            \'0x...\'
            [ ...], // contract json abi
            provider
        );

const poolAddressProvider = new ethers.Contract(
            \'0x...\'
            [ ...], // pool address provider json abi
            provider
        );

await contract.getReservesData(poolAddressProvider);

我收到以下错误:

core.mjs:6484 ERROR Error: Uncaught (in promise): Error: invalid address or ENS name (argument=\"name\", value=\"[object Object]\", code=INVALID_ARGUMENT, version=contracts/5.5.0)
Error: invalid address or ENS name (argument=\"name\", value=\"[object Object]\", code=INVALID_ARGUMENT, version=contracts/5.5.0)

可能我错过了一些关于如何传递合同类型参数的关键信息。

  • 哪一行抛出错误?你在那条线上传递了什么价值?
  • 引发错误的行是最后一行。在其中我尝试调用合同的方法,将另一个合同作为参数传递

标签: solidity web3js ethers.js


【解决方案1】:

Solidity 函数接受一个 Solidity 接口,该接口是从 address 类型解码的 ABI。

因此,在 JS 中,您需要将池地址作为 string 传递 - 而不是 Contractethers.js 实例。

const poolAddress = "0x123...";
await contract.getReservesData(poolAddress);

【讨论】:

  • 谢谢您的回答。我以前尝试过这种方法。在这种情况下,我可以调用合约接口,但事务被还原:错误错误:未捕获(承诺中):错误:调用还原异常(方法=“getReservesData(地址)”,errorArgs = null,errorName = null, errorSignature=null, reason=null, code=CALL_EXCEPTION, version=abi/5.5.0) 错误:调用恢复异常 (method="getReservesData(address)", errorArgs=null, errorName=null, errorSignature=null, reason=null , 代码=CALL_EXCEPTION, 版本=abi/5.5.0)
  • @andreasimeoni这是调用该函数的正确方法。但是,您的函数在运行时恢复了。这可能由多种原因引起,但主机恢复的常见原因是:1)require() 条件失败,2)对未部署在同一网络上的合约的内部调用失败,3)算术错误(例如溢出或除法)由零)
  • 我试图用类似的签名调用另一种方法,你的建议确实有效。谢谢!
【解决方案2】:

使用“0x123 ...”而不是“0x123 ...”,由于某种原因,它不会将地址解析为带有“0x123 ...”的字符串

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2019-12-21
    • 2018-11-30
    • 2011-02-05
    • 2017-09-21
    • 2022-08-19
    • 2021-02-14
    相关资源
    最近更新 更多