fix(sidecar): don't mutate account_state
on template refresh
#506
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.
Closes #505.
The problem wasn't related to missed slot this time but the logic of refreshing templates.
bolt/bolt-sidecar/src/state/execution.rs
Lines 507 to 525 in edaec29
It should not
iter_mut
over theaccount_states
but rather copying it, which is cheap since itAccountState
implementsCopy
.By mutating it, if two inclusion requests are made for the same
target_slot
but during different slots, then the validation fails because the account state has wrong nonce due to adding block templates nonce and balance diffs to it.A test to cover this case has been introduced.
Tested on devnet as well