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:
- Transaction sent
- First shows as pending in geth
- Propagates to rest of network - eventually visible as pending on all up-to-date nodes
- "Chosen" to be mined (by a number of miners or just one?) as part of a specific block
- Once block is completed, the updated transaction status propagates to rest of network
- 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?