Gnosis-Safe

在 Binance Smart Chain 上將 BNB 從合約轉移到 Safe

  • March 9, 2022

在我的契約中,我從使用者那裡收到 BNB,並希望將其轉移(撤回)到 gnosis 安全地址。

該函式適用於普通地址,但似乎不適用於“契約”地址。

使用“合約”地址時,以下程式碼行以“out of gas”中斷

payable(profitAddress).transfer(profit);
  • ProfitAddress:一個 gnosis 安全地址

我關注這些文章https://help.gnosis-safe.io/en/articles/5249851-why-can-ti-transfer-eth-from-a-contract-into-a-safe將 ETH 從合約轉移到安全,它仍然不起作用。

const { ethers } = require('ethers')
// eslint-disable-next-line import/no-extraneous-dependencies
require('dotenv').config()

const provider = new ethers.providers.JsonRpcProvider(
 'https://rpc.tenderly.co/fork/6e26dd40-d373-4867-bbc4-892a45787425',
 {
   name: 'BSC',
   chainId: 56
 }
)

async function run() {
 let wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider)
 wallet = wallet.connect(provider)
 const nft = new ethers.Contract(
   '0xBa9F0a830E89D4b8378d266da79BE32BD6c37458',
   ['function withdraw(address to) public'],
   wallet
 )
 const overrides = {
   gasLimit: 500000,
   gasPrice: ethers.utils.parseUnits('150', 'gwei').toString(),
   type: 1,
   accessList: [
     {
       address: '0xd5530Ea6d5832b9BACa571A66AB4051680645292', // admin gnosis safe proxy address
       storageKeys: [
         '0x0000000000000000000000000000000000000000000000000000000000000000'
       ]
     },
     {
       address: '0x3E5c63644E683549055b9Be8653de26E0B4CD36E', // gnosis safe master address
       storageKeys: []
     },
     {
       address: '0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552', // gnosis safe master address
       storageKeys: []
     }
   ]
 }

 const tx = await nft.withdraw(
   '0x5A25944B3383Aab4f3B830d5D9f2Ba672D9fa9Ce',
   overrides
 )
 console.info({ tx })
 const resolved = await tx.wait()
 console.info({ resolved })
}

run()

謝謝!

這是將 ETH 從合約發送到 BSC/BNB 上的 Gnosis Safe 錢包的副本

如前所述,您可以在此處找到指南:https ://github.com/rmeissner/safe-migrator

請務必查看本指南中的所有程式碼,因為使用始終需要您自擔風險。

注意:BNB 不支持訪問列表功能,也不打算支持(參見Does bsc chain support eip2930?

Solidity.transfer函式將 2300 個 gas 轉移到指定地址。顯然,當指定的智能合約收到一筆交易時,智能合約會使用超過 2300 個 gas。所以你必鬚髮送更多的氣體,這可以通過 Solidity.call功能來實現。

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