我从契约中成功地使用了令牌的transfer()函数,但是balanceOf()函数将只返回0。(或者似乎在MyEtherWallet上)
我正在测试一种情况,在这种情况下,智能合同从EOA(Bittrex帐户)接收一个令牌并转移到另一个EOA(MyEtherWallet帐户)。
因此,我已经从MyEtherWallet部署了我的智能契约,并将令牌(在本例中为Golem)发送到该合同。
然后,调用令牌(Golem)的transfer()函数,并成功地将令牌转移到我的MyEtherWallet帐户。
我通过访问(Golem)令牌在Etherscan上的合同来检查余额,该合同已经成功地转移到我的帐户(MyEtherWallet帐户)。

但是,每当我试图从契约中读取令牌的余额时,它只显示0。
我认为这是由于小数,所以我尝试乘法,除以从balanceOf()函数返回的数量。然而,它们都不起作用。它只显示0。
我是如此迷失在这里,并要求更先进的坚实的开发人员的帮助。我能做些什么来签订一份能读到标记的余额的合同?
感谢您的收听。
这是我做的智能合同代码。
认为问题是持续的,尝试使用视图,但没有起作用。此外,此代码没有将返回余额乘以的函数。
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;
}
}发布于 2018-07-17 07:33:32
找到答案了。
问题是balanceOf函数中的require()状态。
balanceOf函数不需要事务,这意味着它没有msg.sender。msg.sender是0x00000000000000000。
它实际上不需要有一个require()语句。是打电话的。
所以我想多亏了我。
日安!
今天也祝你愉快!
https://ethereum.stackexchange.com/questions/54503
复制相似问题