Detect tracer key in sigverify (#25579)

* Mark the tracer transaction

* simplify tracer check
This commit is contained in:
carllin 2022-05-30 18:41:54 -05:00 committed by GitHub
parent 58092f746c
commit 90a3315b69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 7 deletions

View File

@ -64,6 +64,7 @@ impl SigVerifier for TransactionSigVerifier {
removed_before_sigverify_stage: bool, removed_before_sigverify_stage: bool,
is_dup: bool, is_dup: bool,
) { ) {
sigverify::check_for_tracer_packet(packet);
if packet.meta.is_tracer_packet() { if packet.meta.is_tracer_packet() {
if removed_before_sigverify_stage { if removed_before_sigverify_stage {
self.tracer_packet_stats self.tracer_packet_stats

View File

@ -38,6 +38,7 @@ const TRACER_KEY_BYTES: [u8; 32] = [
155, 90, 30, 39, 116, 115, 238, 38, 126, 21, 232, 133, 155, 90, 30, 39, 116, 115, 238, 38, 126, 21, 232, 133,
]; ];
const TRACER_KEY: Pubkey = Pubkey::new_from_array(TRACER_KEY_BYTES); const TRACER_KEY: Pubkey = Pubkey::new_from_array(TRACER_KEY_BYTES);
const TRACER_KEY_OFFSET_IN_TRANSACTION: usize = 69;
lazy_static! { lazy_static! {
static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new()
@ -152,13 +153,6 @@ fn verify_packet(packet: &mut Packet, reject_non_vote: bool) {
return; return;
} }
// Check for tracer pubkey
if !packet.meta.is_tracer_packet()
&& &packet.data()[pubkey_start..pubkey_end] == TRACER_KEY.as_ref()
{
packet.meta.flags |= PacketFlags::TRACER_PACKET;
}
pubkey_start = pubkey_end; pubkey_start = pubkey_end;
sig_start = sig_end; sig_start = sig_end;
} }
@ -315,6 +309,22 @@ fn do_get_packet_offsets(
)) ))
} }
pub fn check_for_tracer_packet(packet: &mut Packet) -> bool {
let first_pubkey_start: usize = TRACER_KEY_OFFSET_IN_TRANSACTION;
let first_pubkey_end = first_pubkey_start.saturating_add(size_of::<Pubkey>());
// Check for tracer pubkey
if packet.meta.size > first_pubkey_start {
let is_tracer_packet =
&packet.data()[first_pubkey_start..first_pubkey_end] == TRACER_KEY.as_ref();
if is_tracer_packet {
packet.meta.flags |= PacketFlags::TRACER_PACKET;
}
is_tracer_packet
} else {
false
}
}
fn get_packet_offsets( fn get_packet_offsets(
packet: &mut Packet, packet: &mut Packet,
current_offset: usize, current_offset: usize,