stake-account command no longer errors when time goes backwards over an epoch
This commit is contained in:
committed by
mergify[bot]
parent
8541ffa328
commit
52c2cbd630
@ -592,7 +592,7 @@ pub struct CliEpochReward {
|
|||||||
pub amount: u64, // lamports
|
pub amount: u64, // lamports
|
||||||
pub post_balance: u64, // lamports
|
pub post_balance: u64, // lamports
|
||||||
pub percent_change: f64,
|
pub percent_change: f64,
|
||||||
pub apr: f64,
|
pub apr: Option<f64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn show_votes_and_credits(
|
fn show_votes_and_credits(
|
||||||
@ -652,13 +652,16 @@ fn show_epoch_rewards(
|
|||||||
for reward in epoch_rewards {
|
for reward in epoch_rewards {
|
||||||
writeln!(
|
writeln!(
|
||||||
f,
|
f,
|
||||||
" {:<8} {:<11} ◎{:<14.9} ◎{:<14.9} {:>13.9}% {:>13.9}%",
|
" {:<8} {:<11} ◎{:<14.9} ◎{:<14.9} {:>13.9}% {}",
|
||||||
reward.epoch,
|
reward.epoch,
|
||||||
reward.effective_slot,
|
reward.effective_slot,
|
||||||
lamports_to_sol(reward.amount),
|
lamports_to_sol(reward.amount),
|
||||||
lamports_to_sol(reward.post_balance),
|
lamports_to_sol(reward.post_balance),
|
||||||
reward.percent_change,
|
reward.percent_change,
|
||||||
reward.apr,
|
reward
|
||||||
|
.apr
|
||||||
|
.map(|apr| format!("{:>13.9}%", apr))
|
||||||
|
.unwrap_or_default(),
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1647,29 +1647,37 @@ pub(crate) fn fetch_epoch_rewards(
|
|||||||
let previous_epoch_rewards = first_confirmed_block.rewards;
|
let previous_epoch_rewards = first_confirmed_block.rewards;
|
||||||
|
|
||||||
if let Some((effective_slot, epoch_end_time, epoch_rewards)) = epoch_info {
|
if let Some((effective_slot, epoch_end_time, epoch_rewards)) = epoch_info {
|
||||||
let wallclock_epoch_duration =
|
let wallclock_epoch_duration = if epoch_end_time > epoch_start_time {
|
||||||
{ Local.timestamp(epoch_end_time, 0) - Local.timestamp(epoch_start_time, 0) }
|
Some(
|
||||||
.to_std()?
|
{ Local.timestamp(epoch_end_time, 0) - Local.timestamp(epoch_start_time, 0) }
|
||||||
.as_secs_f64();
|
.to_std()?
|
||||||
|
.as_secs_f64(),
|
||||||
let wallclock_epochs_per_year =
|
)
|
||||||
(SECONDS_PER_DAY * 356) as f64 / wallclock_epoch_duration;
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
if let Some(reward) = epoch_rewards
|
if let Some(reward) = epoch_rewards
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.find(|reward| reward.pubkey == address.to_string())
|
.find(|reward| reward.pubkey == address.to_string())
|
||||||
{
|
{
|
||||||
if reward.post_balance > reward.lamports.try_into().unwrap_or(0) {
|
if reward.post_balance > reward.lamports.try_into().unwrap_or(0) {
|
||||||
let balance_increase_percent = reward.lamports.abs() as f64
|
let percent_change = reward.lamports.abs() as f64
|
||||||
/ (reward.post_balance as f64 - reward.lamports as f64);
|
/ (reward.post_balance as f64 - reward.lamports as f64);
|
||||||
|
|
||||||
|
let apr = wallclock_epoch_duration.map(|wallclock_epoch_duration| {
|
||||||
|
let wallclock_epochs_per_year =
|
||||||
|
(SECONDS_PER_DAY * 356) as f64 / wallclock_epoch_duration;
|
||||||
|
percent_change * wallclock_epochs_per_year
|
||||||
|
});
|
||||||
|
|
||||||
all_epoch_rewards.push(CliEpochReward {
|
all_epoch_rewards.push(CliEpochReward {
|
||||||
epoch,
|
epoch,
|
||||||
effective_slot,
|
effective_slot,
|
||||||
amount: reward.lamports.abs() as u64,
|
amount: reward.lamports.abs() as u64,
|
||||||
post_balance: reward.post_balance,
|
post_balance: reward.post_balance,
|
||||||
percent_change: balance_increase_percent,
|
percent_change,
|
||||||
apr: balance_increase_percent * wallclock_epochs_per_year,
|
apr,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user