fix: waitForTransactionReceipt race condition when polling many blocks #3068
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.
Observe prematurely cleans up when there is still listeners subscribed if one listener call his unwatch many times as this test shows. This problem triggers a race condition in
waitForTransactionReceipt
, there will be a premature cancel to the poling when onewaitForTransactionReceipt
get many blocks, therefore will find the same receipt many times and triggers the unwatch many times while other are waiting for their receipt, as is shown in this test:This Fixes #2650
PR-Codex overview
This PR addresses a race condition in the
waitForTransactionReceipt
function when polling multiple blocks. It includes tests to ensure proper cleanup of listeners and verifies that transactions do not interfere with each other's receipt polling.Detailed summary
waitForTransactionReceipt
during block polling.waitForTransactionReceipt
to handle multiple transactions without triggering race conditions.