Comment retirer des jetons de l’offre totale?

sombre

Comment retirer des jetons de l’offre totale?


Hé les gars, je me demandais comment supprimer un jeton de l’offre totale après que quelqu’un ait acheté un jeton. Quelle fonction puis-je simplement copier et coller ici, car en l’état, cela donne au compte achetant les jetons nécessaires mais ne les supprime pas de l’offre totale?

 pragma solidity ^ 0.4 . 18 ; 

 import   './XXERC20.sol' ; 
 import   './SafeMath.sol' ; contract XXPreOrderToken   is  XXERC20 { 

     using   SafeMath   for  uint256 ; 

     uint   public  _totalSupply =   72500000000000000000000 ; 

     string   public  constant symbol = "XXPOT" ; 
     string   public  constant name =   "PreOrderToken" ; uint8 public  constant decimals =   18 ; 

     //1 ether = 1000 pre-order tokens uint256 public  constant RATE =   1000 ; address public  owner ; mapping ( address =>  uint256 )  balances ; mapping ( address =>  mapping ( address =>  uint256 ))  allowed ; 

     function ()  payable { createTokens (); 
     } 

     function   XXPreOrderToken ()   { balances [ msg . sender ]   =  _totalSupply ; owner =  msg . sender ; 
     } 

     function  createTokens ()  payable { 
         require ( msg . value >   0 ); uint256 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 ( uint256 totalSupply )   { 
         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 ]   =  balances [ msg . sender ]. sub ( _value ); balances [ _to ]   =  balances [ _to ]. add ( _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 ]   =  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 ,  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 )   { 
         return  allowed [ _owner ][ _spender ]; 
     } 
 } 

Réponses


 Nanolucas

Cela ne me semble pas que l’offre totale doive jamais changer. L’offre totale est essentiellement une offre «maximale».

En transférant un jeton d’une personne à une autre, l’offre totale n’a pas changé, seul le propriétaire d’un jeton a changé.

Lorsque vous créez ce contrat, tous les jetons sont créés et affectés à l’adresse qui a créé le contrat (dans la fonction XXPreOrderToken ())

Lorsque quelqu’un achète un jeton, il doit simplement être transféré du propriétaire du contrat à la personne (adresse) effectuant l’achat.

Au lieu de cette fonction:

 function  createTokens ()  payable { 
     require ( msg . value >   0 ); uint256 tokens =  msg . value . mul ( RATE ); balances [ msg . sender ]   =  balances [ msg . sender ]. add ( tokens ); _totalSupply =  _totalSupply . add ( tokens ); owner . transfer ( msg . value ); 
 } 

Vous voulez probablement quelque chose comme ça:

 function  buyTokens ()  payable { 
     require ( msg . value >   0 ); uint256 _numTokens =  msg . value . mul ( RATE ); 

     require ( balances [ owner ]   >=  _numTokens ); balances [ owner ]   =  balances [ owner ]. sub ( _numTokens ); balances [ msg . sender ]   =  balances [ msg . sender ]. add ( _numTokens ); 
     Transfer ( owner ,  msg . sender ,  _numTokens ); owner . transfer ( msg . value ); 
 } 

sombre

Je suis désolé de devoir être plus clair. Lorsque le contrat est créé, les 72500 XXPreOrderTokens vont au compte propriétaire, mais lorsque j’envoie 1 éther du compte 2 au contrat, les 1000 jetons sont attribués au compte 2, mais le compte propriétaire contient encore 72500 jetons. Y a-t-il quelque chose qui me manque?

Nanolucas

La fonction d’achat doit transférer des jetons du compte du propriétaire à la personne qui effectue l’achat, ce que fait la fonction buyTokens () que j’ai faite à titre d’exemple. Il ne devrait pas y avoir de fonction createTokens () car toutes les pièces doivent être créées pendant le constructeur.

 

#de, comment, des, jetons, l’offre, retirer, totale

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *