Gnosis-Safe
如何從另一個智能合約創建/提出 gnosis 安全交易
作為序言,我對 Solidity 非常陌生,所以答案可能非常簡單。
我創建了一個 2/3 所有者需要批准的 gnosis 保險箱。我有一個基本的智能合約,我想呼叫一個我定義的函式
sendToUser
……這個函式應該提出一個安全的交易……我只需要繼承execTransaction
這裡然後我可以在我的智能合約中使用這個函式嗎?<https://github.com/gnosis/safe-contracts/blob/main/contracts/GnosisSafe.sol>
- 要與另一個智能合約互動,您需要聲明一個介面:
interface ICounter { function count() external view returns (uint); function increment() external; } contract MyContract { function incrementCounter(address _counter) external { ICounter(_counter).increment(); } function getCount(address _counter) external view returns (uint) { return ICounter(_counter).count(); } }
- 提出安全交易。我假設通過提議,您的意思是簽署交易並將其發送到安全交易服務。為了提出一個安全的交易,你的合約需要實現EIP-1271中定義的簽名驗證功能。此處描述瞭如何為 Gnosis Safe 合約生成智能合約簽名:如何通過 Argent 錢包 + Wallet-Connect 簽署 Gnosis-Safe 交易
我發現這個材料很有幫助
<https://medium.com/gauntlet-networks/multisig-transactions-with-gnosis-safe-f5dbe67c1c2d>
構想大致如下:
- 設置一個 gnosis-safe 並添加簽名者
- 創建您的自定義契約。
onlyOwner
使用(您可以使用 openzepellin 的 Ownable.sol)裝飾任何需要僅由 multisig 執行的功能- 部署您的自定義智能合約,將其所有權轉移到多重簽名地址。
- 通過 gnosis-safe ui 執行函式呼叫,或通過智能合約呼叫直接針對已部署的多重簽名鏈執行函式呼叫。