Remix- und Auftragsfabriken

Ich habe eine ziemlich komplexe Vertragsfabrik aufgebaut und festgestellt, dass die Fabrik nur Instanzen von sich selbst erstellt, nicht den "untergeordneten" Vertrag. Nachdem ich dies beobachtet hatte, dachte ich, dass ich etwas falsch mache, also reduzierte ich mich und versuchte zuerst, eine super einfache Version zu implementieren. Allerdings beobachte ich immer noch das gleiche Verhalten. Ich habe dies in der Remix-IDE geschrieben und in der Javascript VMUmgebung bereitgestellt.

Hier ist meine Fabrik:

pragma solidity ^0.4.21;

contract ExampleContract {
    string public Name;

    function ExampleContract (string name) public {
        Name = name;
    }
}


contract Factory {
    address[] public contracts;

    function createContract(string name) public returns(address)  {
        address newContract = new ExampleContract(name);
        contracts.push(newContract);
        return newContract;
    }
} 

Alles lässt sich gut kompilieren und bereitstellen. Wenn ich die createContractFunktion verwende, wird eine neue Instanz des FactoryVertrags bereitgestellt. Übersehe ich etwas?

Beispiel

gif

Ich kann dieses Verhalten nicht reproduzieren. Ich habe eingesetzt Factory, dann habe ich angerufen createContract("test"). Dann rief ich contracts(0)an, um die Adresse des neuen Vertrages zu erfahren. Ich wählte ExampleContractaus dem Dropdown-Menü aus, fügte die Adresse neben „At Address“ ein und klickte dann auf „At Address“. Ich hatte dann eine Instanz von ExampleContract, und der Aufruf Name()gab die Zeichenfolge "test" korrekt zurück (wie ich sie ursprünglich angegeben hatte createContract).
Hey @smarx danke für die Antwort. Ich habe meiner Frage ein GIF hinzugefügt. Können Sie bestätigen, dass wir die gleichen Aktionen ausführen, aber unterschiedliche Ergebnisse erzielen? Ich wechselte zu einem anderen Computer/Betriebssystem und konnte mein Problem replizieren.
Sie haben den richtigen Vertrag nicht aus der Dropdown-Liste ausgewählt, bevor Sie auf „An Adresse“ geklickt haben.
Oh. Mir war nicht bewusst, dass Sie den Vertrag aus der Dropdown-Liste auswählen müssen, wenn Sie die At AddressFunktion verwenden. Noob-Fehler. Scheint jetzt offensichtlich zu sein. Wenn Sie Ihre Antwort auf eine tatsächliche Antwort verschieben möchten, werde ich sie als richtig markieren. Danke noch einmal!

Antworten (1)

Gemäß den obigen Kommentaren bestand das Problem darin, dass beim Klicken auf die Schaltfläche „At Address“ der falsche Vertrag ausgewählt wurde.