【发布时间】:2022-06-16 03:13:12
【问题描述】:
我有一个使用 Hardhat 的本地测试网节点。我可以使用纯 javascript async await 和 const { ethers, upgrades } = require("hardhat"); 成功部署和测试我的合约。
我正确地返回并打印到控制台,一个 BigNumber 数组,其中包含来自合约函数的 2 个元素。
但是useDapp函数调用返回的值不同。
我已经尝试了所有方法:JSON.stringify(array) 返回 [[]],array[0] 返回未定义,BigNumber.from(array).toNumber 抛出一些疯狂的 BigNumber 错误,等等。但我知道合约给了它正确的值。
为什么我在 2 个不同的 javascript 文件中得到 2 个不同的值?我假设这是安全帽测试文件检索值与 useDapp 的方式的问题。
我的 useDapp 前端钩子看起来像这样,它返回 [Array(0)] 和 length: 1:
export function useGetArray(): BigNumber[] | undefined {
const {value,error}: any = useCall({
contract: new Contract(myContract, myInterface),
method: "getArray",
args: [],
}) ?? [];
if(error) {
return error;
} else {
return value;
};
}
我的安全帽 javascript 测试看起来像这样,它返回 [ BigNumber { value: "50" }, BigNumber { value: "129" } ]:
CONTRACT = await ethers.getContractFactory("CONTRACT");
const contract = await CONTRACT.attach("0x109d198fca64d33Bd9F33E60333A544412cfAC7D");
array = await contract.getArray();
console.log(array);
请注意,另外 2 个使用 useDapp 的几乎相同的函数调用,以及一个甚至将数据传递给合约,都可以正常工作。所以问题不在于正在使用或导入 ABI 的地址。
【问题讨论】:
标签: javascript solidity web3js ethers.js usedapp