微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何查询地址的代币余额?

如何解决如何查询地址的代币余额?

我使用的合同来自: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);
    }

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

is posible call public view return deployed,from anther contract?

解决方法

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

  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);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。