Frage zum Soliditätskonstrukteur

Ich habe eine Vertragsvorlage (z. B. Vertrags-ABC). Der Konstruktor übernimmt 3 Felder, um einen Vertrag zu initialisieren. Ich habe Logik in den Konstruktor eingebaut, um einen boolschen Wert basierend auf Datenprüfungen zurückzugeben. Der Konstruktor sollte fehlschlagen und keinen gültigen Vertrag erstellen, wenn die Datenfelder die Validierung nicht bestehen. Die Rückgabe ist ein boolescher Wert.

Funktion ABC(bytes32 _field1, bytes32 _field2, bytes32 _field3) gibt zurück (bool isSuccess);

Wenn ich jetzt versuche, einen neuen Vertrag (aus einem anderen Vertrag) zu erstellen: Wie überprüfe ich den bool (Erfolg).

Ich erstelle eine Instanz des Vertrags als:

ABC lokal = neues ABC(_field1, _field2, _field3);

Gibt es eine Möglichkeit zu überprüfen, ob dies erfolgreich war - basierend auf der boolschen Rückgabe des Konstruktors.

Alternative 1: Ich kann die Datenprüfungen durchführen, bevor ich die Anfrage an den Konstruktor sende. Ich habe versucht zu vermeiden, denselben Code an mehreren Stellen neu zu schreiben.

Alternative 2: Ich kann ein Feld isValue innerhalb des Konstruktors initialisieren und beim Validieren einer Instanz darauf prüfen.

Irgendwelche Ratschläge? Danke,

Antworten (1)

Zunächst ist anzumerken, dass die Vertragserstellung automatisch fehlschlägt, wenn etwas auslöst oder einen Fehler verursacht. Wenn dies fehlschlägt, können Sie sowieso nicht zurückkehren false, da der gesamte Status zurückgesetzt wird.

Aus diesem Grund ist es am besten, einfach requireoder assertAnweisungen zu verwenden, um zu werfen, wenn Daten ungültig sind, wodurch die Vertragserstellung beendet wird und ungültige Verträge niemals erstellt werden.

Alternative 1: Ich würde empfehlen, dies trotzdem zu tun, damit Sie kein Gas verschwenden. Die Vertragserstellung kostet derzeit über 5 USD, die verschwendet werden, wenn Sie dies nicht tun.

Alternative 2: Sie könnten dies tun, aber dies ist ineffizient, da diese gespeicherten Daten nicht wirklich benötigt werden.