From 27236c2e158b83cccf146e0b182fe7446125ba86 Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sat, 24 Jan 2026 17:57:33 +0000 Subject: [PATCH 01/12] Fetch inflight orders from DB --- crates/autopilot/src/infra/persistence/mod.rs | 22 +++++++++++++- crates/autopilot/src/run_loop.rs | 30 ++++++------------- crates/database/src/solver_competition_v2.rs | 19 ++++++++++++ 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/crates/autopilot/src/infra/persistence/mod.rs b/crates/autopilot/src/infra/persistence/mod.rs index e9b8dec947..37cb460702 100644 --- a/crates/autopilot/src/infra/persistence/mod.rs +++ b/crates/autopilot/src/infra/persistence/mod.rs @@ -21,7 +21,7 @@ use { SellTokenSource as DbSellTokenSource, SigningScheme as DbSigningScheme, }, - solver_competition_v2::{Order, Solution}, + solver_competition_v2::{self, Order, Solution}, }, domain::auction::order::{ BuyTokenDestination as DomainBuyTokenDestination, @@ -1024,6 +1024,26 @@ impl Persistence { .context("solver_competition::fetch_solver_winning_solutions")?, ) } + + /// Saves the surplus capturing jit order owners to the DB + pub async fn fetch_in_flight_orders( + &self, + current_block: u64, + ) -> anyhow::Result> { + let _timer = Metrics::get() + .database_queries + .with_label_values(&["inflight_orders"]) + .start_timer(); + + let mut ex = self.postgres.pool.acquire().await.context("acquire")?; + let orders = + solver_competition_v2::fetch_in_flight_orders(&mut ex, current_block.cast_signed()) + .await?; + Ok(orders + .into_iter() + .map(|o| crate::domain::OrderUid(o.0)) + .collect()) + } } #[derive(prometheus_metric_storage::MetricStorage)] diff --git a/crates/autopilot/src/run_loop.rs b/crates/autopilot/src/run_loop.rs index f793d07c8a..2ecb974483 100644 --- a/crates/autopilot/src/run_loop.rs +++ b/crates/autopilot/src/run_loop.rs @@ -3,7 +3,6 @@ use { database::competition::Competition, domain::{ self, - OrderUid, auction::Id, competition::{ self, @@ -53,7 +52,6 @@ use { }, time::{Duration, Instant}, }, - tokio::sync::Mutex, tracing::{Instrument, instrument}, }; @@ -83,7 +81,6 @@ pub struct RunLoop { solver_participation_guard: SolverParticipationGuard, solvable_orders_cache: Arc, trusted_tokens: AutoUpdatingTokenList, - in_flight_orders: Arc>>, probes: Probes, /// Maintenance tasks that should run before every runloop to have /// the most recent data available. @@ -126,7 +123,6 @@ impl RunLoop { solver_participation_guard, solvable_orders_cache, trusted_tokens, - in_flight_orders: Default::default(), probes, maintenance, competition_updates_sender, @@ -403,11 +399,6 @@ impl RunLoop { block_deadline: u64, ) { let solved_order_uids: HashSet<_> = solution.orders().keys().cloned().collect(); - self.in_flight_orders - .lock() - .await - .extend(solved_order_uids.clone()); - let solution_id = solution.id(); let solver = solution.solver(); let self_ = self.clone(); @@ -420,7 +411,6 @@ impl RunLoop { match self_ .settle( &driver_, - solved_order_uids.clone(), solver, auction_id, solution_id, @@ -734,11 +724,9 @@ impl RunLoop { /// Execute the solver's solution. Returns Ok when the corresponding /// transaction has been mined. - #[expect(clippy::too_many_arguments)] async fn settle( &self, driver: &infra::Driver, - solved_order_uids: HashSet, solver: eth::Address, auction_id: i64, solution_id: u64, @@ -794,12 +782,6 @@ impl RunLoop { self.store_execution_ended(solver, auction_id, solution_uid, &result); - // Clean up the in-flight orders regardless the result. - self.in_flight_orders - .lock() - .await - .retain(|order| !solved_order_uids.contains(order)); - result } @@ -913,13 +895,19 @@ impl RunLoop { Err(SettleError::Timeout) } - /// Removes orders that are currently being settled to avoid solvers trying - /// to fill an order a second time. + /// Removes orders that are currently being settled to avoid solver + /// solutions conflicting with each other. async fn remove_in_flight_orders( &self, mut auction: domain::RawAuctionData, ) -> domain::RawAuctionData { - let in_flight = &*self.in_flight_orders.lock().await; + let in_flight = self + .persistence + .fetch_in_flight_orders(auction.block) + .await + .inspect_err(|err| tracing::warn!(?err, "failed to fetch in-flight orders")) + .unwrap_or_default(); + if in_flight.is_empty() { return auction; }; diff --git a/crates/database/src/solver_competition_v2.rs b/crates/database/src/solver_competition_v2.rs index 0a61cd8382..bbf98e0962 100644 --- a/crates/database/src/solver_competition_v2.rs +++ b/crates/database/src/solver_competition_v2.rs @@ -563,6 +563,25 @@ fn map_rows_to_solutions(rows: Vec) -> Result, sqlx:: Ok(solutions) } +pub async fn fetch_in_flight_orders( + ex: &mut PgConnection, + current_block: i64, +) -> Result, sqlx::Error> { + const QUERY: &str = r#" + SELECT DISTINCT(pte.order_uid) FROM competition_auctions ca + JOIN proposed_solutions ps ON ps.auction_id = ca.id + JOIN proposed_trade_executions pte ON pte.solution_uid = ps.uid AND pte.auction_id = ca.id + WHERE + deadline > $1 + AND ps.filtered_out = false + "#; + + sqlx::query_as(QUERY) + .bind(current_block) + .fetch_all(ex) + .await +} + #[cfg(test)] mod tests { use { From c4bef9244428a2c5b21d55fe8e4b421d8dc8c7fb Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sat, 24 Jan 2026 18:22:16 +0000 Subject: [PATCH 02/12] fix query and add unit test --- crates/database/src/solver_competition_v2.rs | 89 +++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/crates/database/src/solver_competition_v2.rs b/crates/database/src/solver_competition_v2.rs index bbf98e0962..39a6c8a15f 100644 --- a/crates/database/src/solver_competition_v2.rs +++ b/crates/database/src/solver_competition_v2.rs @@ -573,7 +573,7 @@ pub async fn fetch_in_flight_orders( JOIN proposed_trade_executions pte ON pte.solution_uid = ps.uid AND pte.auction_id = ca.id WHERE deadline > $1 - AND ps.filtered_out = false + AND ps.is_winner = true "#; sqlx::query_as(QUERY) @@ -1261,4 +1261,91 @@ mod tests { assert_eq!(auction_participants.len(), 1); assert_eq!(auction_participants[0].participant, solutions[0].solver); } + + #[tokio::test] + #[ignore] + async fn postgres_fetch_inflight_orders() { + let mut db = PgConnection::connect("postgresql://").await.unwrap(); + let mut db = db.begin().await.unwrap(); + crate::clear_DANGER_(&mut db).await.unwrap(); + + // insert an order to "orders" table to prevent orders from being + // inserted into the proposed_jit_orders table + let order_uid = |i| ByteArray([i; 56]); + for i in 0..4 { + let order = crate::orders::Order { + uid: order_uid(i), + ..Default::default() + }; + crate::orders::insert_order(&mut db, &order).await.unwrap(); + } + + let order = |i| Order { + uid: order_uid(i), + ..Default::default() + }; + let solutions = vec![ + Solution { + uid: 0, + id: 0.into(), + orders: vec![order(0)], + is_winner: true, + ..Default::default() + }, + Solution { + uid: 1, + id: 0.into(), + orders: vec![order(1)], + is_winner: true, + ..Default::default() + }, + ]; + crate::auction::save(&mut db, crate::auction::Auction { + id: 0, + block: 0, + deadline: 5, + order_uids: Default::default(), + price_tokens: Default::default(), + price_values: Default::default(), + surplus_capturing_jit_order_owners: Default::default(), + }).await.unwrap(); + save(&mut db, 0, &solutions).await.unwrap(); + + let solutions = vec![ + Solution { + uid: 2, + id: 1.into(), + orders: vec![order(2)], + is_winner: true, + ..Default::default() + }, + Solution { + uid: 3, + id: 1.into(), + orders: vec![order(3)], + is_winner: true, + ..Default::default() + }, + ]; + crate::auction::save(&mut db, crate::auction::Auction { + id: 1, + block: 5, + deadline: 10, + order_uids: Default::default(), + price_tokens: Default::default(), + price_values: Default::default(), + surplus_capturing_jit_order_owners: Default::default(), + }).await.unwrap(); + save(&mut db, 1, &solutions).await.unwrap(); + + // all orders in flight at block 4 + let early_block = fetch_in_flight_orders(&mut db, 4).await.unwrap(); + assert_eq!(early_block.len(), 4); + assert!([0, 1, 2, 3].into_iter().all(|id| early_block.contains(&order_uid(id)))); + + // only orders from the later auction in flight at block 5 + let later_block = fetch_in_flight_orders(&mut db, 5).await.unwrap(); + assert_eq!(later_block.len(), 2); + assert!([2, 3].into_iter().all(|id| later_block.contains(&order_uid(id)))); + } } From 4cde199fab6f74dd1ae7f1831c01abb9d7179268 Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sat, 24 Jan 2026 18:25:29 +0000 Subject: [PATCH 03/12] fix comment and formatting --- crates/autopilot/src/infra/persistence/mod.rs | 3 +- crates/database/src/solver_competition_v2.rs | 58 ++++++++++++------- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/crates/autopilot/src/infra/persistence/mod.rs b/crates/autopilot/src/infra/persistence/mod.rs index 37cb460702..b816358fda 100644 --- a/crates/autopilot/src/infra/persistence/mod.rs +++ b/crates/autopilot/src/infra/persistence/mod.rs @@ -1025,7 +1025,8 @@ impl Persistence { ) } - /// Saves the surplus capturing jit order owners to the DB + /// Fetches orders which are currently inflight. Those orders should + /// be omitted from the current auction to avoid onchain reverts. pub async fn fetch_in_flight_orders( &self, current_block: u64, diff --git a/crates/database/src/solver_competition_v2.rs b/crates/database/src/solver_competition_v2.rs index 39a6c8a15f..232faa7e2e 100644 --- a/crates/database/src/solver_competition_v2.rs +++ b/crates/database/src/solver_competition_v2.rs @@ -1300,15 +1300,20 @@ mod tests { ..Default::default() }, ]; - crate::auction::save(&mut db, crate::auction::Auction { - id: 0, - block: 0, - deadline: 5, - order_uids: Default::default(), - price_tokens: Default::default(), - price_values: Default::default(), - surplus_capturing_jit_order_owners: Default::default(), - }).await.unwrap(); + crate::auction::save( + &mut db, + crate::auction::Auction { + id: 0, + block: 0, + deadline: 5, + order_uids: Default::default(), + price_tokens: Default::default(), + price_values: Default::default(), + surplus_capturing_jit_order_owners: Default::default(), + }, + ) + .await + .unwrap(); save(&mut db, 0, &solutions).await.unwrap(); let solutions = vec![ @@ -1327,25 +1332,38 @@ mod tests { ..Default::default() }, ]; - crate::auction::save(&mut db, crate::auction::Auction { - id: 1, - block: 5, - deadline: 10, - order_uids: Default::default(), - price_tokens: Default::default(), - price_values: Default::default(), - surplus_capturing_jit_order_owners: Default::default(), - }).await.unwrap(); + crate::auction::save( + &mut db, + crate::auction::Auction { + id: 1, + block: 5, + deadline: 10, + order_uids: Default::default(), + price_tokens: Default::default(), + price_values: Default::default(), + surplus_capturing_jit_order_owners: Default::default(), + }, + ) + .await + .unwrap(); save(&mut db, 1, &solutions).await.unwrap(); // all orders in flight at block 4 let early_block = fetch_in_flight_orders(&mut db, 4).await.unwrap(); assert_eq!(early_block.len(), 4); - assert!([0, 1, 2, 3].into_iter().all(|id| early_block.contains(&order_uid(id)))); + assert!( + [0, 1, 2, 3] + .into_iter() + .all(|id| early_block.contains(&order_uid(id))) + ); // only orders from the later auction in flight at block 5 let later_block = fetch_in_flight_orders(&mut db, 5).await.unwrap(); assert_eq!(later_block.len(), 2); - assert!([2, 3].into_iter().all(|id| later_block.contains(&order_uid(id)))); + assert!( + [2, 3] + .into_iter() + .all(|id| later_block.contains(&order_uid(id))) + ); } } From b0a99ef4519d4e4fa595713de6b72cbc9b8e9e37 Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sat, 24 Jan 2026 18:46:19 +0000 Subject: [PATCH 04/12] Dont consider settled orders as inflight --- crates/database/src/solver_competition_v2.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/crates/database/src/solver_competition_v2.rs b/crates/database/src/solver_competition_v2.rs index 232faa7e2e..2aed2414cf 100644 --- a/crates/database/src/solver_competition_v2.rs +++ b/crates/database/src/solver_competition_v2.rs @@ -574,6 +574,10 @@ pub async fn fetch_in_flight_orders( WHERE deadline > $1 AND ps.is_winner = true + AND NOT EXISTS ( + SELECT 1 FROM settlement_executions se + WHERE se.auction_id = ca.id AND se.solution_uid = ps.uid + ) "#; sqlx::query_as(QUERY) @@ -1365,5 +1369,21 @@ mod tests { .into_iter() .all(|id| later_block.contains(&order_uid(id))) ); + + crate::settlement_executions::insert( + &mut db, + 1, // auction_id + Default::default(), + 3, // solution uid => contains order 3 + Default::default(), + 5, + 10, + ) + .await + .unwrap(); + + // when an order gets marked as settled we dont consider it inflight anymore + let later_block_with_settlement = fetch_in_flight_orders(&mut db, 5).await.unwrap(); + assert_eq!(later_block_with_settlement, vec![order_uid(2)]); } } From 114c95929bc3c75340bb83bd1cec8445955a30ae Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sun, 25 Jan 2026 00:47:13 +0000 Subject: [PATCH 05/12] add index to speed up in-flight order lookup --- database/README.md | 1 + database/sql/V098__add_auction_deadline_index.sql | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 database/sql/V098__add_auction_deadline_index.sql diff --git a/database/README.md b/database/README.md index 4e427976a7..32819cf1d5 100644 --- a/database/README.md +++ b/database/README.md @@ -64,6 +64,7 @@ Contains all auctions for which a valid solver competition exists. Indexes: - PRIMARY KEY: btree(`id`) +- competition_auction_deadline: btree(`deadline`) ### ethflow\_orders diff --git a/database/sql/V098__add_auction_deadline_index.sql b/database/sql/V098__add_auction_deadline_index.sql new file mode 100644 index 0000000000..8a68d16ec3 --- /dev/null +++ b/database/sql/V098__add_auction_deadline_index.sql @@ -0,0 +1,2 @@ +-- adds index on the deadline of an auction to quickly look up inflight orders from the db +CREATE INDEX CONCURENTLY competition_auction_deadline ON auction_competitions USING BTREE(deadline); From 736523b383d9fe04e9a7b0c976a4de60a28b71aa Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sun, 25 Jan 2026 00:50:12 +0000 Subject: [PATCH 06/12] fix typo in migration --- database/sql/V098__add_auction_deadline_index.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/sql/V098__add_auction_deadline_index.sql b/database/sql/V098__add_auction_deadline_index.sql index 8a68d16ec3..63f5271073 100644 --- a/database/sql/V098__add_auction_deadline_index.sql +++ b/database/sql/V098__add_auction_deadline_index.sql @@ -1,2 +1,2 @@ -- adds index on the deadline of an auction to quickly look up inflight orders from the db -CREATE INDEX CONCURENTLY competition_auction_deadline ON auction_competitions USING BTREE(deadline); +CREATE INDEX CONCURRENTLY competition_auction_deadline ON auction_competitions USING BTREE(deadline); From b7ea928576049d7ed055239a38b3b5aea410380b Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sun, 25 Jan 2026 00:52:27 +0000 Subject: [PATCH 07/12] use correct table name... --- database/sql/V098__add_auction_deadline_index.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/sql/V098__add_auction_deadline_index.sql b/database/sql/V098__add_auction_deadline_index.sql index 63f5271073..46e29b8ae3 100644 --- a/database/sql/V098__add_auction_deadline_index.sql +++ b/database/sql/V098__add_auction_deadline_index.sql @@ -1,2 +1,2 @@ -- adds index on the deadline of an auction to quickly look up inflight orders from the db -CREATE INDEX CONCURRENTLY competition_auction_deadline ON auction_competitions USING BTREE(deadline); +CREATE INDEX CONCURRENTLY competition_auction_deadline ON competition_auctions USING BTREE(deadline); From b7b86de1650d7778fef52e101595f05ec08c9fd7 Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sun, 25 Jan 2026 01:10:13 +0000 Subject: [PATCH 08/12] Also consider JIT orders to filter out the associated COW amms --- crates/database/src/solver_competition_v2.rs | 22 ++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/crates/database/src/solver_competition_v2.rs b/crates/database/src/solver_competition_v2.rs index 2aed2414cf..90ee3f1390 100644 --- a/crates/database/src/solver_competition_v2.rs +++ b/crates/database/src/solver_competition_v2.rs @@ -563,21 +563,31 @@ fn map_rows_to_solutions(rows: Vec) -> Result, sqlx:: Ok(solutions) } +/// Fetches all orders for which we must assume that there are +/// still onchain transactions being mined or submitted. +/// +/// Those are all orders (JIT or regular) that belong to winning +/// solutions with a deadline greater than the current block +/// where the execution actually has not been observed onchain yet. pub async fn fetch_in_flight_orders( ex: &mut PgConnection, current_block: i64, ) -> Result, sqlx::Error> { const QUERY: &str = r#" - SELECT DISTINCT(pte.order_uid) FROM competition_auctions ca + SELECT DISTINCT order_uid + FROM competition_auctions ca JOIN proposed_solutions ps ON ps.auction_id = ca.id - JOIN proposed_trade_executions pte ON pte.solution_uid = ps.uid AND pte.auction_id = ca.id - WHERE - deadline > $1 - AND ps.is_winner = true + JOIN ( + SELECT auction_id, solution_uid, order_uid FROM proposed_trade_executions + UNION ALL + SELECT auction_id, solution_uid, order_uid FROM proposed_jit_orders + ) orders ON orders.solution_uid = ps.uid AND orders.auction_id = ca.id + WHERE ca.deadline > $1 + AND ps.winning = true AND NOT EXISTS ( SELECT 1 FROM settlement_executions se WHERE se.auction_id = ca.id AND se.solution_uid = ps.uid - ) + ); "#; sqlx::query_as(QUERY) From 709a3e369ee4a433079c9db21c2b93b0aed5480c Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sun, 25 Jan 2026 01:12:16 +0000 Subject: [PATCH 09/12] fix column name in query --- crates/database/src/solver_competition_v2.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/database/src/solver_competition_v2.rs b/crates/database/src/solver_competition_v2.rs index 90ee3f1390..168fd8bb36 100644 --- a/crates/database/src/solver_competition_v2.rs +++ b/crates/database/src/solver_competition_v2.rs @@ -583,7 +583,7 @@ pub async fn fetch_in_flight_orders( SELECT auction_id, solution_uid, order_uid FROM proposed_jit_orders ) orders ON orders.solution_uid = ps.uid AND orders.auction_id = ca.id WHERE ca.deadline > $1 - AND ps.winning = true + AND ps.is_winner = true AND NOT EXISTS ( SELECT 1 FROM settlement_executions se WHERE se.auction_id = ca.id AND se.solution_uid = ps.uid From dc1a5eea0269d3fb41814429400c3a3ba58427d6 Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sun, 25 Jan 2026 01:15:11 +0000 Subject: [PATCH 10/12] filter out mined tx using `settlements` table --- crates/database/src/solver_competition_v2.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/database/src/solver_competition_v2.rs b/crates/database/src/solver_competition_v2.rs index 168fd8bb36..ccfb1aee3f 100644 --- a/crates/database/src/solver_competition_v2.rs +++ b/crates/database/src/solver_competition_v2.rs @@ -585,8 +585,8 @@ pub async fn fetch_in_flight_orders( WHERE ca.deadline > $1 AND ps.is_winner = true AND NOT EXISTS ( - SELECT 1 FROM settlement_executions se - WHERE se.auction_id = ca.id AND se.solution_uid = ps.uid + SELECT 1 FROM settlements s + WHERE s.auction_id = ca.id AND s.solution_uid = ps.uid ); "#; From 6826f02dd2592575a88dc7eaeb79e289ac7b3faa Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Sun, 25 Jan 2026 01:31:27 +0000 Subject: [PATCH 11/12] Simplify query and fix test again --- crates/database/src/solver_competition_v2.rs | 38 +++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/crates/database/src/solver_competition_v2.rs b/crates/database/src/solver_competition_v2.rs index ccfb1aee3f..11aefbcdc9 100644 --- a/crates/database/src/solver_competition_v2.rs +++ b/crates/database/src/solver_competition_v2.rs @@ -577,11 +577,7 @@ pub async fn fetch_in_flight_orders( SELECT DISTINCT order_uid FROM competition_auctions ca JOIN proposed_solutions ps ON ps.auction_id = ca.id - JOIN ( - SELECT auction_id, solution_uid, order_uid FROM proposed_trade_executions - UNION ALL - SELECT auction_id, solution_uid, order_uid FROM proposed_jit_orders - ) orders ON orders.solution_uid = ps.uid AND orders.auction_id = ca.id + JOIN proposed_trade_executions pte ON pte.auction_id = ca.id AND pte.solution_uid = ps.uid WHERE ca.deadline > $1 AND ps.is_winner = true AND NOT EXISTS ( @@ -1283,17 +1279,7 @@ mod tests { let mut db = db.begin().await.unwrap(); crate::clear_DANGER_(&mut db).await.unwrap(); - // insert an order to "orders" table to prevent orders from being - // inserted into the proposed_jit_orders table let order_uid = |i| ByteArray([i; 56]); - for i in 0..4 { - let order = crate::orders::Order { - uid: order_uid(i), - ..Default::default() - }; - crate::orders::insert_order(&mut db, &order).await.unwrap(); - } - let order = |i| Order { uid: order_uid(i), ..Default::default() @@ -1380,17 +1366,25 @@ mod tests { .all(|id| later_block.contains(&order_uid(id))) ); - crate::settlement_executions::insert( + // observe settlement event + crate::events::insert_settlement( &mut db, - 1, // auction_id - Default::default(), - 3, // solution uid => contains order 3 - Default::default(), - 5, - 10, + &EventIndex { + block_number: 5, + log_index: 0, + }, + &Default::default(), ) .await .unwrap(); + // associate with auction 1 + settlements::update_settlement_auction(&mut db, 5, 0, 1) + .await + .unwrap(); + // associate with solution 3 + settlements::update_settlement_solver(&mut db, 5, 0, Default::default(), 3) + .await + .unwrap(); // when an order gets marked as settled we dont consider it inflight anymore let later_block_with_settlement = fetch_in_flight_orders(&mut db, 5).await.unwrap(); From bf6fcbdc6623bb9cec6d05617e35712007a2b2b4 Mon Sep 17 00:00:00 2001 From: MartinquaXD Date: Mon, 26 Jan 2026 13:34:28 +0000 Subject: [PATCH 12/12] Rename bump migration file to index 100 --- ..._auction_deadline_index.sql => V100__add_auction_deadline.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename database/sql/{V098__add_auction_deadline_index.sql => V100__add_auction_deadline.sql} (100%) diff --git a/database/sql/V098__add_auction_deadline_index.sql b/database/sql/V100__add_auction_deadline.sql similarity index 100% rename from database/sql/V098__add_auction_deadline_index.sql rename to database/sql/V100__add_auction_deadline.sql