Passer une variable publique à une fonction dans la console de truffe

Stefano Angieri

Passer une variable publique à une fonction dans la console de truffe


J’ai une fonction simple pour comparer deux chaînes:

 function  stringCmp ( string a ,  string b )   public  returns ( bool ){ bytes memory aa = bytes ( a ); bytes memory bb = bytes ( b ); 
   if ( aa . length != bb . length ) 
     return   false ; 
   for ( uint i = 0 ;  i <  aa . length ;  i ++) 
     if ( aa [ i ]!= bb [ i ]) 
       return   false ; 
   return   true ; 
 } 

Cette fonction fonctionne correctement dans la console de truffe si elle est utilisée comme suit:

 t = contract_name . at ( "address_of_c" ); t . stringCmp . call ( "string1" , "string1" )   -->   true t . stringCmp . call ( "string1" , "string2" )   -->   false 

Supposons que nous ayons déclaré dans le contrat:

 string public  p = "ciao" ; string public  q = "ciao" ; string public  r = "hello" ; 

Quelle est la bonne façon de passer ces chaînes à l’appel? J’ai essayé :

 t = contract_name . at ( "address_of_c" ); t . stringCmp . call ( t . p (), t . q ())   -->   true   ( and it seems ok but ..) t . stringCmp . call ( t . p (), t . r ())   -->   true   ( So  what ..???) t . stringCmp . call ( t . p , t . r )   -->   true   (???) t . stringCmp . call ( t . p . call (), t . q . call ())   -->   Invalid  number of arguments to Solidity   function 

De plus, que se passe-t-il exactement? Une solution?

Réponses


 mirg

Je pense que la console vous aide lorsque vous essayez d’exécuter les commandes sans gérer correctement les promesses. Vos membres de contrat (p, q, r) lorsqu’ils sont appelés avec web3 renverront une promesse c’est pourquoi tout retourne vrai (puisque si vous faites juste tp ou tr partir de la console, il retournera le même objet)

Ainsi, la dernière tentative est la plus proche, mais la fonction d’ call renvoie une promesse et n’est pas gérée correctement (mais si vous essayez de faire juste tqcall() partir de la console, cela fonctionnera, comme tq() ; encore une fois, la truffe console pourrait aider à gérer les promesses elle-même).

Si vous gérez correctement les promesses, cela fonctionnera

 t . r . call (). then (( r1 )   =>  t . q . call (). then (( q1 )   =>  t . stringCmp ( q1 ,  r1 ). then ( console . log ))) 

ce retour false

 t . p . call (). then (( p1 )   =>  t . q . call (). then (( q1 )   =>  t . stringCmp ( q1 ,  p1 ). then ( console . log ))) 

cela reviendra true

 

#(une, #à, #de, #la, Console»:, dans, fonction, passer, publique, truffe, variable

 

yahoo

Laisser un commentaire

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