From c358fb3863eb6f12835013cdc452dbe114ee074d Mon Sep 17 00:00:00 2001 From: Theo Butler Date: Fri, 7 Feb 2025 08:23:22 -0500 Subject: [PATCH] feat: add option to avoid denying senders --- crates/config/src/config.rs | 3 +++ crates/tap-agent/src/agent/sender_account.rs | 14 ++++++++++++++ crates/tap-agent/src/test.rs | 2 ++ crates/tap-agent/tests/tap_agent_test.rs | 1 + 4 files changed, 20 insertions(+) diff --git a/crates/config/src/config.rs b/crates/config/src/config.rs index 4ba7488e4..399e5ab28 100644 --- a/crates/config/src/config.rs +++ b/crates/config/src/config.rs @@ -382,6 +382,9 @@ pub struct TapConfig { pub sender_timeout_secs: Duration, pub sender_aggregator_endpoints: HashMap, + /// Set of sender addresses that will not be added to the denylist + #[serde(default)] + pub trusted_senders: Vec
, } #[derive(Debug, Deserialize)] diff --git a/crates/tap-agent/src/agent/sender_account.rs b/crates/tap-agent/src/agent/sender_account.rs index 7a8266fb9..2516302f6 100644 --- a/crates/tap-agent/src/agent/sender_account.rs +++ b/crates/tap-agent/src/agent/sender_account.rs @@ -329,6 +329,8 @@ pub struct SenderAccountConfig { pub max_amount_willing_to_lose_grt: u128, /// What value triggers a new Rav request pub trigger_value: u128, + /// Set of sender addresses that will not be added to the denylist + pub trusted_senders: HashSet
, // allocation config /// Timeout config for rav requests @@ -355,6 +357,7 @@ impl SenderAccountConfig { escrow_polling_interval: config.subgraphs.escrow.config.syncing_interval_secs, max_amount_willing_to_lose_grt: config.tap.max_amount_willing_to_lose_grt.get_value(), trigger_value: config.tap.get_trigger_value(), + trusted_senders: config.tap.trusted_senders.iter().copied().collect(), rav_request_timeout: config.tap.rav_request.request_timeout_secs, tap_sender_timeout: config.tap.sender_timeout_secs, } @@ -549,6 +552,17 @@ impl State { /// Will update [`State::denied`], as well as the denylist table in the database. async fn add_to_denylist(&mut self) { + if self.config.trusted_senders.contains(&self.sender) { + tracing::warn!( + fee_tracker = self.sender_fee_tracker.get_total_fee(), + rav_tracker = self.rav_tracker.get_total_fee(), + max_amount_willing_to_lose = self.config.max_amount_willing_to_lose_grt, + sender_balance = self.sender_balance.to_u128(), + "Trusted sender would be denied." + ); + return; + } + tracing::warn!( fee_tracker = self.sender_fee_tracker.get_total_fee(), rav_tracker = self.rav_tracker.get_total_fee(), diff --git a/crates/tap-agent/src/test.rs b/crates/tap-agent/src/test.rs index 6a95fb422..e24b997e1 100644 --- a/crates/tap-agent/src/test.rs +++ b/crates/tap-agent/src/test.rs @@ -76,6 +76,7 @@ pub fn get_sender_account_config() -> &'static SenderAccountConfig { rav_request_buffer: RAV_REQUEST_BUFFER, max_amount_willing_to_lose_grt: TRIGGER_VALUE + 100, trigger_value: TRIGGER_VALUE, + trusted_senders: Default::default(), rav_request_timeout: Duration::from_secs(30), rav_request_receipt_limit: 1000, indexer_address: INDEXER.1, @@ -105,6 +106,7 @@ pub async fn create_sender_account( rav_request_buffer: BUFFER_DURATION, max_amount_willing_to_lose_grt, trigger_value: rav_request_trigger_value, + trusted_senders: Default::default(), rav_request_timeout: RAV_REQUEST_TIMEOUT, rav_request_receipt_limit, indexer_address: INDEXER.1, diff --git a/crates/tap-agent/tests/tap_agent_test.rs b/crates/tap-agent/tests/tap_agent_test.rs index f84618aa8..be21ae378 100644 --- a/crates/tap-agent/tests/tap_agent_test.rs +++ b/crates/tap-agent/tests/tap_agent_test.rs @@ -82,6 +82,7 @@ pub async fn start_agent( rav_request_buffer: Duration::from_millis(500), max_amount_willing_to_lose_grt: 50, trigger_value: 150, + trusted_senders: Default::default(), rav_request_timeout: Duration::from_secs(60), rav_request_receipt_limit: 10, indexer_address: INDEXER_ADDRESS,