Ich versuche, Ether in einem Vertrag zu speichern und zurückzuerstatten, wenn ich die Funktion paypackEther() aufrufe. Innerhalb der Remix-IDE mit der JavaScript-VM funktioniert es perfekt, aber wenn ich es auf Rinkeby mit Mist ausführe, kann ich den gespeicherten Ether nicht abrufen. Es macht mich verrückt...
Was ist mein Fehler?
pragma solidity ^0.4.24;
contract SimpleContract {
function () public payable {
}
constructor() payable public {
}
function paybackEther() public {
selfdestruct(msg.sender);
}
}
Die Vertragsadresse lautet: 0x0b5933fd3D33F7d79C0e19e12A070fafA053Df57 https://rinkeby.etherscan.io/address/0x0b5933fd3d33f7d79c0e19e12a070fafa053df57
Vielen Dank im Voraus :)
Ich habe mir gerade Ihre Transaktionen angesehen und sehe, dass Sie die paybackEther()
Funktion überhaupt nicht aufrufen:
0x9afb64e3082d06e0915f7d89a2b436ae3f9f273630407b52662d3a5785933336
0xd70b7dae05ee903868fc9367f6a3795b76e0916597187c1fda31bbf3c655d321
0x70b1860a8f1c9f2ec002e737744198a83f8d8182c6b853895991ffceec6201f9
Alle diese Transaktionen senden 0 Ether und 0 Byte Daten an den Vertrag. Ein Aufruf von paybackEther()
würde 4 Byte Daten an den Vertrag senden.
Sie machen höchstwahrscheinlich etwas falsch, wenn Sie versuchen, die Funktion in Mist aufzurufen. Ich weiß nicht was, weil ich nicht auf deinen Bildschirm schauen und sehen kann, welche Knöpfe du drückst :)
Ich habe eine Antwort gefunden, aber sie ist nicht sehr "sauber": Es scheint, als ob Mist einen Eingabeparameter in der Funktion paybackEther benötigt ...
pragma solidity ^0.4.24;
contract SimpleContract {
bool public finished;
function () public payable {
}
constructor() payable public {
}
function paybackEther(bool newfinished) public {
finished = newfinished;
selfdestruct(msg.sender);
}
}
Jesus
gute Stimmung
selfdestruct(msg.sender)
durch ersetzenmsg.sender.transfer(address(this).balance)
und sagen, ob es funktioniert?Andreas Schmidt
Andreas Schmidt