La fonction ne renvoie pas la valeur attendue [dupliquer]

friedman1987

La fonction ne renvoie pas la valeur attendue [dupliquer]


Cette question a déjà une réponse ici:

J’ai une fonction dans mon contrat qui renvoie normalement uint

 function  insertPerson ( bytes32 personAddress , bytes32 email , bytes32 fname , bytes32 lname )  
   public returns ( uint  index ) 
 { 
   if ( isPerson ( personAddress ))   return ; persons [ personAddress ]. email =  email ; persons [ personAddress ]. fname =  fname ; persons [ personAddress ]. lname =  lname ; persons [ personAddress ]. index =  personIndex . push ( personAddress )- 1 ; 
   LogNewPerson ( personAddress , persons [ personAddress ]. index , email , fname , lname ); 
   return  personIndex . length - 1 ; 
 } 

mais au lieu d’obtenir l’index, je reçois des informations sur la transaction quelque chose comme ça

 { "tx" : "0xcfe28fe4cffeb7aa97c2db856920f7a3275d55a656f0550e7f78b76d446970b8" , "receipt" :{ "transactionHash" : "0xcfe28fe4cffeb7aa97c2db856920f7a3275d55a656f0550e7f78b76d446970b8" , "transactionIndex" : 0 , "blockHash" : "0xcaa35831f7652155de33af8a349e4d5727026d20ec2f280c45d5a8109c8ca1e4" , "blockNumber" : 14 , "gasUsed" : 134146 , "cumulativeGasUsed" : 134146 , "contractAddress" : null , "logs" :[{ "logIndex" : 0 , "transactionIndex" : 0 , "transactionHash" : "0xcfe28fe4cffeb7aa97c2db856920f7a3275d55a656f0550e7f78b76d446970b8" , "blockHash" : "0xcaa35831f7652155de33af8a349e4d5727026d20ec2f280c45d5a8109c8ca1e4" , "blockNumber" : 14 , "address" : "0xf3b5fccbaea5a0bd10542d13c58d808e18aaef9f" , "data" : "0x0000000000000000000000000000000000000000000000000000000000000008646576407369622e636f6d000000000000000000000000000000000000000000646576000000000000000000000000000000000000000000000000000000000061646d696e000000000000000000000000000000000000000000000000000000" , "topics" :[ "0xa7cb2773240099bbe7a853382f1c2141cd85ac771e1ca8b9c8778fa5a901076e" , "0x3035343734393837000000000000000000000000000000000000000000000000" ], "type" : "mined" }], "status" : 1 }, "logs" :[{ "logIndex" : 0 , "transactionIndex" : 0 , "transactionHash" : "0xcfe28fe4cffeb7aa97c2db856920f7a3275d55a656f0550e7f78b76d446970b8" , "blockHash" : "0xcaa35831f7652155de33af8a349e4d5727026d20ec2f280c45d5a8109c8ca1e4" , "blockNumber" : 14 , "address" : "0xf3b5fccbaea5a0bd10542d13c58d808e18aaef9f" , "type" : "mined" , "event" : "LogNewPerson" , "args" :{ "personAddress" : "0x3035343734393837000000000000000000000000000000000000000000000000" , "index" : "8" , "email" : "0x646576407369622e636f6d000000000000000000000000000000000000000000" , "fname" : "0x6465760000000000000000000000000000000000000000000000000000000000" , "lname" : "0x61646d696e000000000000000000000000000000000000000000000000000000" }}]} 

quelqu’un peut-il m’aider s’il vous plaît, merci.

Roman Frolov

Comment invoquez-vous cette méthode?

friedman1987

en javascipt comme ce code contractInstance.insertPerson (web3.fromAscii (String (cin)), email, fname, lname, {gas: 3000000, from: web3.eth.accounts [0]}). then (function (v) { console.log (JSON.stringify (v));});

Réponses


 quelque chose

Il n’est pas très clair comment invoquer votre méthode. Mais d’après la réponse, je suppose que vous l’appelez à l’aide de Web3 ou d’une autre API RPC.

L’idée est que les valeurs de retour des fonctions qui doivent être incluses dans les transactions ne sont pas renvoyées par Web3.

Vous avez deux options:

  1. Utilisation des événements Solidity . Vous devez vous référer à la documentation des événements , ils sont conçus pour être lisibles et même « capturables » par le client. Consultez également la page de documentation Web3 sur l’utilisation des événements de contrat.

  2. Appelez l’appel de fonction à l’aide de l’ call() Web3 call() . Il n’apportera aucune modification à l’état de votre contrat car la méthode simule uniquement l’appel « réel » localement sans envoyer de transactions ni modifier l’état, mais vous pourrez obtenir les valeurs de retour de la fonction.

 

[dupliquer], #la, #pas, attendue, fonction, ne, renvoie, valeur

 

yahoo

Laisser un commentaire

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