Wenn wir wissen, dass Vertrag A in Zukunft einen anderen Vertrag erstellt: Vertrag B, wenn wir Vertrag A bereitstellen, fügen wir auch den Code von Vertrag B in die Transaktion ein. Also senden wir den folgenden Code an die Blockchain, um Vertrag A bereitzustellen:
pragma solidity ^0.4.4;
contract Contract_A {
address public b_addr;
function Contract_A(){
}
function create() {
Contract_B bb = new Contract_B();
b_addr = address(bb); }
function fetch(){
Contract_B cc = Contract_B(b_addr);
cc.change();}
}
contract Contract_B {
uint public val;
function Contract_B(){
val=7;}
function change(){
val+=90;}
}
Angenommen, Vertrag B möchte in der Zukunft einen weiteren Vertrag erstellen: Vertrag C.
Die Frage ist: Wo sollen wir den Code von Vertrag C hinstellen?
Ich habe in der Remix IDE etwas wie folgt ausprobiert und es hat funktioniert.
pragma solidity ^0.4.4;
contract Contract_A {
address public b_addr;
function Contract_A(){
}
function create() {
Contract_B bb = new Contract_B();
b_addr = address(bb); }
function fetch(){
Contract_B cc = Contract_B(b_addr);
cc.change();}
}
contract Contract_B {
address public c_addr;
uint public val;
function Contract_B(){
val=7;}
function change(){
val+=90;}
function create() {
Contract_C cc = new Contract_C();
c_addr = address(cc);
}
}
contract Contract_C {
//contract C code
}
AFAIK, Sie können entweder eine in Vertrag A definierte Funktion verwenden, um einen Vertrag von B zu erstellen und aufzurufen (jedes Mal, wenn Sie die Funktion aufrufen, wird eine Instanz von Vertrag B erstellt), oder Sie können den Adresswert des erstellten Vertrags B zuweisen beim allerersten Mal und prüfen, ob die Adresse bei jedem Aufruf der Funktion gesetzt ist.
Ja.
Achala Dissanayake
Ja.
Ja.
Achala Dissanayake