Skip to content

Commit 5eb1fdf

Browse files
fanatidgodmodegalactus
authored andcommitted
Add mango patches to jito / v1.17.15, hash c1040b0
1 parent 4055509 commit 5eb1fdf

File tree

20 files changed

+599
-34
lines changed

20 files changed

+599
-34
lines changed

core/src/banking_stage.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//! The `banking_stage` processes Transaction messages. It is intended to be used
22
//! to construct a software pipeline. The stage uses all available CPU cores and
33
//! can do its processing in parallel with signature verification on the GPU.
4-
54
use {
65
self::{
76
committer::Committer,
@@ -504,7 +503,10 @@ impl BankingStage {
504503
}
505504
let (decision, make_decision_time) =
506505
measure!(decision_maker.make_consume_or_forward_decision());
507-
let metrics_action = slot_metrics_tracker.check_leader_slot_boundary(decision.bank_start());
506+
let metrics_action = slot_metrics_tracker.check_leader_slot_boundary(
507+
decision.bank_start(),
508+
Some(unprocessed_transaction_storage),
509+
);
508510
slot_metrics_tracker.increment_make_decision_us(make_decision_time.as_us());
509511

510512
match decision {

core/src/banking_stage/consumer.rs

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ use {
2525
transaction_batch::TransactionBatch,
2626
},
2727
solana_sdk::{
28+
borsh0_10::try_from_slice_unchecked,
2829
clock::{Slot, FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET, MAX_PROCESSING_AGE},
30+
compute_budget::{self, ComputeBudgetInstruction},
2931
feature_set,
3032
pubkey::Pubkey,
3133
saturating_add_assign,
@@ -68,6 +70,8 @@ pub struct ExecuteAndCommitTransactionsOutput {
6870
pub commit_transactions_result: Result<Vec<CommitTransactionDetails>, PohRecorderError>,
6971
execute_and_commit_timings: LeaderExecuteAndCommitTimings,
7072
error_counters: TransactionErrorMetrics,
73+
scheduled_min_prioritization_fees: usize,
74+
scheduled_max_prioritization_fees: usize,
7175
}
7276

7377
pub struct Consumer {
@@ -297,6 +301,8 @@ impl Consumer {
297301
let mut total_execute_and_commit_timings = LeaderExecuteAndCommitTimings::default();
298302
let mut total_error_counters = TransactionErrorMetrics::default();
299303
let mut reached_max_poh_height = false;
304+
let mut total_scheduled_min_prioritization_fees: usize = usize::MAX;
305+
let mut total_scheduled_max_prioritization_fees: usize = 0;
300306
while chunk_start != transactions.len() {
301307
let chunk_end = std::cmp::min(
302308
transactions.len(),
@@ -327,6 +333,8 @@ impl Consumer {
327333
commit_transactions_result: new_commit_transactions_result,
328334
execute_and_commit_timings: new_execute_and_commit_timings,
329335
error_counters: new_error_counters,
336+
scheduled_min_prioritization_fees,
337+
scheduled_max_prioritization_fees,
330338
..
331339
} = execute_and_commit_transactions_output;
332340

@@ -336,6 +344,14 @@ impl Consumer {
336344
total_transactions_attempted_execution_count,
337345
new_transactions_attempted_execution_count
338346
);
347+
total_scheduled_min_prioritization_fees = std::cmp::min(
348+
total_scheduled_min_prioritization_fees,
349+
scheduled_min_prioritization_fees,
350+
);
351+
total_scheduled_max_prioritization_fees = std::cmp::min(
352+
total_scheduled_max_prioritization_fees,
353+
scheduled_max_prioritization_fees,
354+
);
339355

340356
trace!(
341357
"process_transactions result: {:?}",
@@ -396,6 +412,8 @@ impl Consumer {
396412
cost_model_us: total_cost_model_us,
397413
execute_and_commit_timings: total_execute_and_commit_timings,
398414
error_counters: total_error_counters,
415+
scheduled_min_prioritization_fees: total_scheduled_min_prioritization_fees,
416+
scheduled_max_prioritization_fees: total_scheduled_max_prioritization_fees,
399417
}
400418
}
401419

@@ -425,7 +443,13 @@ impl Consumer {
425443
// Re-sanitized transaction should be equal to the original transaction,
426444
// but whether it will pass sanitization needs to be checked.
427445
let resanitized_tx =
428-
bank.fully_verify_transaction(tx.to_versioned_transaction())?;
446+
match bank.fully_verify_transaction(tx.to_versioned_transaction()) {
447+
Ok(resanitized_tx) => resanitized_tx,
448+
Err(e) => {
449+
bank.notify_transaction_error(tx, Some(e.clone()));
450+
return Err(e);
451+
}
452+
};
429453
if resanitized_tx != *tx {
430454
// Sanitization before/after epoch give different transaction data - do not execute.
431455
return Err(TransactionError::ResanitizationNeeded);
@@ -563,6 +587,33 @@ impl Consumer {
563587
});
564588
execute_and_commit_timings.collect_balances_us = collect_balances_us;
565589

590+
let min_max = batch
591+
.sanitized_transactions()
592+
.iter()
593+
.filter_map(|transaction| {
594+
let message = transaction.message();
595+
for (program_id, instruction) in message.program_instructions_iter() {
596+
if compute_budget::check_id(program_id) {
597+
match try_from_slice_unchecked(&instruction.data) {
598+
Ok(ComputeBudgetInstruction::SetComputeUnitPrice(micro_lamports)) => {
599+
return Some(micro_lamports);
600+
}
601+
Ok(ComputeBudgetInstruction::RequestUnitsDeprecated {
602+
additional_fee,
603+
..
604+
}) => {
605+
return Some(additional_fee as u64);
606+
}
607+
_ => {}
608+
}
609+
}
610+
}
611+
None
612+
})
613+
.minmax();
614+
let (scheduled_min_prioritization_fees, scheduled_max_prioritization_fees) =
615+
min_max.into_option().unwrap_or_default();
616+
566617
let (load_and_execute_transactions_output, load_execute_us) = measure_us!(bank
567618
.load_and_execute_transactions(
568619
batch,
@@ -638,6 +689,8 @@ impl Consumer {
638689
commit_transactions_result: Err(recorder_err),
639690
execute_and_commit_timings,
640691
error_counters,
692+
scheduled_min_prioritization_fees: scheduled_min_prioritization_fees as usize,
693+
scheduled_max_prioritization_fees: scheduled_max_prioritization_fees as usize,
641694
};
642695
}
643696

@@ -693,6 +746,8 @@ impl Consumer {
693746
commit_transactions_result: Ok(commit_transaction_statuses),
694747
execute_and_commit_timings,
695748
error_counters,
749+
scheduled_min_prioritization_fees: scheduled_min_prioritization_fees as usize,
750+
scheduled_max_prioritization_fees: scheduled_max_prioritization_fees as usize,
696751
}
697752
}
698753

0 commit comments

Comments
 (0)