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
voteForCandidate
Nach einem kurzen Blick auf Ihren Code sieht es so aus, als wäre der einzige Grund dafür, revert
dass der Kandidat, den Sie übergeben, nicht in Ihrem ist candidateList
, sodass er den validCandidate
Test nicht besteht. Prüfen Sie, ob der Inhalt von candidateList
Ihren Erwartungen entspricht, und prüfen Sie, ob der Parameter korrekt an übergeben wird voteForCandidate()
.