mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 08:41:02 +00:00
* Impl SubstrateEquivocationDetectionPipeline for Millau * Impl SubstrateEquivocationDetectionPipeline for Rialto * Make BridgeHubSignedExtension more generic * Define generate_report_equivocation_call_builder!() macro * Impl SubstrateEquivocationDetectionPipeline for Rococo * Impl SubstrateEquivocationDetectionPipeline for Wococo * Impl SubstrateEquivocationDetectionPipeline for Kusama * Impl SubstrateEquivocationDetectionPipeline for Polkadot * Complex relayer simplification - remove `signer` and `transactions_mortality` and add `tx_params` - change the order of some fields * Add equivocation detection CLI traits * Complex relayer: start equivocation detectin loop * Update runtimes regeneration script * Equivocation loop: Fix infinite loop * Revert "Complex relayer: start equivocation detectin loop" This reverts commit b518ef85679d73654f9f0e2add38cd3839552057. * Add subcommand for starting the equivocation detection loop * Fixes * Initialize empty metrics for the equivocations detector loop
This commit is contained in:
committed by
Bastian Köcher
parent
588508acd4
commit
1bbc77fee1
@@ -20,14 +20,19 @@
|
||||
mod source;
|
||||
mod target;
|
||||
|
||||
use crate::finality_base::{engine::Engine, SubstrateFinalityPipeline, SubstrateFinalityProof};
|
||||
use crate::{
|
||||
equivocation::{source::SubstrateEquivocationSource, target::SubstrateEquivocationTarget},
|
||||
finality_base::{engine::Engine, SubstrateFinalityPipeline, SubstrateFinalityProof},
|
||||
TransactionParams,
|
||||
};
|
||||
|
||||
use async_trait::async_trait;
|
||||
use bp_runtime::{AccountIdOf, BlockNumberOf, HashOf};
|
||||
use equivocation_detector::EquivocationDetectionPipeline;
|
||||
use finality_relay::FinalityPipeline;
|
||||
use pallet_grandpa::{Call as GrandpaCall, Config as GrandpaConfig};
|
||||
use relay_substrate_client::{AccountKeyPairOf, CallOf, Chain, ChainWithTransactions};
|
||||
use relay_substrate_client::{AccountKeyPairOf, CallOf, Chain, ChainWithTransactions, Client};
|
||||
use relay_utils::metrics::MetricsParams;
|
||||
use sp_core::Pair;
|
||||
use sp_runtime::traits::{Block, Header};
|
||||
use std::marker::PhantomData;
|
||||
@@ -70,13 +75,15 @@ type FinalityVerificationContextfOf<P> =
|
||||
<<P as SubstrateFinalityPipeline>::FinalityEngine as Engine<
|
||||
<P as SubstrateFinalityPipeline>::SourceChain,
|
||||
>>::FinalityVerificationContext;
|
||||
type EquivocationProofOf<P> = <<P as SubstrateFinalityPipeline>::FinalityEngine as Engine<
|
||||
/// The type of the equivocation proof used by the `SubstrateEquivocationDetectionPipeline`
|
||||
pub type EquivocationProofOf<P> = <<P as SubstrateFinalityPipeline>::FinalityEngine as Engine<
|
||||
<P as SubstrateFinalityPipeline>::SourceChain,
|
||||
>>::EquivocationProof;
|
||||
type EquivocationsFinderOf<P> = <<P as SubstrateFinalityPipeline>::FinalityEngine as Engine<
|
||||
<P as SubstrateFinalityPipeline>::SourceChain,
|
||||
>>::EquivocationsFinder;
|
||||
type KeyOwnerProofOf<P> = <<P as SubstrateFinalityPipeline>::FinalityEngine as Engine<
|
||||
/// The type of the key owner proof used by the `SubstrateEquivocationDetectionPipeline`
|
||||
pub type KeyOwnerProofOf<P> = <<P as SubstrateFinalityPipeline>::FinalityEngine as Engine<
|
||||
<P as SubstrateFinalityPipeline>::SourceChain,
|
||||
>>::KeyOwnerProof;
|
||||
|
||||
@@ -147,3 +154,56 @@ where
|
||||
.into()
|
||||
}
|
||||
}
|
||||
|
||||
/// Macro that generates `ReportEquivocationCallBuilder` implementation for the case where
|
||||
/// we only have access to the mocked version of the source chain runtime.
|
||||
#[rustfmt::skip]
|
||||
#[macro_export]
|
||||
macro_rules! generate_report_equivocation_call_builder {
|
||||
($pipeline:ident, $mocked_builder:ident, $grandpa:path, $report_equivocation:path) => {
|
||||
pub struct $mocked_builder;
|
||||
|
||||
impl $crate::equivocation::ReportEquivocationCallBuilder<$pipeline>
|
||||
for $mocked_builder
|
||||
{
|
||||
fn build_report_equivocation_call(
|
||||
equivocation_proof: $crate::equivocation::EquivocationProofOf<$pipeline>,
|
||||
key_owner_proof: $crate::equivocation::KeyOwnerProofOf<$pipeline>,
|
||||
) -> relay_substrate_client::CallOf<
|
||||
<$pipeline as $crate::finality_base::SubstrateFinalityPipeline>::SourceChain
|
||||
> {
|
||||
bp_runtime::paste::item! {
|
||||
$grandpa($report_equivocation {
|
||||
equivocation_proof: Box::new(equivocation_proof),
|
||||
key_owner_proof: key_owner_proof
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// Run Substrate-to-Substrate equivocations detection loop.
|
||||
pub async fn run<P: SubstrateEquivocationDetectionPipeline>(
|
||||
source_client: Client<P::SourceChain>,
|
||||
target_client: Client<P::TargetChain>,
|
||||
source_transaction_params: TransactionParams<AccountKeyPairOf<P::SourceChain>>,
|
||||
metrics_params: MetricsParams,
|
||||
) -> anyhow::Result<()> {
|
||||
log::info!(
|
||||
target: "bridge",
|
||||
"Starting {} -> {} equivocations detection loop",
|
||||
P::SourceChain::NAME,
|
||||
P::TargetChain::NAME,
|
||||
);
|
||||
|
||||
equivocation_detector::run(
|
||||
SubstrateEquivocationSource::<P>::new(source_client, source_transaction_params),
|
||||
SubstrateEquivocationTarget::<P>::new(target_client),
|
||||
P::TargetChain::AVERAGE_BLOCK_INTERVAL,
|
||||
metrics_params,
|
||||
futures::future::pending(),
|
||||
)
|
||||
.await
|
||||
.map_err(|e| anyhow::format_err!("{}", e))
|
||||
}
|
||||
|
||||
@@ -40,7 +40,15 @@ pub struct SubstrateEquivocationSource<P: SubstrateEquivocationDetectionPipeline
|
||||
transaction_params: TransactionParams<AccountKeyPairOf<P::SourceChain>>,
|
||||
}
|
||||
|
||||
impl<P: SubstrateEquivocationDetectionPipeline> SubstrateEquivocationSource<P> {}
|
||||
impl<P: SubstrateEquivocationDetectionPipeline> SubstrateEquivocationSource<P> {
|
||||
/// Create new instance of `SubstrateEquivocationSource`.
|
||||
pub fn new(
|
||||
client: Client<P::SourceChain>,
|
||||
transaction_params: TransactionParams<AccountKeyPairOf<P::SourceChain>>,
|
||||
) -> Self {
|
||||
Self { client, transaction_params }
|
||||
}
|
||||
}
|
||||
|
||||
impl<P: SubstrateEquivocationDetectionPipeline> Clone for SubstrateEquivocationSource<P> {
|
||||
fn clone(&self) -> Self {
|
||||
|
||||
@@ -40,7 +40,12 @@ pub struct SubstrateEquivocationTarget<P: SubstrateEquivocationDetectionPipeline
|
||||
_phantom: PhantomData<P>,
|
||||
}
|
||||
|
||||
impl<P: SubstrateEquivocationDetectionPipeline> SubstrateEquivocationTarget<P> {}
|
||||
impl<P: SubstrateEquivocationDetectionPipeline> SubstrateEquivocationTarget<P> {
|
||||
/// Create new instance of `SubstrateEquivocationTarget`.
|
||||
pub fn new(client: Client<P::TargetChain>) -> Self {
|
||||
Self { client, _phantom: Default::default() }
|
||||
}
|
||||
}
|
||||
|
||||
impl<P: SubstrateEquivocationDetectionPipeline> Clone for SubstrateEquivocationTarget<P> {
|
||||
fn clone(&self) -> Self {
|
||||
|
||||
Reference in New Issue
Block a user