mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 09:21:05 +00:00
DeliveryConfirmationPayments trait for paying relayer rewards at the source chain (#1653)
* DeliveryConfirmationPayments * ref proper PR in TODO
This commit is contained in:
committed by
Bastian Köcher
parent
7014046485
commit
aeeb53343e
@@ -28,7 +28,7 @@ use sp_std::marker::PhantomData;
|
||||
use weights::WeightInfo;
|
||||
|
||||
pub use pallet::*;
|
||||
pub use payment_adapter::MessageDeliveryAndDispatchPaymentAdapter;
|
||||
pub use payment_adapter::DeliveryConfirmationPaymentsAdapter;
|
||||
|
||||
pub mod benchmarking;
|
||||
|
||||
|
||||
@@ -18,9 +18,7 @@
|
||||
|
||||
use crate as pallet_bridge_relayers;
|
||||
|
||||
use bp_messages::{
|
||||
source_chain::ForbidOutboundMessages, target_chain::ForbidInboundMessages, LaneId,
|
||||
};
|
||||
use bp_messages::LaneId;
|
||||
use bp_relayers::PaymentProcedure;
|
||||
use frame_support::{parameter_types, weights::RuntimeDbWeight};
|
||||
use sp_core::H256;
|
||||
@@ -43,7 +41,6 @@ frame_support::construct_runtime! {
|
||||
{
|
||||
System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
|
||||
Balances: pallet_balances::{Pallet, Event<T>},
|
||||
Messages: pallet_bridge_messages::{Pallet, Event<T>},
|
||||
Relayers: pallet_bridge_relayers::{Pallet, Call, Event<T>},
|
||||
}
|
||||
}
|
||||
@@ -91,34 +88,6 @@ impl pallet_balances::Config for TestRuntime {
|
||||
type ReserveIdentifier = ();
|
||||
}
|
||||
|
||||
parameter_types! {
|
||||
pub const TestBridgedChainId: bp_runtime::ChainId = *b"test";
|
||||
pub ActiveOutboundLanes: &'static [bp_messages::LaneId] = &[[0, 0, 0, 0]];
|
||||
}
|
||||
|
||||
// we're not testing messages pallet here, so values in this config might be crazy
|
||||
impl pallet_bridge_messages::Config for TestRuntime {
|
||||
type RuntimeEvent = RuntimeEvent;
|
||||
type WeightInfo = ();
|
||||
type ActiveOutboundLanes = ActiveOutboundLanes;
|
||||
type MaxUnrewardedRelayerEntriesAtInboundLane = frame_support::traits::ConstU64<8>;
|
||||
type MaxUnconfirmedMessagesAtInboundLane = frame_support::traits::ConstU64<8>;
|
||||
|
||||
type MaximalOutboundPayloadSize = frame_support::traits::ConstU32<1024>;
|
||||
type OutboundPayload = ();
|
||||
|
||||
type InboundPayload = ();
|
||||
type InboundRelayer = AccountId;
|
||||
|
||||
type TargetHeaderChain = ForbidOutboundMessages;
|
||||
type LaneMessageVerifier = ForbidOutboundMessages;
|
||||
type MessageDeliveryAndDispatchPayment = ();
|
||||
|
||||
type SourceHeaderChain = ForbidInboundMessages;
|
||||
type MessageDispatch = ForbidInboundMessages;
|
||||
type BridgedChainId = TestBridgedChainId;
|
||||
}
|
||||
|
||||
impl pallet_bridge_relayers::Config for TestRuntime {
|
||||
type RuntimeEvent = RuntimeEvent;
|
||||
type Reward = Balance;
|
||||
|
||||
@@ -19,22 +19,25 @@
|
||||
|
||||
use crate::{Config, Pallet};
|
||||
|
||||
use bp_messages::source_chain::{MessageDeliveryAndDispatchPayment, RelayersRewards};
|
||||
use frame_support::sp_runtime::SaturatedConversion;
|
||||
use bp_messages::source_chain::{
|
||||
DeliveryConfirmationPayments, MessageDeliveryAndDispatchPayment, RelayersRewards,
|
||||
};
|
||||
use frame_support::{sp_runtime::SaturatedConversion, traits::Get};
|
||||
use sp_arithmetic::traits::{Saturating, UniqueSaturatedFrom, Zero};
|
||||
use sp_std::{collections::vec_deque::VecDeque, marker::PhantomData, ops::RangeInclusive};
|
||||
|
||||
/// Adapter that allows relayers pallet to be used as a delivery+dispatch payment mechanism
|
||||
/// for the messages pallet.
|
||||
pub struct MessageDeliveryAndDispatchPaymentAdapter<T, MessagesInstance>(
|
||||
PhantomData<(T, MessagesInstance)>,
|
||||
pub struct DeliveryConfirmationPaymentsAdapter<T, DeliveryReward, ConfirmationReward>(
|
||||
PhantomData<(T, DeliveryReward, ConfirmationReward)>,
|
||||
);
|
||||
|
||||
impl<T, MessagesInstance> MessageDeliveryAndDispatchPayment<T::RuntimeOrigin, T::AccountId>
|
||||
for MessageDeliveryAndDispatchPaymentAdapter<T, MessagesInstance>
|
||||
// TODO (https://github.com/paritytech/parity-bridges-common/pull/1652): this impl must be removed
|
||||
impl<T, DeliveryReward, ConfirmationReward>
|
||||
MessageDeliveryAndDispatchPayment<T::RuntimeOrigin, T::AccountId>
|
||||
for DeliveryConfirmationPaymentsAdapter<T, DeliveryReward, ConfirmationReward>
|
||||
where
|
||||
T: Config + pallet_bridge_messages::Config<MessagesInstance>,
|
||||
MessagesInstance: 'static,
|
||||
T: Config,
|
||||
{
|
||||
type Error = &'static str;
|
||||
|
||||
@@ -44,23 +47,47 @@ where
|
||||
confirmation_relayer: &T::AccountId,
|
||||
received_range: &RangeInclusive<bp_messages::MessageNonce>,
|
||||
) {
|
||||
let relayers_rewards = pallet_bridge_messages::calc_relayers_rewards::<T, MessagesInstance>(
|
||||
messages_relayers,
|
||||
received_range,
|
||||
);
|
||||
let relayers_rewards =
|
||||
bp_messages::calc_relayers_rewards::<T::AccountId>(messages_relayers, received_range);
|
||||
|
||||
register_relayers_rewards::<T>(
|
||||
confirmation_relayer,
|
||||
relayers_rewards,
|
||||
lane_id,
|
||||
// TODO (https://github.com/paritytech/parity-bridges-common/issues/1318): this shall be fixed
|
||||
// in some way. ATM the future of the `register_relayer_reward` is not yet known
|
||||
100_000_u32.into(),
|
||||
10_000_u32.into(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, DeliveryReward, ConfirmationReward> DeliveryConfirmationPayments<T::AccountId>
|
||||
for DeliveryConfirmationPaymentsAdapter<T, DeliveryReward, ConfirmationReward>
|
||||
where
|
||||
T: Config,
|
||||
DeliveryReward: Get<T::Reward>,
|
||||
ConfirmationReward: Get<T::Reward>,
|
||||
{
|
||||
type Error = &'static str;
|
||||
|
||||
fn pay_reward(
|
||||
lane_id: bp_messages::LaneId,
|
||||
messages_relayers: VecDeque<bp_messages::UnrewardedRelayer<T::AccountId>>,
|
||||
confirmation_relayer: &T::AccountId,
|
||||
received_range: &RangeInclusive<bp_messages::MessageNonce>,
|
||||
) {
|
||||
let relayers_rewards =
|
||||
bp_messages::calc_relayers_rewards::<T::AccountId>(messages_relayers, received_range);
|
||||
|
||||
register_relayers_rewards::<T>(
|
||||
confirmation_relayer,
|
||||
relayers_rewards,
|
||||
lane_id,
|
||||
DeliveryReward::get(),
|
||||
ConfirmationReward::get(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Update rewards to given relayers, optionally rewarding confirmation relayer.
|
||||
fn register_relayers_rewards<T: Config>(
|
||||
confirmation_relayer: &T::AccountId,
|
||||
|
||||
Reference in New Issue
Block a user