首页 > 解决方案 > 如何查看地址的代币余额?

问题描述

我使用的合同来自:https ://bscscan.com/address/0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c#readContract

我已经看到它有一个公共变量,它是:

mapping (address => uint) public balanceOf;

我正在尝试调用我的合同,但我不太清楚如何使用它,是通过接口还是以什么方式

contract checkBalanceOf {
    mapping (address => uint) public  balanceOf;
    function balanceOf() public returns (uint256) {
        address  ERC20Address = targetInterface(0x18895B2a605CdAb301482d8F96E59FaDc17964C3);
        return ERC20Address.balanceOf(bankAddress);
    }

我试图应用这个答案的逻辑,但不同的是,这个答案没有公共功能

是否从另一个合同部署了可能的调用公共视图返回?

标签: soliditysmartcontracts

解决方案


为了检查拥有多少WBNBbankAddress并从您自己的合同中执行检查,您的合同需要:

  1. balanceOf()在接口中定义函数
  2. 实例化指向WBNB合约地址的接口
  3. 调用传递它的WBNB函数balanceOf()bankAddress
  4. 推荐:将调用包装在一个view函数中,以便在某些客户端应用程序中默认使用调用而不是事务。
pragma solidity ^0.8;

interface IBEP20 {
    // mind the `view` modifier
    function balanceOf(address _owner) external view returns (uint256);
}

contract checkBalanceOf {
    address bankAddress = address(0x123);

    // mind the `view` modifier
    function balanceOf() external view returns (uint256) {
        // creating a pointer to the WBNB contract
        IBEP20 WBNBContract = IBEP20(0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c);

        // getting balance of `bankAddress` on the WBNB contract
        return WBNBContract.balanceOf(bankAddress);
    }
}

推荐阅读