mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 22:51:13 +00:00
Reject transactions if bridge pallets are halted (#2600)
* reject transactions if bridge pallets are halted * fixed CI (#2598)
This commit is contained in:
committed by
Bastian Köcher
parent
2d15d1062f
commit
fe90a2d8ce
@@ -18,6 +18,7 @@ use crate::messages::{
|
||||
source::FromBridgedChainMessagesDeliveryProof, target::FromBridgedChainMessagesProof,
|
||||
};
|
||||
use bp_messages::{target_chain::MessageDispatch, InboundLaneData, LaneId, MessageNonce};
|
||||
use bp_runtime::OwnedBridgeModule;
|
||||
use frame_support::{
|
||||
dispatch::CallableCallFor,
|
||||
traits::{Get, IsSubType},
|
||||
@@ -278,7 +279,17 @@ impl<
|
||||
}
|
||||
|
||||
fn check_obsolete_call(&self) -> TransactionValidity {
|
||||
let is_pallet_halted = Pallet::<T, I>::ensure_not_halted().is_err();
|
||||
match self.call_info() {
|
||||
Some(proof_info) if is_pallet_halted => {
|
||||
log::trace!(
|
||||
target: pallet_bridge_messages::LOG_TARGET,
|
||||
"Rejecting messages transaction on halted pallet: {:?}",
|
||||
proof_info
|
||||
);
|
||||
|
||||
return sp_runtime::transaction_validity::InvalidTransaction::Call.into()
|
||||
},
|
||||
Some(CallInfo::ReceiveMessagesProof(proof_info))
|
||||
if proof_info.is_obsolete(T::MessageDispatch::is_active()) =>
|
||||
{
|
||||
@@ -291,7 +302,7 @@ impl<
|
||||
return sp_runtime::transaction_validity::InvalidTransaction::Stale.into()
|
||||
},
|
||||
Some(CallInfo::ReceiveMessagesDeliveryProof(proof_info))
|
||||
if proof_info.is_obsolete() =>
|
||||
if is_pallet_halted || proof_info.is_obsolete() =>
|
||||
{
|
||||
log::trace!(
|
||||
target: pallet_bridge_messages::LOG_TARGET,
|
||||
|
||||
@@ -838,21 +838,23 @@ mod tests {
|
||||
mock::*,
|
||||
};
|
||||
use bp_messages::{
|
||||
DeliveredMessages, InboundLaneData, MessageNonce, OutboundLaneData, UnrewardedRelayer,
|
||||
UnrewardedRelayersState,
|
||||
DeliveredMessages, InboundLaneData, MessageNonce, MessagesOperatingMode, OutboundLaneData,
|
||||
UnrewardedRelayer, UnrewardedRelayersState,
|
||||
};
|
||||
use bp_parachains::{BestParaHeadHash, ParaInfo};
|
||||
use bp_polkadot_core::parachains::{ParaHeadsProof, ParaId};
|
||||
use bp_runtime::HeaderId;
|
||||
use bp_runtime::{BasicOperatingMode, HeaderId};
|
||||
use bp_test_utils::{make_default_justification, test_keyring};
|
||||
use frame_support::{
|
||||
assert_storage_noop, parameter_types,
|
||||
traits::{fungible::Mutate, ReservableCurrency},
|
||||
weights::Weight,
|
||||
};
|
||||
use pallet_bridge_grandpa::{Call as GrandpaCall, StoredAuthoritySet};
|
||||
use pallet_bridge_messages::Call as MessagesCall;
|
||||
use pallet_bridge_parachains::{Call as ParachainsCall, RelayBlockHash};
|
||||
use pallet_bridge_grandpa::{Call as GrandpaCall, Pallet as GrandpaPallet, StoredAuthoritySet};
|
||||
use pallet_bridge_messages::{Call as MessagesCall, Pallet as MessagesPallet};
|
||||
use pallet_bridge_parachains::{
|
||||
Call as ParachainsCall, Pallet as ParachainsPallet, RelayBlockHash,
|
||||
};
|
||||
use sp_runtime::{
|
||||
traits::{ConstU64, Header as HeaderT},
|
||||
transaction_validity::{InvalidTransaction, ValidTransaction},
|
||||
@@ -1592,6 +1594,99 @@ mod tests {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ext_rejects_batch_with_grandpa_finality_proof_when_grandpa_pallet_is_halted() {
|
||||
run_test(|| {
|
||||
initialize_environment(100, 100, 100);
|
||||
|
||||
GrandpaPallet::<TestRuntime, ()>::set_operating_mode(
|
||||
RuntimeOrigin::root(),
|
||||
BasicOperatingMode::Halted,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
run_pre_dispatch(all_finality_and_delivery_batch_call(200, 200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
assert_eq!(
|
||||
run_pre_dispatch(all_finality_and_confirmation_batch_call(200, 200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ext_rejects_batch_with_parachain_finality_proof_when_parachains_pallet_is_halted() {
|
||||
run_test(|| {
|
||||
initialize_environment(100, 100, 100);
|
||||
|
||||
ParachainsPallet::<TestRuntime, ()>::set_operating_mode(
|
||||
RuntimeOrigin::root(),
|
||||
BasicOperatingMode::Halted,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
run_pre_dispatch(all_finality_and_delivery_batch_call(200, 200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
assert_eq!(
|
||||
run_pre_dispatch(all_finality_and_confirmation_batch_call(200, 200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
run_pre_dispatch(parachain_finality_and_delivery_batch_call(200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
assert_eq!(
|
||||
run_pre_dispatch(parachain_finality_and_confirmation_batch_call(200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ext_rejects_transaction_when_messages_pallet_is_halted() {
|
||||
run_test(|| {
|
||||
initialize_environment(100, 100, 100);
|
||||
|
||||
MessagesPallet::<TestRuntime, ()>::set_operating_mode(
|
||||
RuntimeOrigin::root(),
|
||||
MessagesOperatingMode::Basic(BasicOperatingMode::Halted),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
run_pre_dispatch(all_finality_and_delivery_batch_call(200, 200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
assert_eq!(
|
||||
run_pre_dispatch(all_finality_and_confirmation_batch_call(200, 200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
run_pre_dispatch(parachain_finality_and_delivery_batch_call(200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
assert_eq!(
|
||||
run_pre_dispatch(parachain_finality_and_confirmation_batch_call(200, 200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
run_pre_dispatch(message_delivery_call(200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
assert_eq!(
|
||||
run_pre_dispatch(message_confirmation_call(200)),
|
||||
Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_dispatch_parses_batch_with_relay_chain_and_parachain_headers() {
|
||||
run_test(|| {
|
||||
|
||||
Reference in New Issue
Block a user