Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions accounts-db/src/stake_rewards.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@ impl StakeReward {
stake_reward_info: RewardInfo {
reward_type: solana_sdk::reward_type::RewardType::Staking,
lamports: reward_lamports,
post_balance: 0, /* unused atm */
commission: None, /* unused atm */
post_balance: 0, /* unused atm */
commission: None, /* unused atm */
num_partitions: None, // Not relevant
},

stake_account: validator_stake_account,
Expand Down
2 changes: 2 additions & 0 deletions cli-output/src/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -808,6 +808,7 @@ mod test {
post_balance: 9_900,
reward_type: Some(RewardType::Rent),
commission: None,
num_partitions: None,
}]),
loaded_addresses: LoadedAddresses::default(),
return_data: Some(TransactionReturnData {
Expand Down Expand Up @@ -887,6 +888,7 @@ Rewards:
post_balance: 14_900,
reward_type: Some(RewardType::Rent),
commission: None,
num_partitions: None,
}]),
loaded_addresses,
return_data: Some(TransactionReturnData {
Expand Down
1 change: 1 addition & 0 deletions core/src/rewards_recorder_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ impl RewardsRecorderService {
post_balance: reward_info.post_balance,
reward_type: Some(reward_info.reward_type),
commission: reward_info.commission,
num_partitions: reward_info.num_partitions,
})
.collect();

Expand Down
32 changes: 29 additions & 3 deletions geyser-plugin-interface/src/geyser_plugin_interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use {
signature::Signature,
transaction::SanitizedTransaction,
},
solana_transaction_status::{Reward, TransactionStatusMeta},
solana_transaction_status::{Reward, RewardType, TransactionStatusMeta},
std::{any::Any, error, io},
thiserror::Error,
};
Expand Down Expand Up @@ -217,7 +217,7 @@ pub enum ReplicaEntryInfoVersions<'a> {
pub struct ReplicaBlockInfo<'a> {
pub slot: Slot,
pub blockhash: &'a str,
pub rewards: &'a [Reward],
pub rewards: &'a [DeprecatedReward],
pub block_time: Option<UnixTimestamp>,
pub block_height: Option<u64>,
}
Expand All @@ -230,7 +230,7 @@ pub struct ReplicaBlockInfoV2<'a> {
pub parent_blockhash: &'a str,
pub slot: Slot,
pub blockhash: &'a str,
pub rewards: &'a [Reward],
pub rewards: &'a [DeprecatedReward],
pub block_time: Option<UnixTimestamp>,
pub block_height: Option<u64>,
pub executed_transaction_count: u64,
Expand All @@ -240,6 +240,31 @@ pub struct ReplicaBlockInfoV2<'a> {
#[derive(Clone, Debug)]
#[repr(C)]
pub struct ReplicaBlockInfoV3<'a> {
pub parent_slot: Slot,
pub parent_blockhash: &'a str,
pub slot: Slot,
pub blockhash: &'a str,
pub rewards: &'a [DeprecatedReward],
pub block_time: Option<UnixTimestamp>,
pub block_height: Option<u64>,
pub executed_transaction_count: u64,
pub entry_count: u64,
}

#[derive(Clone, Debug)]
#[repr(C)]
pub struct DeprecatedReward {
pub pubkey: String,
pub lamports: i64,
pub post_balance: u64,
pub reward_type: Option<RewardType>,
pub commission: Option<u8>,
}

/// Adding num_partitions field to each Reward.
#[derive(Clone, Debug)]
#[repr(C)]
pub struct ReplicaBlockInfoV4<'a> {
pub parent_slot: Slot,
pub parent_blockhash: &'a str,
pub slot: Slot,
Expand All @@ -256,6 +281,7 @@ pub enum ReplicaBlockInfoVersions<'a> {
V0_0_1(&'a ReplicaBlockInfo<'a>),
V0_0_2(&'a ReplicaBlockInfoV2<'a>),
V0_0_3(&'a ReplicaBlockInfoV3<'a>),
V0_0_4(&'a ReplicaBlockInfoV4<'a>),
}

