No se puede enviar Ether al contrato

Estoy tratando de enviar Ethers a un contrato implementado en Ganache pero obtengo VM Exception while processing transaction: revert, la misma lógica puede transferir Ethers a otra cuenta.

Los siguientes son el registro de errores y el código para enviar Ether

Código:
Método alternativo:

function() public payable {
    transfer(msg.sender, msg.value);
}

Lógica de transferencia:

/**
* @dev Transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
*/
function transfer(address _to, uint256 _value) public returns (bool) {
    require(_value <= balances[msg.sender]);
    require(_to != address(0));

    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
}

Error:

Error: Returned error: VM Exception while processing transaction: revert
    at Object.ErrorResponse (errors.js:29)
    at index.js:140
    at XMLHttpRequest.request.onreadystatechange (index.js:79)
    at XMLHttpRequest.push../node_modules/xhr2-cookies/dist/xml-http-request-event-target.js.XMLHttpRequestEventTarget.dispatchEvent (xml-http-request-event-target.js:34)
    at XMLHttpRequest.push../node_modules/xhr2-cookies/dist/xml-http-request.js.XMLHttpRequest._setReadyState (xml-http-request.js:208)
    at XMLHttpRequest.push../node_modules/xhr2-cookies/dist/xml-http-request.js.XMLHttpRequest._onHttpResponseEnd (xml-http-request.js:318)
    at push../node_modules/stream-http/lib/response.js.exports.IncomingMessage.<anonymous> (xml-http-request.js:289)
    at push../node_modules/stream-http/lib/response.js.exports.IncomingMessage.push../node_modules/events/events.js.EventEmitter.emit (events.js:96)
    at endReadableNT (_stream_readable.js:1010)
    at afterTickTwo (index.js:27)
    at Object.ErrorResponse (errors.js:29)
    at index.js:140
    at XMLHttpRequest.request.onreadystatechange (index.js:79)
    at XMLHttpRequest.push../node_modules/xhr2-cookies/dist/xml-http-request-event-target.js.XMLHttpRequestEventTarget.dispatchEvent (xml-http-request-event-target.js:34)
    at XMLHttpRequest.push../node_modules/xhr2-cookies/dist/xml-http-request.js.XMLHttpRequest._setReadyState (xml-http-request.js:208)
    at XMLHttpRequest.push../node_modules/xhr2-cookies/dist/xml-http-request.js.XMLHttpRequest._onHttpResponseEnd (xml-http-request.js:318)
    at push../node_modules/stream-http/lib/response.js.exports.IncomingMessage.<anonymous> (xml-http-request.js:289)
    at push../node_modules/stream-http/lib/response.js.exports.IncomingMessage.push../node_modules/events/events.js.EventEmitter.emit (events.js:96)
    at endReadableNT (_stream_readable.js:1010)
    at afterTickTwo (index.js:27)
    at resolvePromise (zone.js:814)
    at zone.js:724
    at index.js:72
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:3815)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
    at push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask (zone.js:496)
    at ZoneTask.invoke (zone.js:485)
    at timer (zone.js:2054)
¿ Tiene msg.sendersuficiente saldo?
Sí, las cuentas tienen el saldo adecuado.
@Paradox Vamos a necesitar más pruebas. :-) La transacción se está revirtiendo y solo hay una relevante require, por lo que mi suposición es que msg.value > balances[msg.sender]. (Para verificar, elimine esa requiredeclaración y vuelva a intentarlo).
¿Cómo estás enviando el Éter? ¿De otro contrato inteligente usando address.transferpor casualidad? Porque en ese caso, el estipendio de gasolina que se envía junto con la llamada no va a ser suficiente para todos estos cómputos y operaciones de almacenamiento.
@Paradox Lo siento, simplemente eliminar eso requireno será suficiente, porque ya es redundante. (Supongo que .sub(...)es una especie de rutina de "matemáticas seguras" que se revierte cuando el resultado se desborda). Tal vez solo agregue balances[msg.sender] = 2**256-1para verificar que el equilibrio sea el problema.
@smarx No sé cómo, pero reiniciar la computadora solucionó el problema.

Respuestas (1)

Sé que es un poco divertido, pero reiniciar la máquina solucionó el problema XD.