Move vote program state and instructions to solana-program
This commit is contained in:
parent
b9a5af0a41
commit
ccfbc54195
|
@ -6565,6 +6565,7 @@ dependencies = [
|
|||
"solana-frozen-abi-macro 1.12.0",
|
||||
"solana-logger 1.12.0",
|
||||
"solana-metrics",
|
||||
"solana-program 1.12.0",
|
||||
"solana-program-runtime",
|
||||
"solana-sdk 1.12.0",
|
||||
"thiserror",
|
||||
|
|
|
@ -259,7 +259,7 @@ mod tests {
|
|||
solana_sdk::{account::Account, pubkey::Pubkey, signature::Signer},
|
||||
solana_stake_program::stake_state,
|
||||
solana_vote_program::{
|
||||
vote_state::{self, VoteStateVersions},
|
||||
vote_state::{self, process_slot_vote_unchecked, VoteStateVersions},
|
||||
vote_transaction,
|
||||
},
|
||||
};
|
||||
|
@ -309,7 +309,7 @@ mod tests {
|
|||
|
||||
let root = ancestors[2];
|
||||
vote_state.root_slot = Some(root);
|
||||
vote_state.process_slot_vote_unchecked(*ancestors.last().unwrap());
|
||||
process_slot_vote_unchecked(&mut vote_state, *ancestors.last().unwrap());
|
||||
AggregateCommitmentService::aggregate_commitment_for_vote_account(
|
||||
&mut commitment,
|
||||
&mut rooted_stake,
|
||||
|
@ -341,8 +341,8 @@ mod tests {
|
|||
let root = ancestors[2];
|
||||
vote_state.root_slot = Some(root);
|
||||
assert!(ancestors[4] + 2 >= ancestors[6]);
|
||||
vote_state.process_slot_vote_unchecked(ancestors[4]);
|
||||
vote_state.process_slot_vote_unchecked(ancestors[6]);
|
||||
process_slot_vote_unchecked(&mut vote_state, ancestors[4]);
|
||||
process_slot_vote_unchecked(&mut vote_state, ancestors[6]);
|
||||
AggregateCommitmentService::aggregate_commitment_for_vote_account(
|
||||
&mut commitment,
|
||||
&mut rooted_stake,
|
||||
|
@ -431,30 +431,30 @@ mod tests {
|
|||
// Create bank
|
||||
let bank = Arc::new(Bank::new_for_tests(&genesis_config));
|
||||
|
||||
let mut vote_state1 = VoteState::from(&vote_account1).unwrap();
|
||||
vote_state1.process_slot_vote_unchecked(3);
|
||||
vote_state1.process_slot_vote_unchecked(5);
|
||||
let mut vote_state1 = vote_state::from(&vote_account1).unwrap();
|
||||
process_slot_vote_unchecked(&mut vote_state1, 3);
|
||||
process_slot_vote_unchecked(&mut vote_state1, 5);
|
||||
let versioned = VoteStateVersions::new_current(vote_state1);
|
||||
VoteState::to(&versioned, &mut vote_account1).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account1).unwrap();
|
||||
bank.store_account(&pk1, &vote_account1);
|
||||
|
||||
let mut vote_state2 = VoteState::from(&vote_account2).unwrap();
|
||||
vote_state2.process_slot_vote_unchecked(9);
|
||||
vote_state2.process_slot_vote_unchecked(10);
|
||||
let mut vote_state2 = vote_state::from(&vote_account2).unwrap();
|
||||
process_slot_vote_unchecked(&mut vote_state2, 9);
|
||||
process_slot_vote_unchecked(&mut vote_state2, 10);
|
||||
let versioned = VoteStateVersions::new_current(vote_state2);
|
||||
VoteState::to(&versioned, &mut vote_account2).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account2).unwrap();
|
||||
bank.store_account(&pk2, &vote_account2);
|
||||
|
||||
let mut vote_state3 = VoteState::from(&vote_account3).unwrap();
|
||||
let mut vote_state3 = vote_state::from(&vote_account3).unwrap();
|
||||
vote_state3.root_slot = Some(1);
|
||||
let versioned = VoteStateVersions::new_current(vote_state3);
|
||||
VoteState::to(&versioned, &mut vote_account3).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account3).unwrap();
|
||||
bank.store_account(&pk3, &vote_account3);
|
||||
|
||||
let mut vote_state4 = VoteState::from(&vote_account4).unwrap();
|
||||
let mut vote_state4 = vote_state::from(&vote_account4).unwrap();
|
||||
vote_state4.root_slot = Some(2);
|
||||
let versioned = VoteStateVersions::new_current(vote_state4);
|
||||
VoteState::to(&versioned, &mut vote_account4).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account4).unwrap();
|
||||
bank.store_account(&pk4, &vote_account4);
|
||||
|
||||
let (commitment, rooted_stake) =
|
||||
|
|
|
@ -24,8 +24,8 @@ use {
|
|||
solana_vote_program::{
|
||||
vote_instruction,
|
||||
vote_state::{
|
||||
BlockTimestamp, Lockout, Vote, VoteState, VoteStateUpdate, VoteTransaction,
|
||||
MAX_LOCKOUT_HISTORY,
|
||||
process_slot_vote_unchecked, process_vote_unchecked, BlockTimestamp, Lockout, Vote,
|
||||
VoteState, VoteStateUpdate, VoteTransaction, MAX_LOCKOUT_HISTORY,
|
||||
},
|
||||
},
|
||||
std::{
|
||||
|
@ -169,7 +169,7 @@ impl TowerVersions {
|
|||
}
|
||||
}
|
||||
|
||||
#[frozen_abi(digest = "8Y9r3XAwXwmrVGMCyTuy4Kbdotnt1V6N8J6NEniBFD9x")]
|
||||
#[frozen_abi(digest = "GrkFcKqGEkJNUYoK1M8rorehi2yyLF4N3Gsj6j8f47Jn")]
|
||||
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, AbiExample)]
|
||||
pub struct Tower {
|
||||
pub node_pubkey: Pubkey,
|
||||
|
@ -337,7 +337,7 @@ impl Tower {
|
|||
);
|
||||
}
|
||||
|
||||
vote_state.process_slot_vote_unchecked(bank_slot);
|
||||
process_slot_vote_unchecked(&mut vote_state, bank_slot);
|
||||
|
||||
for vote in &vote_state.votes {
|
||||
bank_weight += vote.lockout() as u128 * voted_stake as u128;
|
||||
|
@ -438,7 +438,7 @@ impl Tower {
|
|||
last_voted_slot_in_bank: Option<Slot>,
|
||||
) -> VoteTransaction {
|
||||
let vote = Vote::new(vec![slot], hash);
|
||||
local_vote_state.process_vote_unchecked(vote);
|
||||
process_vote_unchecked(local_vote_state, vote);
|
||||
let slots = if let Some(last_voted_slot) = last_voted_slot_in_bank {
|
||||
local_vote_state
|
||||
.votes
|
||||
|
@ -483,7 +483,7 @@ impl Tower {
|
|||
|
||||
let mut new_vote = if is_direct_vote_state_update_enabled {
|
||||
let vote = Vote::new(vec![vote_slot], vote_hash);
|
||||
self.vote_state.process_vote_unchecked(vote);
|
||||
process_vote_unchecked(&mut self.vote_state, vote);
|
||||
VoteTransaction::from(VoteStateUpdate::new(
|
||||
self.vote_state.votes.clone(),
|
||||
self.vote_state.root_slot,
|
||||
|
@ -608,7 +608,7 @@ impl Tower {
|
|||
// remaining voted slots are on a different fork from the checked slot,
|
||||
// it's still locked out.
|
||||
let mut vote_state = self.vote_state.clone();
|
||||
vote_state.process_slot_vote_unchecked(slot);
|
||||
process_slot_vote_unchecked(&mut vote_state, slot);
|
||||
for vote in &vote_state.votes {
|
||||
if slot != vote.slot && !ancestors.contains(&vote.slot) {
|
||||
return true;
|
||||
|
@ -980,7 +980,7 @@ impl Tower {
|
|||
total_stake: Stake,
|
||||
) -> bool {
|
||||
let mut vote_state = self.vote_state.clone();
|
||||
vote_state.process_slot_vote_unchecked(slot);
|
||||
process_slot_vote_unchecked(&mut vote_state, slot);
|
||||
let vote = vote_state.nth_recent_vote(self.threshold_depth);
|
||||
if let Some(vote) = vote {
|
||||
if let Some(fork_stake) = voted_stakes.get(&vote.slot) {
|
||||
|
@ -1432,7 +1432,7 @@ pub mod test {
|
|||
signature::Signer,
|
||||
slot_history::SlotHistory,
|
||||
},
|
||||
solana_vote_program::vote_state::{Vote, VoteStateVersions, MAX_LOCKOUT_HISTORY},
|
||||
solana_vote_program::vote_state::{self, Vote, VoteStateVersions, MAX_LOCKOUT_HISTORY},
|
||||
std::{
|
||||
collections::{HashMap, VecDeque},
|
||||
fs::{remove_file, OpenOptions},
|
||||
|
@ -1456,7 +1456,7 @@ pub mod test {
|
|||
});
|
||||
let mut vote_state = VoteState::default();
|
||||
for slot in *votes {
|
||||
vote_state.process_slot_vote_unchecked(*slot);
|
||||
process_slot_vote_unchecked(&mut vote_state, *slot);
|
||||
}
|
||||
VoteState::serialize(
|
||||
&VoteStateVersions::new_current(vote_state),
|
||||
|
@ -2409,7 +2409,7 @@ pub mod test {
|
|||
hash: Hash::default(),
|
||||
timestamp: None,
|
||||
};
|
||||
local.process_vote_unchecked(vote);
|
||||
vote_state::process_vote_unchecked(&mut local, vote);
|
||||
assert_eq!(local.votes.len(), 1);
|
||||
let vote =
|
||||
Tower::apply_vote_and_generate_vote_diff(&mut local, 1, Hash::default(), Some(0));
|
||||
|
@ -2425,7 +2425,7 @@ pub mod test {
|
|||
hash: Hash::default(),
|
||||
timestamp: None,
|
||||
};
|
||||
local.process_vote_unchecked(vote);
|
||||
vote_state::process_vote_unchecked(&mut local, vote);
|
||||
assert_eq!(local.votes.len(), 1);
|
||||
|
||||
// First vote expired, so should be evicted from tower. Thus even with
|
||||
|
|
|
@ -3529,7 +3529,7 @@ pub(crate) mod tests {
|
|||
solana_streamer::socket::SocketAddrSpace,
|
||||
solana_transaction_status::VersionedTransactionWithStatusMeta,
|
||||
solana_vote_program::{
|
||||
vote_state::{VoteState, VoteStateVersions},
|
||||
vote_state::{self, VoteStateVersions},
|
||||
vote_transaction,
|
||||
},
|
||||
std::{
|
||||
|
@ -4220,10 +4220,10 @@ pub(crate) mod tests {
|
|||
fn test_replay_commitment_cache() {
|
||||
fn leader_vote(vote_slot: Slot, bank: &Arc<Bank>, pubkey: &Pubkey) {
|
||||
let mut leader_vote_account = bank.get_account(pubkey).unwrap();
|
||||
let mut vote_state = VoteState::from(&leader_vote_account).unwrap();
|
||||
vote_state.process_slot_vote_unchecked(vote_slot);
|
||||
let mut vote_state = vote_state::from(&leader_vote_account).unwrap();
|
||||
vote_state::process_slot_vote_unchecked(&mut vote_state, vote_slot);
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::to(&versioned, &mut leader_vote_account).unwrap();
|
||||
vote_state::to(&versioned, &mut leader_vote_account).unwrap();
|
||||
bank.store_account(pubkey, &leader_vote_account);
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ use {
|
|||
solana_vote_program::vote_state::{BlockTimestamp, Vote, VoteState},
|
||||
};
|
||||
|
||||
#[frozen_abi(digest = "7phMrqmBo2D3rXPdhBj8CpjRvvmx9qgpcU4cDGkL3W9q")]
|
||||
#[frozen_abi(digest = "8EBpwHf9gys2irNgyRCEe6A5KSh4RK875Fa46yA2NSoN")]
|
||||
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, AbiExample)]
|
||||
pub struct Tower1_7_14 {
|
||||
pub(crate) node_pubkey: Pubkey,
|
||||
|
|
|
@ -99,7 +99,7 @@ use {
|
|||
},
|
||||
solana_send_transaction_service::send_transaction_service,
|
||||
solana_streamer::{socket::SocketAddrSpace, streamer::StakedNodes},
|
||||
solana_vote_program::vote_state::VoteState,
|
||||
solana_vote_program::vote_state,
|
||||
std::{
|
||||
collections::{HashMap, HashSet},
|
||||
net::SocketAddr,
|
||||
|
@ -1206,7 +1206,7 @@ impl Validator {
|
|||
|
||||
fn active_vote_account_exists_in_bank(bank: &Arc<Bank>, vote_account: &Pubkey) -> bool {
|
||||
if let Some(account) = &bank.get_account(vote_account) {
|
||||
if let Some(vote_state) = VoteState::from(account) {
|
||||
if let Some(vote_state) = vote_state::from(account) {
|
||||
return !vote_state.votes.is_empty();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ use {
|
|||
solana_streamer::socket::SocketAddrSpace,
|
||||
solana_vote_program::{
|
||||
vote_instruction,
|
||||
vote_state::{VoteInit, VoteState},
|
||||
vote_state::{self, VoteInit},
|
||||
},
|
||||
std::{
|
||||
collections::HashMap,
|
||||
|
@ -706,7 +706,7 @@ impl LocalCluster {
|
|||
(Ok(Some(stake_account)), Ok(Some(vote_account))) => {
|
||||
match (
|
||||
stake_state::stake_from(&stake_account),
|
||||
VoteState::from(&vote_account),
|
||||
vote_state::from(&vote_account),
|
||||
) {
|
||||
(Some(stake_state), Some(vote_state)) => {
|
||||
if stake_state.delegation.voter_pubkey != vote_account_pubkey
|
||||
|
|
|
@ -40,7 +40,7 @@ use {
|
|||
signature::{Keypair, Signer},
|
||||
sysvar::{Sysvar, SysvarId},
|
||||
},
|
||||
solana_vote_program::vote_state::{VoteState, VoteStateVersions},
|
||||
solana_vote_program::vote_state::{self, VoteState, VoteStateVersions},
|
||||
std::{
|
||||
cell::RefCell,
|
||||
collections::{HashMap, HashSet},
|
||||
|
@ -1054,14 +1054,14 @@ impl ProgramTestContext {
|
|||
|
||||
// generate some vote activity for rewards
|
||||
let mut vote_account = bank.get_account(vote_account_address).unwrap();
|
||||
let mut vote_state = VoteState::from(&vote_account).unwrap();
|
||||
let mut vote_state = vote_state::from(&vote_account).unwrap();
|
||||
|
||||
let epoch = bank.epoch();
|
||||
for _ in 0..number_of_credits {
|
||||
vote_state.increment_credits(epoch, 1);
|
||||
}
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::to(&versioned, &mut vote_account).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account).unwrap();
|
||||
bank.store_account(vote_account_address, &vote_account);
|
||||
}
|
||||
|
||||
|
|
|
@ -5837,6 +5837,7 @@ dependencies = [
|
|||
"solana-frozen-abi 1.12.0",
|
||||
"solana-frozen-abi-macro 1.12.0",
|
||||
"solana-metrics",
|
||||
"solana-program 1.12.0",
|
||||
"solana-program-runtime",
|
||||
"solana-sdk 1.12.0",
|
||||
"thiserror",
|
||||
|
|
|
@ -2267,7 +2267,7 @@ mod tests {
|
|||
fn test_stake_delegate(feature_set: FeatureSet) {
|
||||
let mut vote_state = VoteState::default();
|
||||
for i in 0..1000 {
|
||||
vote_state.process_slot_vote_unchecked(i);
|
||||
vote_state::process_slot_vote_unchecked(&mut vote_state, i);
|
||||
}
|
||||
let vote_state_credits = vote_state.credits();
|
||||
let vote_address = solana_sdk::pubkey::new_rand();
|
||||
|
|
|
@ -30,7 +30,7 @@ use {
|
|||
stake_history::{StakeHistory, StakeHistoryEntry},
|
||||
transaction_context::{BorrowedAccount, InstructionContext, TransactionContext},
|
||||
},
|
||||
solana_vote_program::vote_state::{VoteState, VoteStateVersions},
|
||||
solana_vote_program::vote_state::{self, VoteState, VoteStateVersions},
|
||||
std::{collections::HashSet, convert::TryFrom},
|
||||
};
|
||||
|
||||
|
@ -1750,7 +1750,7 @@ fn do_create_account(
|
|||
) -> AccountSharedData {
|
||||
let mut stake_account = AccountSharedData::new(lamports, StakeState::size_of(), &id());
|
||||
|
||||
let vote_state = VoteState::from(vote_account).expect("vote_state");
|
||||
let vote_state = vote_state::from(vote_account).expect("vote_state");
|
||||
|
||||
let rent_exempt_reserve = rent.minimum_balance(stake_account.data().len());
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ serde_derive = "1.0.103"
|
|||
solana-frozen-abi = { path = "../../frozen-abi", version = "=1.12.0" }
|
||||
solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.12.0" }
|
||||
solana-metrics = { path = "../../metrics", version = "=1.12.0" }
|
||||
solana-program = { path = "../../sdk/program", version = "=1.12.0" }
|
||||
solana-program-runtime = { path = "../../program-runtime", version = "=1.12.0" }
|
||||
solana-sdk = { path = "../../sdk", version = "=1.12.0" }
|
||||
thiserror = "1.0"
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
#![cfg_attr(RUSTC_WITH_SPECIALIZATION, feature(min_specialization))]
|
||||
#![allow(clippy::integer_arithmetic)]
|
||||
|
||||
pub mod authorized_voters;
|
||||
pub mod vote_error;
|
||||
pub mod vote_instruction;
|
||||
pub mod vote_processor;
|
||||
pub mod vote_state;
|
||||
pub mod vote_transaction;
|
||||
|
@ -14,4 +11,7 @@ extern crate solana_metrics;
|
|||
#[macro_use]
|
||||
extern crate solana_frozen_abi_macro;
|
||||
|
||||
pub use solana_sdk::vote::program::{check_id, id};
|
||||
pub use solana_sdk::vote::{
|
||||
authorized_voters, error as vote_error, instruction as vote_instruction,
|
||||
program::{check_id, id},
|
||||
};
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
//! Vote program processor
|
||||
|
||||
use {
|
||||
crate::{
|
||||
id,
|
||||
vote_instruction::VoteInstruction,
|
||||
vote_state::{self, VoteAuthorize, VoteStateUpdate},
|
||||
},
|
||||
crate::vote_state,
|
||||
log::*,
|
||||
solana_program::vote::{
|
||||
instruction::VoteInstruction,
|
||||
program::id,
|
||||
state::{VoteAuthorize, VoteStateUpdate},
|
||||
},
|
||||
solana_program_runtime::{
|
||||
invoke_context::InvokeContext, sysvar_cache::get_sysvar_with_account_check,
|
||||
},
|
||||
|
@ -143,7 +144,7 @@ pub fn process_instruction(
|
|||
get_sysvar_with_account_check::slot_hashes(invoke_context, instruction_context, 1)?;
|
||||
let clock =
|
||||
get_sysvar_with_account_check::clock(invoke_context, instruction_context, 2)?;
|
||||
vote_state::process_vote(
|
||||
vote_state::process_vote_with_account(
|
||||
&mut me,
|
||||
&slot_hashes,
|
||||
&clock,
|
||||
|
@ -264,7 +265,7 @@ mod tests {
|
|||
vote_switch, withdraw, VoteInstruction,
|
||||
},
|
||||
vote_state::{
|
||||
Lockout, Vote, VoteAuthorize, VoteAuthorizeCheckedWithSeedArgs,
|
||||
self, Lockout, Vote, VoteAuthorize, VoteAuthorizeCheckedWithSeedArgs,
|
||||
VoteAuthorizeWithSeedArgs, VoteInit, VoteState, VoteStateUpdate, VoteStateVersions,
|
||||
},
|
||||
},
|
||||
|
@ -462,7 +463,7 @@ mod tests {
|
|||
let (vote_pubkey, vote_account) = create_test_account();
|
||||
let vote_account_space = vote_account.data().len();
|
||||
|
||||
let mut vote_state = VoteState::from(&vote_account).unwrap();
|
||||
let mut vote_state = vote_state::from(&vote_account).unwrap();
|
||||
vote_state.authorized_withdrawer = vote_pubkey;
|
||||
vote_state.epoch_credits = Vec::new();
|
||||
|
||||
|
@ -482,7 +483,7 @@ mod tests {
|
|||
let mut vote_account_with_epoch_credits =
|
||||
AccountSharedData::new(lamports, vote_account_space, &id());
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::to(&versioned, &mut vote_account_with_epoch_credits);
|
||||
vote_state::to(&versioned, &mut vote_account_with_epoch_credits);
|
||||
|
||||
(vote_pubkey, vote_account_with_epoch_credits)
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
use {
|
||||
crate::{vote_instruction, vote_state::Vote},
|
||||
solana_program::vote::{self, state::Vote},
|
||||
solana_sdk::{
|
||||
clock::Slot,
|
||||
hash::Hash,
|
||||
|
@ -19,14 +19,14 @@ pub fn new_vote_transaction(
|
|||
) -> Transaction {
|
||||
let votes = Vote::new(slots, bank_hash);
|
||||
let vote_ix = if let Some(switch_proof_hash) = switch_proof_hash {
|
||||
vote_instruction::vote_switch(
|
||||
vote::instruction::vote_switch(
|
||||
&vote_keypair.pubkey(),
|
||||
&authorized_voter_keypair.pubkey(),
|
||||
votes,
|
||||
switch_proof_hash,
|
||||
)
|
||||
} else {
|
||||
vote_instruction::vote(
|
||||
vote::instruction::vote(
|
||||
&vote_keypair.pubkey(),
|
||||
&authorized_voter_keypair.pubkey(),
|
||||
votes,
|
||||
|
|
|
@ -4617,7 +4617,7 @@ pub mod tests {
|
|||
},
|
||||
solana_vote_program::{
|
||||
vote_instruction,
|
||||
vote_state::{Vote, VoteInit, VoteStateVersions, MAX_LOCKOUT_HISTORY},
|
||||
vote_state::{self, Vote, VoteInit, VoteStateVersions, MAX_LOCKOUT_HISTORY},
|
||||
},
|
||||
spl_token_2022::{
|
||||
extension::{
|
||||
|
@ -4937,7 +4937,7 @@ pub mod tests {
|
|||
let balance = bank.get_minimum_balance_for_rent_exemption(space);
|
||||
let mut vote_account =
|
||||
AccountSharedData::new(balance, space, &solana_vote_program::id());
|
||||
VoteState::to(&versioned, &mut vote_account).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account).unwrap();
|
||||
bank.store_account(vote_pubkey, &vote_account);
|
||||
}
|
||||
|
||||
|
|
|
@ -10186,13 +10186,13 @@ pub(crate) mod tests {
|
|||
bank0.store_account_and_update_capitalization(&stake_id, &stake_account);
|
||||
|
||||
// generate some rewards
|
||||
let mut vote_state = Some(VoteState::from(&vote_account).unwrap());
|
||||
let mut vote_state = Some(vote_state::from(&vote_account).unwrap());
|
||||
for i in 0..MAX_LOCKOUT_HISTORY + 42 {
|
||||
if let Some(v) = vote_state.as_mut() {
|
||||
v.process_slot_vote_unchecked(i as u64)
|
||||
vote_state::process_slot_vote_unchecked(v, i as u64)
|
||||
}
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state.take().unwrap()));
|
||||
VoteState::to(&versioned, &mut vote_account).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account).unwrap();
|
||||
bank0.store_account_and_update_capitalization(&vote_id, &vote_account);
|
||||
match versioned {
|
||||
VoteStateVersions::Current(v) => {
|
||||
|
@ -10307,13 +10307,13 @@ pub(crate) mod tests {
|
|||
bank.store_account_and_update_capitalization(&stake_id2, &stake_account2);
|
||||
|
||||
// generate some rewards
|
||||
let mut vote_state = Some(VoteState::from(&vote_account).unwrap());
|
||||
let mut vote_state = Some(vote_state::from(&vote_account).unwrap());
|
||||
for i in 0..MAX_LOCKOUT_HISTORY + 42 {
|
||||
if let Some(v) = vote_state.as_mut() {
|
||||
v.process_slot_vote_unchecked(i as u64)
|
||||
vote_state::process_slot_vote_unchecked(v, i as u64)
|
||||
}
|
||||
let versioned = VoteStateVersions::Current(Box::new(vote_state.take().unwrap()));
|
||||
VoteState::to(&versioned, &mut vote_account).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account).unwrap();
|
||||
bank.store_account_and_update_capitalization(&vote_id, &vote_account);
|
||||
match versioned {
|
||||
VoteStateVersions::Current(v) => {
|
||||
|
@ -15726,10 +15726,10 @@ pub(crate) mod tests {
|
|||
vote_pubkey: &Pubkey,
|
||||
) {
|
||||
let mut vote_account = bank.get_account(vote_pubkey).unwrap_or_default();
|
||||
let mut vote_state = VoteState::from(&vote_account).unwrap_or_default();
|
||||
let mut vote_state = vote_state::from(&vote_account).unwrap_or_default();
|
||||
vote_state.last_timestamp = timestamp;
|
||||
let versioned = VoteStateVersions::new_current(vote_state);
|
||||
VoteState::to(&versioned, &mut vote_account).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account).unwrap();
|
||||
bank.store_account(vote_pubkey, &vote_account);
|
||||
}
|
||||
|
||||
|
|
|
@ -618,7 +618,7 @@ pub(crate) mod tests {
|
|||
stakes_cache.check_and_store(&vote11_pubkey, &vote11_account);
|
||||
stakes_cache.check_and_store(&stake11_pubkey, &stake11_account);
|
||||
|
||||
let vote11_node_pubkey = VoteState::from(&vote11_account).unwrap().node_pubkey;
|
||||
let vote11_node_pubkey = vote_state::from(&vote11_account).unwrap().node_pubkey;
|
||||
|
||||
let highest_staked_node = stakes_cache.stakes().highest_staked_node();
|
||||
assert_eq!(highest_staked_node, Some(vote11_node_pubkey));
|
||||
|
@ -681,7 +681,7 @@ pub(crate) mod tests {
|
|||
// Vote account uninitialized
|
||||
let default_vote_state = VoteState::default();
|
||||
let versioned = VoteStateVersions::new_current(default_vote_state);
|
||||
VoteState::to(&versioned, &mut vote_account).unwrap();
|
||||
vote_state::to(&versioned, &mut vote_account).unwrap();
|
||||
stakes_cache.check_and_store(&vote_pubkey, &vote_account);
|
||||
|
||||
{
|
||||
|
|
|
@ -607,6 +607,7 @@ pub mod syscalls;
|
|||
pub mod system_instruction;
|
||||
pub mod system_program;
|
||||
pub mod sysvar;
|
||||
pub mod vote;
|
||||
pub mod wasm;
|
||||
|
||||
#[cfg(target_os = "solana")]
|
||||
|
@ -626,15 +627,6 @@ pub mod config {
|
|||
}
|
||||
}
|
||||
|
||||
/// The [vote native program][np].
|
||||
///
|
||||
/// [np]: https://docs.solana.com/developing/runtime-facilities/programs#vote-program
|
||||
pub mod vote {
|
||||
pub mod program {
|
||||
crate::declare_id!("Vote111111111111111111111111111111111111111");
|
||||
}
|
||||
}
|
||||
|
||||
/// A vector of Solana SDK IDs
|
||||
pub mod sdk_ids {
|
||||
use {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use {
|
||||
log::*,
|
||||
crate::{clock::Epoch, pubkey::Pubkey},
|
||||
serde_derive::{Deserialize, Serialize},
|
||||
solana_sdk::{clock::Epoch, pubkey::Pubkey},
|
||||
std::collections::BTreeMap,
|
||||
};
|
||||
|
||||
|
@ -93,12 +92,14 @@ impl AuthorizedVoters {
|
|||
// from the latest epoch before this one
|
||||
let res = self.authorized_voters.range(0..epoch).next_back();
|
||||
|
||||
/*
|
||||
if res.is_none() {
|
||||
warn!(
|
||||
"Tried to query for the authorized voter of an epoch earlier
|
||||
than the current epoch. Earlier epochs have been purged"
|
||||
);
|
||||
}
|
||||
*/
|
||||
|
||||
res.map(|(_, pubkey)| (*pubkey, false))
|
||||
} else {
|
|
@ -1,9 +1,8 @@
|
|||
//! Vote program errors
|
||||
|
||||
use {
|
||||
log::*,
|
||||
crate::decode_error::DecodeError,
|
||||
num_derive::{FromPrimitive, ToPrimitive},
|
||||
solana_sdk::decode_error::DecodeError,
|
||||
thiserror::Error,
|
||||
};
|
||||
|
||||
|
@ -77,7 +76,7 @@ impl<E> DecodeError<E> for VoteError {
|
|||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use {super::*, solana_sdk::instruction::InstructionError};
|
||||
use {super::*, crate::instruction::InstructionError};
|
||||
|
||||
#[test]
|
||||
fn test_custom_error_decode() {
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
use {
|
||||
crate::{
|
||||
id,
|
||||
vote_state::{
|
||||
CompactVoteStateUpdate, Vote, VoteAuthorize, VoteAuthorizeCheckedWithSeedArgs,
|
||||
VoteAuthorizeWithSeedArgs, VoteInit, VoteState, VoteStateUpdate,
|
||||
},
|
||||
},
|
||||
serde_derive::{Deserialize, Serialize},
|
||||
solana_sdk::{
|
||||
hash::Hash,
|
||||
instruction::{AccountMeta, Instruction},
|
||||
pubkey::Pubkey,
|
||||
system_instruction, sysvar,
|
||||
vote::{
|
||||
program::id,
|
||||
state::{
|
||||
CompactVoteStateUpdate, Vote, VoteAuthorize, VoteAuthorizeCheckedWithSeedArgs,
|
||||
VoteAuthorizeWithSeedArgs, VoteInit, VoteState, VoteStateUpdate,
|
||||
},
|
||||
},
|
||||
},
|
||||
serde_derive::{Deserialize, Serialize},
|
||||
};
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
|
|
@ -0,0 +1,11 @@
|
|||
/// The [vote native program][np].
|
||||
///
|
||||
/// [np]: https://docs.solana.com/developing/runtime-facilities/programs#vote-program
|
||||
pub mod authorized_voters;
|
||||
pub mod error;
|
||||
pub mod instruction;
|
||||
pub mod state;
|
||||
|
||||
pub mod program {
|
||||
crate::declare_id!("Vote111111111111111111111111111111111111111");
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,4 @@
|
|||
#![allow(clippy::integer_arithmetic)]
|
||||
use super::*;
|
||||
|
||||
const MAX_ITEMS: usize = 32;
|
|
@ -1,4 +1,4 @@
|
|||
use {super::*, crate::vote_state::vote_state_0_23_5::VoteState0_23_5};
|
||||
use super::{vote_state_0_23_5::VoteState0_23_5, *};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
|
||||
pub enum VoteStateVersions {
|
|
@ -264,7 +264,7 @@ fn check_vote_account(
|
|||
.value
|
||||
.ok_or_else(|| format!("identity account does not exist: {}", identity_pubkey))?;
|
||||
|
||||
let vote_state = solana_vote_program::vote_state::VoteState::from(&vote_account);
|
||||
let vote_state = solana_vote_program::vote_state::from(&vote_account);
|
||||
if let Some(vote_state) = vote_state {
|
||||
if vote_state.authorized_voters().is_empty() {
|
||||
return Err("Vote account not yet initialized".to_string());
|
||||
|
|
Loading…
Reference in New Issue