Ich lese Bits und Stücke, die Selbstzerstörung innerhalb von Verträgen sind eine gute Sache. Kann jemand erklären, welche Vorteile es hat, wenn es um die Ethereum-Programmierung geht, wenn es um die Selbstzerstörung von Verträgen geht? Gibt es einen Unterschied, wenn Sie unterschiedliche Clients oder Implementierungen oder Sprachen verwenden?
Selbstzerstörung in Ethereum ist eine Operation (eigentlich ein OPCODE) auf EVM-Ebene, unabhängig davon, welche Sprache oder welchen Client Sie verwenden.
Wenn Sie beispielsweise anrufen, wird selfdestruct(address)
der gesamte aktuelle Saldo des Vertrags an gesendet address
.
Dies ist nützlich, wenn Sie mit einem Vertrag fertig sind, da es viel weniger Benzin kostet, als nur den Restbetrag mit zu senden address.send(this.balance)
.
Tatsächlich verwendet der SELFDESTRUCT-Opcode negatives Gas, da die Operation Speicherplatz in der Blockchain freigibt, indem alle Vertragsdaten gelöscht werden.
Dieses negative Gas wird von den gesamten Gaskosten der Transaktion abgezogen. Wenn Sie also zuerst einige Reinigungsarbeiten durchführen, kann SELFDESTRUCT Ihre Gaskosten senken.
Hinweis: Diese Frage wurde ursprünglich nach dem suicide
Opcode gestellt, selfdestruct
der inzwischen gemäß EIP6 geworden ist .
selfdestruct
ist der empfohlene Begriff und kann in neuerem Solidity- und Serpent-Code gefunden werden. Es ist die gleiche API und das gleiche Verhalten, wie in den anderen Antworten beschrieben, und ist ein Alias für suicide
.
EIP6 beschreibt die Motivation:
Der Hauptgrund für uns, den Begriff Selbstmord zu ändern, besteht darin, zu zeigen, dass Menschen wichtiger sind als Code und Ethereum als Projekt ausgereift genug ist, um die Notwendigkeit einer Änderung zu erkennen. Selbstmord ist ein schweres Thema, und wir sollten alle Anstrengungen unternehmen, um diejenigen in unserer Entwicklungsgemeinschaft nicht zu beeinträchtigen, die an Depressionen leiden oder kürzlich jemanden durch Selbstmord verloren haben.
Die selfdestruct()
Funktion und der entsprechende OPCODE werden verwendet, wenn Sie einen Vertrag haben, der einen Fehler oder ein unerwünschtes Verhalten aufweist und Sie ihn loswerden möchten.
Das selfdestruct(address)
ist eine bessere Version, wie @tjaden-hess betonte, wenn Sie zahlbare Verträge haben (Verträge, die Ether erhalten), werden die Ether umgeleitet, address
was ein großer Gewinn ist.
Wenn Sie mit einem selbstzerstörten Vertrag interagieren, beachten Sie Folgendes: Wenn Sie eine Transaktion und/oder Gelder an ihn senden, gehen Ihre Gelder VERLOREN . Stellen Sie sicher, dass Sie keine Gelder oder andere Transaktionen an ihn senden, nachdem Sie einen Vertrag selbst zerstört haben.
Das ist ein Problem, das Sie immer im Hinterkopf behalten müssen, wenn Sie Apps entwickeln, die Verträge mit einer Selbstzerstörungsfunktion verwenden. Stellen Sie sicher, dass die Adresse des Vertrags aus Ihrer App entfernt selfdestruct()
wird, nachdem der Vertrag aufgerufen wurde. Vielleicht können Sie immer eine Getter - Methode aufrufen Prüfen Sie, ob der Kontrakt mit einem gültigen Wert antwortet, bevor Sie eine Transaktion senden und/oder Ether an ihn übertragen.
Aktualisieren
Der Name der Methode lautet jetzt selfdestruct
. Wir haben eine Beschreibung davon in den neuen Solidity-Dokumenten .
Hier ist ein Beitrag von r/ethereum über Selbstmord mit weiteren Infos und einer kleinen Diskussion darüber.
selfdestruct()
ist, dass Sie einen gefährlich fehlerhaften Vertrag "kündigen" könnenIMHO selfdestruct
ist eine schlechte Sache, die niemals eingeführt werden sollte. Es bricht das Unveränderlichkeitsprinzip des Vertrags und führt zu vielen Problemen:
selfdestruct
werden, gehen in den meisten Fällen verloren, eine Überprüfung, ob der Vertrag sich nicht selbst zerstört, vor der Übertragung hilft nicht viel, da die Übertragung vorweggenommen werden kannselfdestruct
Warum werden
selfdestructs
in der Auftragsprogrammierung verwendet
Sobald ein Vertrag auf der Ethereum-Blockchain erstellt wurde, kann er nicht mehr geändert werden.
VORTEILE DER VERWENDUNG VON SELFDESTRUCT
+-----------------+---------------------------------------------------------------------------------------+
| Benefit | Reasoning |
+-----------------+---------------------------------------------------------------------------------------+
| Stop Execution | If you no longer want the contract running, you can selfdestruct it to “turn it off”. |
| Eliminate Bugs | (Similar to above). You can kill off smart contracts that are buggy. |
| Lower Gas Price | It costs less gas to selfdestruct a contract. |
+-----------------+---------------------------------------------------------------------------------------+
Tjaden Hess
hoch110
Tjaden Hess
hoch110