24
24
use crate :: { error:: Error , finality:: engine:: Engine } ;
25
25
use sp_core:: Pair ;
26
26
27
+ use bp_runtime:: HeaderIdOf ;
27
28
use relay_substrate_client:: {
28
29
AccountKeyPairOf , Chain , ChainWithTransactions , Client , Error as SubstrateError ,
29
30
UnsignedTransaction ,
30
31
} ;
32
+ use relay_utils:: { TrackedTransactionStatus , TransactionTracker } ;
31
33
use sp_runtime:: traits:: Header as HeaderT ;
32
34
33
35
/// Submit headers-bridge initialization transaction.
@@ -61,13 +63,26 @@ pub async fn initialize<
61
63
. await ;
62
64
63
65
match result {
64
- Ok ( Some ( tx_hash) ) => log:: info!(
65
- target: "bridge" ,
66
- "Successfully submitted {}-headers bridge initialization transaction to {}: {:?}" ,
67
- SourceChain :: NAME ,
68
- TargetChain :: NAME ,
69
- tx_hash,
70
- ) ,
66
+ Ok ( Some ( tx_status) ) => match tx_status {
67
+ TrackedTransactionStatus :: Lost => {
68
+ log:: error!(
69
+ target: "bridge" ,
70
+ "Failed to execute {}-headers bridge initialization transaction on {}: {:?}." ,
71
+ SourceChain :: NAME ,
72
+ TargetChain :: NAME ,
73
+ tx_status
74
+ )
75
+ } ,
76
+ TrackedTransactionStatus :: Finalized ( _) => {
77
+ log:: info!(
78
+ target: "bridge" ,
79
+ "Successfully executed {}-headers bridge initialization transaction on {}: {:?}." ,
80
+ SourceChain :: NAME ,
81
+ TargetChain :: NAME ,
82
+ tx_status
83
+ )
84
+ } ,
85
+ } ,
71
86
Ok ( None ) => ( ) ,
72
87
Err ( err) => log:: error!(
73
88
target: "bridge" ,
@@ -92,7 +107,7 @@ async fn do_initialize<
92
107
prepare_initialize_transaction : F ,
93
108
dry_run : bool ,
94
109
) -> Result <
95
- Option < TargetChain :: Hash > ,
110
+ Option < TrackedTransactionStatus < HeaderIdOf < TargetChain > > > ,
96
111
Error < SourceChain :: Hash , <SourceChain :: Header as HeaderT >:: Number > ,
97
112
>
98
113
where
@@ -128,8 +143,8 @@ where
128
143
initialization_data,
129
144
) ;
130
145
131
- let initialization_tx_hash = target_client
132
- . submit_signed_extrinsic ( & target_signer, move |_, transaction_nonce| {
146
+ let tx_status = target_client
147
+ . submit_and_watch_signed_extrinsic ( & target_signer, move |_, transaction_nonce| {
133
148
let tx = prepare_initialize_transaction ( transaction_nonce, initialization_data) ;
134
149
if dry_run {
135
150
Err ( SubstrateError :: Custom (
@@ -140,7 +155,9 @@ where
140
155
}
141
156
} )
142
157
. await
143
- . map_err ( |err| Error :: SubmitTransaction ( TargetChain :: NAME , err) ) ?;
158
+ . map_err ( |err| Error :: SubmitTransaction ( TargetChain :: NAME , err) ) ?
159
+ . wait ( )
160
+ . await ;
144
161
145
- Ok ( Some ( initialization_tx_hash ) )
162
+ Ok ( Some ( tx_status ) )
146
163
}
0 commit comments