/// Errors returned by plugin calls
Expand Down
9 changes: 5 additions & 4 deletions geyser-plugin-manager/src/block_metadata_notifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use {
geyser_plugin_manager::GeyserPluginManager,
},
agave_geyser_plugin_interface::geyser_plugin_interface::{
ReplicaBlockInfoV3, ReplicaBlockInfoVersions,
ReplicaBlockInfoV4, ReplicaBlockInfoVersions,
},
log::*,
solana_measure::measure::Measure,
Expand Down Expand Up @@ -51,7 +51,7 @@ impl BlockMetadataNotifier for BlockMetadataNotifierImpl {
executed_transaction_count,
entry_count,
);
let block_info = ReplicaBlockInfoVersions::V0_0_3(&block_info);
let block_info = ReplicaBlockInfoVersions::V0_0_4(&block_info);
match plugin.notify_block_metadata(block_info) {
Err(err) => {
error!(
Expand Down Expand Up @@ -91,6 +91,7 @@ impl BlockMetadataNotifierImpl {
post_balance: reward.post_balance,
reward_type: Some(reward.reward_type),
commission: reward.commission,
num_partitions: reward.num_partitions,
})
.collect()
}
Expand All @@ -105,8 +106,8 @@ impl BlockMetadataNotifierImpl {
block_height: Option<u64>,
executed_transaction_count: u64,
entry_count: u64,
) -> ReplicaBlockInfoV3<'a> {
ReplicaBlockInfoV3 {
) -> ReplicaBlockInfoV4<'a> {
ReplicaBlockInfoV4 {
parent_slot,
parent_blockhash,
slot,
Expand Down
1 change: 1 addition & 0 deletions ledger/benches/protobuf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ fn create_rewards() -> Rewards {
post_balance: u64::MAX,
reward_type: Some(RewardType::Fee),
commission: None,
num_partitions: None,
})
.collect()
}
Expand Down
2 changes: 2 additions & 0 deletions ledger/src/blockstore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10608,6 +10608,7 @@ pub mod tests {
post_balance: u64::MAX,
reward_type: Some(RewardType::Fee),
commission: None,
num_partitions: None,
})
.collect();
let protobuf_rewards: generated::Rewards = rewards.into();
Expand Down Expand Up @@ -10681,6 +10682,7 @@ pub mod tests {
post_balance: 42,
reward_type: Some(RewardType::Rent),
commission: None,
num_partitions: None,
}]),
loaded_addresses: LoadedAddresses::default(),
return_data: Some(TransactionReturnData {
Expand Down
1 change: 1 addition & 0 deletions rpc/src/transaction_status_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ impl TransactionStatusService {
post_balance: reward_info.post_balance,
reward_type: Some(reward_info.reward_type),
commission: reward_info.commission,
num_partitions: reward_info.num_partitions,
})
.collect(),
);
Expand Down
3 changes: 3 additions & 0 deletions runtime/src/bank.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2583,6 +2583,7 @@ impl Bank {
lamports: i64::try_from(stakers_reward).unwrap(),
post_balance,
commission: Some(vote_state.commission),
num_partitions: None,
},
stake_account,
});
Expand Down Expand Up @@ -2659,6 +2660,7 @@ impl Bank {
lamports: vote_rewards as i64,
post_balance: vote_account.lamports(),
commission: Some(commission),
num_partitions: None,
},
))
},
Expand Down Expand Up @@ -2709,6 +2711,7 @@ impl Bank {
lamports: vote_rewards as i64,
post_balance: vote_account.lamports(),
commission: Some(commission),
num_partitions: None,
},
));
result
Expand Down
2 changes: 2 additions & 0 deletions runtime/src/bank/fee_distribution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ impl Bank {
lamports: deposit as i64,
post_balance,
commission: None,
num_partitions: None,
},
));
}
Expand Down Expand Up @@ -296,6 +297,7 @@ impl Bank {
lamports: rent_to_be_paid as i64,
post_balance,
commission: None,
num_partitions: None,
},
));
}
Expand Down
10 changes: 8 additions & 2 deletions runtime/src/bank/partitioned_epoch_rewards/calculation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ impl Bank {
self.block_height() + REWARD_CALCULATION_NUM_BLOCKS
};

let num_partitions = stake_rewards_by_partition.len() as u64;
let num_partitions = stake_rewards_by_partition.len();

