Wie erstellen Sie eine neue Vertragsinstanz mit einer Adresse *und* Argumenten?

Es gibt die Standardmethode zum Erstellen von Vertragsinstanzen mit dem newSchlüsselwort, bei der Sie Argumente übergeben wie:

MyContract mine = new MyContract(arg1, arg2);

Dann gibt es einen anderen Weg, wie in diesem Beispiel , wo eine Vertragsinstanz an einer bestimmten Adresse erstellt wird, ohne das newSchlüsselwort, aber ohne Argumente, wie folgt:

MyContract mine = MyContract(address);

Wie erstelle ich eine Vertragsinstanz an einer bestimmten Adresse (wie im zweiten Beispiel) und mit den gewünschten Argumenten (wie im ersten Beispiel)?

Ich bin neu hier, tut mir leid, wenn ich hier etwas falsch verstehe. `

Antworten (2)

Du kannst nicht.

Im ersten Beispiel instanziieren Sie nicht nur einen vorhandenen Vertrag. Sie stellen eine neue Instanz bereit und übergeben Argumente an die Konstruktorfunktion. Konstruktoren werden absichtlich nur einmal ausgeführt und sind nicht einmal im bereitgestellten Bytecode enthalten (weil sie nicht erneut ausgeführt werden können).

Im zweiten Beispiel instanziieren Sie einen bereits vorhandenen Vertrag. Es besteht keine Notwendigkeit oder mögliche Verwendung von Argumenten, da der Vertrag bereits bereitgestellt ist und der Konstruktor nicht erneut ausgeführt werden kann.

Ich hoffe es hilft.

Das zweite Beispiel ist das Erstellen einer Vertragsinstanz an einer bestimmten Adresse, die bereits in der Blockchain vorhanden ist. Sie übergeben das addressto MyContract, um der EVM mitzuteilen, wo sie beim Ausführen des Codes suchen soll.

Um eine Funktion für diesen Vertrag aufzurufen, verweisen Sie auf den Namen, den Sie ihr gegeben haben (in diesem Fall mine) und rufen die Funktion damit auf. Hier können Sie die gewünschten Parameter übergeben.

Ein Beispiel wäre also:

MyContract mine = MyContract(0x1234)
uint256 number = mine.squareTheNumber(2) // number = 4

In diesem Beispiel rufen Sie die squareTheNumber(uint256)Funktion auf auf mine.