Gasschätzungsfehler

Ich habe einen Vertrag auf remix.ethereum.org erstellt und die Ganache ( http://truffleframework.com/ganache/ ) als private Blockchain gestartet. Auf dem Remix habe ich Remix so konfiguriert, dass es mit Ganache über einen benutzerdefinierten Web3-Anbieter funktioniert, der mein lokaler Host ist.

Es ist ein einfaches Abstimmungs-Dapp:

pragma solidity ^0.4.11;


contract VotingDapp {

  mapping (bytes32 => uint8) public votesReceived;

  bytes32[] public candidateList;

  function VotingDapp(bytes32[] candidateNames) public {
    // constructor
    candidateList = candidateNames;
  }

  function totalVotesFor(bytes32 candidate) public view returns (uint8) {
    if(validCandidate(candidate) == false) revert();
    return votesReceived[candidate];
  }

  function voteForCandidate(bytes32 candidate) public {
    if(validCandidate(candidate) == false) revert();
    votesReceived[candidate] += 1;
  }

  function validCandidate(bytes32 candidate) public view returns (bool) {
    for(uint i = 0; i < candidateList.length; i++){
      if(candidateList[i] == candidate){
        return true;
      }
    }
    return false;
  }

  function totalVotesReceived() external view returns(uint){
      uint sum = 0;
      for(uint i = 0; i < candidateList.length; i++){
          sum += votesReceived[candidateList[i]];
      }
      return sum;
  }

}

Wenn ich versuche, die Funktion voteForCandidate aufzurufen, erhalte ich diesen Fehler von Remix:

Gasschätzung fehlgeschlagen Gasschätzung fehlgeschlagen mit folgender Meldung (siehe unten). Die Ausführung der Transaktion wird wahrscheinlich fehlschlagen. Möchten Sie das Senden erzwingen? VM-Ausnahme während der Verarbeitung der Transaktion: Zurücksetzen

Wenn ich versuche, das Senden zu erzwingen, passiert nichts.

Danke

Antworten (1)

voteForCandidateNach einem kurzen Blick auf Ihren Code sieht es so aus, als wäre der einzige Grund dafür, revertdass der Kandidat, den Sie übergeben, nicht in Ihrem ist candidateList, sodass er den validCandidateTest nicht besteht. Prüfen Sie, ob der Inhalt von candidateListIhren Erwartungen entspricht, und prüfen Sie, ob der Parameter korrekt an übergeben wird voteForCandidate().