Gnosis-Safe
在 Binance Smart Chain 上將 BNB 從合約轉移到 Safe
在我的契約中,我從使用者那裡收到 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()
- 合約地址:https ://bscscan.com/address/0xBa9F0a830E89D4b8378d266da79BE32BD6c37458#code
- gnosis 安全地址:https ://bscscan.com/address/0xd5530Ea6d5832b9BACa571A66AB4051680645292#code
- 錯誤資訊:
謝謝!
這是將 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
功能來實現。