self.set_epoch_reward_status_active(
distribution_starting_block_height,
Expand All @@ -79,10 +79,12 @@ impl Bank {
total_rewards,
distributed_rewards,
distribution_starting_block_height,
num_partitions,
num_partitions as u64,
total_points,
);

self.record_partition_data_reward(num_partitions);

datapoint_info!(
"epoch-rewards-status-update",
("start_slot", slot, i64),
Expand Down Expand Up @@ -440,6 +442,7 @@ impl Bank {
lamports: i64::try_from(stakers_reward).unwrap(),
post_balance,
commission: Some(vote_state.commission),
num_partitions: None,
},
stake,
});
Expand Down Expand Up @@ -759,6 +762,7 @@ mod tests {
lamports: p.1.vote_rewards as i64,
post_balance: p.1.vote_rewards,
commission: Some(p.1.commission),
num_partitions: None,
};
vote_rewards_account.rewards.push((p.0, info));
vote_rewards_account
Expand Down Expand Up @@ -956,6 +960,7 @@ mod tests {
lamports: vote_rewards as i64,
post_balance: vote_account.lamports(),
commission: Some(commision),
num_partitions: None,
}
);
assert_eq!(&rewards.0, vote_pubkey);
Expand All @@ -975,6 +980,7 @@ mod tests {
lamports: rewards,
post_balance: original_stake_lamport + rewards as u64,
commission: Some(commision),
num_partitions: None,
};
assert_eq!(
stake_reward_calculation.stake_rewards[0].stake_reward_info,
Expand Down
1 change: 1 addition & 0 deletions runtime/src/bank/partitioned_epoch_rewards/distribution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,7 @@ mod tests {
lamports: reward_amount,
post_balance: 0,
commission: None,
num_partitions: None,
};

let nonexistent_account = Pubkey::new_unique();
Expand Down
1 change: 1 addition & 0 deletions runtime/src/bank/partitioned_epoch_rewards/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ mod calculation;
mod compare;
mod distribution;
mod epoch_rewards_hasher;
mod partition_data_reward;
mod sysvar;

use {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
use {
super::Bank,
solana_sdk::{reward_info::RewardInfo, reward_type::RewardType, sysvar},
};

impl Bank {
pub(in crate::bank::partitioned_epoch_rewards) fn record_partition_data_reward(
&self,
num_partitions: usize,
) {
let mut rewards = self.rewards.write().unwrap();
rewards.reserve(1);
rewards.push((
// rewards must be "delivered" to some address; since this
// RewardType is for records purposes only, the address is arbitrary
sysvar::epoch_rewards::id(),
RewardInfo {
reward_type: RewardType::PartitionData,
lamports: 0,
post_balance: 0,
commission: None,
num_partitions: Some(num_partitions),
},
));
}
}
7 changes: 7 additions & 0 deletions runtime/src/bank/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1984,6 +1984,7 @@ where
lamports: 0,
post_balance: bank1.get_balance(&vote_id),
commission: Some(0),
num_partitions: None,
}
),
(
Expand All @@ -1993,6 +1994,7 @@ where
lamports: validator_rewards as i64,
post_balance: bank1.get_balance(&stake_id),
commission: Some(0),
num_partitions: None,
}
)
]
Expand Down Expand Up @@ -2587,6 +2589,7 @@ fn test_bank_tx_fee() {
lamports: expected_fee_collected as i64,
post_balance: initial_balance + expected_fee_collected,
commission: None,
num_partitions: None,
}
)]
);
Expand Down Expand Up @@ -2622,6 +2625,7 @@ fn test_bank_tx_fee() {
lamports: expected_fee_collected as i64,
post_balance: initial_balance + 2 * expected_fee_collected,
commission: None,
num_partitions: None,
}
)]
);
Expand Down Expand Up @@ -2697,6 +2701,7 @@ fn test_bank_tx_compute_unit_fee() {
lamports: expected_fee_collected as i64,
post_balance: initial_balance + expected_fee_collected,
commission: None,
num_partitions: None,
}
)]
);
Expand Down Expand Up @@ -2732,6 +2737,7 @@ fn test_bank_tx_compute_unit_fee() {
lamports: expected_fee_collected as i64,
post_balance: initial_balance + 2 * expected_fee_collected,
commission: None,
num_partitions: None,
}
)]
);
Expand Down Expand Up @@ -12552,6 +12558,7 @@ fn test_calc_vote_accounts_to_store_normal() {
lamports: vote_rewards as i64,
post_balance: vote_account.lamports(),
commission: Some(commission),
num_partitions: None,
}
);
assert_eq!(rewards.0, pubkey);
Expand Down
3 changes: 2 additions & 1 deletion sdk/src/rent_debits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ impl RentDebit {
reward_type: RewardType::Rent,
lamports: rent_debit,
post_balance: self.post_balance,
commission: None, // Not applicable
commission: None, // Not applicable
num_partitions: None, // Not applicable
})
}
}
Expand Down
3 changes: 3 additions & 0 deletions sdk/src/reward_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,7 @@ pub struct RewardInfo {
pub post_balance: u64,
/// Vote account commission when the reward was credited, only present for voting and staking rewards
pub commission: Option<u8>,
/// Number of partitions calculated for epoch rewards, only present for
/// RewardType::PartitionData
pub num_partitions: Option<usize>,
}
2 changes: 2 additions & 0 deletions sdk/src/reward_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ pub enum RewardType {
Rent,
Staking,
Voting,
PartitionData,
}

impl fmt::Display for RewardType {
Expand All @@ -21,6 +22,7 @@ impl fmt::Display for RewardType {
RewardType::Rent => "rent",
RewardType::Staking => "staking",
RewardType::Voting => "voting",
RewardType::PartitionData => "partition",
}
)
}
Expand Down
Loading