fix(fork-network): flush the first pass changes before starting the second pass #12121
+19
−0
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.
There is a corner case where the last batch of changes is smaller than the batch threshold and it may not get flushed before the seconds pass. This will recreate the keys for the accounts that were deleted in the uncommitted batch.
To test this, we created a network with a validator and an RPC node. Created an account (
A
with keyKa
) by sending some$N
to it. Add another key to that account (Kb
). NowA
hasKa
andKb
as full access keys.Delete
Ka
. NowA
has justKb
as full access key.On this state, we run
fork-network
.In the first pass, we change account
A
torA
and deleteA
.Change key
Kb
torKb
and deleteKb
.Without this fix, the default batch size is too large to flush the changes from the first pass of
prepare_shard_state
.Moving to the second pass, the
A
implicit account is still in the flat state and we will add a key to it.If we flush before the second pass, account
A
will no longer be in the flat state.