Solidity

Solidity:從合約 A 燒掉的合約 B 如何生成另一個合約?

  • October 27, 2017

如我們所知,如果我們想要合約 A,將來創建另一個合約:合約 B,當我們部署合約 A 時,我們還將合約 B 的程式碼放入事務中。所以我們將以下程式碼發送到區塊鏈以部署合約 A:

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
}

AFAIK,您可以使用合約 A 中定義的函式來創建 B 的合約並呼叫它(每次呼叫該函式時都會創建合約 B 實例),或者您可以分配創建的合約 B 的地址值在第一次,並檢查是否在呼叫函式時設置了地址。

引用自:https://ethereum.stackexchange.com/questions/28662