Creé un contrato en remix.ethereum.org e inicié Ganache ( http://truffleframework.com/ganache/ ) como una cadena de bloques privada. En Remix, configuré Remix para que funcione con Ganache a través del proveedor web3 personalizado, que es mi host local.
Es una simple Dapp de votación:
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;
}
}
Cuando trato de llamar a la función voteForCandidate, aparece este error de Remix:
Estimación de gas fallida Estimación de gas con error con el siguiente mensaje (ver más abajo). Es probable que la ejecución de la transacción falle. ¿Quieres forzar el envío? Excepción de máquina virtual al procesar la transacción: revertir
Cuando intento forzar el envío no pasa nada.
Gracias
De un vistazo rápido a su código, parece que la única razón voteForCandidate
sería revert
si el candidato que está aprobando no está en su candidateList
, por lo que falla la validCandidate
prueba. Verifique que el contenido de candidateList
sea lo que espera y verifique que el parámetro se pase correctamente a voteForCandidate()
.