@@ -7,30 +7,31 @@ use alloy_rpc_types::{BlockId, BlockNumberOrTag, Filter};
7
7
use alloy_sol_types:: { SolEvent , sol} ;
8
8
use multisig:: PublicKey ;
9
9
use tokio:: time:: sleep;
10
- use tracing:: { error, info} ;
10
+ use tracing:: { error, info, warn } ;
11
11
12
12
use crate :: queue:: BundleQueue ;
13
13
14
- const INBOX_DELAY : Duration = Duration :: from_secs ( 120 ) ;
14
+ const INBOX_DELAY : Duration = Duration :: from_secs ( 60 ) ;
15
15
16
16
sol ! {
17
17
event InboxMessageDelivered ( uint256 indexed messageNum, bytes data) ;
18
18
event InboxMessageDeliveredFromOrigin ( uint256 indexed messageNum) ;
19
19
}
20
20
21
- pub struct DelayedInbox < N : Network > {
21
+ pub struct DelayedInbox < ' a , N : Network > {
22
22
node : PublicKey ,
23
23
ibox_addr : Address ,
24
24
provider : RootProvider < N > ,
25
25
queue : BundleQueue ,
26
+ url : & ' a str ,
26
27
}
27
28
28
- impl < N : Network > DelayedInbox < N > {
29
+ impl < ' a , N : Network > DelayedInbox < ' a , N > {
29
30
pub async fn connect (
30
31
node : PublicKey ,
31
- url : & str ,
32
+ url : & ' a str ,
32
33
ibox_addr : Address ,
33
- l1_chain_id : u64 ,
34
+ parent_chain_id : u64 ,
34
35
queue : BundleQueue ,
35
36
) -> Result < Self , Error > {
36
37
let provider = RootProvider :: < N > :: connect ( url)
@@ -40,22 +41,20 @@ impl<N: Network> DelayedInbox<N> {
40
41
. get_chain_id ( )
41
42
. await
42
43
. map_err ( |e| Error :: RpcError ( e. to_string ( ) ) ) ?;
43
- if l1_chain_id != rpc_chain_id {
44
- error ! ( %l1_chain_id , %rpc_chain_id, "mismatching chain id" ) ;
45
- return Err ( Error :: MismatchingChainID ( l1_chain_id , rpc_chain_id) ) ;
44
+ if parent_chain_id != rpc_chain_id {
45
+ error ! ( %parent_chain_id , %rpc_chain_id, "mismatching chain id" ) ;
46
+ return Err ( Error :: MismatchingChainID ( parent_chain_id , rpc_chain_id) ) ;
46
47
}
47
48
Ok ( Self {
48
49
node,
49
50
ibox_addr,
50
51
provider,
51
52
queue,
53
+ url,
52
54
} )
53
55
}
54
56
55
57
pub async fn go ( self ) {
56
- let Self {
57
- node, ibox_addr, ..
58
- } = self ;
59
58
let mut last_finalized = 0 ;
60
59
let mut last_delayed_index = 0 ;
61
60
let events = vec ! [
@@ -71,6 +70,7 @@ impl<N: Network> DelayedInbox<N> {
71
70
{
72
71
let finalized = b. header ( ) . number ( ) ;
73
72
if finalized == last_finalized {
73
+ sleep ( INBOX_DELAY ) . await ;
74
74
continue ;
75
75
}
76
76
if last_finalized == 0 {
@@ -84,31 +84,33 @@ impl<N: Network> DelayedInbox<N> {
84
84
. from_block ( last_finalized)
85
85
. to_block ( finalized)
86
86
. events ( & events) ;
87
+ last_finalized = finalized;
87
88
88
89
if let Ok ( mut logs) = self . provider . get_logs ( & filter) . await {
89
- last_finalized = finalized;
90
90
// Make sure event logs are in order, we need highest block number first
91
91
logs. sort_by ( |a, b| {
92
92
b. block_number
93
93
. cmp ( & a. block_number )
94
94
. then ( b. log_index . cmp ( & a. log_index ) )
95
95
} ) ;
96
- if let Some ( ( Some ( tx_hash) , Some ( msg_num ) ) ) = logs
96
+ if let Some ( ( Some ( tx_hash) , Some ( index ) ) ) = logs
97
97
. first ( )
98
98
. map ( |log| ( log. transaction_hash , log. topics ( ) . get ( 1 ) ) )
99
99
{
100
100
// Update delayed index if newer
101
- let delayed_index = U256 :: from_be_bytes ( msg_num . 0 )
101
+ let delayed_index = U256 :: from_be_bytes ( index . 0 )
102
102
. try_into ( )
103
103
. expect ( "valid msg number" ) ;
104
104
if delayed_index != last_delayed_index {
105
105
debug_assert ! ( delayed_index > last_delayed_index) ;
106
- info ! ( % node, ? ibox_addr, %last_finalized , %delayed_index, %tx_hash, "delayed index updated" ) ;
106
+ info ! ( node = % self . node, ibox_addr = % self . ibox_addr , parent_finalized_block = %finalized , %delayed_index, %tx_hash, "delayed index updated" ) ;
107
107
last_delayed_index = delayed_index;
108
108
self . queue . set_delayed_inbox_index ( delayed_index. into ( ) ) ;
109
109
}
110
110
}
111
111
}
112
+ } else {
113
+ warn ! ( node = %self . node, ibox_addr = %self . ibox_addr, url = %self . url, "failed to get latest finalized block" ) ;
112
114
}
113
115
sleep ( INBOX_DELAY ) . await ;
114
116
}
0 commit comments