Unterschied zwischen Vertragserstellung mit und ohne Neuverwendung

Hallo, kann mir jemand den Unterschied zwischen dem Erstellen eines Vertrags mit einem neuen Betreiber und dem Erstellen eines Vertrags durch Übergabe der Adresse erklären.

Beispiel:

contract A{
    uint256 public num = 10;
    function get() returns(uint){
        return num;
    }
}

contract B{
    function get() returns(uint){
        A a = new A();
        a.get();
    }
}

Und

contract B{
    function get(address add) returns(uint){
        A a = A(add);
        a.get();
    }
}

Antworten (2)

Wenn Sie einen Vertrag mit einer neuen Adresse bereitstellen möchten, die zuvor im Netzwerk nicht vorhanden war, können wir dies verwenden

A a = neu A();

Es generiert die Adresse ader contract A. Hier enthält a die Adresse des Vertrags, der gerade bereitgestellt wurde.

Wenn Sie eine Vertragsadresse haben, die bereits im Netzwerk bereitgestellt wurde und die Sie im aktuellen Vertrag verwenden möchten, müssen Sie diese konvertieren address to contract type. Danach wird erkannt, dass es sich bei dieser bestimmten Adresse um eine Vertragsadresse handelt.

A a = A(Adresse_des_Vertrags_A);

Dadurch wird die Verwechslung von Adresse EOA(externes Konto) oder CA(Vertragskonto) vermieden.

Im ersten Szenario stellen Sie bei jedem Aufruf B.get()von eine neue Instanz von A bereit. Wenn Sie es zehnmal aufrufen, gibt es 1 B-Vertrag und 10 A-Verträge.

Im zweiten Szenario ist Vertrag A bereits irgendwo bereitgestellt, und Sie übergeben einfach seine Adresse an den Get-Aufruf. In diesem Szenario kann eine einzelne Instanz von A mehrmals verwendet werden.