fonctionner dans un contrat intelligent pour permettre au propriétaire de graver tous les jetons

Prateek Singhania

fonctionner dans un contrat intelligent pour permettre au propriétaire de graver tous les jetons


J’ai essayé ceci:

 function  burn ( uint256 tokens )   public  returns ( bool ){ 
     require ( balances [ msg . sender ]   >=  tokens ); balances [ msg . sender ]   =  balances [ msg . sender ]. sub ( tokens ); _totalSupply =  _totalSupply . sub ( tokens ); 
     Burn ( msg . sender ,  tokens ); 
 } 

mais ce code ne brûlera les jetons que par le propriétaire de l’adresse. Je veux que le propriétaire du contrat puisse graver tous les jetons et que totalSupply soit égal à 0.

Réponses


 voler

Ce n’est pas possible avec une implémentation erc20 typique. Si vous vouliez vraiment tout graver, vous devez conserver un tableau de toutes les adresses dont l’équilibre est différent de zéro, et parcourir ce tableau en burn pour les mettre toutes à zéro.

Prateek Singhania

Oui, je suis d’accord que ce n’est pas possible de l’implémenter dans erc20, mais c’était juste un cas d’utilisation que j’essayais d’implémenter pour vérifier le concept de la façon de l’implémenter, merci pour votre temps et votre aide.


 Tudor Constantin

Comme on peut le voir dans les réponses précédentes, si votre jeton est distribué à des dizaines de milliers de détenteurs, il devient impossible et presque impossible de mettre tous leurs soldes à 0.

Vous pouvez réaliser la même chose en:

  1. définissez _totalSupply sur 0
  2. créer une variable booléenne appelée allBurned et la définir sur true dans la fonction burnA()
  3. modifier toutes les fonctions qui gèrent les fonds et les mettent require(!allBurned) (ou un code plus complexe qui fait ce que l’on veut)


 Lauri Peltonen

Vous devez vider le tableau des balances et définir _totalSupply sur 0 . Pour vider le tableau, consultez: https://ethereum.stackexchange.com/a/3377/31933

Une autre histoire est le type d’événement que vous devez déclencher. Je suppose que vous devriez tirer:

 Burn ( msg . sender ,  _totalSupply ); 

(bien que vous ne puissiez pas utiliser la valeur de _totalSupply car elle est déjà mise à zéro, alors stockez la valeur temporaire dans une autre variable avant la mise à zéro)

voler

Les soldes ne sont pas un tableau, c’est une carte.


 Grunzwanzling

Pour graver tous les jetons à la fois, vous devez parcourir tous les éléments des soldes, ce qui n’est pas possible sans modifications du code, mais même avec ces modifications, une transaction comme celle-ci serait très rapidement plus grande que la limite de gaz de bloc lorsque le jeton est utilisé par quelques milliers d’adresses.

Voici une façon de le faire, je ne recommanderais pas de le faire cependant:

 mapping ( address =>   uint )  accountBalances ; mapping ( uint   =>  address )  accountIndex ; 

 uint  accountCount ; 
 function  burnAllTokens () 
 { 
     for ( uint  i = 0 ; i < accountCount ; i ++) 
     { accountBalances [ accountIndex [ i ]]   =   0 ; _totalSupply =   0 ; 
     } 
 } 

Vous devez évidemment stocker tous les comptes dans accountIndex chaque fois que quelqu’un leur envoie.

Prateek Singhania

@Grunzwanling, cela a fonctionné, merci pour le compagnon d’aide!

 

#au, #de, #pour, contrat, dans, fonctionner, Graver, intelligent, jetons, Les, permettre, propriétaire, tous, un

 

yahoo

Laisser un commentaire

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