[英]Ethereum ERC20 Token contract returns 0.00 token balance when it added to wallet by remix deployed contract address
I tried creating an ERC20 token smart contract in remix editor as below. 我尝试如下在remix编辑器中创建ERC20令牌智能合约。
I am able to deploy the smart contract and all the variables hold, but when I add my contract to the wallet.ethereum.org contracts page (under watch tokens), the token balance shows as 我能够部署智能合约,并且所有变量都成立,但是当我将合约添加到wallet.ethereum.org合约页面(在监视令牌下)时,令牌余额显示为
0 while the token symbol, name, decimal places all register correctly.
0,而令牌符号,名称,小数位均正确注册。
CODE SNIPPET: 代码片段:
pragma solidity ^0.4.19;
//import './IERC20.sol';
//contract FuncToken is IERC20 {
interface IERC20 {
function totalsupply() constant returns(uint256 total);
function balanceof(address _owner)constant returns(uint256 balance);
function transfer(address to, uint256 value)returns(bool success);
function transferfrom(address from,address to,uint256 _value) returns(bool success);
function approve(address spender,uint256 value)returns(bool success);
function allowance(address owner,address spender)constant returns(uint256 remaining);
event Transfer(address indexed from,address indexed to,uint256 _value);
event Approval(address indexed owner,address indexed spender,uint256 _value);
}
contract PerlToken{
uint public constant _totalSupply=100000;
string public constant symbol="perl";
string public constant name="PERL Token";
uint8 public constant decimals=3;
mapping(address=>uint256) balances;
mapping(address=>mapping(address =>uint256)) allowed;
function FuncToken(){
balances[msg.sender]=_totalSupply;
}
function totalsupply() constant returns(uint256 total){
return _totalSupply;
}
function balanceof(address _owner)constant returns(uint256 balance){
return balances[_owner];
}
function transfer(address to, uint256 value)returns(bool success){
require(
balances[msg.sender]>=_value && _value>0
);
balances[msg.sender] -=_value;
balances[_to] +=+_value;
Transfer(msg.sender,_to,_value);
return true;
}
function transferfrom(address from,address to,uint256 _value) returns(bool success){
require(
allowed[_from][msg.sender]>=_value
&& balances[_from]>=_value
&& _value>0
);
balances[_from]-=_value;
balances[_to]+= _value;
allowed[_from][msg.sender]-=_value;
Transfer(_from,_to,_value);
return true;
}
function approve(address spender,uint256 value)returns(bool success){
allowed[msg.sender][_spender]=_value;
Approval(msg.sender,_spender,_value);
return true;
}
function allowance(address owner,address spender)constant returns(uint256 remaining){
allowed[_owner][_spender];
}
event Transfer(address indexed from,address indexed to,uint256 _value);
event Approval(address indexed owner,address indexed spender,uint256 _value);
}
You're not setting the balance when deploying the contract. 部署合同时,您无需设置余额。 I believe you intended to use
FuncToken
as your constructor. 我相信您打算将
FuncToken
用作构造函数。
I cleaned up the contract (I'm using 0.4.17 here), deployed it, and imported into Mist. 我清理了合同(我在这里使用0.4.17),将其部署并导入到Mist中。 Looks good now.
现在看起来不错。
pragma solidity ^0.4.17;
//import './IERC20.sol';
//contract FuncToken is IERC20 {
interface IERC20 {
function totalSupply() constant returns(uint256 total);
function balanceOf(address _owner)constant returns(uint256 balance);
function transfer(address to, uint256 value)returns(bool success);
function transferFrom(address from,address to,uint256 _value) returns(bool success);
function approve(address spender,uint256 value)returns(bool success);
function allowance(address owner,address spender)constant returns(uint256 remaining);
event Transfer(address indexed from,address indexed to,uint256 _value);
event Approval(address indexed owner,address indexed spender,uint256 _value);
}
contract PerlToken{
uint public constant _totalSupply=100000;
string public constant symbol="perl";
string public constant name="PERL Token";
uint8 public constant decimals=3;
mapping(address=>uint256) balances;
mapping(address=>mapping(address =>uint256)) allowed;
function PerlToken(){
balances[msg.sender]=_totalSupply;
}
function totalSupply() constant returns(uint256 total){
return _totalSupply;
}
function balanceOf(address _owner)constant returns(uint256 balance){
return balances[_owner];
}
function transfer(address _to, uint256 _value)returns(bool success){
require(
balances[msg.sender]>=_value && _value>0
);
balances[msg.sender] -=_value;
balances[_to] +=+_value;
Transfer(msg.sender,_to,_value);
return true;
}
function transferFrom(address _from,address _to,uint256 _value) returns(bool success){
require(
allowed[_from][msg.sender]>=_value
&& balances[_from]>=_value
&& _value>0
);
balances[_from]-=_value;
balances[_to]+= _value;
allowed[_from][msg.sender]-=_value;
Transfer(_from,_to,_value);
return true;
}
function approve(address _spender,uint256 _value)returns(bool success){
allowed[msg.sender][_spender]=_value;
Approval(msg.sender,_spender,_value);
return true;
}
function allowance(address _owner,address _spender)constant returns(uint256 remaining){
allowed[_owner][_spender];
}
event Transfer(address indexed from,address indexed to,uint256 _value);
event Approval(address indexed owner,address indexed spender,uint256 _value);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.