diff --git a/Cargo.lock b/Cargo.lock index 1c9362f5c4..0b8b290244 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2886,6 +2886,7 @@ dependencies = [ "solana-drone 0.16.4", "solana-logger 0.16.4", "solana-netutil 0.16.4", + "solana-runtime 0.16.4", "solana-sdk 0.16.4", "solana-stake-api 0.16.4", "solana-storage-api 0.16.4", diff --git a/wallet/Cargo.toml b/wallet/Cargo.toml index 3d1fe5c1ef..577eb78ed3 100644 --- a/wallet/Cargo.toml +++ b/wallet/Cargo.toml @@ -22,6 +22,7 @@ solana-client = { path = "../client", version = "0.16.4" } solana-drone = { path = "../drone", version = "0.16.4" } solana-logger = { path = "../logger", version = "0.16.4" } solana-netutil = { path = "../netutil", version = "0.16.4" } +solana-runtime = { path = "../runtime", version = "0.16.4" } solana-sdk = { path = "../sdk", version = "0.16.4" } solana-stake-api = { path = "../programs/stake_api", version = "0.16.4" } solana-storage-api = { path = "../programs/storage_api", version = "0.16.4" } diff --git a/wallet/src/wallet.rs b/wallet/src/wallet.rs index cf7cbceb59..4b996bb8a8 100644 --- a/wallet/src/wallet.rs +++ b/wallet/src/wallet.rs @@ -540,13 +540,31 @@ fn process_show_vote_account( } ); if !vote_state.votes.is_empty() { - println!("votes:"); - for vote in vote_state.votes { + println!("recent votes:"); + for vote in &vote_state.votes { println!( - "- slot={}, confirmation count={}", + "- slot: {}\n confirmation count: {}", vote.slot, vote.confirmation_count ); } + + // TODO: Use the real GenesisBlock from the cluster. + let genesis_block = solana_sdk::genesis_block::GenesisBlock::default(); + let epoch_schedule = solana_runtime::epoch_schedule::EpochSchedule::new( + genesis_block.slots_per_epoch, + genesis_block.stakers_slot_offset, + genesis_block.epoch_warmup, + ); + + println!("epoch voting history:"); + for (epoch, credits, prev_credits) in vote_state.epoch_credits() { + let credits_earned = credits - prev_credits; + let slots_in_epoch = epoch_schedule.get_slots_in_epoch(*epoch); + println!( + "- epoch: {}\n slots in epoch: {}\n credits earned: {}", + epoch, slots_in_epoch, credits_earned, + ); + } } Ok("".to_string()) }