2 votes

Comment obtenir des valeurs de retour lorsque la fonction avec un argument est appelée

Je rédige ci-dessous un contrat simple qui stocke tous les résultats des questionnaires de chaque ID.

contrat réponse{
  mappage(adresse => mappage(chaine => bool)) votants;

  struct qList {
    uint count; //Le nombre de répondants
    mappage(adresse => mappage(uint => uint)) réponse;
  }

  mappage(chaine => qList) questionnaires;

  fonction voter(chaine ID, uint qNum, uint ans) renvoie (bool) {
    si(votants[msg.sender][ID]) throw;
    votants[msg.sender][ID] = true;
    questionnaires[ID].count += 1;
    questionnaires[ID].réponse[msg.sender][qNum] = ans;
    return true;
  }

  fonction getNumResult(chaine ID) constant renvoie (uint res) {
    return questionnaires[ID].count;
  }
}

La fonction "voter" incluant des arguments peut être appelée et minée avec succès, cependant je ne peux pas obtenir la valeur de retour avec le message d'état "En attente de la transaction à être minée..." dans l'écran du navigateur solidity lorsque j'appelle "getNumResult" avec l'ID qui a déjà été enregistré via la fonction "voter".

Je vous serais reconnaissant si quelqu'un pouvait conseiller la cause de cela et la solution pour obtenir la valeur de retour de la fonction avec des arguments.

2voto

eth Points 339

L'auteur a également posé la question sur Ethereum Stack Exchange et voici une réponse.

Avec la fonction non-constante vote, vous ne pouvez obtenir que le hachage de la transaction immédiatement car la transaction peut ne jamais être minée. Ou cela pourrait prendre plusieurs blocs comme indiqué par "En attente de la transaction à être minée..."

Recommandé de vérifier : https://ethereum.stackexchange.com/questions/765/what-is-the-difference-between-a-transaction-and-a-call

Événements

Les événements sont nécessaires pour obtenir la "valeur de retour" de vote.

Exemple de comment ajouter et déclencher un event:

contrat réponse {
  // ...
  événement VoteEvent(string ID, bool returnValue);

  fonction vote(string ID, uint qNum, uint ans) renvoie (bool) {
    // ...
    VoteEvent(ID, true);
    retour vrai;
  }
}

Voir Contract Events pour les différentes façons de surveiller et d'obtenir des données d'événement en utilisant web3.js.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X