@@ -9,8 +9,8 @@ use rollup_node_primitives::{
9
9
use scroll_alloy_rpc_types_engine:: BlockDataHint ;
10
10
use sea_orm:: {
11
11
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 ,
14
14
} ;
15
15
16
16
/// The [`DatabaseOperations`] trait provides methods for interacting with the database.
@@ -170,26 +170,21 @@ pub trait DatabaseOperations: DatabaseConnectionProvider {
170
170
171
171
/// Insert an [`L1MessageEnvelope`] into the database.
172
172
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
+
174
176
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 ( )
190
179
. 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
+ }
193
188
}
194
189
195
190
/// Delete all [`L1MessageEnvelope`]s with a block number greater than the provided block
0 commit comments