以太.js:类型为 "contract" 的 solidity 方法参数:错误:地址或 ENS 名称无效



我正试图从ethersjs调用以下solidity函数(以另一份合同为论据(:

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函数接受一个Solidity接口,该接口由address类型的ABI解码。

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

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

使用"0x123…";而是"0x123…",由于某种原因,它不会将地址解析为为"0x123.."的字符串

最新更新