Kann Ether nicht zum Vertrag senden

Ich versuche, Ether an einen Vertrag zu senden, der auf Ganache bereitgestellt wird, aber ich bekomme VM Exception while processing transaction: revert, die gleiche Logik ist in der Lage, Ether auf ein anderes Konto zu übertragen.

Es folgen ein Fehlerprotokoll und der Code zum Senden von Ether

Code:
Fallback-Methode:

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

Übertragungslogik:

/**
* @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;
}

Fehler:

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)
Hat msg.sendergenug Gleichgewicht?
Ja, die Konten haben den entsprechenden Saldo.
@Paradox Wir werden mehr Beweise brauchen. :-) Die Transaktion wird rückgängig gemacht, und es gibt nur eine relevante require, also gehe ich davon aus, dass msg.value > balances[msg.sender]. (Um dies zu überprüfen, entfernen Sie diese requireAnweisung und versuchen Sie es erneut.)
Wie verschickst du den Äther? Von einem anderen Smart Contract, der address.transferzufällig verwendet wird? Denn dann reicht das mitgesendete Benzinstipendium für all diese Berechnungen und Speicheroperationen nicht aus
@Paradox Entschuldigung, das Entfernen requirereicht nicht aus, da es bereits überflüssig ist. (Ich gehe davon aus, dass .sub(...)es sich um eine Art "sichere mathematische" Routine handelt, die zurückgesetzt wird, wenn das Ergebnis unterläuft.) Vielleicht fügen Sie balances[msg.sender] = 2**256-1stattdessen einfach hinzu, um zu überprüfen, ob der Kontostand das Problem ist.
@smarx Ich weiß nicht wie, aber ein Neustart des Computers hat das Problem behoben.

Antworten (1)

Ich weiß, es ist irgendwie lustig, aber ein Neustart der Maschine hat das Problem behoben XD.