Fix multiple parachain headers submission for single message delivery (#1916)

* switch off parachains relay when we don't need to relay parachains (temp solution)

* parachains relay now only works with single parachain

* fix usages of parachains relay

* revert hacky fix

* fixes

* fixed Westmint parachain ID

* fixed metrics

* fixed compilation

* fmt

* clippy

* call -> typed_state_call
This commit is contained in:
Svyatoslav Nikolsky
2023-03-01 13:26:13 +03:00
committed by Bastian Köcher
parent ba155f990f
commit e7f5560951
17 changed files with 418 additions and 801 deletions
-1
View File
@@ -14,7 +14,6 @@ relay-utils = { path = "../utils" }
# Bridge dependencies
bp-parachains = { path = "../../primitives/parachains" }
bp-polkadot-core = { path = "../../primitives/polkadot-core" }
relay-substrate-client = { path = "../client-substrate" }
+4 -2
View File
@@ -16,7 +16,7 @@
use std::fmt::Debug;
use relay_substrate_client::Chain;
use relay_substrate_client::{Chain, Parachain};
pub mod parachains_loop;
pub mod parachains_loop_metrics;
@@ -24,7 +24,9 @@ pub mod parachains_loop_metrics;
/// Finality proofs synchronization pipeline.
pub trait ParachainsPipeline: 'static + Clone + Debug + Send + Sync {
/// Relay chain which is storing parachain heads in its `paras` module.
type SourceChain: Chain;
type SourceRelayChain: Chain;
/// Parachain which headers we are syncing here.
type SourceParachain: Parachain;
/// Target chain (either relay or para) which wants to know about new parachain heads.
type TargetChain: Chain;
}
File diff suppressed because it is too large Load Diff
@@ -16,7 +16,7 @@
use bp_polkadot_core::parachains::ParaId;
use relay_utils::{
metrics::{metric_name, register, GaugeVec, Metric, Opts, PrometheusError, Registry, U64},
metrics::{metric_name, register, Gauge, Metric, PrometheusError, Registry, U64},
UniqueSaturatedInto,
};
@@ -24,28 +24,22 @@ use relay_utils::{
#[derive(Clone)]
pub struct ParachainsLoopMetrics {
/// Best parachains header numbers at the source.
best_source_block_numbers: GaugeVec<U64>,
best_source_block_numbers: Gauge<U64>,
/// Best parachains header numbers at the target.
best_target_block_numbers: GaugeVec<U64>,
best_target_block_numbers: Gauge<U64>,
}
impl ParachainsLoopMetrics {
/// Create and register parachains loop metrics.
pub fn new(prefix: Option<&str>) -> Result<Self, PrometheusError> {
Ok(ParachainsLoopMetrics {
best_source_block_numbers: GaugeVec::new(
Opts::new(
metric_name(prefix, "best_parachain_block_number_at_source"),
"Best parachain block numbers at the source relay chain".to_string(),
),
&["parachain"],
best_source_block_numbers: Gauge::new(
metric_name(prefix, "best_parachain_block_number_at_source"),
"Best parachain block numbers at the source relay chain".to_string(),
)?,
best_target_block_numbers: GaugeVec::new(
Opts::new(
metric_name(prefix, "best_parachain_block_number_at_target"),
"Best parachain block numbers at the target chain".to_string(),
),
&["parachain"],
best_target_block_numbers: Gauge::new(
metric_name(prefix, "best_parachain_block_number_at_target"),
"Best parachain block numbers at the target chain".to_string(),
)?,
})
}
@@ -57,14 +51,13 @@ impl ParachainsLoopMetrics {
block_number: Number,
) {
let block_number = block_number.unique_saturated_into();
let label = parachain_label(&parachain);
log::trace!(
target: "bridge-metrics",
"Updated value of metric 'best_parachain_block_number_at_source[{}]': {:?}",
label,
"Updated value of metric 'best_parachain_block_number_at_source[{:?}]': {:?}",
parachain,
block_number,
);
self.best_source_block_numbers.with_label_values(&[&label]).set(block_number);
self.best_source_block_numbers.set(block_number);
}
/// Update best block number at target.
@@ -74,14 +67,13 @@ impl ParachainsLoopMetrics {
block_number: Number,
) {
let block_number = block_number.unique_saturated_into();
let label = parachain_label(&parachain);
log::trace!(
target: "bridge-metrics",
"Updated value of metric 'best_parachain_block_number_at_target[{}]': {:?}",
label,
"Updated value of metric 'best_parachain_block_number_at_target[{:?}]': {:?}",
parachain,
block_number,
);
self.best_target_block_numbers.with_label_values(&[&label]).set(block_number);
self.best_target_block_numbers.set(block_number);
}
}
@@ -92,8 +84,3 @@ impl Metric for ParachainsLoopMetrics {
Ok(())
}
}
/// Return metric label for the parachain.
fn parachain_label(parachain: &ParaId) -> String {
format!("para_{}", parachain.0)
}