Contract-Design
從多重簽名錢包部署合約
我使用 Mist 創建了一個多重簽名錢包,但不知道如何從錢包地址部署合約。甚至可能嗎?如果是這樣,該怎麼做?
只要多簽合約可以呼叫其他合約中的任意函式,就可以使用多簽錢包。
由於大多數多重簽名本身無法創建合約,因此需要幫助。可以首先手動部署“工廠”合約(由任何人/任何人)。它將包括要創建的契約模板和一個功能,例如
function deployInstance() ...
. 多重簽名將能夠呼叫該函式。這通常會導致多重簽名獲得所有者權限。這將使一次性部署的成本增加一倍,但它會完成它。
值得一提的是,如果最終狀態目標是讓多重簽名擁有所有權,那麼從普通的 EOA 進行部署然後將所有權轉移給多重簽名可能是切實可行的。可轉移性是要部署的合約的屬性,但並非不尋常或不合理。
希望能幫助到你。
這取決於您使用的多重簽名錢包,但很可能不是。
有2種情況:
- 案例 1:在部署 A 之前,您知道要從智能合約 A 部署的智能合約 B
- 案例2:你只知道智能合約B部署A,部署A之後
情況1
這是最常見的情況,也是您只能使用 Solidity 的唯一情況。當您編寫智能合約 A 時,您需要在同一個文件中導入 B 或定義 B。在函式中,您可以像這樣創建 B 的實例:
B b = new B()
案例2
在這種情況下,僅靠 Solidity 是不夠的。您需要使用
assembly
,這是 Solidity 提供的一種逃生艙口,允許您指定要執行的 EVM 操作碼。這是使用 Solidity 的 EVM 最靈活的方式,但它也有風險,因為你可能會自己上吊。這將是程序:
- 將智能合約編譯成字節碼
- 將此字節碼作為函式的參數傳遞給智能合約
- 在這個函式中,用於
assembly
呼叫CREATE
操作碼,並將字節碼傳遞給它