首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个导入合同的合同中调用"balanceOf“。预期1:0

从另一个导入合同的合同中调用"balanceOf“。预期1:0
EN

Ethereum用户
提问于 2020-10-09 06:04:04
回答 1查看 1.6K关注 0票数 0

我有一个ERC20合同,在ERC721合同中调用BalanceOf;

在我的ERC20合同中;

代码语言:javascript
复制
import "./NFT.sol";

    contract ERC20 {
    
     NFT public nft;
    
     constructor (NFT _nftAddress) public {
      nft = _nftAddress;
    }
    function getNFTBalance(address _nftOwner) public view returns (uint256 result){
           nft.balanceOf(_nftOwner);
           return result;
       }

我用的是来自OpenZeppelin的OpenZeppelin

我的NFT合同进口NFT 21溶胶

代码语言:javascript
复制
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

在the 721中,BalanceOf函数;

代码语言:javascript
复制
function balanceOf(address owner) public view override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");

        return _holderTokens[owner].length();
    }

这就是我如何在2_deploy_contracts.js中部署时传递契约地址的方式。

代码语言:javascript
复制
module.exports = async function(deployer) {
  // deploying the ERC20 Token
  const accounts = await web3.eth.getAccounts();

  await deployer.deploy(Token);

  // deploying the NFT
  const NFT_NAME = "ID Exclusivity Token";
  const NFT_SYMBOL = "IDET";
  const NFT_API = "https://example.com/nft/api/token/"

  await deployer.deploy(NFT, NFT_NAME, NFT_SYMBOL, NFT_API)

  .then( async () => {
    nftContractAddress = NFT.address;
    console.log('NFT ADDRESS : ',nftContractAddress)
    const feeAccount = accounts[0];
    const feePercent = 10;
    //Deploying Exchange with the NFT address
    await deployer.deploy(Exchange, nftContractAddress, feeAccount, feePercent);
  })
};

我可以用控制台日志确认地址是正确的。

部署完毕后,在松露控制台中:

代码语言:javascript
复制
nft = await NFT.deployed()

await nft.mint("0x851ffbF315d9d32E8DBE75b10B1E0b8C030320cf")

exchange = await Exchange.deployed()

await exchange.getNFTBalance("0x851ffbF315d9d32E8DBE75b10B1E0b8C030320cf") // return 0

await nft.balanceOf("0x851ffbF315d9d32E8DBE75b10B1E0b8C030320cf") // return 1
EN

回答 1

Ethereum用户

发布于 2020-10-09 18:52:17

我返回了一个默认情况下为0的结果。

将功能改为;

代码语言:javascript
复制
 function getNFTBalance(address _owner) public view returns (uint256){
        
       return nft.balanceOf(_owner);
   }

现在得到正确的平衡

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/88195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档