Skip to content

Commit ba2b0b0

Browse files
svyatonikbkchr
authored andcommitted
Mortal conversion rate updater transactions (#1257)
* merge all similar update_conversion_rate functions * stall timeout in conversion rate update loop * fmt * fix
1 parent 2bf5b23 commit ba2b0b0

File tree

9 files changed

+280
-244
lines changed

9 files changed

+280
-244
lines changed

bridges/relays/bin-substrate/src/chains/kusama_messages_to_polkadot.rs

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,11 @@
1616

1717
//! Kusama-to-Polkadot messages sync entrypoint.
1818
19-
use codec::Encode;
2019
use frame_support::weights::Weight;
21-
use sp_core::{Bytes, Pair};
2220

2321
use messages_relay::relay_strategy::MixStrategy;
2422
use relay_kusama_client::Kusama;
2523
use relay_polkadot_client::Polkadot;
26-
use relay_substrate_client::{Client, SignParam, TransactionSignScheme, UnsignedTransaction};
2724
use substrate_relay_helper::messages_lane::SubstrateMessageLane;
2825

2926
/// Description of Kusama -> Polkadot messages bridge.
@@ -41,6 +38,13 @@ substrate_relay_helper::generate_mocked_receive_message_delivery_proof_call_buil
4138
relay_kusama_client::runtime::Call::BridgePolkadotMessages,
4239
relay_kusama_client::runtime::BridgePolkadotMessagesCall::receive_messages_delivery_proof
4340
);
41+
substrate_relay_helper::generate_mocked_update_conversion_rate_call_builder!(
42+
Kusama,
43+
KusamaMessagesToPolkadotUpdateConversionRateCallBuilder,
44+
relay_kusama_client::runtime::Call::BridgePolkadotMessages,
45+
relay_kusama_client::runtime::BridgePolkadotMessagesCall::update_pallet_parameter,
46+
relay_kusama_client::runtime::BridgePolkadotMessagesParameter::PolkadotToKusamaConversionRate
47+
);
4448

