Proposal for Enabling the Timely Vote Credits Mechanism on Solana Mainnet
Background
Validators have learned that they can maximize vote credits earned by reducing the likelihood of voting on a dead fork by delaying votes long enough to see which fork is most likely to win (or has already won). This has led to varying strategies employed by a host of validators that induce different degrees of delay (“vote lag”) in voting. This delay in voting results in slower confirmations and finalizations of blocks which directly impacts the speed at which Solana processes transactions. A solution to this problem was devised with the Timely Vote Credits (TVC) feature, which proposes that votes be awarded a variable number of credits, with faster votes receiving more credit than slower votes. This provides an economic incentive to vote quickly, which counterbalances the advantage to waiting to survey forks before voting.
The Timely Vote Credits feature was proposed in the Solana Improvement Document number 33 (SIMD-033). It is fully implemented by two features:
-
7axKe5BTYBDD87ftzWbk5DfzWMGyRvqmWTduuo22Yaqy (“replace Lockout with LandedVote (including vote latency) in vote state #31264”) which upgrades vote accounts to a new structure which has room to record the latency of votes in preparation for using those latencies to determine vote credits. This feature has been enabled on testnet since epoch 586 (22 epochs at the time of this writing), and enabled on mainnet since epoch 585.
-
tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ (“use timeliness of votes in determining credits to award”) which enables the vote program to begin recording the latencies of votes and then use this latency when awarding vote credits, such that votes with latency 1 or 2 earn 16 credits, with each subsequent slot of latency earning 1 fewer credit, down to a minimum of 1 credit awarded for any vote.
The second feature is only available in the 1.18 Solana Labs/Agave branch and so can only be activated on mainnet-beta after this release is present on a sufficient quorum of stake, as per the normal feature enabling rules.
Testing
The following testing has been performed to ensure the safety and correctness of the implementation:
- Unit tests were added to the Solana Labs/Anza node implementation that demonstrate that the feature works as expected in a wide variety of cases, including awarding the expected number of vote credits:
test_timely_credits
test_retroactive_voting_timely_credits
test_process_new_vote_state_replaced_root_vote_credits
- A test cluster was created to test the effects of TVC in operating nodes. A write-up of the results of this test has been created
Proposal
It is proposed that the Timely Vote Credits (TVC) feature as described by Solana Improvement Document 33 (SIMD-0033) shall be enabled on the Solana mainnet-beta cluster according to the following steps:
- Feature tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ shall be enabled on the Solana testnet cluster for a period of no less than 8 epochs, with any issues that are discovered fixed in a way that does not violate the purpose of the feature as described in the SIMD.
After this point, TVC will have been fully enabled on testnet for no fewer than 8 epochs.
- Feature tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ shall be enabled on the Solana mainnet cluster.
After this point, TVC will be fully enabled on mainnet-beta.
Voting Process
The vote will be conducted as follows:
-
A discussion period will commence, during which all validators should participate to ensure that all concerns are addressed.
-
Stake weight collection period will then commence. The stake weights that will be used for voting will be captured and published, and all validators will have an opportunity to verify these weights.
-
Voting tokens will be distributed to the validators according to the stake weights gathered in step 2. Each lamport of stake will receive one vote token. Thus a validator who had 125,000 SOL stake, which is 125,000,000,000,000 lamports, will receive 125,000,000,000,000 vote tokens. It is expected that in practice, vote tokens will be referred to after begin divided by 10^9, so a validator will have 513.71625 “vote tokens” if they have 513.71625 SOL stake.
-
Three token destination accounts that correspond to three voting choices will be created: a Yes vote account, a No vote account, and an Abstain vote account.
-
Validators will have the remainder of the vote token distribution epoch plus 3 additional epochs in which to vote by sending vote tokens to these addresses (there is nothing preventing a validator from sending some of its tokens to more than one address, although this can only serve to reduce the effectiveness of their vote should they choose to do so).
-
After the voting period is complete, if the sum of the Yes votes is equal to or greater than 2/3 of the total sum of Yes + No votes, then the proposal has passed.
All of the announcements about this process, including the announcement of the vote tally account addresses, will occur in both the Governance category of the Solana Developer Forums and the vote-timely-vote-credits channel of the Solana Tech Discord.
Timeline (each step starts at the beginning of the first indicated epoch and completes at the end of the last indicated epoch):
- Epoch 588 - 594: Discussion period
- Epoch 595: stake weights captured and published, discussion/confirmation of stake weights
- Epoch 596: voting token distribution, vote addresses created, voting begins
- Epochs 596 - 599: voting continues and completes
- Epoch 600: voting is finished and the resulting tally determines the outcome
Discussion
It is imperative that validators participate in discussion about this proposal. The best place is on the Solana Tech Discord’s vote-timely-vote-credits channel, where active discussion has occurred already. In addition, discussion may occur on the Solana Developer Forums and also ad-hoc in places like Twitter, Reddit, etc. All discussion wherever it happens is encouraged, but it’s even better if the discussion is kept relatively concentrated in one place so that most participants can see most of the discussion without redundancy. For this reason, the preferred discussion forum is the vote-timely-vote-credits channel on the Solana Tech Discord, and any discussion that starts outside of this forum should ideally be directed to continue in the Discord.
References
SIMD-033: https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0033-timely-vote-credits.md
vote-timely-vote-credits Solana Tech Discord channel: https://discord.gg/solana (and then select the channel)