In einem Vertrag gespeicherte Ether zurückerstatten

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 :)

Können Sie uns einen Link zu der Rinkeby-Transaktion geben, bei der Sie versucht haben und es nicht geschafft haben, den Ether zurückzubekommen? Wurde die Transaktion zurückgesetzt oder ist sie stillschweigend fehlgeschlagen?
Können Sie selfdestruct(msg.sender)durch ersetzen msg.sender.transfer(address(this).balance)und sagen, ob es funktioniert?
@JesseBusman Here's the contract adress: 0x0b5933fd3D33F7d79C0e19e12A070fafA053Df57 rinkeby.etherscan.io/address/… The latest transaction is 0x70b1860a8f1c9f2ec002e737744198a83f8d8182c6b853895991ffceec6201f9 I also published the Code of the Contract in Etherscan, to make it easier to understand my code.
@goodvibration Ich habe diese Lösung auch ausprobiert, aber es macht keinen Unterschied. Ich habe meinen Code von github.com/PaulRBerg/contractz/blob/master/contracts/… Das funktioniert perfekt ...

Antworten (2)

Ich habe mir gerade Ihre Transaktionen angesehen und sehe, dass Sie die paybackEther()Funktion überhaupt nicht aufrufen:

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 :)

Danke, dass du mir geholfen hast! Ich habe es jetzt auf 3 verschiedenen Computern ausprobiert und tatsächlich haben alle Transaktionen ein Eingabedatum von 0x. Ich bin mir fast sicher, dass der Fehler in meinem Code liegt ... Alle Computer zeigen das gleiche Problem. Und andere Verträge funktionieren ohne Probleme... Hast du noch einen Rat für mich?
Zum Beispiel habe ich diesen Code ausprobiert: github.com/PaulRBerg/contractz/blob/master/contracts/… (Vertrag zerstörbar, Funktion zerstören)

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);
}

}