Übertragungsvertrag muster

Angenommen, ich habe 1000 XYZ-Token und dass es einen Vertrag gibt, der unter Adresse 0x111 vorhanden ist. Verträge können die Übertragung nur verwenden, wenn sie bereits Eigentümer der Token sind. XYZcontract.transfer(Adresse, Betrag) funktioniert einwandfrei. Ein weiterer potenzieller Nachteil ist die Komplexität. In den meisten realen Fällen vereinfacht das Fabrikmuster Ihre bestehenden Verträge, aber denken Sie daran, dass es auch eine neue hinzufügt: die Fabrik selbst. Je nach Code kann dies einen Nettoeffekt einer zunehmenden Komplexität haben. Geschwindigkeitsbeulen sind äußerst nützlich, wenn böswillige Ereignisse auftreten, da es einem intelligenten Vertragsbesitzer Zeit gibt, entsprechend zu handeln. So wurde bei der DAO eine Verzögerung von 27 Tagen installiert, bei der keine Funktionen ausgeführt werden konnten, wodurch die Mittel im Vertrag belassen wurden, was die Wahrscheinlichkeit einer Wiedereinziehung erhöhte. Allerdings war die Geschwindigkeitsüberschreitung für den DAO-Fall ziemlich nutzlos, da keine Wiederherstellungsaktionen vorhanden waren.

Daher sollte ein Geschwindigkeits-Bump-Muster in Kombination mit einem Leistungsschalter verwendet werden, der den Vertrag mit Ausnahme der Rückzugsfunktion blockiert. Dadurch wird sichergestellt, dass Benutzer in der Lage sind, Geld abzuheben, bevor die bösartige Aktion erfüllt ist. Sichere Übertragung von Äther von einem Vertrag an eine andere Adresse. Jeder nicht triviale Vertrag hat Fehler. Ihr Code muss daher in der Lage sein, auf Fehler und Schwachstellen ordnungsgemäß zu reagieren. Beachten Sie beim Schreiben von Code die folgenden Sicherheitsentwurfsmuster. Jegliche Interaktion aus einem Vertrag (A) mit einem anderen Vertrag (B) und jede Übertragung von Ether überträgt die Kontrolle auf diesen Vertrag (B). Dadurch kann B in A zurückrufen, bevor diese Interaktion abgeschlossen ist.

Um ein Beispiel zu nennen, enthält der folgende Code einen Fehler (es ist nur ein Ausschnitt und kein vollständiger Vertrag): Nicht nur, dass die Single-Seller-Version des Vertrags eine robustere Treuhand hat, sondern es ist auch einfach einfacher. Wir haben einen Funktionsparameter und eine Zuordnung losgeworden. Im Produktionscode würden wir wahrscheinlich einen Schritt weiter gehen und das Gleichgewicht ganz zugunsten von address(this)balance entfernen. Ich kann meine 1000 XYZ-Token an diesen Vertrag senden, indem ich übertragung(0x111, 1000) auf den Token-Vertrag beruft. 1000 Token wurden jetzt 0x111 zugewiesen. Ich kann sehen, wie dies ein häufiges Problem sein könnte, auf das Entwickler stoßen. Sollte ich eine der oben genannten Lösungen implementieren, obwohl sie den Standardvertrag ändert? Wenn nicht, wie soll ich es lösen? Die einzige Aufgabe des ersten Vertrags EtherReceiver ist es, Äther zu erhalten. Daher trägt die Fallback-Funktion den zahlbaren Modifikator. Diese Fallback-Funktion wäre der Ort, um bösartigen Code zu implementieren, um einen Re-Entrancy-Angriff durchzuführen.

Da dieser Angriff mehr als das Stipendium von 2300 Gas erfordern würde, sind nur Fallback-Funktionen, die durch die call.value-Methode ausgelöst werden, in der Lage, den Angriff auszuführen. Der zweite Vertrag EtherSender, ab Zeile 6, hat Zugriff auf eine Instanz des EtherReceiver in Form von receiverAdr (Zeile 8).

Dieser Eintrag wurde veröffentlicht in Allgemein. Lesezeichen auf den Permanentlink.