2

My ether wallet has been working for more than 1 year. Today There was a memory issue in my node and the node shutdown. When I restarted the node via geth client the node resound ~5000 blocks behind and started syncing again. My node was traying to catch up ~5000 blocks which took hours.

One of my customers had submitted a transaction during this time and it was stuck in the nodes pending transactions for 3 hours.

I was continuously checking the status of the transaction.

Since the sync was slow, I restarted the node.

I checked the node again after sometime and suddenly I noticed that the transaction was no longer in the pool.

eth.getTransaction was returning null. Its not showing-up on etherscan also.

  1. What happened to my transaction?
  2. Did the node restart clear the transaction from the pool?
  3. Did it timeout and disappear?

Any help to figure this out is appreciated.

2

I think it was timeout. By default, the lifetime of tnx is 3 hours

https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options

  --txpool.lifetime value      Maximum amount of time non-executable
 transaction are queued (default: 3h0m0s)
0

Update

“Why did the transaction disappear after 3 hours?

Every eth tx is tagged with a nonce. This allows to stop resubmitting the same transaction. The transaction that was added today has the same nonce as a transaction that the user added yesterday. So technically the transaction that he added today is invalid because yesterdays tx is already processed. But it was kept in the pending transaction pool for ~3 hours.

So the question now is how did today's transaction have the same nonce as yesterdays tx.

We think the reason is caching, this is the theory.

Currently the cache is set as to 2048MB. Geth might be persisting (to disk) the data in the cache once its reached a threshold. The last persistence point was yesterday at block 8142312. Data from this point was being added into the memory cache. The user then did a transaction yesterday at block number 8142723. The nonce for this TX was tagged as x + 1. This information was still not persisted to the disk at this point.

Today there was a memory issue and the get client stopped at block 8147136. Since this was a unexpected failure Geth was not able to persist the cache into the disk. Hence the information in the cache was lost. So Geth reverted back to the last persistence point which was a block from yesterday (8142312). The nonce of the reverted back node is now x. Now the node is syncing back and trying to catchup. The user then submits another transaction today, the nonce of this transaction is now x + 1 again. The nonce is now a duplicate and todays transaction becomes invalid. Today transaction is left in the pending queue for some time and eventually removed from the network due the to duplicate nonce.”

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.