Skip to content

Commit fe55414

Browse files
committed
make relay code generic over Client implementation
1 parent 7e38a89 commit fe55414

32 files changed

+418
-269
lines changed

relays/bin-substrate/src/bridges/kusama_polkadot/kusama_headers_to_bridge_hub_polkadot.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
use crate::cli::bridge::{CliBridgeBase, RelayToRelayHeadersCliBridge};
2020

2121
use async_trait::async_trait;
22-
use relay_substrate_client::{AccountKeyPairOf, Client, ClientT};
22+
use relay_substrate_client::{AccountKeyPairOf, Client};
2323
use substrate_relay_helper::{
2424
finality::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalitySyncPipeline},
2525
TransactionParams,
@@ -45,7 +45,7 @@ impl SubstrateFinalitySyncPipeline for KusamaFinalityToBridgeHubPolkadot {
4545
type SubmitFinalityProofCallBuilder = KusamaFinalityToBridgeHubPolkadotCallBuilder;
4646

4747
async fn start_relay_guards(
48-
target_client: &Client<Self::TargetChain>,
48+
target_client: &impl Client<Self::TargetChain>,
4949
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
5050
enable_version_guard: bool,
5151
) -> relay_substrate_client::Result<()> {

relays/bin-substrate/src/bridges/kusama_polkadot/polkadot_headers_to_bridge_hub_kusama.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
use crate::cli::bridge::{CliBridgeBase, RelayToRelayHeadersCliBridge};
2020

2121
use async_trait::async_trait;
22-
use relay_substrate_client::{AccountKeyPairOf, Client, ClientT};
22+
use relay_substrate_client::{AccountKeyPairOf, Client};
2323
use substrate_relay_helper::{
2424
finality::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalitySyncPipeline},
2525
TransactionParams,
@@ -45,7 +45,7 @@ impl SubstrateFinalitySyncPipeline for PolkadotFinalityToBridgeHubKusama {
4545
type SubmitFinalityProofCallBuilder = PolkadotFinalityToBridgeHubKusamaCallBuilder;
4646

4747
async fn start_relay_guards(
48-
target_client: &Client<Self::TargetChain>,
48+
target_client: &impl Client<Self::TargetChain>,
4949
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
5050
enable_version_guard: bool,
5151
) -> relay_substrate_client::Result<()> {

relays/bin-substrate/src/bridges/rococo_wococo/rococo_headers_to_bridge_hub_wococo.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
use crate::cli::bridge::{CliBridgeBase, RelayToRelayHeadersCliBridge};
2020

2121
use async_trait::async_trait;
22-
use relay_substrate_client::{AccountKeyPairOf, Client, ClientT};
22+
use relay_substrate_client::{AccountKeyPairOf, Client};
2323
use substrate_relay_helper::{
2424
finality::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalitySyncPipeline},
2525
TransactionParams,
@@ -45,7 +45,7 @@ impl SubstrateFinalitySyncPipeline for RococoFinalityToBridgeHubWococo {
4545
type SubmitFinalityProofCallBuilder = RococoFinalityToBridgeHubWococoCallBuilder;
4646

4747
async fn start_relay_guards(
48-
target_client: &Client<Self::TargetChain>,
48+
target_client: &impl Client<Self::TargetChain>,
4949
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
5050
enable_version_guard: bool,
5151
) -> relay_substrate_client::Result<()> {

relays/bin-substrate/src/bridges/rococo_wococo/wococo_headers_to_bridge_hub_rococo.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
use crate::cli::bridge::{CliBridgeBase, RelayToRelayHeadersCliBridge};
2020

2121
use async_trait::async_trait;
22-
use relay_substrate_client::{AccountKeyPairOf, Client, ClientT};
22+
use relay_substrate_client::{AccountKeyPairOf, Client};
2323
use substrate_relay_helper::{
2424
finality::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalitySyncPipeline},
2525
TransactionParams,
@@ -45,7 +45,7 @@ impl SubstrateFinalitySyncPipeline for WococoFinalityToBridgeHubRococo {
4545
type SubmitFinalityProofCallBuilder = WococoFinalityToBridgeHubRococoCallBuilder;
4646

4747
async fn start_relay_guards(
48-
target_client: &Client<Self::TargetChain>,
48+
target_client: &impl Client<Self::TargetChain>,
4949
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
5050
enable_version_guard: bool,
5151
) -> relay_substrate_client::Result<()> {

relays/bin-substrate/src/cli/chain_schema.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ macro_rules! declare_chain_connection_params_cli_schema {
111111
#[allow(dead_code)]
112112
pub async fn into_client<Chain: CliChain>(
113113
self,
114-
) -> anyhow::Result<relay_substrate_client::Client<Chain>> {
114+
) -> anyhow::Result<$crate::cli::DefaultClient<Chain>> {
115115
let chain_runtime_version = self
116116
.[<$chain_prefix _runtime_version>]
117117
.into_runtime_version(Chain::RUNTIME_VERSION)?;

relays/bin-substrate/src/cli/mod.rs

+5
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ mod resubmit_transactions;
4646
/// The target that will be used when publishing logs related to this pallet.
4747
pub const LOG_TARGET: &str = "bridge";
4848

49+
/// Default Substrate client type that we are using. We'll use it all over the glue CLI code
50+
/// to avoid multiple level generic arguments and constraints. We still allow usage of other
51+
/// clients in the **core logic code**.
52+
pub type DefaultClient<C> = relay_substrate_client::RpcWithCachingClient<C>;
53+
4954
/// Parse relay CLI args.
5055
pub fn parse_args() -> Command {
5156
Command::from_args()

relays/bin-substrate/src/cli/register_parachain.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use polkadot_runtime_common::{
2626
paras_registrar::Call as ParaRegistrarCall, slots::Call as ParaSlotsCall,
2727
};
2828
use polkadot_runtime_parachains::paras::ParaLifecycle;
29-
use relay_substrate_client::{AccountIdOf, CallOf, Chain, Client, ClientT, UnsignedTransaction};
29+
use relay_substrate_client::{AccountIdOf, CallOf, Chain, Client, UnsignedTransaction};
3030
use relay_utils::{TrackedTransactionStatus, TransactionTracker};
3131
use rialto_runtime::SudoCall;
3232
use sp_core::{
@@ -230,7 +230,7 @@ impl RegisterParachain {
230230

231231
/// Wait until parachain state is changed.
232232
async fn wait_para_state<Relaychain: Chain>(
233-
relay_client: &Client<Relaychain>,
233+
relay_client: &impl Client<Relaychain>,
234234
para_state_key: &[u8],
235235
from_states: &[ParaLifecycle],
236236
to_state: ParaLifecycle,

relays/bin-substrate/src/cli/relay_headers.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use crate::bridges::{
3636
},
3737
westend_millau::westend_headers_to_millau::WestendToMillauCliBridge,
3838
};
39-
use relay_substrate_client::ClientT;
39+
use relay_substrate_client::Client;
4040
use relay_utils::metrics::{GlobalMetrics, StandaloneMetric};
4141
use substrate_relay_helper::finality::SubstrateFinalitySyncPipeline;
4242

relays/bin-substrate/src/cli/relay_headers_and_messages/mod.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,15 @@ use crate::{
6464
},
6565
chain_schema::*,
6666
relay_headers_and_messages::parachain_to_parachain::ParachainToParachainBridge,
67-
CliChain, HexLaneId, PrometheusParams,
67+
CliChain, DefaultClient, HexLaneId, PrometheusParams,
6868
},
6969
declare_chain_cli_schema,
7070
};
7171
use bp_messages::LaneId;
7272
use bp_runtime::BalanceOf;
7373
use relay_substrate_client::{
7474
AccountIdOf, AccountKeyPairOf, Chain, ChainWithBalances, ChainWithMessages,
75-
ChainWithTransactions, Client, Parachain,
75+
ChainWithTransactions, Parachain,
7676
};
7777
use relay_utils::metrics::MetricsParams;
7878
use sp_core::Pair;
@@ -130,7 +130,7 @@ impl<Left: ChainWithTransactions + CliChain, Right: ChainWithTransactions + CliC
130130
/// Parameters that are associated with one side of the bridge.
131131
pub struct BridgeEndCommonParams<Chain: ChainWithTransactions + CliChain> {
132132
/// Chain client.
133-
pub client: Client<Chain>,
133+
pub client: DefaultClient<Chain>,
134134
/// Transactions signer.
135135
pub sign: AccountKeyPairOf<Chain>,
136136
/// Transactions mortality.
@@ -178,7 +178,7 @@ where
178178
source_to_target_headers_relay: Arc<dyn OnDemandRelay<Source, Target>>,
179179
target_to_source_headers_relay: Arc<dyn OnDemandRelay<Target, Source>>,
180180
lane_id: LaneId,
181-
) -> MessagesRelayParams<Bridge::MessagesLane> {
181+
) -> MessagesRelayParams<Bridge::MessagesLane, DefaultClient<Source>, DefaultClient<Target>> {
182182
MessagesRelayParams {
183183
source_client: self.source.client.clone(),
184184
source_transaction_params: TransactionParams {
@@ -374,6 +374,8 @@ where
374374
for lane in lanes {
375375
let left_to_right_messages = substrate_relay_helper::messages_lane::run::<
376376
<Self::L2R as MessagesCliBridge>::MessagesLane,
377+
_,
378+
_,
377379
>(self.left_to_right().messages_relay_params(
378380
left_to_right_on_demand_headers.clone(),
379381
right_to_left_on_demand_headers.clone(),
@@ -385,6 +387,8 @@ where
385387

386388
let right_to_left_messages = substrate_relay_helper::messages_lane::run::<
387389
<Self::R2L as MessagesCliBridge>::MessagesLane,
390+
_,
391+
_,
388392
>(self.right_to_left().messages_relay_params(
389393
right_to_left_on_demand_headers.clone(),
390394
left_to_right_on_demand_headers.clone(),

relays/bin-substrate/src/cli/relay_headers_and_messages/parachain_to_parachain.rs

+30-20
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ use std::sync::Arc;
2020
use crate::cli::{
2121
bridge::{CliBridgeBase, MessagesCliBridge, ParachainToRelayHeadersCliBridge},
2222
relay_headers_and_messages::{Full2WayBridgeBase, Full2WayBridgeCommonParams},
23-
CliChain,
23+
CliChain, DefaultClient,
2424
};
2525
use bp_polkadot_core::parachains::ParaHash;
2626
use pallet_bridge_parachains::{RelayBlockHash, RelayBlockHasher, RelayBlockNumber};
2727
use relay_substrate_client::{
28-
AccountIdOf, AccountKeyPairOf, Chain, ChainWithTransactions, Client, ClientT, Parachain,
28+
AccountIdOf, AccountKeyPairOf, Chain, ChainWithTransactions, Client, Parachain,
2929
};
3030
use sp_core::Pair;
3131
use substrate_relay_helper::{
@@ -51,9 +51,9 @@ pub struct ParachainToParachainBridge<
5151
pub common:
5252
Full2WayBridgeCommonParams<<R2L as CliBridgeBase>::Target, <L2R as CliBridgeBase>::Target>,
5353
/// Client of the left relay chain.
54-
pub left_relay: Client<<L2R as ParachainToRelayHeadersCliBridge>::SourceRelay>,
54+
pub left_relay: DefaultClient<<L2R as ParachainToRelayHeadersCliBridge>::SourceRelay>,
5555
/// Client of the right relay chain.
56-
pub right_relay: Client<<R2L as ParachainToRelayHeadersCliBridge>::SourceRelay>,
56+
pub right_relay: DefaultClient<<R2L as ParachainToRelayHeadersCliBridge>::SourceRelay>,
5757

5858
/// Override for right_relay->left headers signer.
5959
pub right_headers_to_left_transaction_params:
@@ -233,25 +233,33 @@ where
233233
)
234234
.await?;
235235

236-
let left_relay_to_right_on_demand_headers =
237-
OnDemandHeadersRelay::<<L2R as ParachainToRelayHeadersCliBridge>::RelayFinality>::new(
238-
self.left_relay.clone(),
239-
self.common.right.client.clone(),
240-
self.left_headers_to_right_transaction_params.clone(),
241-
self.common.shared.only_mandatory_headers,
242-
Some(self.common.metrics_params.clone()),
243-
);
244-
let right_relay_to_left_on_demand_headers =
245-
OnDemandHeadersRelay::<<R2L as ParachainToRelayHeadersCliBridge>::RelayFinality>::new(
246-
self.right_relay.clone(),
247-
self.common.left.client.clone(),
248-
self.right_headers_to_left_transaction_params.clone(),
249-
self.common.shared.only_mandatory_headers,
250-
Some(self.common.metrics_params.clone()),
251-
);
236+
let left_relay_to_right_on_demand_headers = OnDemandHeadersRelay::<
237+
<L2R as ParachainToRelayHeadersCliBridge>::RelayFinality,
238+
_,
239+
_,
240+
>::new(
241+
self.left_relay.clone(),
242+
self.common.right.client.clone(),
243+
self.left_headers_to_right_transaction_params.clone(),
244+
self.common.shared.only_mandatory_headers,
245+
Some(self.common.metrics_params.clone()),
246+
);
247+
let right_relay_to_left_on_demand_headers = OnDemandHeadersRelay::<
248+
<R2L as ParachainToRelayHeadersCliBridge>::RelayFinality,
249+
_,
250+
_,
251+
>::new(
252+
self.right_relay.clone(),
253+
self.common.left.client.clone(),
254+
self.right_headers_to_left_transaction_params.clone(),
255+
self.common.shared.only_mandatory_headers,
256+
Some(self.common.metrics_params.clone()),
257+
);
252258

253259
let left_to_right_on_demand_parachains = OnDemandParachainsRelay::<
254260
<L2R as ParachainToRelayHeadersCliBridge>::ParachainFinality,
261+
_,
262+
_,
255263
>::new(
256264
self.left_relay.clone(),
257265
self.common.right.client.clone(),
@@ -260,6 +268,8 @@ where
260268
);
261269
let right_to_left_on_demand_parachains = OnDemandParachainsRelay::<
262270
<R2L as ParachainToRelayHeadersCliBridge>::ParachainFinality,
271+
_,
272+
_,
263273
>::new(
264274
self.right_relay.clone(),
265275
self.common.left.client.clone(),

relays/bin-substrate/src/cli/relay_headers_and_messages/relay_to_parachain.rs

+17-12
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ use crate::cli::{
2323
RelayToRelayHeadersCliBridge,
2424
},
2525
relay_headers_and_messages::{Full2WayBridgeBase, Full2WayBridgeCommonParams},
26-
CliChain,
26+
CliChain, DefaultClient,
2727
};
2828
use bp_polkadot_core::parachains::ParaHash;
2929
use pallet_bridge_parachains::{RelayBlockHash, RelayBlockHasher, RelayBlockNumber};
3030
use relay_substrate_client::{
31-
AccountIdOf, AccountKeyPairOf, Chain, ChainWithTransactions, Client, ClientT, Parachain,
31+
AccountIdOf, AccountKeyPairOf, Chain, ChainWithTransactions, Client, Parachain,
3232
};
3333
use sp_core::Pair;
3434
use substrate_relay_helper::{
@@ -53,7 +53,7 @@ pub struct RelayToParachainBridge<
5353
pub common:
5454
Full2WayBridgeCommonParams<<R2L as CliBridgeBase>::Target, <L2R as CliBridgeBase>::Target>,
5555
/// Client of the right relay chain.
56-
pub right_relay: Client<<R2L as ParachainToRelayHeadersCliBridge>::SourceRelay>,
56+
pub right_relay: DefaultClient<<R2L as ParachainToRelayHeadersCliBridge>::SourceRelay>,
5757

5858
/// Override for right_relay->left headers signer.
5959
pub right_headers_to_left_transaction_params:
@@ -216,23 +216,28 @@ where
216216
.await?;
217217

218218
let left_to_right_on_demand_headers =
219-
OnDemandHeadersRelay::<<L2R as RelayToRelayHeadersCliBridge>::Finality>::new(
219+
OnDemandHeadersRelay::<<L2R as RelayToRelayHeadersCliBridge>::Finality, _, _>::new(
220220
self.common.left.client.clone(),
221221
self.common.right.client.clone(),
222222
self.left_headers_to_right_transaction_params.clone(),
223223
self.common.shared.only_mandatory_headers,
224224
None,
225225
);
226-
let right_relay_to_left_on_demand_headers =
227-
OnDemandHeadersRelay::<<R2L as ParachainToRelayHeadersCliBridge>::RelayFinality>::new(
228-
self.right_relay.clone(),
229-
self.common.left.client.clone(),
230-
self.right_headers_to_left_transaction_params.clone(),
231-
self.common.shared.only_mandatory_headers,
232-
Some(self.common.metrics_params.clone()),
233-
);
226+
let right_relay_to_left_on_demand_headers = OnDemandHeadersRelay::<
227+
<R2L as ParachainToRelayHeadersCliBridge>::RelayFinality,
228+
_,
229+
_,
230+
>::new(
231+
self.right_relay.clone(),
232+
self.common.left.client.clone(),
233+
self.right_headers_to_left_transaction_params.clone(),
234+
self.common.shared.only_mandatory_headers,
235+
Some(self.common.metrics_params.clone()),
236+
);
234237
let right_to_left_on_demand_parachains = OnDemandParachainsRelay::<
235238
<R2L as ParachainToRelayHeadersCliBridge>::ParachainFinality,
239+
_,
240+
_,
236241
>::new(
237242
self.right_relay.clone(),
238243
self.common.left.client.clone(),

relays/bin-substrate/src/cli/relay_headers_and_messages/relay_to_relay.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use crate::cli::{
2222
relay_headers_and_messages::{Full2WayBridgeBase, Full2WayBridgeCommonParams},
2323
CliChain,
2424
};
25-
use relay_substrate_client::{AccountIdOf, AccountKeyPairOf, ChainWithTransactions, ClientT};
25+
use relay_substrate_client::{AccountIdOf, AccountKeyPairOf, ChainWithTransactions, Client};
2626
use sp_core::Pair;
2727
use substrate_relay_helper::{
2828
finality::SubstrateFinalitySyncPipeline,
@@ -168,15 +168,15 @@ where
168168
.await?;
169169

170170
let left_to_right_on_demand_headers =
171-
OnDemandHeadersRelay::<<L2R as RelayToRelayHeadersCliBridge>::Finality>::new(
171+
OnDemandHeadersRelay::<<L2R as RelayToRelayHeadersCliBridge>::Finality, _, _>::new(
172172
self.common.left.client.clone(),
173173
self.common.right.client.clone(),
174174
self.left_to_right_transaction_params.clone(),
175175
self.common.shared.only_mandatory_headers,
176176
None,
177177
);
178178
let right_to_left_on_demand_headers =
179-
OnDemandHeadersRelay::<<R2L as RelayToRelayHeadersCliBridge>::Finality>::new(
179+
OnDemandHeadersRelay::<<R2L as RelayToRelayHeadersCliBridge>::Finality, _, _>::new(
180180
self.common.right.client.clone(),
181181
self.common.left.client.clone(),
182182
self.right_to_left_transaction_params.clone(),

relays/bin-substrate/src/cli/relay_messages.rs

+17-15
Original file line numberDiff line numberDiff line change
@@ -79,22 +79,24 @@ where
7979
let target_sign = data.target_sign.to_keypair::<Self::Target>()?;
8080
let target_transactions_mortality = data.target_sign.transactions_mortality()?;
8181

82-
substrate_relay_helper::messages_lane::run::<Self::MessagesLane>(MessagesRelayParams {
83-
source_client,
84-
source_transaction_params: TransactionParams {
85-
signer: source_sign,
86-
mortality: source_transactions_mortality,
82+
substrate_relay_helper::messages_lane::run::<Self::MessagesLane, _, _>(
83+
MessagesRelayParams {
84+
source_client,
85+
source_transaction_params: TransactionParams {
86+
signer: source_sign,
87+
mortality: source_transactions_mortality,
88+
},
89+
target_client,
90+
target_transaction_params: TransactionParams {
91+
signer: target_sign,
92+
mortality: target_transactions_mortality,
93+
},
94+
source_to_target_headers_relay: None,
95+
target_to_source_headers_relay: None,
96+
lane_id: data.lane.into(),
97+
metrics_params: data.prometheus_params.into_metrics_params()?,
8798
},
88-
target_client,
89-
target_transaction_params: TransactionParams {
90-
signer: target_sign,
91-
mortality: target_transactions_mortality,
92-
},
93-
source_to_target_headers_relay: None,
94-
target_to_source_headers_relay: None,
95-
lane_id: data.lane.into(),
96-
metrics_params: data.prometheus_params.into_metrics_params()?,
97-
})
99+
)
98100
.await
99101
.map_err(|e| anyhow::format_err!("{}", e))
100102
}

0 commit comments

Comments
 (0)