我正试图从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
传递,而不是作为Contract
的ethers.js
实例传递。
const poolAddress = "0x123...";
await contract.getReservesData(poolAddress);
使用"0x123…";而是"0x123…",由于某种原因,它不会将地址解析为为"0x123.."的字符串