From 9ab77ddb5a5206d678c422ad294a56019a64a961 Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Wed, 10 Dec 2025 07:57:08 +0000 Subject: [PATCH] autopilot: await specific solution of many --- crates/autopilot/src/infra/persistence/mod.rs | 8 ++++++-- crates/autopilot/src/run_loop.rs | 10 ++++++++-- crates/database/src/settlements.rs | 4 +++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/crates/autopilot/src/infra/persistence/mod.rs b/crates/autopilot/src/infra/persistence/mod.rs index 8826d0be3a..bf6cad9f00 100644 --- a/crates/autopilot/src/infra/persistence/mod.rs +++ b/crates/autopilot/src/infra/persistence/mod.rs @@ -325,12 +325,13 @@ impl Persistence { ex.commit().await.context("commit") } - /// For a given auction and solver, tries to find the settlement - /// transaction. + /// Tries to find the transaction executing a given solution proposed + /// by the solver. pub async fn find_settlement_transaction( &self, auction_id: i64, solver: eth::Address, + solution_uid: usize, ) -> Result, DatabaseError> { let _timer = Metrics::get() .database_queries @@ -342,6 +343,9 @@ impl Persistence { &mut ex, auction_id, ByteArray(solver.0.0), + solution_uid + .try_into() + .context("could not convert solution id to i64")?, ) .await? .map(|hash| H256(hash.0).into())) diff --git a/crates/autopilot/src/run_loop.rs b/crates/autopilot/src/run_loop.rs index dafe902d63..37a1a6a6e0 100644 --- a/crates/autopilot/src/run_loop.rs +++ b/crates/autopilot/src/run_loop.rs @@ -782,7 +782,12 @@ impl RunLoop { .boxed(); let wait_for_settlement_transaction = self - .wait_for_settlement_transaction(auction_id, solver, submission_deadline_latest_block) + .wait_for_settlement_transaction( + auction_id, + solver, + submission_deadline_latest_block, + solution_uid, + ) .boxed(); // Wait for either the settlement transaction to be mined or the driver returned @@ -885,6 +890,7 @@ impl RunLoop { auction_id: i64, solver: eth::Address, submission_deadline_latest_block: u64, + solution_uid: usize, ) -> Result { let current = self.eth.current_block().borrow().number; tracing::debug!(%current, deadline=%submission_deadline_latest_block, %auction_id, "waiting for tag"); @@ -896,7 +902,7 @@ impl RunLoop { match self .persistence - .find_settlement_transaction(auction_id, solver) + .find_settlement_transaction(auction_id, solver, solution_uid) .await { Ok(Some(transaction)) => return Ok(transaction), diff --git a/crates/database/src/settlements.rs b/crates/database/src/settlements.rs index 36980ab2b3..c47b378e81 100644 --- a/crates/database/src/settlements.rs +++ b/crates/database/src/settlements.rs @@ -9,16 +9,18 @@ pub async fn find_settlement_transaction( ex: &mut PgConnection, auction_id: i64, solver: Address, + solution_uid: i64, ) -> Result, sqlx::Error> { const QUERY: &str = r#" SELECT tx_hash FROM settlements WHERE - auction_id = $1 AND solver = $2 + auction_id = $1 AND solver = $2 AND solution_uid = $3 "#; sqlx::query_as(QUERY) .bind(auction_id) .bind(solver) + .bind(solution_uid) .fetch_optional(ex) .await }