Как мы знаем, если мы хотим, чтобы контракт A в будущем создавал другой контракт: контракт B, когда мы развертываем контракт A, мы также помещаем код контракта B в транзакцию. Итак, мы отправляем в блокчейн следующий код для развертывания контракта А:
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;}
}
Предположим, контракт B хочет создать другой контракт: контракт C в будущем.
Возникает вопрос : куда поместить код контракта C?
Я попробовал что-то подобное в Remix IDE, и это сработало.
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
}
Насколько я знаю, вы можете либо использовать функцию, определенную в контракте A, чтобы создать контракт B и вызвать его (каждый раз, когда вы вызываете функцию, будет создан экземпляр контракта B), либо вы можете назначить значение адреса созданного контракта B в самый первый раз и проверьте, установлен ли адрес при каждом вызове функции.
Ай.
Ачала Диссанаяке
Ай.
Ай.
Ачала Диссанаяке