Essayer d’entrer un grand tableau (500+) d’adresses comme argument

btc4cash

Essayer d’entrer un grand tableau (500+) d’adresses comme argument


J’ai une fonction de largage qui permet au propriétaire d’entrer un tableau d’adresses et un montant à donner. Cela fonctionne bien avec un petit nombre d’adresses d’environ (100) mais plus grand que cela, la limite de gaz est atteinte.

Je me demande, est-ce mon code qui bloque cela ou simplement le fait qu’il en coûte X pour larguer le jeton X multiplié par la longueur du tableau, donc ça coûte beaucoup à envoyer et la limite de gaz est vraiment atteinte?

J’ai essayé de trouver une réponse ici et sur le Web, mais je ne sais pas comment formater ma question. Comme, y a-t-il une limite d’un tableau d’adresses comme argument?

Voici mon code:

 function  airDrop ( address []  recipients , uint  amount )   public   { 

       require ( msg . sender ==  owner ); 
           require ( amount >   0 ); uint256 supposedDropAmount =   ( recipients . length ). mul ( amount ); 
       //be sure it's not over the limit uint256 checkedSupply =  dropAmount . add ( supposedDropAmount ); 

       // return money if something goes wrong 

      require ( checkedSupply <=   AirdropCap );   // block airdrop 

       //require date time 
        require ( now >  airdropTime ); 

       for (  uint256 i =   0   ;  i <  recipients . length ;  i ++   )   { 

            assert ( token . mint ( recipients [ i ],  amount )); emit TokenDrop (  recipients [ i ],  amount ); 
       } numDrops =  numDrops . add ( recipients . length ); dropAmount =  dropAmount . add ( recipients . length . mul ( amount )); 
 } 

Notez que le token.mint est externe dans un autre contrat, et que airdropTime est beaucoup plus ancien que maintenant. Comme je l’ai dit, cela fonctionne avec un petit tableau d’adresses.

Réponses


 ReyHaynes

Non seulement vous vous connectez à un contrat externe, mais vous êtes également responsable des frais de stockage dudit contrat ainsi que de votre contrat …

C’est certainement la limite de gaz … et malheureusement, l’utilisation d’un plus petit tableau d’adresses est la seule option.

btc4cash

que voulez-vous dire par « mais que vous êtes également responsable des frais de stockage dudit contrat ainsi que de votre contrat »? Je n’ai pas compris désolé. En outre, est-ce que la création de la partie externe dans le même contrat serait utile?

ReyHaynes

@ btc4cash Eh bien, vous créez des jetons sur un contrat de jeton externe. Ce contrat doit également stocker ces données en lui-même. Le coût en gaz du stockage des données de jeton sur ce contrat est transféré à l’utilisateur de la fonction airDrop . Vous semblez également stocker des données dans ce contrat … ce qui ajoute également à votre coût du gaz.

btc4cash

alors, comment permettre à cette fonction d’accepter plus d’adresses comme arguments serait de placer la fonction dans le contrat externe lui-même, donc cela coûterait moins de gaz de l’appeler car moins de données stockées et aucun appel externe?

ReyHaynes

@ btc4cash Cela vous donnera quelques adresses supplémentaires … mais la performance la plus chère sur EVM est le coût de stockage. Un stockage direct coûte environ 20 000 gaz si vous économisez à partir d’une valeur nulle. L’ajout de 500 nouvelles adresses coûterait essentiellement 10 millions de gaz, mais la limite sur le réseau principal est de 3 millions.

btc4cash

Mais mec, je n’ai aucun plan pour stocker cette adresse! Je veux juste les utiliser comme destination, leur donner des jetons, c’est tout! Voulez-vous dire que je ne peux tout simplement pas utiliser autant de données de tableau pour quoi que ce soit dans l’EVM?


 haribo

Utilisez IPFS pour stocker ces données, puis appelez votre baie à partir d’IPFS

btc4cash

D’après ce que je sais et ethereum.stackexchange.com/q/7664/19037 IPSF non récupérable du contrat de solidité, il faudrait que j’utilise oracle qui est coûteux en gaz. C’est une solution beaucoup plus compliquée pour le problème que j’ai

 

500, argument, comme, d’adresses, d’entrer?, Essayer, grand, Tableau, un

 

yahoo

Laisser un commentaire

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