Skip to content

Commit 2c4a557

Browse files
authored
Feature cleanup - Reward full priority fee to validators #22 (#4959)
Feature "Reward full priority fee to validators #22" is activated everywhere. Remove feature specific code.
1 parent df222f7 commit 2c4a557

File tree

3 files changed

+6
-242
lines changed

3 files changed

+6
-242
lines changed

runtime/src/bank.rs

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ use {
9595
solana_compute_budget::compute_budget::ComputeBudget,
9696
solana_compute_budget_instruction::instructions_processor::process_compute_budget_instructions,
9797
solana_cost_model::{block_cost_limits::simd_0207_block_limits, cost_tracker::CostTracker},
98-
solana_feature_set::{self as feature_set, reward_full_priority_fee, FeatureSet},
98+
solana_feature_set::{self as feature_set, FeatureSet},
9999
solana_fee::FeeFeatures,
100100
solana_lattice_hash::lt_hash::LtHash,
101101
solana_measure::{meas_dur, measure::Measure, measure_time, measure_us},
@@ -2593,11 +2593,7 @@ impl Bank {
25932593
if *hash == Hash::default() {
25942594
// finish up any deferred changes to account state
25952595
self.collect_rent_eagerly();
2596-
if self.feature_set.is_active(&reward_full_priority_fee::id()) {
2597-
self.distribute_transaction_fee_details();
2598-
} else {
2599-
self.distribute_transaction_fees();
2600-
}
2596+
self.distribute_transaction_fee_details();
26012597
self.distribute_rent_fees();
26022598
self.update_slot_history();
26032599
self.run_incinerator();
@@ -3615,21 +3611,6 @@ impl Bank {
36153611
self.update_accounts_data_size_delta_off_chain(data_size_delta);
36163612
}
36173613

3618-
fn filter_program_errors_and_collect_fee(
3619-
&self,
3620-
processing_results: &[TransactionProcessingResult],
3621-
) {
3622-
let mut fees = 0;
3623-
3624-
processing_results.iter().for_each(|processing_result| {
3625-
if let Ok(processed_tx) = processing_result {
3626-
fees += processed_tx.fee_details().total_fee();
3627-
}
3628-
});
3629-
3630-
self.collector_fees.fetch_add(fees, Relaxed);
3631-
}
3632-
36333614
// Note: this function is not yet used; next PR will call it behind a feature gate
36343615
fn filter_program_errors_and_collect_fee_details(
36353616
&self,
@@ -3765,11 +3746,7 @@ impl Bank {
37653746
let ((), update_transaction_statuses_us) =
37663747
measure_us!(self.update_transaction_statuses(sanitized_txs, &processing_results));
37673748

3768-
if self.feature_set.is_active(&reward_full_priority_fee::id()) {
3769-
self.filter_program_errors_and_collect_fee_details(&processing_results)
3770-
} else {
3771-
self.filter_program_errors_and_collect_fee(&processing_results)
3772-
};
3749+
self.filter_program_errors_and_collect_fee_details(&processing_results);
37733750

37743751
timings.saturating_add_in_place(ExecuteTimingType::StoreUs, store_accounts_us);
37753752
timings.saturating_add_in_place(

runtime/src/bank/fee_distribution.rs

Lines changed: 3 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use {
22
super::Bank,
33
crate::bank::CollectorFeeDetails,
44
log::{debug, warn},
5-
solana_feature_set::reward_full_priority_fee,
65
solana_fee::FeeFeatures,
76
solana_runtime_transaction::transaction_with_meta::TransactionWithMeta,
87
solana_sdk::{
@@ -44,19 +43,6 @@ impl Bank {
4443
// On the other hand, rent fees are distributed under slightly different philosophy, while
4544
// still being stake-weighted.
4645
// Ref: distribute_rent_to_validators
47-
pub(super) fn distribute_transaction_fees(&self) {
48-
let collector_fees = self.collector_fees.load(Relaxed);
49-
if collector_fees != 0 {
50-
let (deposit, mut burn) = self.calculate_reward_and_burn_fees(collector_fees);
51-
if deposit > 0 {
52-
self.deposit_or_burn_fee(deposit, &mut burn);
53-
}
54-
self.capitalization.fetch_sub(burn, Relaxed);
55-
}
56-
}
57-
58-
// Replace `distribute_transaction_fees()` after Feature Gate: Reward full priority fee to
59-
// validators #34731;
6046
pub(super) fn distribute_transaction_fee_details(&self) {
6147
let fee_details = self.collector_fee_details.read().unwrap();
6248
if fee_details.total() == 0 {
@@ -84,19 +70,11 @@ impl Bank {
8470
fee_budget_limits.prioritization_fee,
8571
FeeFeatures::from(self.feature_set.as_ref()),
8672
);
87-
let (reward, _burn) = if self.feature_set.is_active(&reward_full_priority_fee::id()) {
88-
self.calculate_reward_and_burn_fee_details(&CollectorFeeDetails::from(fee_details))
89-
} else {
90-
let fee = fee_details.total_fee();
91-
self.calculate_reward_and_burn_fees(fee)
92-
};
73+
let (reward, _burn) =
74+
self.calculate_reward_and_burn_fee_details(&CollectorFeeDetails::from(fee_details));
9375
reward
9476
}
9577

96-
fn calculate_reward_and_burn_fees(&self, fee: u64) -> (u64, u64) {
97-
self.fee_rate_governor.burn(fee)
98-
}
99-
10078
fn calculate_reward_and_burn_fee_details(
10179
&self,
10280
fee_details: &CollectorFeeDetails,
@@ -185,7 +163,7 @@ impl Bank {
185163
// The reason is that rent fee doesn't need to be incentivized for throughput unlike transaction
186164
// fees
187165
//
188-
// Ref: distribute_transaction_fees
166+
// Ref: distribute_transaction_fee_details
189167
fn distribute_rent_to_validators(
190168
&self,
191169
vote_accounts: &VoteAccountsHashMap,
@@ -430,119 +408,6 @@ pub mod tests {
430408
}
431409
}
432410

433-
#[test]
434-
fn test_distribute_transaction_fees_normal() {
435-
let genesis = create_genesis_config(0);
436-
let bank = Bank::new_for_tests(&genesis.genesis_config);
437-
let transaction_fees = 100;
438-
bank.collector_fees.fetch_add(transaction_fees, Relaxed);
439-
assert_eq!(transaction_fees, bank.collector_fees.load(Relaxed));
440-
let (expected_collected_fees, burn_amount) = bank.fee_rate_governor.burn(transaction_fees);
441-
442-
let initial_capitalization = bank.capitalization();
443-
let initial_collector_id_balance = bank.get_balance(bank.collector_id());
444-
bank.distribute_transaction_fees();
445-
let new_collector_id_balance = bank.get_balance(bank.collector_id());
446-
447-
assert_eq!(
448-
initial_collector_id_balance + expected_collected_fees,
449-
new_collector_id_balance
450-
);
451-
assert_eq!(initial_capitalization - burn_amount, bank.capitalization());
452-
let locked_rewards = bank.rewards.read().unwrap();
453-
assert_eq!(
454-
locked_rewards.len(),
455-
1,
456-
"There should be one reward distributed"
457-
);
458-
459-
let reward_info = &locked_rewards[0];
460-
assert_eq!(
461-
reward_info.1.lamports, expected_collected_fees as i64,
462-
"The reward amount should match the expected deposit"
463-
);
464-
assert_eq!(
465-
reward_info.1.reward_type,
466-
RewardType::Fee,
467-
"The reward type should be Fee"
468-
);
469-
}
470-
471-
#[test]
472-
fn test_distribute_transaction_fees_zero() {
473-
let genesis = create_genesis_config(0);
474-
let bank = Bank::new_for_tests(&genesis.genesis_config);
475-
assert_eq!(bank.collector_fees.load(Relaxed), 0);
476-
477-
let initial_capitalization = bank.capitalization();
478-
let initial_collector_id_balance = bank.get_balance(bank.collector_id());
479-
bank.distribute_transaction_fees();
480-
let new_collector_id_balance = bank.get_balance(bank.collector_id());
481-
482-
assert_eq!(initial_collector_id_balance, new_collector_id_balance);
483-
assert_eq!(initial_capitalization, bank.capitalization());
484-
let locked_rewards = bank.rewards.read().unwrap();
485-
assert!(
486-
locked_rewards.is_empty(),
487-
"There should be no rewards distributed"
488-
);
489-
}
490-
491-
#[test]
492-
fn test_distribute_transaction_fees_burn_all() {
493-
let mut genesis = create_genesis_config(0);
494-
genesis.genesis_config.fee_rate_governor.burn_percent = 100;
495-
let bank = Bank::new_for_tests(&genesis.genesis_config);
496-
let transaction_fees = 100;
497-
bank.collector_fees.fetch_add(transaction_fees, Relaxed);
498-
assert_eq!(transaction_fees, bank.collector_fees.load(Relaxed));
499-
500-
let initial_capitalization = bank.capitalization();
501-
let initial_collector_id_balance = bank.get_balance(bank.collector_id());
502-
bank.distribute_transaction_fees();
503-
let new_collector_id_balance = bank.get_balance(bank.collector_id());
504-
505-
assert_eq!(initial_collector_id_balance, new_collector_id_balance);
506-
assert_eq!(
507-
initial_capitalization - transaction_fees,
508-
bank.capitalization()
509-
);
510-
let locked_rewards = bank.rewards.read().unwrap();
511-
assert!(
512-
locked_rewards.is_empty(),
513-
"There should be no rewards distributed"
514-
);
515-
}
516-
517-
#[test]
518-
fn test_distribute_transaction_fees_overflow_failure() {
519-
let genesis = create_genesis_config(0);
520-
let bank = Bank::new_for_tests(&genesis.genesis_config);
521-
let transaction_fees = 100;
522-
bank.collector_fees.fetch_add(transaction_fees, Relaxed);
523-
assert_eq!(transaction_fees, bank.collector_fees.load(Relaxed));
524-
525-
// ensure that account balance will overflow and fee distribution will fail
526-
let account = AccountSharedData::new(u64::MAX, 0, &system_program::id());
527-
bank.store_account(bank.collector_id(), &account);
528-
529-
let initial_capitalization = bank.capitalization();
530-
let initial_collector_id_balance = bank.get_balance(bank.collector_id());
531-
bank.distribute_transaction_fees();
532-
let new_collector_id_balance = bank.get_balance(bank.collector_id());
533-
534-
assert_eq!(initial_collector_id_balance, new_collector_id_balance);
535-
assert_eq!(
536-
initial_capitalization - transaction_fees,
537-
bank.capitalization()
538-
);
539-
let locked_rewards = bank.rewards.read().unwrap();
540-
assert!(
541-
locked_rewards.is_empty(),
542-
"There should be no rewards distributed"
543-
);
544-
}
545-
546411
#[test]
547412
fn test_deposit_fees() {
548413
let initial_balance = 1_000_000_000;

runtime/src/bank/tests.rs

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -3034,84 +3034,6 @@ fn test_bank_blockhash_compute_unit_fee_structure() {
30343034
);
30353035
}
30363036

3037-
#[test]
3038-
fn test_filter_program_errors_and_collect_fee() {
3039-
let leader = solana_pubkey::new_rand();
3040-
let GenesisConfigInfo { genesis_config, .. } =
3041-
create_genesis_config_with_leader(100_000, &leader, 3);
3042-
let mut bank = Bank::new_for_tests(&genesis_config);
3043-
// this test is only for when `feature_set::reward_full_priority_fee` inactivated
3044-
bank.deactivate_feature(&feature_set::reward_full_priority_fee::id());
3045-
3046-
let tx_fee = 42;
3047-
let fee_details = FeeDetails::new(tx_fee, 0);
3048-
let processing_results = vec![
3049-
Err(TransactionError::AccountNotFound),
3050-
new_executed_processing_result(Ok(()), fee_details),
3051-
new_executed_processing_result(
3052-
Err(TransactionError::InstructionError(
3053-
1,
3054-
SystemError::ResultWithNegativeLamports.into(),
3055-
)),
3056-
fee_details,
3057-
),
3058-
Ok(ProcessedTransaction::FeesOnly(Box::new(
3059-
FeesOnlyTransaction {
3060-
load_error: TransactionError::InvalidProgramForExecution,
3061-
rollback_accounts: RollbackAccounts::default(),
3062-
fee_details,
3063-
},
3064-
))),
3065-
];
3066-
let initial_balance = bank.get_balance(&leader);
3067-
3068-
bank.filter_program_errors_and_collect_fee(&processing_results);
3069-
bank.freeze();
3070-
assert_eq!(
3071-
bank.get_balance(&leader),
3072-
initial_balance + bank.fee_rate_governor.burn(tx_fee * 3).0
3073-
);
3074-
}
3075-
3076-
#[test]
3077-
fn test_filter_program_errors_and_collect_priority_fee() {
3078-
let leader = solana_pubkey::new_rand();
3079-
let GenesisConfigInfo { genesis_config, .. } =
3080-
create_genesis_config_with_leader(1000000, &leader, 3);
3081-
let mut bank = Bank::new_for_tests(&genesis_config);
3082-
// this test is only for when `feature_set::reward_full_priority_fee` inactivated
3083-
bank.deactivate_feature(&feature_set::reward_full_priority_fee::id());
3084-
3085-
let priority_fee = 42;
3086-
let fee_details: FeeDetails = FeeDetails::new(0, priority_fee);
3087-
let processing_results = vec![
3088-
Err(TransactionError::AccountNotFound),
3089-
new_executed_processing_result(Ok(()), fee_details),
3090-
new_executed_processing_result(
3091-
Err(TransactionError::InstructionError(
3092-
1,
3093-
SystemError::ResultWithNegativeLamports.into(),
3094-
)),
3095-
fee_details,
3096-
),
3097-
Ok(ProcessedTransaction::FeesOnly(Box::new(
3098-
FeesOnlyTransaction {
3099-
load_error: TransactionError::InvalidProgramForExecution,
3100-
rollback_accounts: RollbackAccounts::default(),
3101-
fee_details,
3102-
},
3103-
))),
3104-
];
3105-
let initial_balance = bank.get_balance(&leader);
3106-
3107-
bank.filter_program_errors_and_collect_fee(&processing_results);
3108-
bank.freeze();
3109-
assert_eq!(
3110-
bank.get_balance(&leader),
3111-
initial_balance + bank.fee_rate_governor.burn(priority_fee * 3).0
3112-
);
3113-
}
3114-
31153037
#[test]
31163038
fn test_debits_before_credits() {
31173039
let (genesis_config, mint_keypair) =

0 commit comments

Comments
 (0)