Evm

將 ETH 從合約轉移到 Safe

  • February 23, 2022

我做了一個睡眠不足的監督,並沒有考慮柏林硬分叉,它增加了在合約之間轉移 ETH 的 gas 成本。我複制粘貼了一個之前測試過的withdrawETH功能,該功能適用於錢包,但顯然不適用於柏林分叉後的合約,至少不適用於正常交易。

幸運的是,為了防止違約, EIP-2930引入了一種新的交易類型來預付賬戶和儲存槽,從而為 ETH 轉移留下了足夠的 gas。

我希望您的專家幫助驗證這是否是執行我的交易的正確方法,這將根據此範例中的程式碼在此部署的合約withdrawETH上呼叫足夠的氣體:

async function run() {
   wallet = new ethers.Wallet.fromMnemonic(process.env.MAINNET_MNEMONIC)
   wallet = wallet.connect(provider)
   const address = "0xb82FdA3F5752FC3b7243259e893B99DDB13D4546"; // contract address

   contract = new ethers.Contract(address, abi, wallet)

   overrides = {
       gasLimit: 500000,
       gasPrice: ethers.utils.parseUnits('150', 'gwei').toString(),
       type: 1,
       accessList: [
           {
               address: "0xDbaD7CbcA084DFf4E93B0f365978362aD8cc0A35", // admin gnosis safe proxy address
               storageKeys: [
                   "0x0000000000000000000000000000000000000000000000000000000000000000"
               ]
           },
           {
               address: '0xDaB5dc22350f9a6Aff03Cf3D9341aAD0ba42d2a6',  // gnosis safe master address? not sure if this is it
               storageKeys: []
           }
       ]
   }

   withdrawTxn = await contract.withdrawETH(overrides)
   console.log({ withdrawTxn })
   resolved = await withdrawTxn.wait()
   console.log({ resolved })
}

在我在主網上試用之前,請先欣賞任何建議。我要給你寄一點 ETH 來解決你的麻煩,我太累了,壓力太大了,今天去破譯這個。提前致謝。

編輯:將 gnosis 安全主地址從答案更改為正確的地址後,它就像一個魅力。

您連結的保險箱的主副本地址是0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552。這些資訊可以從我們的服務中載入,通過EtherscanmasterCopy()檢查或使用該功能在鏈上查找。

可以在安全部署儲存庫中找到安全合約的一般地址列表。

作為訪問列表的替代方法,您可以從目標 Safe 本身呼叫此方法。

我們在這裡有一篇關於此的一般幫助文章:https ://help.gnosis-safe.io/en/articles/5249851-why-can-ti-transfer-eth-from-a-contract-into-a-safe

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