Не удалось отправить эфир на контракт

Я пытаюсь отправить эфиры на контракт, развернутый на 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)
Достаточно ли msg.senderбаланса?
Да, на счетах есть соответствующий баланс.
@Paradox Нам понадобятся дополнительные доказательства. :-) Транзакция отменяется, и есть только одна релевантная require, поэтому я предполагаю, что msg.value > balances[msg.sender]. (Чтобы проверить, удалите это requireутверждение и повторите попытку.)
Как вы отправляете эфир? address.transferСлучайно из другого смарт-контракта ? Потому что в этом случае стипендии газа, которая отправляется вместе со звонком, не хватит на все эти вычисления и операции хранения.
@Paradox Извините, просто удалить это requireбудет недостаточно, потому что это уже избыточно. (Я предполагаю, .sub(...)что это какая-то «безопасная математическая» процедура, которая возвращается, когда результат занижается.) Может быть, просто добавьте balances[msg.sender] = 2**256-1вместо этого, чтобы убедиться, что проблема в балансе.
@smarx Я не знаю, как, но перезагрузка компьютера решила проблему.

Ответы (1)

Я знаю, это довольно забавно, но перезагрузка машины решила проблему XD.