From 7b75c2b9c875d6012c8b8e0068c7f6268c4d8aaf Mon Sep 17 00:00:00 2001
From: Guantong <04637@163.com>
Date: Tue, 27 Sep 2022 17:10:51 +0800
Subject: [PATCH 01/10] add bridge message for pangolin_parachain_alpha
---
.../pangolin/src/bridges_message/mod.rs | 3 +
.../pangolin_parachain_alpha.rs | 282 ++++++++++++++++++
2 files changed, 285 insertions(+)
create mode 100644 node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
diff --git a/node/runtime/pangolin/src/bridges_message/mod.rs b/node/runtime/pangolin/src/bridges_message/mod.rs
index 5aae779952..ea3d0b21b6 100644
--- a/node/runtime/pangolin/src/bridges_message/mod.rs
+++ b/node/runtime/pangolin/src/bridges_message/mod.rs
@@ -20,4 +20,7 @@ pub mod pangoro;
pub use pangoro as bm_pangoro;
pub mod pangolin_parachain;
+pub mod pangolin_parachain_alpha;
+
pub use pangolin_parachain as bm_pangolin_parachain;
+pub use pangolin_parachain_alpha as bm_pangolin_parachain_alpha;
diff --git a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
new file mode 100644
index 0000000000..40c83d502a
--- /dev/null
+++ b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
@@ -0,0 +1,282 @@
+// This file is part of Darwinia.
+//
+// Copyright (C) 2018-2022 Darwinia Network
+// SPDX-License-Identifier: GPL-3.0
+//
+// Darwinia is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Darwinia is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Darwinia. If not, see .
+
+// --- crates.io ---
+use codec::{Decode, Encode};
+use scale_info::TypeInfo;
+// --- paritytech ---
+use frame_support::{
+ weights::{DispatchClass, Weight},
+ RuntimeDebug,
+};
+use sp_runtime::{traits::Zero, FixedPointNumber, FixedU128};
+use sp_std::ops::RangeInclusive;
+// --- darwinia-network ---
+use crate::*;
+use bp_messages::{
+ source_chain::TargetHeaderChain,
+ target_chain::{ProvedMessages, SourceHeaderChain},
+ InboundLaneData, LaneId, Message, MessageNonce, Parameter,
+};
+use bp_rococo::parachains::ParaId;
+// Modified 1
+use bp_runtime::{Chain, ChainId, PANGOLIN_CHAIN_ID, PANGOLIN_PARACHAIN_ALPHA_CHAIN_ID};
+use bridge_runtime_common::{
+ // Modified 2
+ lanes::PANGOLIN_PANGOLIN_PARACHAIN_ALPHA_LANE,
+ messages::{
+ self,
+ source::{self, FromBridgedChainMessagesDeliveryProof, FromThisChainMessagePayload},
+ target::{
+ self, FromBridgedChainEncodedMessageCall, FromBridgedChainMessageDispatch,
+ FromBridgedChainMessagePayload, FromBridgedChainMessagesProof,
+ },
+ BalanceOf, BridgedChainWithMessages, ChainWithMessages, MessageBridge, MessageTransaction,
+ ThisChainWithMessages,
+ },
+};
+use drml_common_runtime::impls::FromThisChainMessageVerifier;
+use pallet_bridge_messages::EXPECTED_DEFAULT_MESSAGE_LENGTH;
+
+/// Message delivery proof for Pangolin -> PangolinParachainAlpha messages.
+type ToPangolinParachainAlphaMessagesDeliveryProof =
+ FromBridgedChainMessagesDeliveryProof;
+/// Message proof for PangolinParachainAlpha -> Pangolin messages.
+type FromPangolinParachainAlphaMessagesProof =
+ FromBridgedChainMessagesProof;
+
+/// Message payload for Pangolin -> PangolinParachainAlpha messages.
+pub type ToPangolinParachainAlphaMessagePayload =
+ FromThisChainMessagePayload;
+/// Message payload for PangolinParachainAlpha -> Pangolin messages.
+pub type FromPangolinParachainAlphaMessagePayload =
+ FromBridgedChainMessagePayload;
+
+/// Message verifier for Pangolin -> PangolinParachain messages.
+pub type ToPangolinParachainAlphaMessageVerifier = FromThisChainMessageVerifier<
+ WithPangolinParachainAlphaMessageBridge,
+ Runtime,
+ WithPangolinParachainAlphaFeeMarket,
+>;
+
+/// Encoded Pangolin Call as it comes from PangolinParachainAlpha
+pub type FromPangolinParachainAlphaEncodedCall = FromBridgedChainEncodedMessageCall;
+
+/// Call-dispatch based message dispatch for PangolinParachainAlpha -> Pangolin messages.
+pub type FromPangolinParachainAlphaMessageDispatch = FromBridgedChainMessageDispatch<
+ WithPangolinParachainAlphaMessageBridge,
+ Runtime,
+ Ring,
+ WithPangolinParachainAlphaDispatch,
+>;
+
+/// Identifier of PangolinParachainAlpha registered in the moonbase relay chain.
+pub const PANGOLIN_PARACHAIN_ALPHA_ID: u32 = 2105;
+
+pub const INITIAL_PANGOLIN_PARACHAIN_ALPHA_TO_PANGOLIN_CONVERSION_RATE: FixedU128 =
+ FixedU128::from_inner(FixedU128::DIV);
+
+frame_support::parameter_types! {
+ /// PangolinParachainAlpha to Pangolin conversion rate. Initially we trate both tokens as equal.
+ pub storage PangolinParachainAlphaToPangolinConversionRate: FixedU128 = INITIAL_PANGOLIN_PARACHAIN_ALPHA_TO_PANGOLIN_CONVERSION_RATE;
+}
+
+#[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo)]
+pub enum PangolinToPangolinParachainAlphaParameter {
+ /// The conversion formula we use is: `PangolinTokens = PangolinParachainAlphaTokens *
+ /// conversion_rate`.
+ PangolinParachainAlphaToPangolinConversionRate(FixedU128),
+}
+impl Parameter for PangolinToPangolinParachainAlphaParameter {
+ fn save(&self) {
+ match *self {
+ PangolinToPangolinParachainAlphaParameter::PangolinParachainAlphaToPangolinConversionRate(
+ ref conversion_rate,
+ ) => PangolinParachainAlphaToPangolinConversionRate::set(conversion_rate),
+ }
+ }
+}
+
+/// Pangolin <-> PangolinParachainAlpha message bridge.
+#[derive(Clone, Copy, RuntimeDebug)]
+pub struct WithPangolinParachainAlphaMessageBridge;
+impl MessageBridge for WithPangolinParachainAlphaMessageBridge {
+ type BridgedChain = PangolinParachainAlpha;
+ type ThisChain = Pangolin;
+
+ const BRIDGED_CHAIN_ID: ChainId = PANGOLIN_PARACHAIN_ALPHA_CHAIN_ID;
+ const BRIDGED_MESSAGES_PALLET_NAME: &'static str =
+ bp_pangolin::WITH_PANGOLIN_MESSAGES_PALLET_NAME;
+ const RELAYER_FEE_PERCENT: u32 = 10;
+ const THIS_CHAIN_ID: ChainId = PANGOLIN_CHAIN_ID;
+
+ fn bridged_balance_to_this_balance(
+ bridged_balance: BalanceOf,
+ ) -> BalanceOf {
+ PangolinParachainAlphaToPangolinConversionRate::get().saturating_mul_int(bridged_balance)
+ }
+}
+
+/// Pangolin chain from message lane point of view.
+#[derive(Clone, Copy, RuntimeDebug)]
+pub struct Pangolin;
+impl ChainWithMessages for Pangolin {
+ type AccountId = bp_pangolin::AccountId;
+ type Balance = bp_pangolin::Balance;
+ type Hash = bp_pangolin::Hash;
+ type Signature = bp_pangolin::Signature;
+ type Signer = bp_pangolin::AccountPublic;
+ type Weight = Weight;
+}
+impl ThisChainWithMessages for Pangolin {
+ type Call = Call;
+
+ // Modified 3
+ fn is_outbound_lane_enabled(lane: &LaneId) -> bool {
+ *lane == PANGOLIN_PANGOLIN_PARACHAIN_ALPHA_LANE
+ }
+
+ fn maximal_pending_messages_at_outbound_lane() -> MessageNonce {
+ MessageNonce::MAX
+ }
+
+ fn estimate_delivery_confirmation_transaction() -> MessageTransaction {
+ let inbound_data_size = InboundLaneData::::encoded_size_hint(
+ bp_pangolin::MAXIMAL_ENCODED_ACCOUNT_ID_SIZE,
+ 1,
+ 1,
+ )
+ .unwrap_or(u32::MAX);
+
+ MessageTransaction {
+ dispatch_weight: bp_pangolin::MAX_SINGLE_MESSAGE_DELIVERY_CONFIRMATION_TX_WEIGHT,
+ size: inbound_data_size
+ .saturating_add(bp_pangolin::EXTRA_STORAGE_PROOF_SIZE)
+ .saturating_add(bp_pangolin::TX_EXTRA_BYTES),
+ }
+ }
+
+ fn transaction_payment(transaction: MessageTransaction) -> Self::Balance {
+ // in our testnets, both per-byte fee and weight-to-fee are 1:1
+ messages::transaction_payment(
+ RuntimeBlockWeights::get().get(DispatchClass::Normal).base_extrinsic,
+ 1,
+ FixedU128::zero(),
+ |weight| weight as _,
+ transaction,
+ )
+ }
+}
+
+#[derive(Clone, Copy, RuntimeDebug)]
+pub struct PangolinParachainAlpha;
+impl ChainWithMessages for PangolinParachainAlpha {
+ type AccountId = bp_pangolin_parachain::AccountId;
+ type Balance = bp_pangolin_parachain::Balance;
+ type Hash = bp_pangolin_parachain::Hash;
+ type Signature = bp_pangolin_parachain::Signature;
+ type Signer = bp_pangolin_parachain::AccountPublic;
+ type Weight = Weight;
+}
+impl BridgedChainWithMessages for PangolinParachainAlpha {
+ fn maximal_extrinsic_size() -> u32 {
+ bp_pangolin_parachain::PangolinParachain::max_extrinsic_size()
+ }
+
+ fn message_weight_limits(_message_payload: &[u8]) -> RangeInclusive {
+ let upper_limit = target::maximal_incoming_message_dispatch_weight(
+ bp_pangolin_parachain::PangolinParachain::max_extrinsic_weight(),
+ );
+ 0..=upper_limit
+ }
+
+ fn estimate_delivery_transaction(
+ message_payload: &[u8],
+ include_pay_dispatch_fee_cost: bool,
+ message_dispatch_weight: Weight,
+ ) -> MessageTransaction {
+ let message_payload_len = u32::try_from(message_payload.len()).unwrap_or(u32::MAX);
+ let extra_bytes_in_payload = Weight::from(message_payload_len)
+ .saturating_sub(EXPECTED_DEFAULT_MESSAGE_LENGTH.into());
+
+ MessageTransaction {
+ dispatch_weight: extra_bytes_in_payload
+ .saturating_mul(bp_pangolin::ADDITIONAL_MESSAGE_BYTE_DELIVERY_WEIGHT)
+ .saturating_add(bp_pangolin::DEFAULT_MESSAGE_DELIVERY_TX_WEIGHT)
+ .saturating_add(message_dispatch_weight)
+ .saturating_sub(if include_pay_dispatch_fee_cost {
+ 0
+ } else {
+ bp_pangolin::PAY_INBOUND_DISPATCH_FEE_WEIGHT
+ }),
+ size: message_payload_len
+ .saturating_add(bp_pangolin::EXTRA_STORAGE_PROOF_SIZE)
+ .saturating_add(bp_pangolin::TX_EXTRA_BYTES),
+ }
+ }
+
+ fn transaction_payment(transaction: MessageTransaction) -> Self::Balance {
+ // in our testnets, both per-byte fee and weight-to-fee are 1:1
+ messages::transaction_payment(
+ bp_pangolin_parachain::RuntimeBlockWeights::get()
+ .get(DispatchClass::Normal)
+ .base_extrinsic,
+ 1,
+ FixedU128::zero(),
+ |weight| weight as _,
+ transaction,
+ )
+ }
+}
+impl TargetHeaderChain::AccountId>
+ for PangolinParachainAlpha
+{
+ type Error = &'static str;
+ type MessagesDeliveryProof = ToPangolinParachainAlphaMessagesDeliveryProof;
+
+ fn verify_message(payload: &ToPangolinParachainAlphaMessagePayload) -> Result<(), Self::Error> {
+ source::verify_chain_message::(payload)
+ }
+
+ fn verify_messages_delivery_proof(
+ proof: Self::MessagesDeliveryProof,
+ ) -> Result<(LaneId, InboundLaneData), Self::Error> {
+ source::verify_messages_delivery_proof_from_parachain::<
+ WithPangolinParachainAlphaMessageBridge,
+ bp_pangolin_parachain::Header,
+ Runtime,
+ WithRococoParachainsInstance,
+ >(ParaId(PANGOLIN_PARACHAIN_ALPHA_ID), proof)
+ }
+}
+impl SourceHeaderChain<::Balance> for PangolinParachainAlpha {
+ type Error = &'static str;
+ type MessagesProof = FromPangolinParachainAlphaMessagesProof;
+
+ fn verify_messages_proof(
+ proof: Self::MessagesProof,
+ messages_count: u32,
+ ) -> Result::Balance>>, Self::Error> {
+ target::verify_messages_proof_from_parachain::<
+ WithPangolinParachainAlphaMessageBridge,
+ bp_pangolin_parachain::Header,
+ Runtime,
+ WithRococoParachainsInstance,
+ >(ParaId(PANGOLIN_PARACHAIN_ALPHA_ID), proof, messages_count)
+ }
+}
From 3f6ab2745449f50636871fd18ed59aa1d3bcef5f Mon Sep 17 00:00:00 2001
From: Guantong <04637@163.com>
Date: Wed, 28 Sep 2022 10:10:54 +0800
Subject: [PATCH 02/10] update pallets related to alpha bridge
---
node/runtime/pangolin/src/lib.rs | 7 +++++
.../pangolin/src/pallets/bridge_dispatch.rs | 14 ++++++++-
.../pangolin/src/pallets/bridge_grandpa.rs | 8 ++++-
.../pangolin/src/pallets/bridge_messages.rs | 31 +++++++++++++++++--
.../pangolin/src/pallets/bridge_parachains.rs | 7 ++++-
.../pangolin/src/pallets/fee_market.rs | 19 +++++++++++-
6 files changed, 80 insertions(+), 6 deletions(-)
diff --git a/node/runtime/pangolin/src/lib.rs b/node/runtime/pangolin/src/lib.rs
index 1fe06b744b..36fe4624fa 100644
--- a/node/runtime/pangolin/src/lib.rs
+++ b/node/runtime/pangolin/src/lib.rs
@@ -244,6 +244,13 @@ frame_support::construct_runtime! {
PangolinParachainFeeMarket: pallet_fee_market::::{Pallet, Call, Storage, Event} = 64,
TransactionPause: module_transaction_pause::{Pallet, Call, Storage, Event} = 54,
+ // pangolin <> pangolin parachain alpha bridge
+ BridgeMoonbaseRelayGrandpa: pallet_bridge_grandpa::::{Pallet, Call, Storage} = 67
+ BridgeMoonbaseRelayParachains: pallet_bridge_parachains::::{Pallet, Call, Storage} = 68
+ BridgePangolinParachainAlphaDispatch: pallet_bridge_dispatch::::{Pallet, Event} = 69,
+ BridgePangolinParachainAlphaMessages: pallet_bridge_messages::::{Pallet, Call, Storage, Event} = 70,
+ PangolinParachainAlphaFeeMarket: pallet_fee_market::::{Pallet, Call, Storage, Event} = 71,
+
// Substrate2SubstrateIssuing: from_substrate_issuing::{Pallet, Call, Storage, Config, Event} = 49,
ToPangolinParachainBacking: to_parachain_backing::{Pallet, Call, Storage, Config, Event} = 65,
}
diff --git a/node/runtime/pangolin/src/pallets/bridge_dispatch.rs b/node/runtime/pangolin/src/pallets/bridge_dispatch.rs
index 8cb22fbc51..f275cf507b 100644
--- a/node/runtime/pangolin/src/pallets/bridge_dispatch.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_dispatch.rs
@@ -1,5 +1,5 @@
pub use pallet_bridge_dispatch::{
- Instance1 as WithPangoroDispatch, Instance2 as WithPangolinParachainDispatch,
+ Instance1 as WithPangoroDispatch, Instance2 as WithPangolinParachainDispatch, Instance3 as WithPangolinParachainAlphaDispatch
};
// --- paritytech ---
@@ -125,3 +125,15 @@ impl Config for Runtime {
type TargetChainAccountPublic = bp_pangolin::AccountPublic;
type TargetChainSignature = bp_pangolin::Signature;
}
+impl Config for Runtime {
+ type AccountIdConverter = bp_pangolin::AccountIdConverter;
+ type BridgeMessageId = (LaneId, MessageNonce);
+ type Call = Call;
+ type CallValidator = CallValidator;
+ type EncodedCall = bm_pangolin_parachain_alpha::FromPangolinParachainAlphaEncodedCall;
+ type Event = Event;
+ type IntoDispatchOrigin = IntoDispatchOrigin;
+ type SourceChainAccountId = bp_pangolin_parachain::AccountId;
+ type TargetChainAccountPublic = bp_pangolin::AccountPublic;
+ type TargetChainSignature = bp_pangolin::Signature;
+}
diff --git a/node/runtime/pangolin/src/pallets/bridge_grandpa.rs b/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
index 3a33825957..db53d82701 100644
--- a/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
@@ -1,4 +1,4 @@
-pub use pallet_bridge_grandpa::{Instance1 as WithPangoroGrandpa, Instance2 as WithRococoGrandpa};
+pub use pallet_bridge_grandpa::{Instance1 as WithPangoroGrandpa, Instance2 as WithRococoGrandpa, Intance3 as WithMoonbaseRelayGrandpa};
// --- paritytech ---
use pallet_bridge_grandpa::Config;
@@ -35,3 +35,9 @@ impl Config for Runtime {
type MaxRequests = MaxRequests;
type WeightInfo = RococoGrandpaWeightInfo;
}
+impl Config for Runtime {
+ type BridgedChain = bp_rococo::Rococo;
+ type HeadersToKeep = RococoHeadersToKeep;
+ type MaxRequests = MaxRequests;
+ type WeightInfo = RococoGrandpaWeightInfo;
+}
diff --git a/node/runtime/pangolin/src/pallets/bridge_messages.rs b/node/runtime/pangolin/src/pallets/bridge_messages.rs
index 22bb67047d..e2ca5f4a34 100644
--- a/node/runtime/pangolin/src/pallets/bridge_messages.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_messages.rs
@@ -1,11 +1,11 @@
pub use pallet_bridge_messages::{
- Instance1 as WithPangoroMessages, Instance2 as WithPangolinParachainMessages,
+ Instance1 as WithPangoroMessages, Instance2 as WithPangolinParachainMessages, Instance3 as WithPangolinParachainAlphaMessages
};
// --- darwinia-network ---
use crate::*;
use bp_messages::MessageNonce;
-use bp_runtime::{ChainId, PANGOLIN_PARACHAIN_CHAIN_ID, PANGORO_CHAIN_ID};
+use bp_runtime::{ChainId, PANGOLIN_PARACHAIN_CHAIN_ID, PANGOLIN_PARACHAIN_ALPHA_CHAIN_ID, PANGORO_CHAIN_ID};
use darwinia_support::evm::{ConcatConverter, DeriveSubstrateAddress};
use pallet_bridge_messages::Config;
use pallet_fee_market::s2s::{
@@ -81,3 +81,30 @@ impl Config for Runtime {
type TargetHeaderChain = bm_pangolin_parachain::PangolinParachain;
type WeightInfo = ();
}
+impl Config for Runtime {
+ type AccountIdConverter = bp_pangolin::AccountIdConverter;
+ type BridgedChainId = PangolinParachainAlphaChainId;
+ type Event = Event;
+ type InboundMessageFee = bp_pangolin_parachain::Balance;
+ type InboundPayload = bm_pangolin_parachain_alpha::FromPangolinParachainAlphaMessagePayload;
+ type InboundRelayer = bp_pangolin_parachain::AccountId;
+ type LaneMessageVerifier = bm_pangolin_parachain_alpha::ToPangolinParachainAlphaMessageVerifier;
+ type MaxMessagesToPruneAtOnce = MaxMessagesToPruneAtOnce;
+ type MaxUnconfirmedMessagesAtInboundLane = PangolinParachainMaxUnconfirmedMessagesAtInboundLane;
+ type MaxUnrewardedRelayerEntriesAtInboundLane =
+ PangolinParachainMaxUnrewardedRelayerEntriesAtInboundLane;
+ type MessageDeliveryAndDispatchPayment =
+ FeeMarketPayment;
+ type MessageDispatch = bm_pangolin_parachain_alpha::FromPangolinParachainAlphaMessageDispatch;
+ type OnDeliveryConfirmed = (
+ ToPangolinParachainBacking,
+ FeeMarketMessageConfirmedHandler,
+ );
+ type OnMessageAccepted = FeeMarketMessageAcceptedHandler;
+ type OutboundMessageFee = bp_pangolin::Balance;
+ type OutboundPayload = bm_pangolin_parachain_alpha::ToPangolinParachainAlphaMessagePayload;
+ type Parameter = bm_pangolin_parachain_alpha::PangolinToPangolinParachainAlphaParameter;
+ type SourceHeaderChain = bm_pangolin_parachain_alpha::PangolinParachainAlpha;
+ type TargetHeaderChain = bm_pangolin_parachain_alpha::PangolinParachainAlpha;
+ type WeightInfo = ();
+}
\ No newline at end of file
diff --git a/node/runtime/pangolin/src/pallets/bridge_parachains.rs b/node/runtime/pangolin/src/pallets/bridge_parachains.rs
index 20567a0d0b..1c27157843 100644
--- a/node/runtime/pangolin/src/pallets/bridge_parachains.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_parachains.rs
@@ -1,4 +1,4 @@
-pub use pallet_bridge_parachains::Instance1 as WithRococoParachainsInstance;
+pub use pallet_bridge_parachains::{Instance1 as WithRococoParachainsInstance, Instance2 as WithMoonbaseRelayParachainsInstance};
// --- darwinia-network ---
use crate::*;
@@ -13,3 +13,8 @@ impl Config for Runtime {
type HeadsToKeep = RococoHeadersToKeep;
type ParasPalletName = PangolinParasPalletName;
}
+impl Config for Runtime {
+ type BridgesGrandpaPalletInstance = WithMoonbaseRelayGrandpa;
+ type HeadsToKeep = RococoHeadersToKeep;
+ type ParasPalletName = PangolinParasPalletName;
+}
diff --git a/node/runtime/pangolin/src/pallets/fee_market.rs b/node/runtime/pangolin/src/pallets/fee_market.rs
index a61b00aac8..343cea5324 100644
--- a/node/runtime/pangolin/src/pallets/fee_market.rs
+++ b/node/runtime/pangolin/src/pallets/fee_market.rs
@@ -1,5 +1,5 @@
pub use pallet_fee_market::{
- Instance1 as WithPangoroFeeMarket, Instance2 as WithPangolinParachainFeeMarket,
+ Instance1 as WithPangoroFeeMarket, Instance2 as WithPangolinParachainFeeMarket, Instance3 as WithPangolinParachainAlphaFeeMarket
};
// --- core ---
@@ -50,6 +50,8 @@ frame_support::parameter_types! {
pub const PangoroFeeMarketLockId: LockIdentifier = *b"da/feelf";
// Pangolin Parachain configurations.
pub const PangolinParachainFeeMarketLockId: LockIdentifier = *b"da/feepa";
+ // Pangolin Parachain Alpha configurations.
+ pub const PangolinParachainAlphaFeeMarketLockId: LockIdentifier = *b"da/feeph";
}
impl Config for Runtime {
@@ -82,3 +84,18 @@ impl Config for Runtime {
type TreasuryPalletId = TreasuryPalletId;
type WeightInfo = PangolinParachainWeightInfo;
}
+impl Config for Runtime {
+ type AssignedRelayerSlashRatio = AssignedRelayerSlashRatio;
+ type CollateralPerOrder = CollateralPerOrder;
+ type ConfirmRelayersRewardRatio = ConfirmRelayersRewardRatio;
+ type Currency = Ring;
+ type Event = Event;
+ type GuardRelayersRewardRatio = GuardRelayersRewardRatio;
+ type LockId = PangolinParachainAlphaFeeMarketLockId;
+ type MessageRelayersRewardRatio = MessageRelayersRewardRatio;
+ type MinimumRelayFee = MinimumRelayFee;
+ type Slasher = FeeMarketSlasher;
+ type Slot = Slot;
+ type TreasuryPalletId = TreasuryPalletId;
+ type WeightInfo = PangolinParachainWeightInfo;
+}
From 321c092cf85861ba691514944a35b62eb15b2fab Mon Sep 17 00:00:00 2001
From: Guantong <04637@163.com>
Date: Wed, 28 Sep 2022 11:29:38 +0800
Subject: [PATCH 03/10] Fix comiple
---
node/runtime/pangolin/src/lib.rs | 4 ++--
node/runtime/pangolin/src/pallets/bridge_grandpa.rs | 2 +-
node/runtime/pangolin/src/pallets/bridge_messages.rs | 1 +
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/node/runtime/pangolin/src/lib.rs b/node/runtime/pangolin/src/lib.rs
index 36fe4624fa..bdedbbe9bd 100644
--- a/node/runtime/pangolin/src/lib.rs
+++ b/node/runtime/pangolin/src/lib.rs
@@ -245,8 +245,8 @@ frame_support::construct_runtime! {
TransactionPause: module_transaction_pause::{Pallet, Call, Storage, Event} = 54,
// pangolin <> pangolin parachain alpha bridge
- BridgeMoonbaseRelayGrandpa: pallet_bridge_grandpa::::{Pallet, Call, Storage} = 67
- BridgeMoonbaseRelayParachains: pallet_bridge_parachains::::{Pallet, Call, Storage} = 68
+ BridgeMoonbaseRelayGrandpa: pallet_bridge_grandpa::::{Pallet, Call, Storage} = 67,
+ BridgeMoonbaseRelayParachains: pallet_bridge_parachains::::{Pallet, Call, Storage} = 68,
BridgePangolinParachainAlphaDispatch: pallet_bridge_dispatch::::{Pallet, Event} = 69,
BridgePangolinParachainAlphaMessages: pallet_bridge_messages::::{Pallet, Call, Storage, Event} = 70,
PangolinParachainAlphaFeeMarket: pallet_fee_market::::{Pallet, Call, Storage, Event} = 71,
diff --git a/node/runtime/pangolin/src/pallets/bridge_grandpa.rs b/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
index db53d82701..06403003b3 100644
--- a/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
@@ -1,4 +1,4 @@
-pub use pallet_bridge_grandpa::{Instance1 as WithPangoroGrandpa, Instance2 as WithRococoGrandpa, Intance3 as WithMoonbaseRelayGrandpa};
+pub use pallet_bridge_grandpa::{Instance1 as WithPangoroGrandpa, Instance2 as WithRococoGrandpa, Instance3 as WithMoonbaseRelayGrandpa};
// --- paritytech ---
use pallet_bridge_grandpa::Config;
diff --git a/node/runtime/pangolin/src/pallets/bridge_messages.rs b/node/runtime/pangolin/src/pallets/bridge_messages.rs
index e2ca5f4a34..fd3edbca71 100644
--- a/node/runtime/pangolin/src/pallets/bridge_messages.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_messages.rs
@@ -25,6 +25,7 @@ frame_support::parameter_types! {
bp_pangoro::MAX_UNREWARDED_RELAYERS_IN_CONFIRMATION_TX;
// Pangolin Parachain configurations.
pub const PangolinParachainChainId: ChainId = PANGOLIN_PARACHAIN_CHAIN_ID;
+ pub const PangolinParachainAlphaChainId: ChainId = PANGOLIN_PARACHAIN_ALPHA_CHAIN_ID;
pub const PangolinParachainMaxUnconfirmedMessagesAtInboundLane: MessageNonce =
bp_pangolin_parachain::MAX_UNCONFIRMED_MESSAGES_IN_CONFIRMATION_TX;
pub const PangolinParachainMaxUnrewardedRelayerEntriesAtInboundLane: MessageNonce =
From 49768b715399fb5aa444a86642ecd9e972c38a04 Mon Sep 17 00:00:00 2001
From: Guantong <04637@163.com>
Date: Wed, 28 Sep 2022 11:31:15 +0800
Subject: [PATCH 04/10] format
---
.../bridges_message/pangolin_parachain_alpha.rs | 10 +++++-----
.../pangolin/src/pallets/bridge_dispatch.rs | 3 ++-
.../pangolin/src/pallets/bridge_grandpa.rs | 5 ++++-
.../pangolin/src/pallets/bridge_messages.rs | 16 ++++++++++------
.../pangolin/src/pallets/bridge_parachains.rs | 4 +++-
node/runtime/pangolin/src/pallets/fee_market.rs | 3 ++-
6 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
index 40c83d502a..ad78a53412 100644
--- a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
+++ b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
@@ -34,10 +34,8 @@ use bp_messages::{
InboundLaneData, LaneId, Message, MessageNonce, Parameter,
};
use bp_rococo::parachains::ParaId;
-// Modified 1
use bp_runtime::{Chain, ChainId, PANGOLIN_CHAIN_ID, PANGOLIN_PARACHAIN_ALPHA_CHAIN_ID};
use bridge_runtime_common::{
- // Modified 2
lanes::PANGOLIN_PANGOLIN_PARACHAIN_ALPHA_LANE,
messages::{
self,
@@ -146,7 +144,6 @@ impl ChainWithMessages for Pangolin {
impl ThisChainWithMessages for Pangolin {
type Call = Call;
- // Modified 3
fn is_outbound_lane_enabled(lane: &LaneId) -> bool {
*lane == PANGOLIN_PANGOLIN_PARACHAIN_ALPHA_LANE
}
@@ -243,8 +240,11 @@ impl BridgedChainWithMessages for PangolinParachainAlpha {
)
}
}
-impl TargetHeaderChain::AccountId>
- for PangolinParachainAlpha
+impl
+ TargetHeaderChain<
+ ToPangolinParachainAlphaMessagePayload,
+ ::AccountId,
+ > for PangolinParachainAlpha
{
type Error = &'static str;
type MessagesDeliveryProof = ToPangolinParachainAlphaMessagesDeliveryProof;
diff --git a/node/runtime/pangolin/src/pallets/bridge_dispatch.rs b/node/runtime/pangolin/src/pallets/bridge_dispatch.rs
index f275cf507b..cdeb5585ed 100644
--- a/node/runtime/pangolin/src/pallets/bridge_dispatch.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_dispatch.rs
@@ -1,5 +1,6 @@
pub use pallet_bridge_dispatch::{
- Instance1 as WithPangoroDispatch, Instance2 as WithPangolinParachainDispatch, Instance3 as WithPangolinParachainAlphaDispatch
+ Instance1 as WithPangoroDispatch, Instance2 as WithPangolinParachainDispatch,
+ Instance3 as WithPangolinParachainAlphaDispatch,
};
// --- paritytech ---
diff --git a/node/runtime/pangolin/src/pallets/bridge_grandpa.rs b/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
index 06403003b3..9b8668cf91 100644
--- a/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_grandpa.rs
@@ -1,4 +1,7 @@
-pub use pallet_bridge_grandpa::{Instance1 as WithPangoroGrandpa, Instance2 as WithRococoGrandpa, Instance3 as WithMoonbaseRelayGrandpa};
+pub use pallet_bridge_grandpa::{
+ Instance1 as WithPangoroGrandpa, Instance2 as WithRococoGrandpa,
+ Instance3 as WithMoonbaseRelayGrandpa,
+};
// --- paritytech ---
use pallet_bridge_grandpa::Config;
diff --git a/node/runtime/pangolin/src/pallets/bridge_messages.rs b/node/runtime/pangolin/src/pallets/bridge_messages.rs
index fd3edbca71..e915a59948 100644
--- a/node/runtime/pangolin/src/pallets/bridge_messages.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_messages.rs
@@ -1,11 +1,14 @@
pub use pallet_bridge_messages::{
- Instance1 as WithPangoroMessages, Instance2 as WithPangolinParachainMessages, Instance3 as WithPangolinParachainAlphaMessages
+ Instance1 as WithPangoroMessages, Instance2 as WithPangolinParachainMessages,
+ Instance3 as WithPangolinParachainAlphaMessages,
};
// --- darwinia-network ---
use crate::*;
use bp_messages::MessageNonce;
-use bp_runtime::{ChainId, PANGOLIN_PARACHAIN_CHAIN_ID, PANGOLIN_PARACHAIN_ALPHA_CHAIN_ID, PANGORO_CHAIN_ID};
+use bp_runtime::{
+ ChainId, PANGOLIN_PARACHAIN_ALPHA_CHAIN_ID, PANGOLIN_PARACHAIN_CHAIN_ID, PANGORO_CHAIN_ID,
+};
use darwinia_support::evm::{ConcatConverter, DeriveSubstrateAddress};
use pallet_bridge_messages::Config;
use pallet_fee_market::s2s::{
@@ -93,19 +96,20 @@ impl Config for Runtime {
type MaxMessagesToPruneAtOnce = MaxMessagesToPruneAtOnce;
type MaxUnconfirmedMessagesAtInboundLane = PangolinParachainMaxUnconfirmedMessagesAtInboundLane;
type MaxUnrewardedRelayerEntriesAtInboundLane =
- PangolinParachainMaxUnrewardedRelayerEntriesAtInboundLane;
+ PangolinParachainMaxUnrewardedRelayerEntriesAtInboundLane;
type MessageDeliveryAndDispatchPayment =
- FeeMarketPayment;
+ FeeMarketPayment;
type MessageDispatch = bm_pangolin_parachain_alpha::FromPangolinParachainAlphaMessageDispatch;
type OnDeliveryConfirmed = (
ToPangolinParachainBacking,
FeeMarketMessageConfirmedHandler,
);
- type OnMessageAccepted = FeeMarketMessageAcceptedHandler;
+ type OnMessageAccepted =
+ FeeMarketMessageAcceptedHandler;
type OutboundMessageFee = bp_pangolin::Balance;
type OutboundPayload = bm_pangolin_parachain_alpha::ToPangolinParachainAlphaMessagePayload;
type Parameter = bm_pangolin_parachain_alpha::PangolinToPangolinParachainAlphaParameter;
type SourceHeaderChain = bm_pangolin_parachain_alpha::PangolinParachainAlpha;
type TargetHeaderChain = bm_pangolin_parachain_alpha::PangolinParachainAlpha;
type WeightInfo = ();
-}
\ No newline at end of file
+}
diff --git a/node/runtime/pangolin/src/pallets/bridge_parachains.rs b/node/runtime/pangolin/src/pallets/bridge_parachains.rs
index 1c27157843..df73e1d54a 100644
--- a/node/runtime/pangolin/src/pallets/bridge_parachains.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_parachains.rs
@@ -1,4 +1,6 @@
-pub use pallet_bridge_parachains::{Instance1 as WithRococoParachainsInstance, Instance2 as WithMoonbaseRelayParachainsInstance};
+pub use pallet_bridge_parachains::{
+ Instance1 as WithRococoParachainsInstance, Instance2 as WithMoonbaseRelayParachainsInstance,
+};
// --- darwinia-network ---
use crate::*;
diff --git a/node/runtime/pangolin/src/pallets/fee_market.rs b/node/runtime/pangolin/src/pallets/fee_market.rs
index 343cea5324..b69c06e5ea 100644
--- a/node/runtime/pangolin/src/pallets/fee_market.rs
+++ b/node/runtime/pangolin/src/pallets/fee_market.rs
@@ -1,5 +1,6 @@
pub use pallet_fee_market::{
- Instance1 as WithPangoroFeeMarket, Instance2 as WithPangolinParachainFeeMarket, Instance3 as WithPangolinParachainAlphaFeeMarket
+ Instance1 as WithPangoroFeeMarket, Instance2 as WithPangolinParachainFeeMarket,
+ Instance3 as WithPangolinParachainAlphaFeeMarket,
};
// --- core ---
From 8c0c886ba7a738a85e047c0e9e9abe7d59068e07 Mon Sep 17 00:00:00 2001
From: Guantong <04637@163.com>
Date: Wed, 28 Sep 2022 11:36:33 +0800
Subject: [PATCH 05/10] resolve conflicts
---
node/runtime/pangolin/src/pallets/bridge_messages.rs | 1 -
1 file changed, 1 deletion(-)
diff --git a/node/runtime/pangolin/src/pallets/bridge_messages.rs b/node/runtime/pangolin/src/pallets/bridge_messages.rs
index e915a59948..dc26cee10b 100644
--- a/node/runtime/pangolin/src/pallets/bridge_messages.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_messages.rs
@@ -9,7 +9,6 @@ use bp_messages::MessageNonce;
use bp_runtime::{
ChainId, PANGOLIN_PARACHAIN_ALPHA_CHAIN_ID, PANGOLIN_PARACHAIN_CHAIN_ID, PANGORO_CHAIN_ID,
};
-use darwinia_support::evm::{ConcatConverter, DeriveSubstrateAddress};
use pallet_bridge_messages::Config;
use pallet_fee_market::s2s::{
FeeMarketMessageAcceptedHandler, FeeMarketMessageConfirmedHandler, FeeMarketPayment,
From 905a5d63df9cb40c23cda20319b199154a19e95c Mon Sep 17 00:00:00 2001
From: Guantong <04637@163.com>
Date: Wed, 28 Sep 2022 15:24:27 +0800
Subject: [PATCH 06/10] update pallet id
---
node/runtime/pangolin/src/lib.rs | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/node/runtime/pangolin/src/lib.rs b/node/runtime/pangolin/src/lib.rs
index d3a8a4169c..6dd0afeb6b 100644
--- a/node/runtime/pangolin/src/lib.rs
+++ b/node/runtime/pangolin/src/lib.rs
@@ -248,11 +248,11 @@ frame_support::construct_runtime! {
TransactionPause: module_transaction_pause::{Pallet, Call, Storage, Event} = 54,
// pangolin <> pangolin parachain alpha bridge
- BridgeMoonbaseRelayGrandpa: pallet_bridge_grandpa::::{Pallet, Call, Storage} = 67,
- BridgeMoonbaseRelayParachains: pallet_bridge_parachains::::{Pallet, Call, Storage} = 68,
- BridgePangolinParachainAlphaDispatch: pallet_bridge_dispatch::::{Pallet, Event} = 69,
- BridgePangolinParachainAlphaMessages: pallet_bridge_messages::::{Pallet, Call, Storage, Event} = 70,
- PangolinParachainAlphaFeeMarket: pallet_fee_market::::{Pallet, Call, Storage, Event} = 71,
+ BridgeMoonbaseRelayGrandpa: pallet_bridge_grandpa::::{Pallet, Call, Storage} = 68,
+ BridgeMoonbaseRelayParachains: pallet_bridge_parachains::::{Pallet, Call, Storage} = 69,
+ BridgePangolinParachainAlphaDispatch: pallet_bridge_dispatch::::{Pallet, Event} = 70,
+ BridgePangolinParachainAlphaMessages: pallet_bridge_messages::::{Pallet, Call, Storage, Event} = 71,
+ PangolinParachainAlphaFeeMarket: pallet_fee_market::::{Pallet, Call, Storage, Event} = 72,
// Substrate2SubstrateIssuing: from_substrate_issuing::{Pallet, Call, Storage, Config, Event} = 49,
ToPangolinParachainBacking: to_parachain_backing::{Pallet, Call, Storage, Config, Event} = 65,
From 0894b8b1a741f7e9c5169b870f0d4a07a856455b Mon Sep 17 00:00:00 2001
From: Guantong <04637@163.com>
Date: Wed, 28 Sep 2022 15:42:45 +0800
Subject: [PATCH 07/10] fix review
---
node/runtime/pangolin/src/pallets/bridge_messages.rs | 2 +-
node/runtime/pangolin/src/pallets/bridge_parachains.rs | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/node/runtime/pangolin/src/pallets/bridge_messages.rs b/node/runtime/pangolin/src/pallets/bridge_messages.rs
index b278bce371..6c4cb340ad 100644
--- a/node/runtime/pangolin/src/pallets/bridge_messages.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_messages.rs
@@ -94,7 +94,7 @@ impl Config for Runtime {
type MaxUnrewardedRelayerEntriesAtInboundLane =
PangolinParachainMaxUnrewardedRelayerEntriesAtInboundLane;
type MessageDeliveryAndDispatchPayment =
- FeeMarketPayment;
+ FeeMarketPayment;
type MessageDispatch = bm_pangolin_parachain_alpha::FromPangolinParachainAlphaMessageDispatch;
type OnDeliveryConfirmed = (
ToPangolinParachainBacking,
diff --git a/node/runtime/pangolin/src/pallets/bridge_parachains.rs b/node/runtime/pangolin/src/pallets/bridge_parachains.rs
index 8e242f0f78..f3ffe2e374 100644
--- a/node/runtime/pangolin/src/pallets/bridge_parachains.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_parachains.rs
@@ -13,5 +13,4 @@ impl Config for Runtime {
impl Config for Runtime {
type BridgesGrandpaPalletInstance = WithMoonbaseRelayGrandpa;
type HeadsToKeep = RococoHeadersToKeep;
- type ParasPalletName = PangolinParasPalletName;
}
From 1d799735a18a00368acab9c710b2dff666018daa Mon Sep 17 00:00:00 2001
From: Guantong <04637@163.com>
Date: Wed, 28 Sep 2022 15:59:25 +0800
Subject: [PATCH 08/10] fix compile
---
.../pangolin_parachain_alpha.rs | 27 +++----------------
.../pangolin/src/pallets/bridge_messages.rs | 2 +-
2 files changed, 4 insertions(+), 25 deletions(-)
diff --git a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
index ad78a53412..5c345e91b0 100644
--- a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
+++ b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
@@ -44,7 +44,7 @@ use bridge_runtime_common::{
self, FromBridgedChainEncodedMessageCall, FromBridgedChainMessageDispatch,
FromBridgedChainMessagePayload, FromBridgedChainMessagesProof,
},
- BalanceOf, BridgedChainWithMessages, ChainWithMessages, MessageBridge, MessageTransaction,
+ BridgedChainWithMessages, ChainWithMessages, MessageBridge, MessageTransaction,
ThisChainWithMessages,
},
};
@@ -122,12 +122,6 @@ impl MessageBridge for WithPangolinParachainAlphaMessageBridge {
bp_pangolin::WITH_PANGOLIN_MESSAGES_PALLET_NAME;
const RELAYER_FEE_PERCENT: u32 = 10;
const THIS_CHAIN_ID: ChainId = PANGOLIN_CHAIN_ID;
-
- fn bridged_balance_to_this_balance(
- bridged_balance: BalanceOf,
- ) -> BalanceOf {
- PangolinParachainAlphaToPangolinConversionRate::get().saturating_mul_int(bridged_balance)
- }
}
/// Pangolin chain from message lane point of view.
@@ -143,8 +137,9 @@ impl ChainWithMessages for Pangolin {
}
impl ThisChainWithMessages for Pangolin {
type Call = Call;
+ type Origin = Origin;
- fn is_outbound_lane_enabled(lane: &LaneId) -> bool {
+ fn is_message_accepted(_send_origin: &Self::Origin, lane: &LaneId) -> bool {
*lane == PANGOLIN_PANGOLIN_PARACHAIN_ALPHA_LANE
}
@@ -152,22 +147,6 @@ impl ThisChainWithMessages for Pangolin {
MessageNonce::MAX
}
- fn estimate_delivery_confirmation_transaction() -> MessageTransaction {
- let inbound_data_size = InboundLaneData::::encoded_size_hint(
- bp_pangolin::MAXIMAL_ENCODED_ACCOUNT_ID_SIZE,
- 1,
- 1,
- )
- .unwrap_or(u32::MAX);
-
- MessageTransaction {
- dispatch_weight: bp_pangolin::MAX_SINGLE_MESSAGE_DELIVERY_CONFIRMATION_TX_WEIGHT,
- size: inbound_data_size
- .saturating_add(bp_pangolin::EXTRA_STORAGE_PROOF_SIZE)
- .saturating_add(bp_pangolin::TX_EXTRA_BYTES),
- }
- }
-
fn transaction_payment(transaction: MessageTransaction) -> Self::Balance {
// in our testnets, both per-byte fee and weight-to-fee are 1:1
messages::transaction_payment(
diff --git a/node/runtime/pangolin/src/pallets/bridge_messages.rs b/node/runtime/pangolin/src/pallets/bridge_messages.rs
index 6c4cb340ad..29c31c8adf 100644
--- a/node/runtime/pangolin/src/pallets/bridge_messages.rs
+++ b/node/runtime/pangolin/src/pallets/bridge_messages.rs
@@ -94,7 +94,7 @@ impl Config for Runtime {
type MaxUnrewardedRelayerEntriesAtInboundLane =
PangolinParachainMaxUnrewardedRelayerEntriesAtInboundLane;
type MessageDeliveryAndDispatchPayment =
- FeeMarketPayment;
+ FeeMarketPayment;
type MessageDispatch = bm_pangolin_parachain_alpha::FromPangolinParachainAlphaMessageDispatch;
type OnDeliveryConfirmed = (
ToPangolinParachainBacking,
From 0f7ece4ff3872e01ae80aa1b5d40ec2acbe8d42c Mon Sep 17 00:00:00 2001
From: Xavier Lau
Date: Fri, 30 Sep 2022 10:23:42 +0800
Subject: [PATCH 09/10] Remove outdate code
---
.../pangolin_parachain_alpha.rs | 38 -------------------
1 file changed, 38 deletions(-)
diff --git a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
index 5c345e91b0..a0d277f31b 100644
--- a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
+++ b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
@@ -180,44 +180,6 @@ impl BridgedChainWithMessages for PangolinParachainAlpha {
);
0..=upper_limit
}
-
- fn estimate_delivery_transaction(
- message_payload: &[u8],
- include_pay_dispatch_fee_cost: bool,
- message_dispatch_weight: Weight,
- ) -> MessageTransaction {
- let message_payload_len = u32::try_from(message_payload.len()).unwrap_or(u32::MAX);
- let extra_bytes_in_payload = Weight::from(message_payload_len)
- .saturating_sub(EXPECTED_DEFAULT_MESSAGE_LENGTH.into());
-
- MessageTransaction {
- dispatch_weight: extra_bytes_in_payload
- .saturating_mul(bp_pangolin::ADDITIONAL_MESSAGE_BYTE_DELIVERY_WEIGHT)
- .saturating_add(bp_pangolin::DEFAULT_MESSAGE_DELIVERY_TX_WEIGHT)
- .saturating_add(message_dispatch_weight)
- .saturating_sub(if include_pay_dispatch_fee_cost {
- 0
- } else {
- bp_pangolin::PAY_INBOUND_DISPATCH_FEE_WEIGHT
- }),
- size: message_payload_len
- .saturating_add(bp_pangolin::EXTRA_STORAGE_PROOF_SIZE)
- .saturating_add(bp_pangolin::TX_EXTRA_BYTES),
- }
- }
-
- fn transaction_payment(transaction: MessageTransaction) -> Self::Balance {
- // in our testnets, both per-byte fee and weight-to-fee are 1:1
- messages::transaction_payment(
- bp_pangolin_parachain::RuntimeBlockWeights::get()
- .get(DispatchClass::Normal)
- .base_extrinsic,
- 1,
- FixedU128::zero(),
- |weight| weight as _,
- transaction,
- )
- }
}
impl
TargetHeaderChain<
From 00f180c9279767b27a82d54c95342364c354953f Mon Sep 17 00:00:00 2001
From: Xavier Lau
Date: Fri, 30 Sep 2022 10:32:29 +0800
Subject: [PATCH 10/10] Fixes
---
Cargo.lock | 2 +-
.../pangolin_parachain_alpha.rs | 29 +++++--------------
.../pangolin/src/pallets/fee_market.rs | 2 +-
3 files changed, 9 insertions(+), 24 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 7b7e85e7c6..6f9aa4c8f1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -10264,7 +10264,7 @@ version = "1.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
dependencies = [
- "cfg-if 1.0.0",
+ "cfg-if 0.1.10",
"rand 0.8.5",
"static_assertions",
]
diff --git a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
index a0d277f31b..7de52a9a47 100644
--- a/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
+++ b/node/runtime/pangolin/src/bridges_message/pangolin_parachain_alpha.rs
@@ -20,11 +20,8 @@
use codec::{Decode, Encode};
use scale_info::TypeInfo;
// --- paritytech ---
-use frame_support::{
- weights::{DispatchClass, Weight},
- RuntimeDebug,
-};
-use sp_runtime::{traits::Zero, FixedPointNumber, FixedU128};
+use frame_support::{weights::Weight, RuntimeDebug};
+use sp_runtime::{FixedPointNumber, FixedU128};
use sp_std::ops::RangeInclusive;
// --- darwinia-network ---
use crate::*;
@@ -38,18 +35,17 @@ use bp_runtime::{Chain, ChainId, PANGOLIN_CHAIN_ID, PANGOLIN_PARACHAIN_ALPHA_CHA
use bridge_runtime_common::{
lanes::PANGOLIN_PANGOLIN_PARACHAIN_ALPHA_LANE,
messages::{
- self,
- source::{self, FromBridgedChainMessagesDeliveryProof, FromThisChainMessagePayload},
+ source::{
+ self, FromBridgedChainMessagesDeliveryProof, FromThisChainMessagePayload,
+ FromThisChainMessageVerifier,
+ },
target::{
self, FromBridgedChainEncodedMessageCall, FromBridgedChainMessageDispatch,
FromBridgedChainMessagePayload, FromBridgedChainMessagesProof,
},
- BridgedChainWithMessages, ChainWithMessages, MessageBridge, MessageTransaction,
- ThisChainWithMessages,
+ BridgedChainWithMessages, ChainWithMessages, MessageBridge, ThisChainWithMessages,
},
};
-use drml_common_runtime::impls::FromThisChainMessageVerifier;
-use pallet_bridge_messages::EXPECTED_DEFAULT_MESSAGE_LENGTH;
/// Message delivery proof for Pangolin -> PangolinParachainAlpha messages.
type ToPangolinParachainAlphaMessagesDeliveryProof =
@@ -146,17 +142,6 @@ impl ThisChainWithMessages for Pangolin {
fn maximal_pending_messages_at_outbound_lane() -> MessageNonce {
MessageNonce::MAX
}
-
- fn transaction_payment(transaction: MessageTransaction) -> Self::Balance {
- // in our testnets, both per-byte fee and weight-to-fee are 1:1
- messages::transaction_payment(
- RuntimeBlockWeights::get().get(DispatchClass::Normal).base_extrinsic,
- 1,
- FixedU128::zero(),
- |weight| weight as _,
- transaction,
- )
- }
}
#[derive(Clone, Copy, RuntimeDebug)]
diff --git a/node/runtime/pangolin/src/pallets/fee_market.rs b/node/runtime/pangolin/src/pallets/fee_market.rs
index a592bf2607..9a8b6ce5cf 100644
--- a/node/runtime/pangolin/src/pallets/fee_market.rs
+++ b/node/runtime/pangolin/src/pallets/fee_market.rs
@@ -90,8 +90,8 @@ impl Config for Runtime {
type CollateralPerOrder = CollateralPerOrder;
type ConfirmRelayersRewardRatio = ConfirmRelayersRewardRatio;
type Currency = Ring;
+ type DutyRelayersRewardRatio = DutyRelayersRewardRatio;
type Event = Event;
- type GuardRelayersRewardRatio = GuardRelayersRewardRatio;
type LockId = PangolinParachainAlphaFeeMarketLockId;
type MessageRelayersRewardRatio = MessageRelayersRewardRatio;
type MinimumRelayFee = MinimumRelayFee;