diff --git a/Cargo.lock b/Cargo.lock index fd54061570..7f947fca70 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2942,6 +2942,7 @@ dependencies = [ "solana-drone 0.17.0", "solana-logger 0.17.0", "solana-netutil 0.17.0", + "solana-runtime 0.17.0", "solana-sdk 0.17.0", "solana-stake-api 0.17.0", "solana-storage-api 0.17.0", diff --git a/wallet/Cargo.toml b/wallet/Cargo.toml index 3583e5a59c..5c19a9b0b2 100644 --- a/wallet/Cargo.toml +++ b/wallet/Cargo.toml @@ -22,6 +22,7 @@ solana-client = { path = "../client", version = "0.17.0" } solana-drone = { path = "../drone", version = "0.17.0" } solana-logger = { path = "../logger", version = "0.17.0" } solana-netutil = { path = "../netutil", version = "0.17.0" } +solana-runtime = { path = "../runtime", version = "0.17.0" } solana-sdk = { path = "../sdk", version = "0.17.0" } solana-stake-api = { path = "../programs/stake_api", version = "0.17.0" } solana-storage-api = { path = "../programs/storage_api", version = "0.17.0" } diff --git a/wallet/src/wallet.rs b/wallet/src/wallet.rs index 90aab28c2c..4b37d0c225 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()) }