// Copyright (C) Parity Technologies (UK) Ltd. // This file is part of Pezcumulus. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //! Bridge definitions that can be used by multiple BridgeHub flavors. //! All configurations here should be dedicated to a single chain; in other words, we don't need two //! chains for a single pallet configuration. //! //! For example, the messaging pallet needs to know the sending and receiving chains, but the //! GRANDPA tracking pallet only needs to be aware of one chain. use super::{weights, AccountId, Balance, Balances, BlockNumber, Runtime, RuntimeEvent}; use bp_relayers::RewardsAccountParams; use bp_teyrchains::SingleParaStoredHeaderDataBuilder; use pezframe_support::{parameter_types, traits::ConstU32}; parameter_types! { pub const RelayChainHeadersToKeep: u32 = 1024; pub const TeyrchainHeadsToKeep: u32 = 64; pub const ZagrosBridgeTeyrchainPalletName: &'static str = bp_zagros::PARAS_PALLET_NAME; pub const MaxZagrosParaHeadDataSize: u32 = bp_zagros::MAX_NESTED_TEYRCHAIN_HEAD_DATA_SIZE; pub storage RequiredStakeForStakeAndSlash: Balance = 1_000_000; pub const RelayerStakeLease: u32 = 8; pub const RelayerStakeReserveId: [u8; 8] = *b"brdgrlrs"; pub storage DeliveryRewardInBalance: u64 = 1_000_000; } /// Add GRANDPA bridge pallet to track Zagros relay chain. pub type BridgeGrandpaZagrosInstance = pezpallet_bridge_grandpa::Instance3; impl pezpallet_bridge_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; type BridgedChain = bp_zagros::Zagros; type MaxFreeHeadersPerBlock = ConstU32<4>; type FreeHeadersInterval = ConstU32<5>; type HeadersToKeep = RelayChainHeadersToKeep; type WeightInfo = weights::pezpallet_bridge_grandpa::WeightInfo; } /// Add teyrchain bridge pallet to track Zagros BridgeHub teyrchain pub type BridgeTeyrchainZagrosInstance = pezpallet_bridge_teyrchains::Instance3; impl pezpallet_bridge_teyrchains::Config for Runtime { type RuntimeEvent = RuntimeEvent; type WeightInfo = weights::pezpallet_bridge_teyrchains::WeightInfo; type BridgesGrandpaPalletInstance = BridgeGrandpaZagrosInstance; type ParasPalletName = ZagrosBridgeTeyrchainPalletName; type ParaStoredHeaderDataBuilder = SingleParaStoredHeaderDataBuilder; type HeadsToKeep = TeyrchainHeadsToKeep; type MaxParaHeadDataSize = MaxZagrosParaHeadDataSize; type OnNewHead = (); } /// Allows collect and claim rewards for relayers pub type RelayersForLegacyLaneIdsMessagesInstance = (); impl pezpallet_bridge_relayers::Config for Runtime { type RuntimeEvent = RuntimeEvent; type RewardBalance = Balance; type Reward = RewardsAccountParams; type PaymentProcedure = bp_relayers::PayRewardFromAccount< pezpallet_balances::Pallet, AccountId, bp_messages::LegacyLaneId, Self::RewardBalance, >; type StakeAndSlash = pezpallet_bridge_relayers::StakeAndSlashNamed< AccountId, BlockNumber, Balances, RelayerStakeReserveId, RequiredStakeForStakeAndSlash, RelayerStakeLease, >; type Balance = Balance; type WeightInfo = weights::pezpallet_bridge_relayers_legacy::WeightInfo; } /// Allows collect and claim rewards for relayers pub type RelayersForPermissionlessLanesInstance = pezpallet_bridge_relayers::Instance2; impl pezpallet_bridge_relayers::Config for Runtime { type RuntimeEvent = RuntimeEvent; type RewardBalance = Balance; type Reward = RewardsAccountParams; type PaymentProcedure = bp_relayers::PayRewardFromAccount< pezpallet_balances::Pallet, AccountId, bp_messages::HashedLaneId, Self::RewardBalance, >; type StakeAndSlash = pezpallet_bridge_relayers::StakeAndSlashNamed< AccountId, BlockNumber, Balances, RelayerStakeReserveId, RequiredStakeForStakeAndSlash, RelayerStakeLease, >; type Balance = Balance; type WeightInfo = weights::pezpallet_bridge_relayers_permissionless_lanes::WeightInfo; } /// Add GRANDPA bridge pallet to track Pezkuwichain Bulletin chain. pub type BridgeGrandpaPezkuwichainBulletinInstance = pezpallet_bridge_grandpa::Instance4; impl pezpallet_bridge_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; type BridgedChain = bp_pezkuwi_bulletin::PezkuwiBulletin; type MaxFreeHeadersPerBlock = ConstU32<4>; type FreeHeadersInterval = ConstU32<5>; type HeadersToKeep = RelayChainHeadersToKeep; // Technically this is incorrect - we have two pallet instances and ideally we shall // benchmark every instance separately. But the benchmarking engine has a flaw - it // messes with components. E.g. in Kusama maximal validators count is 1024 and in // Bulletin chain it is 100. But benchmarking engine runs Bulletin benchmarks using // components range, computed for Kusama => it causes an error. // // In practice, however, GRANDPA pallet works the same way for all bridged chains, so // weights are also the same for both bridges. type WeightInfo = weights::pezpallet_bridge_grandpa::WeightInfo; }