【问题标题】:How to get balances with wallet address and list token addresses?如何获取钱包地址余额和列表代币地址?
【发布时间】: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


    【解决方案1】:

    错误来自以下行

    IERC20(tokenAddresses[i]).balanceOf(walletAddress);
    

    它很可能与您的输入参数有关。确保令牌地址实际上是有效的 ERC20 令牌。

    因此,与其直接传递令牌地址,不如创建/部署 IERC20 令牌并将已部署令牌的地址传递到 getBalances 函数中进行测试更安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2020-10-05
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      相关资源
      最近更新 更多