首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从另一(ERC20)合同调用ERC20 20‘S ERC20()

无法从另一(ERC20)合同调用ERC20 20‘S ERC20()
EN

Ethereum用户
提问于 2018-07-17 03:17:00
回答 1查看 822关注 0票数 0

我从契约中成功地使用了令牌的transfer()函数,但是balanceOf()函数将只返回0。(或者似乎在MyEtherWallet上)

我正在测试一种情况,在这种情况下,智能合同从EOA(Bittrex帐户)接收一个令牌并转移到另一个EOA(MyEtherWallet帐户)。

因此,我已经从MyEtherWallet部署了我的智能契约,并将令牌(在本例中为Golem)发送到该合同。

然后,调用令牌(Golem)的transfer()函数,并成功地将令牌转移到我的MyEtherWallet帐户。

我通过访问(Golem)令牌在Etherscan上的合同来检查余额,该合同已经成功地转移到我的帐户(MyEtherWallet帐户)。

但是,每当我试图从契约中读取令牌的余额时,它只显示0。

我认为这是由于小数,所以我尝试乘法,除以从balanceOf()函数返回的数量。然而,它们都不起作用。它只显示0。

我是如此迷失在这里,并要求更先进的坚实的开发人员的帮助。我能做些什么来签订一份能读到标记的余额的合同?

感谢您的收听。

这是我做的智能合同代码。

认为问题是持续的,尝试使用视图,但没有起作用。此外,此代码没有将返回余额乘以的函数。

代码语言:javascript
复制
pragma solidity ^0.4.24;

contract ERC20Basic{

function balanceOf(address _owner) external constant returns (uint256 balance);
function transfer(address to, uint256 value) public returns (bool);


}

library SafeMath {//SafeMath Code}

contract TokenTransferContract{

using SafeMath for uint256;

address _owner;
address _tokenAddress;
ERC20Basic erc20Instance;

constructor () public {

    _owner = msg.sender; //Contract distributor is the owner of this contract.

}

// Setting the instance to call functions from different contract (In this case ERC20 Token's function)

function setTokenInstance(address _tokenContractAddress) public {

    _tokenAddress = _tokenContractAddress;
    erc20Instance = ERC20Basic(_tokenContractAddress);

}

//transfer function works.

function transferContractTokenToOwner(uint256 _tokenAmount) public {
    require(_owner == msg.sender);

    erc20Instance.transfer(_owner, _tokenAmount); //Transfering the amount of token that was allocated with the address of this(UserTokenWalletContract) address to Owner(EOA).

}

function getAmountOfTokenOfOwner() view public returns (uint256 _amount){
    require(_owner == msg.sender);

    _amount = (erc20Instance.balanceOf(_owner)).div(1000000000000000000);

}

function getAmountOfTokenOfContract() view public returns (uint256 _amount){

    require(_owner == msg.sender);

    _amount = (erc20Instance.balanceOf(address(this))).div(1000000000000000000);

}

 function noneDecimalGetAmountOfTokenOfOwner() view public returns (uint256 _amount){
    require(_owner == msg.sender);

    _amount = erc20Instance.balanceOf(_owner);

}

function noneDecimalgetAmountOfTokenOfWalletContract() view public returns (uint256 _amount){
    require(_owner == msg.sender);

    _amount = erc20Instance.balanceOf(address(this));

}


function getOwnerAddress() view public returns (address _ownerAddress){
    _ownerAddress = _owner;

}

function getContractAddress() view public returns (address _contractAddress){
    _contractAddress = address(this);

}

function getContractInstanceAddress() view public returns (address _contractInstanceAddress){ 
    _contractInstanceAddress = _tokenAddress;

}

}
EN

回答 1

Ethereum用户

发布于 2018-07-17 07:33:32

找到答案了。

问题是balanceOf函数中的require()状态。

balanceOf函数不需要事务,这意味着它没有msg.sender。msg.sender是0x00000000000000000。

它实际上不需要有一个require()语句。是打电话的。

所以我想多亏了我。

日安!

今天也祝你愉快!

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

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

复制
相关文章

相似问题

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