【发布时间】:2022-11-15 06:34:14
【问题描述】:
嗨,我是区块链、松露和 Solidity 的新手,我已经被这个问题困扰了很长时间。我想获取给定钱包地址的所有代币余额和使用合约的代币合约地址,但我一直遇到
错误:返回错误:处理事务时出现 VM 异常:还原
每当我测试我的合同时。
这是我在 Solidity 中的合约代码:
pragma solidity ^0.8.17;
import {IERC20} from './IERC20.sol';
contract UtilityContract {
function getBalances(address walletAddress, address[] memory tokenAddresses) public view returns (address[] memory, uint[] memory) {
uint len = tokenAddresses.length;
uint[] memory balances = new uint256[](len);
for (uint i=0; i<len; i++) {
balances[i] = IERC20(tokenAddresses[i]).balanceOf(walletAddress);
}
return (tokenAddresses, balances);
}
}
这是我的测试代码:
const ADDRESS = "0xF977814e90dA44bFA03b6295A0616a897441aceC"; // some wallet address with token balance
const TOKENS = [ // token contract addresses
"0x111111111117dC0aa78b770fA6A738034120C302",
"0xC943c5320B9c18C153d1e2d12cC3074bebfb31A2",
];
const UtilityContract = artifacts.require('UtilityContract.sol');
contract('UtilityContract', ()=> {
it('getBalances', async ()=> {
const utilityContract = await UtilityContract.new();
const output = await utilityContract.getBalances(ADDRESS, TOKENS);
console.log(output);
});
});
这是错误的屏幕截图:
我导入了 IERC20 接口以使用 balanceOf 功能,但由于某种原因它不起作用。
【问题讨论】:
标签: javascript testing blockchain solidity truffle