这是我在这里的第一篇文章,我在搜索时找不到问题的答案。我在Metamask中使用Remix,我创建了合同,并使用下面的代码来使.I在合同中有一个造币限制。然而,令牌显示的总供应量是一个巨大的价值"10000000000000000000“,这已经高于总供应限制,因此对造币机的检查停止了执行。
undefined
function mint(uint noOfTokens) returns (bool) {
checkTokens = _totalSupply.add(noOfTokens);
// Check the max limit and the owner before minting
require(_totalSupply <= maxLimit
&& checkTokens <= maxLimit
&& (msg.sender == address(owner)));
balances[owner] = balances[owner].add(noOfTokens);
_totalSupply = _totalSupply.add(noOfTokens);
return true;}
变量被定义为uint256。
谢谢你的帮助和支持。NKB。
undefined
普拉格玛坚实度^0.4.11;
//ERC20 20接口导入'./ERC20.sol';// value攻击下的安全数学。进口‘/SafeMath.sol’;
契约测试是ERC20 { //使用uint256的安全数学
using SafeMath for uint256;uint256 public constant maxLimit = 500000000;
uint256 public _totalSupply = 0;
string public constant symbol = "Test";
string public constant name = "TestCoin";
uint8 public constant decimals = 0;
// Rate -> 1 Ether = 1000 Just
uint256 public RATE;
// Ether reciever
address public owner;
uint public start;
uint public startWeek;
uint public startTwoWeek;
uint public startFourWeek;
uint256 public tokens;
uint256 public checkTokens;
mapping(address=> uint256) balances;
mapping(address=>mapping(address=>uint256)) allowed;
// Fallback function
// The function without name is the default function that is called
// whenever anyone sends funds to a contract
function() payable{
createTokens();
}
function Test(){
// balances[msg.sender] = _totalSupply;
owner = msg.sender; // get the owner of the token
start = now; // Get the current block time
startWeek = start + 30 minutes ; // Get the scond block time
startTwoWeek = start + 60 minutes; // Get the third block time
startFourWeek = start + 90 minutes; // Get the fourth block time .
}
// Create new tokens
function mint(uint noOfTokens) returns (bool) {
checkTokens = _totalSupply.add(noOfTokens);
// Check the max limit and the owner before minting
require(_totalSupply/1000000000000000000 <= maxLimit
&& checkTokens/1000000000000000000 <= maxLimit
&& (msg.sender == address(owner)));
balances[owner] = balances[owner].add(noOfTokens);
_totalSupply = _totalSupply.add(noOfTokens);
return true;}
function createTokens() payable {
require(msg.value >0 && _totalSupply <= maxLimit);
if (now <= startWeek && now > start) {
RATE = 1150;
tokens = msg.value.mul(RATE);
balances[msg.sender] = balances[msg.sender].add(tokens);
_totalSupply = _totalSupply.add(tokens);
owner.transfer(msg.value);
}
if (now <= startTwoWeek && now > startWeek ) {
RATE = 1100;
tokens = msg.value.mul(RATE);
balances[msg.sender] = balances[msg.sender].add(tokens);
_totalSupply = _totalSupply.add(tokens);
owner.transfer(msg.value);
}
if (now <= startFourWeek && now > startTwoWeek ) {
RATE = 1050;
tokens = msg.value.mul(RATE);
balances[msg.sender] = balances[msg.sender].add(tokens);
_totalSupply = _totalSupply.add(tokens);
owner.transfer(msg.value);
}
if (now > startFourWeek ) {
RATE = 1000;
tokens = msg.value.mul(RATE);
balances[msg.sender] = balances[msg.sender].add(tokens);
_totalSupply = _totalSupply.add(tokens);
owner.transfer(msg.value);
}
}
function totalSupply() constant returns (uint totalSupply){
return _totalSupply;
}
function balanceOf(address _owner) constant returns (uint balance){
return balances[_owner];
}
function transfer(address _to, uint _value) returns (bool success){
require( balances[msg.sender] >= _value &&
_value > 0 );
balances[msg.sender] = balances[msg.sender].sub(_value) ;
balances[_to] = balances[_to].add(_value);
Transfer(msg.sender,_to,_value);
return true;
}
function transferFrom(address _from, address _to, uint _value) returns (bool success){
require( allowed[_from][msg.sender] >= _value &&
balances[_from] >= _value
&& _value > 0 );
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
Transfer(_from,_to,_value);
return true;
}
function approve(address _spender, uint _value) returns (bool success){
allowed[msg.sender][_spender] = _value;
Approval(msg.sender,_spender,_value);
return true;
}
function allowance(address _owner, address _spender) constant returns (uint remaining){
return allowed [_owner][_spender];
}
event GoalReached(address beneficiary, uint amountRaised);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);}

尽管标记是用零小数定义的,但它为魏取了18个小数,并将这个值与所有的小数放在一起。
发布于 2017-10-08 06:42:33
因为您的decimals设置为18,所以必须先除以1,000,000,000,000,000,000 (1后面跟着18个零)才能得到_totalSupply.的整数值。
18小数位数是以太的标准。最小的单位称为微单位。1,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000魏等于1以太。这是一张单位地图。
为了简化您的契约,您可以将小数设置为0,在这种情况下,您将只处理不可除的整数值。缺点是你不能提供少量的令牌。
https://ethereum.stackexchange.com/questions/27999
复制相似问题