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 VM
Umgebung 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 createContract
Funktion verwende, wird eine neue Instanz des Factory
Vertrags bereitgestellt. Übersehe ich etwas?
Gemäß den obigen Kommentaren bestand das Problem darin, dass beim Klicken auf die Schaltfläche „At Address“ der falsche Vertrag ausgewählt wurde.
Benutzer19510
Factory
, dann habe ich angerufencreateContract("test")
. Dann rief ichcontracts(0)
an, um die Adresse des neuen Vertrages zu erfahren. Ich wählteExampleContract
aus dem Dropdown-Menü aus, fügte die Adresse neben „At Address“ ein und klickte dann auf „At Address“. Ich hatte dann eine Instanz vonExampleContract
, und der AufrufName()
gab die Zeichenfolge "test" korrekt zurück (wie ich sie ursprünglich angegeben hattecreateContract
).Empfang
Benutzer19510
Empfang
At Address
Funktion 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!