trufflesuite / ganache

:warning: The Truffle Suite is being sunset. For information on ongoing support, migration options and FAQs, visit the Consensys blog. Thank you for all the support over the years.
https://consensys.io/blog/consensys-announces-the-sunset-of-truffle-and-ganache-and-new-hardhat?utm_source=github&utm_medium=referral&utm_campaign=2023_Sep_truffle-sunset-2023_announcement_
MIT License
2.6k stars 676 forks source link

All pre-funded address balances drop to 0 after running a transaction #4511

Open BarneyChambers opened 10 months ago

BarneyChambers commented 10 months ago

I am running a forked instance of Arbitrum using ganache like so:

ganache-cli --fork https://arb-mainnet.g.alchemy.com/v2/MYAPIKEY --db ./ganache-data -h 0.0.0.0 --chainId 42161 --mnemonic "my cool mnemonic"

I receive my prefunded wallets each with 100 ETH, but when I run any smart contracts on my forked instance, afterwards all of my ether balances on my funded accounts drop to 0.

Is this intended behavior or a bug?

davidmurdoch commented 10 months ago

There is a bug when starting with an existing --db. It doesn't validate that the start up params given match the ones that created the db in the first place, the mnemonic you are giving it is likely different than the mnemonic that was given when the db was first initialized.

Another perspective of this bug: ganache should re-fund the mnemonic's accounts with 100 eth every time it starts up, but doesn't.

That's probably what is happening here.

Here is the issue: https://github.com/trufflesuite/ganache/issues/1030

BarneyChambers commented 10 months ago

Thank you. I have rm -rf ./ganache-data but I am still having the issue. Are there any other config files etc I might need to try deleting to reset my ganache back to default?

davidmurdoch commented 10 months ago

What version of ganache?

BarneyChambers commented 10 months ago

Ganache CLI v6.12.2 (ganache-core: 2.13.2)

davidmurdoch commented 10 months ago

Oh. Uninstall that. It's deprecated. Install ganache via npm install ganache -g

BarneyChambers commented 10 months ago

Thanks, I updated to latest using npm install ganache -g and it seems that I am still having the issue after I delete my db folder, and make a fresh instance of my blockchain, after running a couple of scripts, it seems that my funded balances all go to 0

I am now using ganache v7.9.0 (@ganache/cli: 0.10.0, @ganache/core: 0.10.0)

davidmurdoch commented 10 months ago

Can you paste the ganache output?

BarneyChambers commented 10 months ago

ubuntu@ip-172-31-19-56:~$ ganache --fork https://arb-mainnet.g.alchemy.com/v2/xxxxxxxxxxxxxxx --db ./ganache-data -h 0.0.0.0 --chain.chainId 42161 --mnemonic "xxxxxxxxxxxx" --accounts=10 ganache v7.9.0 (@ganache/cli: 0.10.0, @ganache/core: 0.10.0) Starting RPC server eth_blockNumber

Available Accounts

(0) 0x828ad78d7F05A0EA9E6c2e6f50B4C8a38D0229A8 (1000 ETH) (1) 0x65Ec566142e97603Aa785A8C0C25A7C1303ae6c6 (1000 ETH) (2) 0xe9c6FB81bDCf8c19CEa349b465e1034545A0f381 (1000 ETH) (3) 0x80Ab02e017A7b1d27b64F2C0C7fC539D162F572a (1000 ETH) (4) 0x7Dfd66650F3D4121Db002Df0958B21678C3e398a (1000 ETH) (5) 0x10bd3Bf0Df6C5E256793976515103f452e237AcE (1000 ETH) (6) 0x0432b9f8CfF2e7B321ad91e6F6d258c0010cbA5F (1000 ETH) (7) 0xa7F4088D3f5A72B7dBE18Fd649a283ea7CD3a0b3 (1000 ETH) (8) 0x716f034B9D588A7073d44Da7c4401dAc9f2Cf848 (1000 ETH) (9) 0x9E00D0F6F27684673FAC974E38BDE71986BC0A3d (1000 ETH)

Private Keys

(0) xxxxxxxxxxxx (1) xxxxxxxxxxxx (2) xxxxxxxxxxxx (3) xxxxxxxxxxxx (4) xxxxxxxxxxxx (5) xxxxxxxxxxxx (6) xxxxxxxxxxxx (7) xxxxxxxxxxxx (8) xxxxxxxxxxxx (9) xxxxxxxxxxxx

HD Wallet

Mnemonic: xxxxxxxxxxxx Base HD Path: m/44'/60'/0'/0/{account_index}

Default Gas Price

2000000000

BlockGas Limit

30000000

Call Gas Limit

50000000

Forked Chain

