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)
Sé que es un poco divertido, pero reiniciar la máquina solucionó el problema XD.
henk
msg.sender
suficiente saldo?Paradoja
usuario19510
require
, por lo que mi suposición es quemsg.value > balances[msg.sender]
. (Para verificar, elimine esarequire
declaración y vuelva a intentarlo).henk
address.transfer
por 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.usuario19510
require
no 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 agreguebalances[msg.sender] = 2**256-1
para verificar que el equilibrio sea el problema.Paradoja