Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bridges V2 refactoring backport and pallet_bridge_messages simplifications #4935

Merged
merged 64 commits into from
Jul 12, 2024
Merged
Changes from 1 commit
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
bc0f814
Use compact proofs for messages delivery (#2155)
serban300 May 30, 2023
18b5b22
Moved FromBridgedChainMessagesDeliveryProof to bp-messages (#2169)
svyatonik Jun 1, 2023
379a600
Moved FromBridgedChainMessagesProof to bp-messages (#2170)
svyatonik Jun 1, 2023
7b5b01c
Separate folder for messages in relay lib (#2173)
svyatonik Jun 2, 2023
0278a54
Messages pallet benchmarks - cosmetics (#2175)
serban300 Jun 2, 2023
9197d85
Improve receive_messages_proof benchmarks accuracy (#2176)
serban300 Jun 5, 2023
7c46371
Moving messages code to pallet (#2180)
svyatonik Jun 5, 2023
acb15cc
use BridgedChain::Account instead of InbundRelayer (#2193)
svyatonik Jun 7, 2023
91d6f6b
Use compact proofs for parachains (#2194)
serban300 Jun 7, 2023
11cd08c
prune messages from confirmation tx, not from the on_idle (#2211)
svyatonik Jun 16, 2023
e5acef8
Fix maximal message dispatch weight (#2219)
svyatonik Jun 19, 2023
5303b2c
Box messages proof argument in receive_messages_proof call (#2222)
svyatonik Jun 20, 2023
6019c51
bump Substrate, Polkadot and Cumulus (#2223)
svyatonik Jun 21, 2023
4cbee73
Add test method for growing storage proof size (#2224)
serban300 Jun 21, 2023
1265806
fix some nightly errors (#2225)
svyatonik Jun 22, 2023
8a1d006
Renamings (#2226)
serban300 Jun 22, 2023
ccf2919
Fix clippy (#2240)
svyatonik Jul 4, 2023
37225c0
Some code grooming (#2276)
svyatonik Jul 17, 2023
f06c39f
Set `test-helpers` for `bp-runtime`
bkontur Jun 13, 2024
e2e7be3
Adjusted BH runtimes to the latest vogue
bkontur Jun 13, 2024
0325bdc
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jun 20, 2024
948e4ab
Removed unused `OtherBridgedChain` and `TargetClientBase`
bkontur Jun 26, 2024
b1b6ccf
zepter+taplo
bkontur Jun 26, 2024
096aca1
Revert wrong value + feature propagation
bkontur Jun 26, 2024
7e6b6b2
Getter for raw proof and fix features
bkontur Jun 27, 2024
c8a40ef
Added tests for macro compatibility with `pallet_bridge_messages` + fix
bkontur Jun 27, 2024
cdd1280
Updated new `substrate-relay` version `v2.0.0-rc1-compact-proof-ro-we…
bkontur Jun 27, 2024
bcf8050
Merge remote-tracking branch 'upstream/master' into bko-bridges-v2-co…
serban300 Jul 1, 2024
ded4e86
Revert compact-proofs-related changes (runtimes)
bkontur Jul 3, 2024
4c94e43
Remove compact proofs so they could be restored in different branch
bkontur Jul 3, 2024
94e977d
Make bridges relayer storage-proof-type agnostic
bkontur Jul 3, 2024
19f4011
Make bridges relayer storage-proof-type agnostic part 2
bkontur Jul 3, 2024
a367b49
Revert: `prune messages from confirmation tx, not from the on_idle (#…
bkontur Jul 3, 2024
6dbbb48
Fixes
bkontur Jul 3, 2024
3a149d9
nits
bkontur Jul 3, 2024
e4a1c5b
CI fixes
bkontur Jul 3, 2024
abd140f
more nits
bkontur Jul 3, 2024
685bcb4
fmt
bkontur Jul 3, 2024
cd6b1c7
Merge branch 'master' of https://github.com/paritytech/polkadot-sdk i…
Jul 3, 2024
2a3d5cc
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
39a5340
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
dcb550f
".git/.scripts/commands/bench/bench.sh" --subcommand=xcm --runtime=br…
Jul 3, 2024
45155b3
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
43dcfc0
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
27dfe41
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
25ed0da
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
387e624
".git/.scripts/commands/bench/bench.sh" --subcommand=xcm --runtime=br…
Jul 3, 2024
e2635b5
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
612cf2d
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
6047fa9
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
32d7455
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 3, 2024
233fb44
make check-crates job happy + prdoc nits
bkontur Jul 3, 2024
0f1c5ff
Adjust fees and prdoc
bkontur Jul 3, 2024
24b3a12
Merge remote-tracking branch 'origin/master' into bko-bridges-v2-back…
bkontur Jul 3, 2024
cf42701
macro nit + prdoc
bkontur Jul 4, 2024
5e4c70d
Merge remote-tracking branch 'origin/master' into bko-bridges-v2-back…
bkontur Jul 4, 2024
1ed7df7
Review comments
bkontur Jul 4, 2024
308ec4a
Nits
bkontur Jul 5, 2024
7c875be
[bridges] Prune messages from confirmation tx body, not from the on_i…
bkontur Jul 10, 2024
09a306f
Merge branch 'master' of https://github.com/paritytech/polkadot-sdk i…
Jul 11, 2024
1dc37bc
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 11, 2024
953e4bd
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Jul 11, 2024
397dd61
Revert "[bridges] Prune messages from confirmation tx body, not from …
bkontur Jul 11, 2024
b42bd1c
Merge branch 'master' into bko-bridges-v2-backport-refactoring
bkontur Jul 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Added tests for macro compatibility with pallet_bridge_messages + fix
bkontur committed Jun 27, 2024

Verified

This commit was signed with the committer’s verified signature.
bkontur Branislav Kontur
commit c8a40eff4b5fdea7efe58aa544b136df0bf02df4
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 2 additions & 9 deletions bridges/primitives/messages/src/lib.rs
Original file line number Diff line number Diff line change
@@ -21,8 +21,8 @@

use bp_header_chain::HeaderChainError;
use bp_runtime::{
messages::MessageDispatchResult, AccountIdOf, BasicOperatingMode, Chain, HashOf, OperatingMode,
RangeInclusiveExt, StorageProofError, UnderlyingChainOf, UnderlyingChainProvider,
messages::MessageDispatchResult, BasicOperatingMode, Chain, OperatingMode, RangeInclusiveExt,
StorageProofError, UnderlyingChainOf, UnderlyingChainProvider,
};
use codec::{Decode, Encode, MaxEncodedLen};
use frame_support::PalletError;
@@ -514,13 +514,6 @@ where
relayers_rewards
}

/// The `BridgeMessagesCall` used by a chain.
pub type BridgeMessagesCallOf<C> = BridgeMessagesCall<
AccountIdOf<C>,
target_chain::FromBridgedChainMessagesProof<HashOf<C>>,
source_chain::FromBridgedChainMessagesDeliveryProof<HashOf<C>>,
>;

/// A minimized version of `pallet-bridge-messages::Call` that can be used without a runtime.
#[derive(Encode, Decode, Debug, PartialEq, Eq, Clone, TypeInfo)]
#[allow(non_camel_case_types)]
8 changes: 2 additions & 6 deletions bridges/primitives/messages/src/target_chain.rs
Original file line number Diff line number Diff line change
@@ -172,13 +172,9 @@ impl<AccountId> DeliveryPayments<AccountId> for () {

/// Structure that may be used in place of `MessageDispatch` on chains,
/// where inbound messages are forbidden.
pub struct ForbidInboundMessages<MessagesProof, DispatchPayload>(
PhantomData<(MessagesProof, DispatchPayload)>,
);
pub struct ForbidInboundMessages<DispatchPayload>(PhantomData<DispatchPayload>);

impl<MessagesProof, DispatchPayload: Decode> MessageDispatch
for ForbidInboundMessages<MessagesProof, DispatchPayload>
{
impl<DispatchPayload: Decode> MessageDispatch for ForbidInboundMessages<DispatchPayload> {
type DispatchPayload = DispatchPayload;
type DispatchLevelResult = ();

3 changes: 1 addition & 2 deletions bridges/relays/lib-substrate-relay/Cargo.toml
Original file line number Diff line number Diff line change
@@ -25,7 +25,6 @@ strum = { features = ["derive"], workspace = true, default-features = true }
thiserror = { workspace = true }

# Bridge dependencies

bp-header-chain = { workspace = true, default-features = true }
bp-parachains = { workspace = true, default-features = true }
bp-polkadot-core = { workspace = true, default-features = true }
@@ -46,7 +45,6 @@ bp-runtime = { workspace = true, default-features = true }
bp-messages = { workspace = true, default-features = true }

# Substrate Dependencies

frame-support = { workspace = true, default-features = true }
frame-system = { workspace = true, default-features = true }
pallet-balances = { workspace = true, default-features = true }
@@ -56,5 +54,6 @@ sp-consensus-grandpa = { workspace = true, default-features = true }
sp-runtime = { workspace = true, default-features = true }

[dev-dependencies]
scale-info = { features = ["derive"], workspace = true }
pallet-transaction-payment = { workspace = true, default-features = true }
relay-substrate-client = { features = ["test-helpers"], workspace = true }
361 changes: 360 additions & 1 deletion bridges/relays/lib-substrate-relay/src/messages/mod.rs
Original file line number Diff line number Diff line change
@@ -455,7 +455,7 @@ macro_rules! generate_receive_message_proof_call_builder {
bp_runtime::paste::item! {
$bridge_messages($receive_messages_proof {
relayer_id_at_bridged_chain: relayer_id_at_source,
proof: proof.1,
proof: Box::new(proof.1),
messages_count: messages_count,
dispatch_weight: dispatch_weight,
})
@@ -669,3 +669,362 @@ where
)
.map_err(Into::into)
}

#[cfg(test)]
mod tests {
use super::*;
use bp_messages::{
source_chain::FromBridgedChainMessagesDeliveryProof, UnrewardedRelayersState,
};
use relay_substrate_client::calls::{UtilityCall as MockUtilityCall, UtilityCall};

#[derive(codec::Decode, codec::Encode, Clone, Debug, PartialEq)]
pub enum RuntimeCall {
#[codec(index = 53)]
BridgeMessages(CodegenBridgeMessagesCall),
#[codec(index = 123)]
Utility(UtilityCall<RuntimeCall>),
}
pub type CodegenBridgeMessagesCall = bp_messages::BridgeMessagesCall<
u64,
Box<FromBridgedChainMessagesProof<mock::BridgedHeaderHash>>,
FromBridgedChainMessagesDeliveryProof<mock::BridgedHeaderHash>,
>;

impl From<MockUtilityCall<RuntimeCall>> for RuntimeCall {
fn from(value: MockUtilityCall<RuntimeCall>) -> RuntimeCall {
match value {
MockUtilityCall::batch_all(calls) =>
RuntimeCall::Utility(UtilityCall::<RuntimeCall>::batch_all(calls)),
}
}
}

#[test]
fn ensure_macro_compatibility_for_generate_receive_message_proof_call_builder() {
// data
let receive_messages_proof = FromBridgedChainMessagesProof {
bridged_header_hash: Default::default(),
storage: Default::default(),
lane: LaneId([0, 0, 0, 0]),
nonces_start: 0,
nonces_end: 0,
};
let account = 1234;
let messages_count = 0;
let dispatch_weight = Default::default();

// construct pallet Call directly
let pallet_receive_messages_proof =
pallet_bridge_messages::Call::<mock::TestRuntime>::receive_messages_proof {
relayer_id_at_bridged_chain: account.clone(),
proof: Box::new(receive_messages_proof.clone()),
messages_count,
dispatch_weight,
};

// construct mock enum Call
let mock_enum_receive_messages_proof = CodegenBridgeMessagesCall::receive_messages_proof {
relayer_id_at_bridged_chain: account.clone(),
proof: Box::new(receive_messages_proof.clone()),
messages_count,
dispatch_weight,
};

// now we should be able to use macro `generate_receive_message_proof_call_builder`
let relayer_call_builder_receive_messages_proof = relayer::ThisChainToBridgedChainMessageLaneReceiveMessagesProofCallBuilder::build_receive_messages_proof_call(
account,
(Default::default(), receive_messages_proof),
messages_count,
dispatch_weight,
false,
);

// ensure they are all equal
assert_eq!(
pallet_receive_messages_proof.encode(),
mock_enum_receive_messages_proof.encode()
);
match relayer_call_builder_receive_messages_proof {
RuntimeCall::BridgeMessages(call) => match call {
call @ CodegenBridgeMessagesCall::receive_messages_proof { .. } =>
assert_eq!(pallet_receive_messages_proof.encode(), call.encode()),
_ => panic!("Unexpected CodegenBridgeMessagesCall type"),
},
_ => panic!("Unexpected RuntimeCall type"),
};
}

#[test]
fn ensure_macro_compatibility_for_generate_receive_message_delivery_proof_call_builder() {
// data
let receive_messages_delivery_proof = FromBridgedChainMessagesDeliveryProof {
bridged_header_hash: Default::default(),
storage_proof: Default::default(),
lane: LaneId([0, 0, 0, 0]),
};
let relayers_state = UnrewardedRelayersState {
unrewarded_relayer_entries: 0,
messages_in_oldest_entry: 0,
total_messages: 0,
last_delivered_nonce: 0,
};

// construct pallet Call directly
let pallet_receive_messages_delivery_proof =
pallet_bridge_messages::Call::<mock::TestRuntime>::receive_messages_delivery_proof {
proof: receive_messages_delivery_proof.clone(),
relayers_state: relayers_state.clone(),
};

// construct mock enum Call
let mock_enum_receive_messages_delivery_proof =
CodegenBridgeMessagesCall::receive_messages_delivery_proof {
proof: receive_messages_delivery_proof.clone(),
relayers_state: relayers_state.clone(),
};

// now we should be able to use macro `generate_receive_message_proof_call_builder`
let relayer_call_builder_receive_messages_delivery_proof = relayer::ThisChainToBridgedChainMessageLaneReceiveMessagesDeliveryProofCallBuilder::build_receive_messages_delivery_proof_call(
(relayers_state, receive_messages_delivery_proof),
false,
);

// ensure they are all equal
assert_eq!(
pallet_receive_messages_delivery_proof.encode(),
mock_enum_receive_messages_delivery_proof.encode()
);
match relayer_call_builder_receive_messages_delivery_proof {
RuntimeCall::BridgeMessages(call) => match call {
call @ CodegenBridgeMessagesCall::receive_messages_delivery_proof { .. } =>
assert_eq!(pallet_receive_messages_delivery_proof.encode(), call.encode()),
_ => panic!("Unexpected CodegenBridgeMessagesCall type"),
},
_ => panic!("Unexpected RuntimeCall type"),
};
}

// mock runtime with `pallet_bridge_messages`
mod mock {
use super::super::*;
use bp_messages::target_chain::ForbidInboundMessages;
use bp_runtime::ChainId;
use frame_support::derive_impl;
use sp_core::H256;
use sp_runtime::{
generic, testing::Header as SubstrateHeader, traits::BlakeTwo256, StateVersion,
};

type Block = frame_system::mocking::MockBlock<TestRuntime>;
pub type SignedBlock = generic::SignedBlock<Block>;

frame_support::construct_runtime! {
pub enum TestRuntime
{
System: frame_system,
Messages: pallet_bridge_messages,
}
}

#[derive_impl(frame_system::config_preludes::TestDefaultConfig)]
impl frame_system::Config for TestRuntime {
type Block = Block;
}

impl pallet_bridge_messages::Config for TestRuntime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = ();
type ThisChain = ThisUnderlyingChain;
type BridgedChain = BridgedUnderlyingChain;
type BridgedHeaderChain = BridgedHeaderChain;
type ActiveOutboundLanes = ();
type OutboundPayload = Vec<u8>;
type InboundPayload = Vec<u8>;
type DeliveryPayments = ();
type DeliveryConfirmationPayments = ();
type OnMessagesDelivered = ();
type MessageDispatch = ForbidInboundMessages<Vec<u8>>;
}

pub struct ThisUnderlyingChain;

impl bp_runtime::Chain for ThisUnderlyingChain {
const ID: ChainId = *b"tuch";
type BlockNumber = u64;
type Hash = H256;
type Hasher = BlakeTwo256;
type Header = SubstrateHeader;
type AccountId = u64;
type Balance = u64;
type Nonce = u64;
type Signature = sp_runtime::MultiSignature;
const STATE_VERSION: StateVersion = StateVersion::V1;
fn max_extrinsic_size() -> u32 {
u32::MAX
}
fn max_extrinsic_weight() -> Weight {
Weight::MAX
}
}

impl bp_messages::ChainWithMessages for ThisUnderlyingChain {
const WITH_CHAIN_MESSAGES_PALLET_NAME: &'static str = "";
const MAX_UNREWARDED_RELAYERS_IN_CONFIRMATION_TX: MessageNonce = 16;
const MAX_UNCONFIRMED_MESSAGES_IN_CONFIRMATION_TX: MessageNonce = 1000;
}

pub struct BridgedUnderlyingChain;

pub type BridgedHeaderHash = H256;
pub type BridgedChainHeader = SubstrateHeader;

impl bp_runtime::Chain for BridgedUnderlyingChain {
const ID: ChainId = *b"bgdc";
type BlockNumber = u64;
type Hash = BridgedHeaderHash;
type Hasher = BlakeTwo256;
type Header = BridgedChainHeader;
type AccountId = u64;
type Balance = u64;
type Nonce = u64;
type Signature = sp_runtime::MultiSignature;
const STATE_VERSION: StateVersion = StateVersion::V1;
fn max_extrinsic_size() -> u32 {
4096
}
fn max_extrinsic_weight() -> Weight {
Weight::MAX
}
}

impl bp_messages::ChainWithMessages for BridgedUnderlyingChain {
const WITH_CHAIN_MESSAGES_PALLET_NAME: &'static str = "";
const MAX_UNREWARDED_RELAYERS_IN_CONFIRMATION_TX: MessageNonce = 16;
const MAX_UNCONFIRMED_MESSAGES_IN_CONFIRMATION_TX: MessageNonce = 1000;
}

pub struct BridgedHeaderChain;

impl bp_header_chain::HeaderChain<BridgedUnderlyingChain> for BridgedHeaderChain {
fn finalized_header_state_root(
_hash: HashOf<BridgedUnderlyingChain>,
) -> Option<HashOf<BridgedUnderlyingChain>> {
unreachable!()
}
}
}

// relayer configuration
mod relayer {
use super::*;
use crate::{
messages::{
tests::{mock, RuntimeCall},
SubstrateMessageLane,
},
UtilityPalletBatchCallBuilder,
};
use bp_runtime::UnderlyingChainProvider;
use relay_substrate_client::{MockedRuntimeUtilityPallet, SignParam, UnsignedTransaction};
use std::time::Duration;

#[derive(Clone)]
pub struct ThisChain;
impl UnderlyingChainProvider for ThisChain {
type Chain = mock::ThisUnderlyingChain;
}
impl relay_substrate_client::Chain for ThisChain {
const NAME: &'static str = "";
const BEST_FINALIZED_HEADER_ID_METHOD: &'static str = "";
const FREE_HEADERS_INTERVAL_METHOD: &'static str = "";
const AVERAGE_BLOCK_INTERVAL: Duration = Duration::from_millis(0);
type SignedBlock = mock::SignedBlock;
type Call = RuntimeCall;
}
impl relay_substrate_client::ChainWithTransactions for ThisChain {
type AccountKeyPair = sp_core::sr25519::Pair;
type SignedTransaction = ();

fn sign_transaction(
_: SignParam<Self>,
_: UnsignedTransaction<Self>,
) -> Result<Self::SignedTransaction, SubstrateError>
where
Self: Sized,
{
todo!()
}
}
impl relay_substrate_client::ChainWithMessages for ThisChain {
const WITH_CHAIN_RELAYERS_PALLET_NAME: Option<&'static str> = None;
const TO_CHAIN_MESSAGE_DETAILS_METHOD: &'static str = "";
const FROM_CHAIN_MESSAGE_DETAILS_METHOD: &'static str = "";
}
impl relay_substrate_client::ChainWithUtilityPallet for ThisChain {
type UtilityPallet = MockedRuntimeUtilityPallet<RuntimeCall>;
}

#[derive(Clone)]
pub struct BridgedChain;
impl UnderlyingChainProvider for BridgedChain {
type Chain = mock::BridgedUnderlyingChain;
}
impl relay_substrate_client::Chain for BridgedChain {
const NAME: &'static str = "";
const BEST_FINALIZED_HEADER_ID_METHOD: &'static str = "";
const FREE_HEADERS_INTERVAL_METHOD: &'static str = "";
const AVERAGE_BLOCK_INTERVAL: Duration = Duration::from_millis(0);
type SignedBlock = mock::SignedBlock;
type Call = RuntimeCall;
}
impl relay_substrate_client::ChainWithTransactions for BridgedChain {
type AccountKeyPair = sp_core::sr25519::Pair;
type SignedTransaction = ();

fn sign_transaction(
_: SignParam<Self>,
_: UnsignedTransaction<Self>,
) -> Result<Self::SignedTransaction, SubstrateError>
where
Self: Sized,
{
todo!()
}
}
impl relay_substrate_client::ChainWithMessages for BridgedChain {
const WITH_CHAIN_RELAYERS_PALLET_NAME: Option<&'static str> = None;
const TO_CHAIN_MESSAGE_DETAILS_METHOD: &'static str = "";
const FROM_CHAIN_MESSAGE_DETAILS_METHOD: &'static str = "";
}
impl relay_substrate_client::ChainWithUtilityPallet for BridgedChain {
type UtilityPallet = MockedRuntimeUtilityPallet<RuntimeCall>;
}

#[derive(Clone, Debug)]
pub struct ThisChainToBridgedChainMessageLane;
impl SubstrateMessageLane for ThisChainToBridgedChainMessageLane {
type SourceChain = ThisChain;
type TargetChain = BridgedChain;
type ReceiveMessagesProofCallBuilder =
ThisChainToBridgedChainMessageLaneReceiveMessagesProofCallBuilder;
type ReceiveMessagesDeliveryProofCallBuilder =
ThisChainToBridgedChainMessageLaneReceiveMessagesDeliveryProofCallBuilder;
type SourceBatchCallBuilder = UtilityPalletBatchCallBuilder<ThisChain>;
type TargetBatchCallBuilder = UtilityPalletBatchCallBuilder<BridgedChain>;
}

generate_receive_message_proof_call_builder!(
ThisChainToBridgedChainMessageLane,
ThisChainToBridgedChainMessageLaneReceiveMessagesProofCallBuilder,
RuntimeCall::BridgeMessages,
CodegenBridgeMessagesCall::receive_messages_proof
);
generate_receive_message_delivery_proof_call_builder!(
ThisChainToBridgedChainMessageLane,
ThisChainToBridgedChainMessageLaneReceiveMessagesDeliveryProofCallBuilder,
RuntimeCall::BridgeMessages,
CodegenBridgeMessagesCall::receive_messages_delivery_proof
);
}
}