Location: https://arb-mainnet.g.alchemy.com/v2/xxxxxxxxxxxxxxxxxxxxxxxxx Block: 123893240 Network ID: 42161 Time: Tue Aug 22 2023 14:54:20 GMT+0000 (Coordinated Universal Time)

Chain

Hardfork: shanghai Id: 42161

RPC Listening on 0.0.0.0:8545

BarneyChambers commented 10 months ago

eth_call eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_chainId miner_stop miner_setEtherbase eth_blockNumber eth_coinbase miner_start eth_accounts eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_blockNumber eth_getBlockByNumber eth_call eth_blockNumber eth_call eth_call eth_blockNumber eth_blockNumber eth_blockNumber eth_call eth_call eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_chainId miner_stop miner_setEtherbase eth_coinbase miner_start eth_accounts eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_accounts eth_chainId miner_stop miner_setEtherbase eth_coinbase miner_start eth_accounts eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_blockNumber net_version eth_chainId miner_stop miner_setEtherbase eth_coinbase miner_start eth_accounts eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_getBalance eth_blockNumber net_version net_version eth_getBlockByNumber

davidmurdoch commented 10 months ago

Hm, it seems that no transactions are being sent here. Can you provide a reproduction script?

BarneyChambers commented 10 months ago

Sure, if I run these two scripts, afterwards I will lose my ETH in the funded accounts. For reference, I am using hardhat in typescript mode. The way to run these in hardhat is npx hardhat run scripts/theScriptYouWant --network arbitrumFork where arbitrumFork is one of the chains in my hardhat-config.ts that points to my ganache instance:

wrapETH.ts

import { ethers } from "hardhat";
//import "@uniswap/v3-periphery";

const main = async () => {
  const [owner, ...accounts] = await ethers.getSigners();

    console.log("owner address: ", owner.address);
    let WETHAddress = '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1';

    //wrap 50 ETH into WETH
    let WETH = new ethers.Contract(WETHAddress, ['function deposit() public payable'], owner);
    let depositTx = await WETH.deposit({value: ethers.utils.parseEther('50')});
    await depositTx.wait();

    console.log(`Wrapped ETH!`);
};

main()
  .then(() => process.exit(0))
  .catch((error: Error) => {
    console.error(error);
    process.exit(1);
  });

SwapETHForUSDC

import { ethers } from "hardhat";
//import "@uniswap/v3-periphery";
const main = async () => {
  const [owner, ...accounts] = await ethers.getSigners();

    console.log("owner address: ", owner.address);

    //define uniswap v3 router
    let uniswapV3RouterAddress = '0xe592427a0aece92de3edee1f18e0157c05861564';
    let usdcAddress ='0xff970a61a04b1ca14834a43f5de4533ebddb5cc8';
    let WETHAddress = '0x82af49447d8a07e3bd95bd0d56f35241523fbab1';

    let ExactInputSingleParams = {
        tokenIn: WETHAddress,
        tokenOut: usdcAddress,
        fee: 500,
        recipient: owner.address,
        deadline: 1913450590, //2030
        amountIn: ethers.utils.parseEther('50'),
        amountOutMinimum: 65000000000, //65k
        sqrtPriceLimitX96: 0
    }

    console.log('approving...');
    //approve uniswap v3 router to spend WETH
    let WETH = new ethers.Contract(WETHAddress, ['function approve(address spender, uint256 amount) public returns (bool)'], owner);
    let approveTx = await WETH.approve(uniswapV3RouterAddress, ethers.utils.parseEther('50'));
    await approveTx.wait();

    console.log('swapping...');
    let uniswapV3Router = await ethers.getContractAt('ISwapRouter', uniswapV3RouterAddress);
    let swapTx = await uniswapV3Router.exactInputSingle(ExactInputSingleParams);
    await swapTx.wait();
    console.log(`Swapped 50 ETH for USDC!`);
};

main()
  .then(() => process.exit(0))
  .catch((error: Error) => {
    console.error(error);
    process.exit(1);
  });
davidmurdoch commented 10 months ago

I haven't run this yet, but are you sure your hardhat mnemonic matches your ganache mnemonic? And that the accounts they are using are the same (your logged "owner address" should match the first account in ganache's list).

BarneyChambers commented 10 months ago

Yes I am 100% sure they are the same

BarneyChambers commented 10 months ago

I have made a video reproducing the issue:

https://youtu.be/8EM-ewLYdK4

BarneyChambers commented 10 months ago

And here are the logs for that video:

