sui_core/
post_consensus_tx_reorder.rsuse crate::consensus_handler::{
SequencedConsensusTransactionKind, VerifiedSequencedConsensusTransaction,
};
use mysten_metrics::monitored_scope;
use sui_protocol_config::ConsensusTransactionOrdering;
use sui_types::{
messages_consensus::{ConsensusTransaction, ConsensusTransactionKind},
transaction::TransactionDataAPI as _,
};
pub struct PostConsensusTxReorder {}
impl PostConsensusTxReorder {
pub fn reorder(
transactions: &mut [VerifiedSequencedConsensusTransaction],
kind: ConsensusTransactionOrdering,
) {
match kind {
ConsensusTransactionOrdering::ByGasPrice => Self::order_by_gas_price(transactions),
ConsensusTransactionOrdering::None => (),
}
}
fn order_by_gas_price(transactions: &mut [VerifiedSequencedConsensusTransaction]) {
let _scope = monitored_scope("ConsensusCommitHandler::order_by_gas_price");
transactions.sort_by_key(|txn| {
std::cmp::Reverse({
match &txn.0.transaction {
SequencedConsensusTransactionKind::External(ConsensusTransaction {
tracking_id: _,
kind: ConsensusTransactionKind::CertifiedTransaction(cert),
}) => cert.gas_price(),
SequencedConsensusTransactionKind::External(ConsensusTransaction {
tracking_id: _,
kind: ConsensusTransactionKind::UserTransaction(txn),
}) => txn.transaction_data().gas_price(),
_ => u64::MAX,
}
})
})
}
}