Wie wird der Vertragstyp in den Adresstyp umgewandelt?

Verträge können explizit in und aus dem Adresstyp konvertiert werden. In solidity docs wird erwähnt, dass die Verträge in einen Adresstyp umgewandelt werden können. Aber wenn ich das versuche, gibt mir der Compiler den folgenden Fehler. Explizite Typumwandlung von „Typ(Vertrag)“ in „Adresse“ nicht zulässig

Was ich genau versuche, ist folgendes

contract A {
    // some logic 
}

contract B {
    //some logic
}

contract C{
    address a = address(A);
    address b = address(B);
}

Der Fehler, den ich bekomme: -

Explizite Typumwandlung von „Typ (Vertrag A)“ in „Adresse“ nicht zulässig. Adresse a = Adresse (A);

Explizite Typumwandlung von „Typ (Vertrag B)“ in „Adresse“ nicht zulässig. Adresse b = Adresse (B);

Dies ist der Link für das Dokument, in dem ich gesehen habe, dass dies möglich ist.

Antworten (1)

Sie müssen diese Verträge zuerst erstellen, um ihre Adresse zu erhalten, ändern Sie dies:

contract C {
    address a = address(A);
    address b = address(B);
}

Dazu:

contract C {
    address a = address(new A());
    address b = address(new B());
}

Dann kannst du sie so lesen:

function getContractAddresses() view public returns(address, address) {
    return (a, b);
}
Vielen Dank für deine Hilfe. Wenn ich mich nicht irre, wäre die Adresse a nicht gleich der Adresse von Vertrag A? Ich möchte, dass die Adresse von Vertrag A in der Variablen Adresse a gespeichert wird.
Du liegst falsch, debugge einfach, was ich dir geschickt habe. Indem Sie einfach mehrere Verträge in einer .sol-Datei belassen, bedeutet dies nicht, dass Sie sie bereitstellen. Wenn Sie in meinem Beispiel (manuell) bereitstellen, contract Cstellt dieser bestimmte Vertrag nach der Bereitstellung auch die Verträge Aund bereit B.