eth_blockNumber eth_call eth_call eth_call eth_blockNumber eth_blockNumber eth_call eth_call eth_blockNumber eth_blockNumber eth_blockNumber eth_chainId eth_chainId eth_chainId eth_accounts eth_blockNumber eth_chainId eth_chainId eth_estimateGas eth_getBlockByNumber eth_feeHistory eth_sendTransaction

Transaction: 0xcfa2b7ee08f8bf7fa89df8db0cf974f9d070fae676976d48ea37ce73fcb5e323 Gas usage: 57975 Block number: 124132798 Block time: Wed Aug 23 2023 09:05:42 GMT+0000 (Coordinated Universal Time)

eth_chainId eth_getTransactionByHash eth_chainId eth_getTransactionReceipt eth_blockNumber eth_blockNumber eth_call eth_call eth_blockNumber eth_chainId miner_stop miner_setEtherbase eth_coinbase eth_blockNumber miner_start eth_accounts eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0xa436e2b5ab180af98abc1e6c53957640c2211787bf44e082f7f3cf0b0d118d1a Gas usage: 21000 Block number: 124132800 Block time: Wed Aug 23 2023 09:06:36 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0x0796e07d1d9213dd025b2016cb8098d441bf11f402bb92b98c89b866170ed240 Gas usage: 21000 Block number: 124132801 Block time: Wed Aug 23 2023 09:06:36 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0x8cdebb09a8e1d5a7284c3f9197cedbc80ecfc54973528981db780ba536744bab Gas usage: 21000 Block number: 124132802 Block time: Wed Aug 23 2023 09:06:37 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0xd42eec6a8da4224a5b654460c5b9f6d6dae27827e294962694176c3d1ed0639a Gas usage: 21000 Block number: 124132803 Block time: Wed Aug 23 2023 09:06:38 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0xc728cfb42576482fc371e88fcfb05f3831d98de148fc8ae32616b57ae8c6ef8f Gas usage: 21000 Block number: 124132804 Block time: Wed Aug 23 2023 09:06:38 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0x9d3b6056be6552efb52d7061ec4f8c7dba420df3ad0872428d45ff310b1da8c3 Gas usage: 21000 Block number: 124132805 Block time: Wed Aug 23 2023 09:06:39 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0xdcbdef431d0dba55495c08052ac838cbc3618fbea4e9ae6dac0cee22f39cacb3 Gas usage: 21000 Block number: 124132806 Block time: Wed Aug 23 2023 09:06:39 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0x67cf3a94219538d61e43848ea64990a134ece082c1d33c58c50a8e2fd81ad817 Gas usage: 21000 Block number: 124132807 Block time: Wed Aug 23 2023 09:06:40 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0x23d38d927415b28c38d49f495a1ec64a16782cc674ca86f8b06521bd3040843e Gas usage: 21000 Block number: 124132808 Block time: Wed Aug 23 2023 09:06:41 GMT+0000 (Coordinated Universal Time)

eth_getBalance eth_estimateGas eth_gasPrice eth_sendTransaction

Transaction: 0xdc7edc8887d4c8c14397c31a8b6ded31d4b02bb3094391730fa66e4e4f7dcd35 Gas usage: 21000 Block number: 124132809 Block time: Wed Aug 23 2023 09:06:41 GMT+0000 (Coordinated Universal Time)

eth_chainId eth_chainId eth_chainId eth_accounts eth_chainId eth_blockNumber eth_chainId eth_estimateGas eth_getBlockByNumber eth_feeHistory eth_sendTransaction eth_blockNumber eth_blockNumber eth_call eth_call eth_call eth_blockNumber eth_call eth_call eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber eth_blockNumber

davidmurdoch commented 10 months ago

There are 10 value transfer transactions in the logs above. I think something in your set up is draining the accounts. Try starting Ganache with --verbose.

agentmic487 commented 10 months ago

Thank you. I have rm -rf ./ganache-data but I am still having the issue. Are there any other config files etc I might need to try deleting to reset my ganache back to default?

Are you still having this issue or got it solved?

agentmic487 commented 10 months ago

Yes I am 100% sure they are the same

Hi mate, are you still having this issue or got it solved? If not you can get intouch with me so we can both get it solved together because a lot of people have come with same complain and it work for them i believe we can solve this together...Don't exhitate to say hi

agentmic487 commented 10 months ago

Thanks, I updated to latest using npm install ganache -g and it seems that I am still having the issue after I delete my db folder, and make a fresh instance of my blockchain, after running a couple of scripts, it seems that my funded balances all go to 0

I am now using ganache v7.9.0 (@ganache/cli: 0.10.0, @ganache/core: 0.10.0)

Hi mate, are you still having this issue or got it solved? If not you can get in touch with me so we can both get it solved together because a lot of people have come with same complain and it work for them i believe we can solve this together...Don't wait to say hi