Solidity
Solidity:從合約 A 燒掉的合約 B 如何生成另一個合約?
如我們所知,如果我們想要合約 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 的地址值在第一次,並檢查是否在呼叫函式時設置了地址。