refactor(choreo): revamp APIs & zero copy funk reads #3773
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.
Initially the
fd_tower
API revolved around usingfd_fork_t
as the type for inputs and outputs. The idea was to conceptually represent voting for / switching forks (rather than slots). I decided this made the tower API unnecessarily cumbersome to require passing in forks and fork objects when all that was actually used by the implementation was the frontier slot. So the revamped API just takes and returns slots ie.ulong
.Also reworked
fd_tower
to be a P.O.D. type rather than holding state like the epoch voters. Relatedly, the vote account iteration logic belongs elsewhere, so moved it to forks which feels most logical. Rather than tower and ghost each maintaining their own set of voters, they now share the epoch voters whichfd_forks
API will update.Also added zero-copy deserialization of vote accounts from funk inside
fd_voter
to support ghost and tower ops.