首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Uint256的问题

与Uint256的问题
EN

Ethereum用户
提问于 2017-10-08 04:09:12
回答 1查看 3K关注 0票数 1

这是我在这里的第一篇文章,我在搜索时找不到问题的答案。我在Metamask中使用Remix,我创建了合同,并使用下面的代码来使.I在合同中有一个造币限制。然而,令牌显示的总供应量是一个巨大的价值"10000000000000000000“,这已经高于总供应限制,因此对造币机的检查停止了执行。

undefined

代码语言:javascript
复制
   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的安全数学

代码语言:javascript
复制
 using SafeMath for uint256;
代码语言:javascript
复制
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;

}

代码语言:javascript
复制
 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个小数,并将这个值与所有的小数放在一起。

EN

回答 1

Ethereum用户

回答已采纳

发布于 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,在这种情况下,您将只处理不可除的整数值。缺点是你不能提供少量的令牌。

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

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

复制
相关文章

相似问题

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