Evm
將 ETH 從合約轉移到 Safe
我做了一個睡眠不足的監督,並沒有考慮柏林硬分叉,它增加了在合約之間轉移 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。這些資訊可以從我們的服務中載入,通過Etherscan
masterCopy()
檢查或使用該功能在鏈上查找。可以在安全部署儲存庫中找到安全合約的一般地址列表。
作為訪問列表的替代方法,您可以從目標 Safe 本身呼叫此方法。
我們在這裡有一篇關於此的一般幫助文章:https ://help.gnosis-safe.io/en/articles/5249851-why-can-ti-transfer-eth-from-a-contract-into-a-safe