mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 02:51:01 +00:00
Add Rococo People <> Rococo Bulletin bridge support to Rococo Bridge Hub (#2540)
This PR adds [Rococo People](https://github.com/paritytech/polkadot-sdk/pull/2281) <> [Rococo Bulletin](https://github.com/zdave-parity/polkadot-bulletin-chain) to the Rococo Bridge Hub code. There's a couple of things left to do here: - [x] add remaining tests - it'd need some refactoring in the `bridge-hub-test-utils` - will do in a separate PR; - [x] actually run benchmarks for new messaging pallet (do we have bot nowadays?). The reason why I'm opening it before this ^^^ is ready, is that I'd like to hear others opinion on how to deal with hacks with that bridge. Initially I was assuming that Rococo Bulletin will be the 1:1 copy of the Polkadot Bulletin (to avoid maintaining multiple runtimes/releases/...), so you can see many `PolkadotBulletin` mentions in this PR, even though we are going to bridge with the parallel chain (`RococoBulletin`). That's because e.g. pallet names from `construct_runtime` are affecting runtime storage keys and bridges are using runtime storage proofs => it is important to use names that the Bulletin chain expects. But in the end, this hack won't work - we can't use Polkadot Bulletin runtime to bridge with Rococo Bridge Hub, because Polkadot Bulletin expects Polkadot Bridge hub to use `1002` parachain id and Rococo Bridge Hub seats on the `1013`. This also affects storage keys using in bridging, so I had to add the [`rococo` feature](https://github.com/svyatonik/polkadot-bulletin-chain/blob/add-bridge-pallets/runtime/Cargo.toml#L198) to the Bulletin chain. So now we can actually alter its runtime and adapt it for Rococo. So the question here is - what's better for us here - to leave everything as is (seems hacky and non-trivial); - change Bulletin chain runtime when `rococo` feature is used - e.g. use proper names there (`WithPolkadotGrandpa` -> `WithRococoGrandpa`, ...) - add another set of pallets to the Bulletin chain runtime to bridge with Rococo and never use them in production. Similar to hack that we had in Rococo/Wococo cc @acatangiu @bkontur @serban300 also cc @joepetrowski as the main "client" of this bridge --- A couple words on how this bridge is different from the Rococo <> Westend bridge: - it is a bridge with a chain that uses GRANDPA finality, not the parachain finality (hence the tests needs to be changed); - it is a fee-free bridge. So `AllowExplicitUnpaidExecutionFrom<Equals<SiblingPeople>>` + we are not paying any rewards to relayers (apart from compensating transaction costs). --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Andrei Sandu <andrei-mihail@parity.io> Co-authored-by: Adrian Catangiu <adrian@parity.io> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com> Co-authored-by: Egor_P <egor@parity.io> Co-authored-by: command-bot <>
This commit is contained in:
committed by
GitHub
parent
10a91f821e
commit
097308e385
@@ -20,7 +20,8 @@ use super::{
|
||||
TransactionByteFee, WeightToFee, XcmpQueue,
|
||||
};
|
||||
use crate::bridge_common_config::{
|
||||
BridgeGrandpaWestendInstance, DeliveryRewardInBalance, RequiredStakeForStakeAndSlash,
|
||||
BridgeGrandpaRococoBulletinInstance, BridgeGrandpaWestendInstance, DeliveryRewardInBalance,
|
||||
RequiredStakeForStakeAndSlash,
|
||||
};
|
||||
use bp_messages::LaneId;
|
||||
use bp_relayers::{PayRewardFromAccount, RewardsAccountOwner, RewardsAccountParams};
|
||||
@@ -72,6 +73,7 @@ parameter_types! {
|
||||
pub const MaxAssetsIntoHolding: u32 = 64;
|
||||
pub TreasuryAccount: AccountId = TREASURY_PALLET_ID.into_account_truncating();
|
||||
pub RelayTreasuryLocation: MultiLocation = (Parent, PalletInstance(rococo_runtime_constants::TREASURY_PALLET_ID)).into();
|
||||
pub SiblingPeople: MultiLocation = (Parent, Parachain(rococo_runtime_constants::system_parachain::PEOPLE_ID)).into();
|
||||
}
|
||||
|
||||
/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used
|
||||
@@ -187,6 +189,10 @@ impl Contains<RuntimeCall> for SafeCallFilter {
|
||||
RuntimeCall::BridgeWestendGrandpa(pallet_bridge_grandpa::Call::<
|
||||
Runtime,
|
||||
BridgeGrandpaWestendInstance,
|
||||
>::initialize { .. }) |
|
||||
RuntimeCall::BridgePolkadotBulletinGrandpa(pallet_bridge_grandpa::Call::<
|
||||
Runtime,
|
||||
BridgeGrandpaRococoBulletinInstance,
|
||||
>::initialize { .. })
|
||||
)
|
||||
}
|
||||
@@ -205,11 +211,12 @@ pub type Barrier = TrailingSetTopicAsId<
|
||||
// If the message is one that immediately attempts to pay for execution, then
|
||||
// allow it.
|
||||
AllowTopLevelPaidExecutionFrom<Everything>,
|
||||
// Parent, its pluralities (i.e. governance bodies) and relay treasury pallet
|
||||
// get free execution.
|
||||
// Parent, its pluralities (i.e. governance bodies), relay treasury pallet
|
||||
// and sibling People get free execution.
|
||||
AllowExplicitUnpaidExecutionFrom<(
|
||||
ParentOrParentsPlurality,
|
||||
Equals<RelayTreasuryLocation>,
|
||||
Equals<SiblingPeople>,
|
||||
)>,
|
||||
// Subscriptions for version tracking are OK.
|
||||
AllowSubscriptionsFrom<ParentRelayOrSiblingParachains>,
|
||||
@@ -273,7 +280,10 @@ impl xcm_executor::Config for XcmConfig {
|
||||
XcmFeeToAccount<Self::AssetTransactor, AccountId, TreasuryAccount>,
|
||||
),
|
||||
>;
|
||||
type MessageExporter = (crate::bridge_to_westend_config::ToBridgeHubWestendHaulBlobExporter,);
|
||||
type MessageExporter = (
|
||||
crate::bridge_to_westend_config::ToBridgeHubWestendHaulBlobExporter,
|
||||
crate::bridge_to_bulletin_config::ToRococoBulletinHaulBlobExporter,
|
||||
);
|
||||
type UniversalAliases = Nothing;
|
||||
type CallDispatcher = WithOriginFilter<SafeCallFilter>;
|
||||
type SafeCallFilter = SafeCallFilter;
|
||||
|
||||
Reference in New Issue
Block a user