@@ -9,8 +9,8 @@ use rollup_node_primitives::{
99use scroll_alloy_rpc_types_engine:: BlockDataHint ;
1010use sea_orm:: {
1111 sea_query:: { Expr , OnConflict } ,
12- ActiveModelTrait , ColumnTrait , Condition , EntityTrait , QueryFilter , QueryOrder , QuerySelect ,
13- Set ,
12+ ActiveModelTrait , ColumnTrait , Condition , DbErr , EntityTrait , QueryFilter , QueryOrder ,
13+ QuerySelect , Set ,
1414} ;
1515
1616/// The [`DatabaseOperations`] trait provides methods for interacting with the database.
@@ -170,26 +170,21 @@ pub trait DatabaseOperations: DatabaseConnectionProvider {
170170
171171 /// Insert an [`L1MessageEnvelope`] into the database.
172172 async fn insert_l1_message ( & self , l1_message : L1MessageEnvelope ) -> Result < ( ) , DatabaseError > {
173- tracing:: trace!( target: "scroll::db" , queue_index = l1_message. transaction. queue_index, "Inserting L1 message into database." ) ;
173+ let l1_index = l1_message. transaction . queue_index ;
174+ tracing:: trace!( target: "scroll::db" , queue_index = l1_index, "Inserting L1 message into database." ) ;
175+
174176 let l1_message: models:: l1_message:: ActiveModel = l1_message. into ( ) ;
175- models:: l1_message:: Entity :: insert ( l1_message)
176- . on_conflict (
177- OnConflict :: column ( models:: l1_message:: Column :: QueueIndex )
178- . update_columns ( vec ! [
179- models:: l1_message:: Column :: QueueHash ,
180- models:: l1_message:: Column :: Hash ,
181- models:: l1_message:: Column :: L1BlockNumber ,
182- models:: l1_message:: Column :: GasLimit ,
183- models:: l1_message:: Column :: To ,
184- models:: l1_message:: Column :: Value ,
185- models:: l1_message:: Column :: Sender ,
186- models:: l1_message:: Column :: Input ,
187- ] )
188- . to_owned ( ) ,
189- )
177+ let result = models:: l1_message:: Entity :: insert ( l1_message)
178+ . on_conflict_do_nothing ( )
190179 . exec ( self . get_connection ( ) )
191- . await ?;
192- Ok ( ( ) )
180+ . await ;
181+
182+ if matches ! ( result, Err ( DbErr :: RecordNotInserted ) ) {
183+ tracing:: error!( target: "scroll::db" , queue_index = l1_index, "L1 message already exists" ) ;
184+ Ok ( ( ) )
185+ } else {
186+ Ok ( result. map ( |_| ( ) ) ?)
187+ }
193188 }
194189
195190 /// Delete all [`L1MessageEnvelope`]s with a block number greater than the provided block
0 commit comments