4549
impl SubstrateMessageLane for KusamaMessagesToPolkadot {
4650
const SOURCE_TO_TARGET_CONVERSION_RATE_PARAMETER_NAME: Option<&'static str> =
@@ -68,42 +72,8 @@ impl SubstrateMessageLane for KusamaMessagesToPolkadot {
6872
type ReceiveMessagesDeliveryProofCallBuilder =
6973
KusamaMessagesToPolkadotReceiveMessagesDeliveryProofCallBuilder;
7074

71-
type RelayStrategy = MixStrategy;
72-
}
75+
type TargetToSourceChainConversionRateUpdateBuilder =
76+
KusamaMessagesToPolkadotUpdateConversionRateCallBuilder;
7377

74-
/// Update Polkadot -> Kusama conversion rate, stored in Kusama runtime storage.
75-
pub(crate) async fn update_polkadot_to_kusama_conversion_rate(
76-
client: Client<Kusama>,
77-
signer: <Kusama as TransactionSignScheme>::AccountKeyPair,
78-
updated_rate: f64,
79-
) -> anyhow::Result<()> {
80-
let genesis_hash = *client.genesis_hash();
81-
let signer_id = (*signer.public().as_array_ref()).into();
82-
let (spec_version, transaction_version) = client.simple_runtime_version().await?;
83-
client
84-
.submit_signed_extrinsic(signer_id, move |_, transaction_nonce| {
85-
Ok(Bytes(
86-
Kusama::sign_transaction(SignParam {
87-
spec_version,
88-
transaction_version,
89-
genesis_hash,
90-
signer,
91-
era: relay_substrate_client::TransactionEra::immortal(),
92-
unsigned: UnsignedTransaction::new(
93-
relay_kusama_client::runtime::Call::BridgePolkadotMessages(
94-
relay_kusama_client::runtime::BridgePolkadotMessagesCall::update_pallet_parameter(
95-
relay_kusama_client::runtime::BridgePolkadotMessagesParameter::PolkadotToKusamaConversionRate(
96-
sp_runtime::FixedU128::from_float(updated_rate),
97-
)
98-
)
99-
).into(),
100-
transaction_nonce,
101-
),
102-
})?
103-
.encode(),
104-
))
105-
})
106-
.await
107-
.map(drop)
108-
.map_err(|err| anyhow::format_err!("{:?}", err))
78+
type RelayStrategy = MixStrategy;
10979
}

bridges/relays/bin-substrate/src/chains/millau_messages_to_rialto.rs

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,9 @@
1616

1717
//! Millau-to-Rialto messages sync entrypoint.
1818
19-
use codec::Encode;
20-
use sp_core::{Bytes, Pair};
21-
2219
use messages_relay::relay_strategy::MixStrategy;
2320
use relay_millau_client::Millau;
2421
use relay_rialto_client::Rialto;
25-
use relay_substrate_client::{Client, SignParam, TransactionSignScheme, UnsignedTransaction};
2622
use substrate_relay_helper::messages_lane::{
2723
DirectReceiveMessagesDeliveryProofCallBuilder, DirectReceiveMessagesProofCallBuilder,
2824
SubstrateMessageLane,
@@ -31,6 +27,13 @@ use substrate_relay_helper::messages_lane::{
3127
/// Description of Millau -> Rialto messages bridge.
3228
#[derive(Clone, Debug)]
3329
pub struct MillauMessagesToRialto;
30+
substrate_relay_helper::generate_direct_update_conversion_rate_call_builder!(
31+
Millau,
32+
MillauMessagesToRialtoUpdateConversionRateCallBuilder,
33+
millau_runtime::Runtime,
34+
millau_runtime::WithRialtoMessagesInstance,
35+
millau_runtime::rialto_messages::MillauToRialtoMessagesParameter::RialtoToMillauConversionRate
36+
);
3437

3538
impl SubstrateMessageLane for MillauMessagesToRialto {
3639
const SOURCE_TO_TARGET_CONVERSION_RATE_PARAMETER_NAME: Option<&'static str> =
@@ -60,40 +63,8 @@ impl SubstrateMessageLane for MillauMessagesToRialto {
6063
millau_runtime::WithRialtoMessagesInstance,
6164
>;
6265

63-
type RelayStrategy = MixStrategy;
64-
}
66+
type TargetToSourceChainConversionRateUpdateBuilder =
67+
MillauMessagesToRialtoUpdateConversionRateCallBuilder;
6568

66-
/// Update Rialto -> Millau conversion rate, stored in Millau runtime storage.
67-
pub(crate) async fn update_rialto_to_millau_conversion_rate(
68-
client: Client<Millau>,
69-
signer: <Millau as TransactionSignScheme>::AccountKeyPair,
70-
updated_rate: f64,
71-
) -> anyhow::Result<()> {
72-
let genesis_hash = *client.genesis_hash();
73-
let signer_id = (*signer.public().as_array_ref()).into();
74-
let (spec_version, transaction_version) = client.simple_runtime_version().await?;
75-
client
76-
.submit_signed_extrinsic(signer_id, move |_, transaction_nonce| {
77-
Ok(Bytes(
78-
Millau::sign_transaction(SignParam {
79-
spec_version,
80-
transaction_version,
81-
genesis_hash,
82-
signer,
83-
era: relay_substrate_client::TransactionEra::immortal(),
84-
unsigned: UnsignedTransaction::new(
85-
millau_runtime::Call::from(millau_runtime::MessagesCall::update_pallet_parameter {
86-
parameter: millau_runtime::rialto_messages::MillauToRialtoMessagesParameter::RialtoToMillauConversionRate(
87-
sp_runtime::FixedU128::from_float(updated_rate),
88-
),
89-
}).into(),
90-
transaction_nonce,
91-
),
92-
})?
93-
.encode(),
94-
))
95-
})
96-
.await
97-
.map(drop)
98-
.map_err(|err| anyhow::format_err!("{:?}", err))
69+
type RelayStrategy = MixStrategy;
9970
}

bridges/relays/bin-substrate/src/chains/polkadot_messages_to_kusama.rs

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,10 @@
1616

1717
//! Polkadot-to-Kusama messages sync entrypoint.
1818
19-
use codec::Encode;
20-
use sp_core::{Bytes, Pair};
21-
2219
use frame_support::weights::Weight;
2320
use messages_relay::relay_strategy::MixStrategy;
2421
use relay_kusama_client::Kusama;
2522
use relay_polkadot_client::Polkadot;
26-
use relay_substrate_client::{Client, SignParam, TransactionSignScheme, UnsignedTransaction};
2723
use substrate_relay_helper::messages_lane::SubstrateMessageLane;
2824

2925
/// Description of Polkadot -> Kusama messages bridge.
@@ -41,6 +37,13 @@ substrate_relay_helper::generate_mocked_receive_message_delivery_proof_call_buil
4137
relay_polkadot_client::runtime::Call::BridgeKusamaMessages,
4238
relay_polkadot_client::runtime::BridgeKusamaMessagesCall::receive_messages_delivery_proof
4339
);
40+
substrate_relay_helper::generate_mocked_update_conversion_rate_call_builder!(
41+
Polkadot,
42+
PolkadotMessagesToKusamaUpdateConversionRateCallBuilder,
43+
relay_polkadot_client::runtime::Call::BridgeKusamaMessages,
44+
relay_polkadot_client::runtime::BridgeKusamaMessagesCall::update_pallet_parameter,
45+
relay_polkadot_client::runtime::BridgeKusamaMessagesParameter::KusamaToPolkadotConversionRate
46+
);
4447

4548
impl SubstrateMessageLane for PolkadotMessagesToKusama {
4649
const SOURCE_TO_TARGET_CONVERSION_RATE_PARAMETER_NAME: Option<&'static str> =
@@ -68,42 +71,8 @@ impl SubstrateMessageLane for PolkadotMessagesToKusama {
6871
type ReceiveMessagesDeliveryProofCallBuilder =
6972
PolkadotMessagesToKusamaReceiveMessagesDeliveryProofCallBuilder;
7073

71-
type RelayStrategy = MixStrategy;
72-
}
74+
type TargetToSourceChainConversionRateUpdateBuilder =
75+
PolkadotMessagesToKusamaUpdateConversionRateCallBuilder;
7376

74-
/// Update Kusama -> Polkadot conversion rate, stored in Polkadot runtime storage.
75-
pub(crate) async fn update_kusama_to_polkadot_conversion_rate(
76-
client: Client<Polkadot>,
77-
signer: <Polkadot as TransactionSignScheme>::AccountKeyPair,
78-
updated_rate: f64,
79-
) -> anyhow::Result<()> {
80-
let genesis_hash = *client.genesis_hash();
81-
let signer_id = (*signer.public().as_array_ref()).into();
82-
let (spec_version, transaction_version) = client.simple_runtime_version().await?;
83-
client
84-
.submit_signed_extrinsic(signer_id, move |_, transaction_nonce| {
85-
Ok(Bytes(
86-
Polkadot::sign_transaction(SignParam {
87-
spec_version,
88-
transaction_version,
89-
genesis_hash,
90-
signer,
91-
era: relay_substrate_client::TransactionEra::immortal(),
92-
unsigned: UnsignedTransaction::new(
93-
relay_polkadot_client::runtime::Call::BridgeKusamaMessages(
94-
relay_polkadot_client::runtime::BridgeKusamaMessagesCall::update_pallet_parameter(
95-
relay_polkadot_client::runtime::BridgeKusamaMessagesParameter::KusamaToPolkadotConversionRate(
96-
sp_runtime::FixedU128::from_float(updated_rate),
97-
)
98-
)
99-
).into(),
100-
transaction_nonce,
101-
)
102-
})?
103-
.encode(),
104-
))
105-
})
106-
.await
107-
.map(drop)
108-
.map_err(|err| anyhow::format_err!("{:?}", err))
77+
type RelayStrategy = MixStrategy;
10978
}

bridges/relays/bin-substrate/src/chains/rialto_messages_to_millau.rs

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,9 @@
1616

1717
//! Rialto-to-Millau messages sync entrypoint.
1818
19-
use codec::Encode;
20-
use sp_core::{Bytes, Pair};
21-
2219
use messages_relay::relay_strategy::MixStrategy;
2320
use relay_millau_client::Millau;
2421
use relay_rialto_client::Rialto;
25-
use relay_substrate_client::{Client, SignParam, TransactionSignScheme, UnsignedTransaction};
2622
use substrate_relay_helper::messages_lane::{
2723
DirectReceiveMessagesDeliveryProofCallBuilder, DirectReceiveMessagesProofCallBuilder,
2824
SubstrateMessageLane,
@@ -31,6 +27,13 @@ use substrate_relay_helper::messages_lane::{
3127
/// Description of Rialto -> Millau messages bridge.
3228
#[derive(Clone, Debug)]
3329
pub struct RialtoMessagesToMillau;
30+
substrate_relay_helper::generate_direct_update_conversion_rate_call_builder!(
31+
Rialto,
32+
RialtoMessagesToMillauUpdateConversionRateCallBuilder,
33+
rialto_runtime::Runtime,
34+
rialto_runtime::WithMillauMessagesInstance,
35+
rialto_runtime::millau_messages::RialtoToMillauMessagesParameter::MillauToRialtoConversionRate
36+
);
3437

3538
impl SubstrateMessageLane for RialtoMessagesToMillau {
3639
const SOURCE_TO_TARGET_CONVERSION_RATE_PARAMETER_NAME: Option<&'static str> =
@@ -60,40 +63,8 @@ impl SubstrateMessageLane for RialtoMessagesToMillau {
6063
rialto_runtime::WithMillauMessagesInstance,
6164
>;
6265

63-
type RelayStrategy = MixStrategy;
64-
}
66+
type TargetToSourceChainConversionRateUpdateBuilder =
67+
RialtoMessagesToMillauUpdateConversionRateCallBuilder;
6568

66-
/// Update Millau -> Rialto conversion rate, stored in Rialto runtime storage.
67-
pub(crate) async fn update_millau_to_rialto_conversion_rate(
68-
client: Client<Rialto>,
69-
signer: <Rialto as TransactionSignScheme>::AccountKeyPair,
70-
updated_rate: f64,
71-
) -> anyhow::Result<()> {
72-
let genesis_hash = *client.genesis_hash();
73-
let signer_id = (*signer.public().as_array_ref()).into();
74-
let (spec_version, transaction_version) = client.simple_runtime_version().await?;
75-
client
76-
.submit_signed_extrinsic(signer_id, move |_, transaction_nonce| {
77-
Ok(Bytes(
78-
Rialto::sign_transaction(SignParam {
79-
spec_version,
80-
transaction_version,
81-
genesis_hash,
82-
signer,
83-
era: relay_substrate_client::TransactionEra::immortal(),
84-
unsigned: UnsignedTransaction::new(
85-
rialto_runtime::Call::from(rialto_runtime::MessagesCall::update_pallet_parameter {
86-
parameter: rialto_runtime::millau_messages::RialtoToMillauMessagesParameter::MillauToRialtoConversionRate(
87-
sp_runtime::FixedU128::from_float(updated_rate),
88-
),
89-
}).into(),
90-
transaction_nonce,
91-
)
92-
})?
93-
.encode(),
94-
))
95-
})
96-
.await
97-
.map(drop)
98-
.map_err(|err| anyhow::format_err!("{:?}", err))
69+
type RelayStrategy = MixStrategy;
9970
}

bridges/relays/bin-substrate/src/chains/rococo_messages_to_wococo.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,7 @@ impl SubstrateMessageLane for RococoMessagesToWococo {
5757
type ReceiveMessagesDeliveryProofCallBuilder =
5858
RococoMessagesToWococoReceiveMessagesDeliveryProofCallBuilder;
5959

60+
type TargetToSourceChainConversionRateUpdateBuilder = ();
61+
6062
type RelayStrategy = MixStrategy;
6163
}

bridges/relays/bin-substrate/src/chains/wococo_messages_to_rococo.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,7 @@ impl SubstrateMessageLane for WococoMessagesToRococo {
5858
type ReceiveMessagesDeliveryProofCallBuilder =
5959
WococoMessagesToRococoReceiveMessagesDeliveryProofCallBuilder;
6060

61+
type TargetToSourceChainConversionRateUpdateBuilder = ();
62+
6163
type RelayStrategy = MixStrategy;
6264
}

0 commit comments

Comments
 (0)