Vertrag B wird aus Vertrag A erstellt, aber die Adresse von Vertrag B zeigt einen Vertrag vom Typ A auf Remix

function _createB() public {
    address newB = new B();
    newB(newB); //Event logs the address of contract B
}

Wenn ich die Adresse, die vom newB-Ereignis protokolliert wird, kopiere und in Remix in „load contract at address“ einfüge, erhalte ich einen weiteren Vertrag vom Typ A.

Wie könnte ich separate Verträge vom Typ B erstellen?

Antworten (1)

Beim Versuch, einen Vertrag eines bestimmten Typs über "at address" zu erhalten, sollte dieser Vertrag aus dem Dropdown-Menü ausgewählt werden.

Was in Ihrem Fall passiert, ist, dass Sie den Vertrag vom Typ "A" erhalten, sich aber immer noch wie der Vertrag vom Typ "B" verhalten.

Was "at address" bewirkt:

Es stellt lediglich eine Schnittstelle zu dem ausgewählten Vertrag bereit, der voraussichtlich an der angegebenen Adresse bereitgestellt wird.

  • Es findet heraus, welcher Vertrag für den Betrieb von "at address" ausgewählt ist
  • Es findet dann die Schnittstelle (ABI) dieses Vertrags aus dem Code, der in die aktuelle Datei geschrieben ist.
  • Erzeugt Hashes von Funktionen.
  • Zeigt jeden Funktionsnamen an.
  • Immer wenn eine Funktion aufgerufen wird, werden die Transaktionsdaten gemäß dem Hash der Funktion aufbereitet und an den Vertrag gesendet.

Wenn der Vertrag nun auf diese Daten reagieren kann, dh diese Funktion ausführt, erhalten Sie die korrekte Ausgabe gemäß dem Vertrag an dieser Adresse.

Hinweis: Dies sollte mit Vorsicht verwendet werden, da Sie bei unsachgemäßer Verwendung möglicherweise mit einem anderen Vertrag interagieren.