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)
Ich weiß, es ist irgendwie lustig, aber ein Neustart der Maschine hat das Problem behoben XD.
Henk
msg.sender
genug Gleichgewicht?Paradox
Benutzer19510
require
, also gehe ich davon aus, dassmsg.value > balances[msg.sender]
. (Um dies zu überprüfen, entfernen Sie dieserequire
Anweisung und versuchen Sie es erneut.)Henk
address.transfer
zufällig verwendet wird? Denn dann reicht das mitgesendete Benzinstipendium für all diese Berechnungen und Speicheroperationen nicht ausBenutzer19510
require
reicht 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 Siebalances[msg.sender] = 2**256-1
stattdessen einfach hinzu, um zu überprüfen, ob der Kontostand das Problem ist.Paradox