I tried a simple transfer of ether between two accounts using geth, but set quite a low gas price (2 gwei). After two hours the transaction was still showing in geth under eth.pendingTransactions - I assumed this was due to lack of demand to mine at that gas price.

However, at that point I checked both accounts on Etherscan to establish whether the transaction had been broadcast from my local machine. The transaction showed as pending but with an age of only 40 minutes. Around ten minutes later I refreshed, and the transaction had disappeared from both Etherscan pages - but still showed in geth. A few minutes later the transaction had reappeared on Etherscan but age was reset to 2 minutes. From that point I checked intermittently until the transaction eventually completed (four hours after sending), without dropping off Etherscan again.

Since I was concerned for a short time while the transaction had disappeared, I'd like to understand the underlying process a little better. My understanding would be something like this:

  1. Transaction sent
  2. First shows as pending in geth
  3. Propagates to rest of network - eventually visible as pending on all up-to-date nodes
  4. "Chosen" to be mined (by a number of miners or just one?) as part of a specific block
  5. Once block is completed, the updated transaction status propagates to rest of network
  6. When my local copy of geth syncs to that block, change in account balances shows

However, my experience today suggests it may not be so simple, since my pending transaction disappeared and then reappeared from Etherscan (one node?). What would be a more accurate sequence of events?


My understanding is that your understanding is correct, except you're missing one particular property of the Ethereum node software. Namely, as part of #3, the transaction is stored in the node's transaction pool (cf. Bitcoin's mempool). Normally, the transactions live there until mined, but because computers have finite memory and processing power, the transaction pool is, by necessity, also of a finite size. Transactions that have not been mined may be evicted from memory if the transaction pool is full (I assume the ordering is implementation dependent -- presumably, higher value transactions are kept). So your transaction probably got evicted from Etherscan's transaction pool, but was "recirculated" by another node after Etherscan's transaction pool freed up some memory.

  • Isn't it beautiful to watch how the market responds to the basic principles of supply and demand? Totally love open source money. Nov 22 '18 at 19:42
  • My problem is exactly the opposite, I want my pending transaction to be finally dropped, but now more than 24 hours has passed and it is still pending. What if the mempool never ends, that means that as long as there is space in the mempool my pending transaction will be there forever?? I just want it to get dropped but I'm afraid it will be there forever. And that is a really big problem because I cant do anything else with my aave contract until somenthing happens with it. Namely my money is stucked in aave contract until that transaction succeeds or get dropped. Nov 30 '21 at 3:18
  • @MoisésBriseñoEstrello It seems like you have a different question. However, I think ethereum.stackexchange.com/questions/25866/… can help. See "repost transaction".
    – lungj
    Dec 1 '21 at 4:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.