From 90a3315b69ea049cfb855ebea272702b6484fde4 Mon Sep 17 00:00:00 2001 From: carllin Date: Mon, 30 May 2022 18:41:54 -0500 Subject: [PATCH] Detect tracer key in sigverify (#25579) * Mark the tracer transaction * simplify tracer check --- core/src/sigverify.rs | 1 + perf/src/sigverify.rs | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/core/src/sigverify.rs b/core/src/sigverify.rs index ddf2eab61..4ce7ff89a 100644 --- a/core/src/sigverify.rs +++ b/core/src/sigverify.rs @@ -64,6 +64,7 @@ impl SigVerifier for TransactionSigVerifier { removed_before_sigverify_stage: bool, is_dup: bool, ) { + sigverify::check_for_tracer_packet(packet); if packet.meta.is_tracer_packet() { if removed_before_sigverify_stage { self.tracer_packet_stats diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index 5b9473ad2..cc4c57971 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -38,6 +38,7 @@ const TRACER_KEY_BYTES: [u8; 32] = [ 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_OFFSET_IN_TRANSACTION: usize = 69; lazy_static! { static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() @@ -152,13 +153,6 @@ fn verify_packet(packet: &mut Packet, reject_non_vote: bool) { 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; 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::()); + // 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( packet: &mut Packet, current_offset: usize,