Improve relayer initialization behaviour (#1743)

Wait until the initialization transaction is finalized/lost.
This commit is contained in:
Serban Iorga
2023-01-04 15:37:20 +02:00
committed by Bastian Köcher
parent f82372e818
commit 64f03aaa0b
@@ -24,10 +24,12 @@
use crate::{error::Error, finality::engine::Engine}; use crate::{error::Error, finality::engine::Engine};
use sp_core::Pair; use sp_core::Pair;
use bp_runtime::HeaderIdOf;
use relay_substrate_client::{ use relay_substrate_client::{
AccountKeyPairOf, Chain, ChainWithTransactions, Client, Error as SubstrateError, AccountKeyPairOf, Chain, ChainWithTransactions, Client, Error as SubstrateError,
UnsignedTransaction, UnsignedTransaction,
}; };
use relay_utils::{TrackedTransactionStatus, TransactionTracker};
use sp_runtime::traits::Header as HeaderT; use sp_runtime::traits::Header as HeaderT;
/// Submit headers-bridge initialization transaction. /// Submit headers-bridge initialization transaction.
@@ -61,13 +63,26 @@ pub async fn initialize<
.await; .await;
match result { match result {
Ok(Some(tx_hash)) => log::info!( Ok(Some(tx_status)) => match tx_status {
TrackedTransactionStatus::Lost => {
log::error!(
target: "bridge", target: "bridge",
"Successfully submitted {}-headers bridge initialization transaction to {}: {:?}", "Failed to execute {}-headers bridge initialization transaction on {}: {:?}.",
SourceChain::NAME, SourceChain::NAME,
TargetChain::NAME, TargetChain::NAME,
tx_hash, tx_status
), )
},
TrackedTransactionStatus::Finalized(_) => {
log::info!(
target: "bridge",
"Successfully executed {}-headers bridge initialization transaction on {}: {:?}.",
SourceChain::NAME,
TargetChain::NAME,
tx_status
)
},
},
Ok(None) => (), Ok(None) => (),
Err(err) => log::error!( Err(err) => log::error!(
target: "bridge", target: "bridge",
@@ -92,7 +107,7 @@ async fn do_initialize<
prepare_initialize_transaction: F, prepare_initialize_transaction: F,
dry_run: bool, dry_run: bool,
) -> Result< ) -> Result<
Option<TargetChain::Hash>, Option<TrackedTransactionStatus<HeaderIdOf<TargetChain>>>,
Error<SourceChain::Hash, <SourceChain::Header as HeaderT>::Number>, Error<SourceChain::Hash, <SourceChain::Header as HeaderT>::Number>,
> >
where where
@@ -128,8 +143,8 @@ where
initialization_data, initialization_data,
); );
let initialization_tx_hash = target_client let tx_status = target_client
.submit_signed_extrinsic(&target_signer, move |_, transaction_nonce| { .submit_and_watch_signed_extrinsic(&target_signer, move |_, transaction_nonce| {
let tx = prepare_initialize_transaction(transaction_nonce, initialization_data); let tx = prepare_initialize_transaction(transaction_nonce, initialization_data);
if dry_run { if dry_run {
Err(SubstrateError::Custom( Err(SubstrateError::Custom(
@@ -140,7 +155,9 @@ where
} }
}) })
.await .await
.map_err(|err| Error::SubmitTransaction(TargetChain::NAME, err))?; .map_err(|err| Error::SubmitTransaction(TargetChain::NAME, err))?
.wait()
.await;
Ok(Some(initialization_tx_hash)) Ok(Some(tx_status))
} }