Wie stellt man mehrere Verträge bereit, die in Ethereum Wallet abhängig sind?

Geben Sie hier die Bildbeschreibung einIch habe zwei Verträge "College" und "Department". Sie sind abhängige Vertrag. Wie stelle ich sie in Ethereum Wallet bereit?

Beispielcode :

contract Department {
    function enroll(uint depID, address student) returns (bool ret) {
           return true;
      }
}

contract College {
    address student;
    Department dept_instance;

    function College ( address _student , address _department  ) {
        student = _student;
        dept_instance = _department;
     }

    function chooseDept ( uint id ) payable returns (bool value) {
        bool ret = student.send(msg.value);
        if (!ret)
            return dept_instance.enroll(id, msg.sender);
        else
            throw;
    }
}

Geben Sie hier die Bildbeschreibung ein

Antworten (1)

Mit "Brieftasche" meinen Sie wohl Mist.

Wenn eine Quelldatei wie oben zwei Verträge hat, lässt Mist Sie wählen, welchen Vertrag Sie bereitstellen möchten. Stellen Sie in diesem Fall zuerst die Abteilung bereit.

Finden Sie den bereitgestellten Abteilungsvertrag und kopieren Sie seine Adresse in die Zwischenablage. Es ist nicht offensichtlich, aber mit etwas Beharrlichkeit können Sie die vollständige Adresse auf dem Bildschirm anzeigen und kopieren.

Kehren Sie dann zu "Verträge" zurück, um das College bereitzustellen.

Da der Konstruktor von College benötigt address _department, bietet Mist ein Feld an, in dem Sie die Daten angeben können. Einfügen, damit die Adresse der Abteilung an den Konstruktor übergeben wird.

Verwenden Sie in Zeile 13 _department, um eine Instanz von Department zu erstellen. So was:dept_instance = Department(_department);

contract Department {

    function enroll(uint depID, address student) returns (bool ret) {
           return true;
    }
}

contract College {
    address student;
    Department dept_instance;

    function College ( address _student , address _department  ) {
        student = _student;
        dept_instance = Department(_department);
     }

    function chooseDept ( uint id ) payable returns (bool value) {
        bool ret = student.send(msg.value);
        if (!ret)
            return dept_instance.enroll(id, msg.sender);
        else
            throw;
    }
}

Ich hoffe es hilft.

Ich habe es genauso versucht. Bei der Bereitstellung des "College"-Vertrags zeigt der Mist-Compiler jedoch an, dass die fehlende Abteilungskennung nicht gefunden oder nicht eindeutig ist. Abteilung dept_instance; ^--------^
Ich wusste nicht, dass es ein Versehen im Code gab. Meine Antwort wurde mit einer kleinen Korrektur aktualisiert, die dazu führte, dass sich der Compiler beschwerte.
kein problem Rob. Danke für den richtigen Hinweis. Ich kann den Vertrag bereitstellen. Beim Aufrufen der Funktion „chooseDept():“ tritt jedoch ein weiterer Fehler auf. Tut mir leid, wenn dies eine grundlegende Frage ist. Ich füge den Screenshot des aktuellen Problems als Referenz an
Ich mache hier nur mein menschliches Parsing. Sie haben einen Wurf in dieser Funktion, also ist dies Ihr wahrscheinlichster Grund. Rückwärts arbeitend, wenn student.send() fehlschlägt, wird es ausgelöst. Von dort rückwärts sieht es so aus, als ob der Student vom Konstruktor festgelegt wurde. War es? Schlagen Sie vor: "Adresse öffentlicher Student;" damit Sie es zu Fehlerbehebungszwecken sehen können.