use custom VoteState parser everywhere #1738
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.
Problem
earlier this year we implemented
VoteState::deserialize_into()
, a custom parser intended to be suitable for usage in a bpf context. we want to use the new parser everywhere because, with some optimizations, it is 7-20x faster than bincode depending on the inputit also uses half as much memory for
V1_14_11
because conversion toCurrent
happens during parsingSummary of Changes
use
VoteState::deserialize_into()
as the new implementation forVoteState::deserialize()
. we also remove the check forprior_voters
sparsity that wouldnt exist in bincode and remove unnecessary uses ofserialized_size()
which drastically improve runtimethis wont be merged immediately. the plan is to cherrypick the new parser into a 2.x codebase and run that as a validator on mainnet for a few epochs to confirm everything works identically, because it is impossible to feature-gate this change
the hope is enough vote parsing happens that this will have a nontrivial performance improvement, but that is something to figure out how to measure
fixes solana-labs#35101