Error de estimación de gas

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

Respuestas (1)

De un vistazo rápido a su código, parece que la única razón voteForCandidatesería revertsi el candidato que está aprobando no está en su candidateList, por lo que falla la validCandidateprueba. Verifique que el contenido de candidateListsea lo que espera y verifique que el parámetro se pase correctamente a voteForCandidate().