fix: default nonce manager resets previous nonce #2623
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I am using the default nonce manager to trigger a bunch of transactions in a queue to ensure they land in the mempool in order. If any transaction fails to submit to the mempool, I call
nonceManager.reset()
.For example:
If
tx:1
fails, I callnonceManager.reset()
and retry it. However, the logic that looks up the nonce after reset also takes into account the previously cached nonce in the nonce manager:viem/src/utils/nonceManager.ts
Lines 79 to 84 in 5f350ec
Since the queue is blocked on
tx:1
, our nonce at the source should still benonce:1
. But because of the logic above, the nonce returned will actually benonce:4
(because of our previously queued txs).IMO
.reset
should reset the state of the nonce manager back to the source, including the cached nonce value.PR-Codex overview
The focus of this PR is to add tests for the
nonceManager
reset functionality and ensure correct nonce handling during transactions.Detailed summary
nonceManager
reset functionality