Я пытаюсь отправить эфиры на контракт, развернутый на Ganache, но я получаю VM Exception while processing transaction: revert
, та же логика может передавать эфиры на другую учетную запись.
Ниже приведен журнал ошибок и код для отправки эфира.
Код:
Резервный метод:
function() public payable {
transfer(msg.sender, msg.value);
}
Логика передачи:
/**
* @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: 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)
Я знаю, это довольно забавно, но перезагрузка машины решила проблему XD.
Хенк
msg.sender
баланса?Парадокс
пользователь19510
require
, поэтому я предполагаю, чтоmsg.value > balances[msg.sender]
. (Чтобы проверить, удалите этоrequire
утверждение и повторите попытку.)Хенк
address.transfer
Случайно из другого смарт-контракта ? Потому что в этом случае стипендии газа, которая отправляется вместе со звонком, не хватит на все эти вычисления и операции хранения.пользователь19510
require
будет недостаточно, потому что это уже избыточно. (Я предполагаю,.sub(...)
что это какая-то «безопасная математическая» процедура, которая возвращается, когда результат занижается.) Может быть, просто добавьтеbalances[msg.sender] = 2**256-1
вместо этого, чтобы убедиться, что проблема в балансе.Парадокс