Tests unitaires de solidité pour les contrats avec un type de retour de tableau dynamique

Chris Staikos

Tests unitaires de solidité pour les contrats avec un type de retour de tableau dynamique


J’écris un contrat intelligent simple pour stocker un tableau d’octets32, le pousser et le récupérer:

 contract SimpleStorage   { bytes32 []   public  items ; 

     event   ItemAdded ( bytes32 contents ); 

     function  addItem ( bytes32 contents )   public  returns ( bool )   { items . push ( contents ); emit ItemAdded ( contents ); 
         return   true ; 
     } 

     function  getAllItems ()   public  constant returns ( bytes32 [])   { 
         return  items ; 
     } 
 } 

Cela se compile bien, mais lorsque j’essaie d’écrire un test de Solidité pour ce contrat, je ne parviens pas à stocker le résultat de getAllItems .

Ligne en question:

 bytes32 []  result =  simpleStorage . getAllItems (); 

L’erreur que j’obtiens est: Le Type inaccessible dynamic type is not implicitly convertible to expected type bytes32[] storage pointer.

À partir de ce problème Github, je vois qu’il est connu (et prévu d’être corrigé dans Ethereum 2.0) que nous ne pouvons tout simplement pas appeler des fonctions qui retournent des tableaux dynamiques d’un autre contrat. Nous pouvons cependant utiliser ces fonctions depuis l’ABI.

Cela signifie-t-il qu’il est pour l’instant pratiquement impossible d’écrire des tests de Solidité pour ces types de fonctions (puisque les tests unitaires sont eux-mêmes des contrats)? Quelqu’un d’autre a-t-il rencontré ce problème et trouvé un moyen de le contourner?

Je sais que je peux simplement m’en tenir à l’écriture de tests JS, mais je suis curieux de savoir s’il existe un moyen de tester ces types de contrats à l’aide de Solidity.

Réponses


 Harold

Quelle version du compilateur Solidity utilisez-vous? Je ne peux pas reproduire votre erreur.

Cependant, avec la dernière version de solc (0.4.24), vous devez ajouter le mot clé memory car par défaut, un octet32 [] est stocké dans le stockage et vous ne pouvez pas attribuer un type de taille dynamique au stockage.

 bytes32 []  memory result =  simpleStorage . getAllItems (); 

Chris Staikos

Merci! Il s’avère que je n’avais pas mis à jour la version solc que Truffle utilisait.

 

#de, #pour, avec, contrats, dynamique, Les, Retour, Solidité, Tableau, tests, type, un, unitaires

 

yahoo

Laisser un commentaire

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