Gnosis-Safe

如何從另一個智能合約創建/提出 gnosis 安全交易

  • March 16, 2022

作為序言,我對 Solidity 非常陌生,所以答案可能非常簡單。

我創建了一個 2/3 所有者需要批准的 gnosis 保險箱。我有一個基本的智能合約,我想呼叫一個我定義的函式sendToUser……這個函式應該提出一個安全的交易……我只需要繼承execTransaction這裡然後我可以在我的智能合約中使用這個函式嗎?<https://github.com/gnosis/safe-contracts/blob/main/contracts/GnosisSafe.sol>

  1. 要與另一個智能合約互動,您需要聲明一個介面:
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();
   }
}
  1. 提出安全交易。我假設通過提議,您的意思是簽署交易並將其發送到安全交易服務。為了提出一個安全的交易,你的合約需要實現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 執行函式呼叫,或通過智能合約呼叫直接針對已部署的多重簽名鏈執行函式呼叫。

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