Warum sollten Daten an einen Vertragskonstrukteur weitergegeben werden, anstatt sie nur fest zu codieren, was weniger kostspielig wäre?

Kostet es nicht mehr, die Variablenzuweisung über einen Konstruktor zu übergeben, weil sich der Status ändert?

Wäre es nicht billiger, sie nur im Code zuzuweisen?

Ich frage mich, ob die Verwendung eines Konstruktors Vorteile bietet, die ich nicht in Betracht ziehe.

Ich freue mich über Informationen zu den Gründen für die Verwendung eines Konstruktors zum Zuweisen von Werten, da ich nicht erkennen kann, warum dies von Vorteil ist.

Danke Leute.

Antworten (1)

Ich vermute, Sie sprechen über den Fall, dass die Argumente für den Konstruktor vor der Bereitstellung im Voraus bekannt sind. In diesem Fall haben Sie Recht, es ist effizienter, die Konstruktorparameter zu entfernen und sie als Konstanten im Code hinzuzufügen, wodurch möglicherweise einige Statusvariablen eliminiert und Gas gespart werden.

Es gibt jedoch Fälle, in denen es nicht möglich ist, Zustandsvariablen auf diese Weise durch Konstanten zu ersetzen, z. B. wenn eine Zustandsvariable veränderbar sein muss, dh später im Lebenszyklus des Vertrags aktualisiert werden kann. Das Eliminieren der Konstruktorparameter ist in diesem Fall also nicht von großem Vorteil.

Ein weiterer Fall, in dem Konstruktorparameter nützlich sind, besteht darin, dass Vertragsinstanzen in einem anderen Vertrag erstellt werden. Angenommen, es gibt Vertrag A, der Instanzen von Vertrag B erstellen muss, und diese Instanzen sollten unterschiedliche Namen haben. Der Name muss in diesem Fall ein Konstruktorparameter sein. Sie können stattdessen den Bytecode von B jedes Mal vor der Bereitstellung mit dem neuen Namen aktualisieren (dies ist möglich, wie in den Kommentaren als @flygoing erwähnt). Dies erfordert jedoch die Verwendung von Assembly und ist möglicherweise fehleranfällig.

Hoffe meine Erklärungen sind klar.

Ihr 3. Absatz ist falsch. Ein Vertrag kann einen beliebigen Bytcode bereitstellen. Weitere Informationen finden Sie in diesem Beispiel unter github.com/yarrumretep/clone-factory/blob/master/contracts/…, in dem der Bytecode aktualisiert wird, um einen Bibliotheksvertrag im laufenden Betrieb zu verwenden, bevor der Bytecode bereitgestellt wird. Sie können sogar Bytecode an eine Vertragsfunktion übergeben, um ihn bereitzustellen.
Interessant. Danke für diesen Hinweis. Irgendwie war ich durch diesen Abschnitt in Solidity docs solidity.readthedocs.io/en/develop/… verwirrt. Übrigens, was ist das Hex "34604457603a80 ... Bytecode in CloneFactory?
Dieser Bytecode ist der Bytecode, der bereitgestellt wird. Es ist ein einfacher Vertrag, der alle Anrufe über Delegatecalls an eine andere Adresse weiterleitet, dh es handelt sich um einen schlanken 96-Byte-Vertrag, der über einen eigenen Speicher verfügt, jedoch den Code eines anderen Vertrags verwendet. Der Beefbeefbeefbeef-Teil im Bytecode ist der Teil, der durch die übergebene Adresse ersetzt wird. Dies ist die Adresse, an die delegiert wird. Sie können die Pseudoquelle für den Bytecode unter github.com/yarrumretep/clone-factory/blob/master/… lesen.