Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[To be merged in another PR]: small improvment on top of transaction extension PR #5440

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions bridges/bin/runtime-common/src/extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,11 +274,9 @@ macro_rules! generate_bridge_reject_obsolete_headers_and_messages {
($call:ty, $account_id:ty, $($filter_call:ty),*) => {
#[derive(Clone, codec::Decode, Default, codec::Encode, Eq, PartialEq, sp_runtime::RuntimeDebug, scale_info::TypeInfo)]
pub struct BridgeRejectObsoleteHeadersAndMessages;
impl sp_runtime::traits::TransactionExtensionBase for BridgeRejectObsoleteHeadersAndMessages {
impl sp_runtime::traits::TransactionExtension<$call> for BridgeRejectObsoleteHeadersAndMessages {
const IDENTIFIER: &'static str = "BridgeRejectObsoleteHeadersAndMessages";
type Implicit = ();
}
impl sp_runtime::traits::TransactionExtension<$call> for BridgeRejectObsoleteHeadersAndMessages {
type Pre = Option<(
$account_id,
( $(
Expand Down
17 changes: 7 additions & 10 deletions bridges/chains/chain-polkadot-bulletin/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ use frame_system::limits;
use scale_info::TypeInfo;
use sp_runtime::{
impl_tx_ext_default,
traits::{Dispatchable, TransactionExtensionBase},
traits::{Dispatchable},
transaction_validity::TransactionValidityError,
Perbill, StateVersion,
};
Expand Down Expand Up @@ -96,19 +96,16 @@ pub type TransactionExtensionSchema = GenericTransactionExtension<(
#[derive(Encode, Decode, Debug, PartialEq, Eq, Clone, TypeInfo)]
pub struct TransactionExtension(TransactionExtensionSchema);

impl TransactionExtensionBase for TransactionExtension {
const IDENTIFIER: &'static str = "Not needed.";
type Implicit = <TransactionExtensionSchema as TransactionExtensionBase>::Implicit;

fn implicit(&self) -> Result<Self::Implicit, TransactionValidityError> {
<TransactionExtensionSchema as TransactionExtensionBase>::implicit(&self.0)
}
}

impl<C> sp_runtime::traits::TransactionExtension<C> for TransactionExtension
where
C: Dispatchable,
{
const IDENTIFIER: &'static str = "Not needed.";
type Implicit = <TransactionExtensionSchema as sp_runtime::traits::TransactionExtension<C>>::Implicit;

fn implicit(&self) -> Result<Self::Implicit, TransactionValidityError> {
<TransactionExtensionSchema as sp_runtime::traits::TransactionExtension<C>>::implicit(&self.0)
}
type Pre = ();
type Val = ();

Expand Down
20 changes: 4 additions & 16 deletions bridges/modules/relayers/src/extension/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ use scale_info::TypeInfo;
use sp_runtime::{
traits::{
AsSystemOriginSigner, DispatchInfoOf, Dispatchable, PostDispatchInfoOf,
TransactionExtension, TransactionExtensionBase, ValidateResult, Zero,
TransactionExtension, ValidateResult, Zero,
},
transaction_validity::{InvalidTransaction, TransactionValidityError, ValidTransactionBuilder},
DispatchResult, RuntimeDebug,
Expand Down Expand Up @@ -125,6 +125,7 @@ where
+ TransactionPaymentConfig,
C: ExtensionConfig<Runtime = R, Reward = R::Reward>,
R::RuntimeCall: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo>,
<R::RuntimeCall as Dispatchable>::RuntimeOrigin: AsSystemOriginSigner<R::AccountId> + Clone,
<R as TransactionPaymentConfig>::OnChargeTransaction:
OnChargeTransaction<R, Balance = R::Reward>,
{
Expand Down Expand Up @@ -265,21 +266,6 @@ where
}
}

impl<R, C> TransactionExtensionBase for BridgeRelayersTransactionExtension<R, C>
where
Self: 'static + Send + Sync,
R: RelayersConfig
+ BridgeMessagesConfig<C::BridgeMessagesPalletInstance>
+ TransactionPaymentConfig,
C: ExtensionConfig<Runtime = R, Reward = R::Reward>,
R::RuntimeCall: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo>,
<R as TransactionPaymentConfig>::OnChargeTransaction:
OnChargeTransaction<R, Balance = R::Reward>,
{
const IDENTIFIER: &'static str = C::IdProvider::STR;
type Implicit = ();
}

impl<R, C> TransactionExtension<R::RuntimeCall> for BridgeRelayersTransactionExtension<R, C>
where
Self: 'static + Send + Sync,
Expand All @@ -292,6 +278,8 @@ where
<R as TransactionPaymentConfig>::OnChargeTransaction:
OnChargeTransaction<R, Balance = R::Reward>,
{
const IDENTIFIER: &'static str = C::IdProvider::STR;
type Implicit = ();
type Pre = Option<PreDispatchData<R::AccountId, C::RemoteGrandpaChainBlockNumber>>;
type Val = Option<ExtensionCallInfo<C::RemoteGrandpaChainBlockNumber>>;

Expand Down
13 changes: 3 additions & 10 deletions bridges/primitives/runtime/src/extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use impl_trait_for_tuples::impl_for_tuples;
use scale_info::{StaticTypeInfo, TypeInfo};
use sp_runtime::{
impl_tx_ext_default,
traits::{Dispatchable, TransactionExtension, TransactionExtensionBase},
traits::{Dispatchable, TransactionExtension},
transaction_validity::TransactionValidityError,
};
use sp_std::{fmt::Debug, marker::PhantomData};
Expand Down Expand Up @@ -123,8 +123,9 @@ impl<S: TransactionExtensionSchema> GenericTransactionExtension<S> {
}
}

impl<S> TransactionExtensionBase for GenericTransactionExtension<S>
impl<S, C> TransactionExtension<C> for GenericTransactionExtension<S>
where
C: Dispatchable,
S: TransactionExtensionSchema,
S::Payload: Send + Sync,
S::Implicit: Send + Sync,
Expand All @@ -142,14 +143,6 @@ where
frame_support::unsigned::UnknownTransaction::Custom(0xFF),
))
}
}
impl<S, C> TransactionExtension<C> for GenericTransactionExtension<S>
where
C: Dispatchable,
S: TransactionExtensionSchema,
S::Payload: Send + Sync,
S::Implicit: Send + Sync,
{
type Pre = ();
type Val = ();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1475,7 +1475,7 @@ mod tests {
use codec::Encode;
use sp_runtime::{
generic::Era,
traits::{TransactionExtensionBase, Zero},
traits::{TransactionExtension, Zero},
};

#[test]
Expand Down Expand Up @@ -1515,8 +1515,8 @@ mod tests {
);
assert_eq!(payload.encode().split_last().unwrap().1, bhr_indirect_payload.encode());
assert_eq!(
payload.implicit().unwrap().encode().split_last().unwrap().1,
bhr_indirect_payload.implicit().unwrap().encode()
TxExtension::implicit(&payload).unwrap().encode().split_last().unwrap().1,
sp_runtime::traits::TransactionExtension::<RuntimeCall>::implicit(&bhr_indirect_payload).unwrap().encode()
)
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1321,7 +1321,7 @@ mod tests {
use codec::Encode;
use sp_runtime::{
generic::Era,
traits::{TransactionExtensionBase, Zero},
traits::{TransactionExtension, Zero},
};

#[test]
Expand Down Expand Up @@ -1359,8 +1359,8 @@ mod tests {
);
assert_eq!(payload.encode().split_last().unwrap().1, bh_indirect_payload.encode());
assert_eq!(
payload.implicit().unwrap().encode().split_last().unwrap().1,
bh_indirect_payload.implicit().unwrap().encode()
TxExtension::implicit(&payload).unwrap().encode().split_last().unwrap().1,
sp_runtime::traits::TransactionExtension::<RuntimeCall>::implicit(&bh_indirect_payload).unwrap().encode()
)
}
});
Expand Down
7 changes: 2 additions & 5 deletions cumulus/parachains/runtimes/starters/shell/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ use sp_runtime::{
create_runtime_str, generic, impl_opaque_keys,
traits::{
AccountIdLookup, BlakeTwo256, Block as BlockT, DispatchInfoOf, OriginOf,
TransactionExtension, TransactionExtensionBase, ValidateResult,
TransactionExtension, ValidateResult,
},
transaction_validity::{
InvalidTransaction, TransactionSource, TransactionValidity, TransactionValidityError,
Expand Down Expand Up @@ -279,12 +279,9 @@ construct_runtime! {
#[derive(Eq, PartialEq, Clone, Default, sp_core::RuntimeDebug, Encode, Decode, TypeInfo)]
pub struct DisallowSigned;

impl TransactionExtensionBase for DisallowSigned {
impl TransactionExtension<RuntimeCall> for DisallowSigned {
const IDENTIFIER: &'static str = "DisallowSigned";
type Implicit = ();
}

impl TransactionExtension<RuntimeCall> for DisallowSigned {
type Val = ();
type Pre = ();
fn validate(
Expand Down
8 changes: 2 additions & 6 deletions cumulus/primitives/storage-weight-reclaim/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ use sp_runtime::{
impl_tx_ext_default,
traits::{
DispatchInfoOf, Dispatchable, PostDispatchInfoOf, TransactionExtension,
TransactionExtensionBase,
},
transaction_validity::TransactionValidityError,
DispatchResult,
Expand Down Expand Up @@ -126,15 +125,12 @@ impl<T: Config + Send + Sync> core::fmt::Debug for StorageWeightReclaim<T> {
}
}

impl<T: Config + Send + Sync> TransactionExtensionBase for StorageWeightReclaim<T> {
const IDENTIFIER: &'static str = "StorageWeightReclaim";
type Implicit = ();
}

impl<T: Config + Send + Sync> TransactionExtension<T::RuntimeCall> for StorageWeightReclaim<T>
where
T::RuntimeCall: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo>,
{
const IDENTIFIER: &'static str = "StorageWeightReclaim";
type Implicit = ();
type Val = ();
type Pre = Option<u64>;

Expand Down
2 changes: 1 addition & 1 deletion docs/sdk/src/reference_docs/extrinsic_encoding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@
//!
//! The bytes representing `call_data` and `transaction_extensions_extra` can be obtained as
//! descibed above. `transaction_extensions_implicit` is constructed by SCALE encoding the
//! ["implicit" data][sp_runtime::traits::TransactionExtensionBase::Implicit] for each transaction
//! ["implicit" data][sp_runtime::traits::TransactionExtension::Implicit] for each transaction
//! extension that the chain is using, in order.
//!
//! Once we've concatenated those together, we hash the result using a Blake2 256bit hasher.
Expand Down
12 changes: 3 additions & 9 deletions docs/sdk/src/reference_docs/transaction_extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ pub mod transaction_extensions_example {
use scale_info::TypeInfo;
use sp_runtime::{
impl_tx_ext_default,
traits::{Dispatchable, TransactionExtension, TransactionExtensionBase},
traits::{Dispatchable, TransactionExtension},
transaction_validity::TransactionValidityError,
};

Expand All @@ -73,12 +73,9 @@ pub mod transaction_extensions_example {
#[derive(Debug, Encode, Decode, Clone, Eq, PartialEq, TypeInfo)]
pub struct AddToPayload(pub u32);

impl TransactionExtensionBase for AddToPayload {
impl<Call: Dispatchable> TransactionExtension<Call> for AddToPayload {
const IDENTIFIER: &'static str = "AddToPayload";
type Implicit = ();
}

impl<Call: Dispatchable> TransactionExtension<Call> for AddToPayload {
type Pre = ();
type Val = ();

Expand All @@ -91,16 +88,13 @@ pub mod transaction_extensions_example {
#[derive(Debug, Encode, Decode, Clone, Eq, PartialEq, TypeInfo)]
pub struct AddToSignaturePayload;

impl TransactionExtensionBase for AddToSignaturePayload {
impl<Call: Dispatchable> TransactionExtension<Call> for AddToSignaturePayload {
const IDENTIFIER: &'static str = "AddToSignaturePayload";
type Implicit = u32;

fn implicit(&self) -> Result<Self::Implicit, TransactionValidityError> {
Ok(1234)
}
}

impl<Call: Dispatchable> TransactionExtension<Call> for AddToSignaturePayload {
type Pre = ();
type Val = ();

Expand Down
12 changes: 3 additions & 9 deletions polkadot/runtime/common/src/claims.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ use sp_runtime::{
impl_tx_ext_default,
traits::{
AsAuthorizedOrigin, AsSystemOriginSigner, CheckedSub, DispatchInfoOf, Dispatchable,
TransactionExtension, TransactionExtensionBase, Zero,
TransactionExtension, Zero,
},
transaction_validity::{
InvalidTransaction, TransactionValidity, TransactionValidityError, ValidTransaction,
Expand Down Expand Up @@ -625,20 +625,14 @@ where
}
}

impl<T: Config> TransactionExtensionBase for PrevalidateAttests<T>
where
<T as frame_system::Config>::RuntimeCall: IsSubType<Call<T>>,
{
const IDENTIFIER: &'static str = "PrevalidateAttests";
type Implicit = ();
}

impl<T: Config> TransactionExtension<T::RuntimeCall> for PrevalidateAttests<T>
where
<T as frame_system::Config>::RuntimeCall: IsSubType<Call<T>>,
<<T as frame_system::Config>::RuntimeCall as Dispatchable>::RuntimeOrigin:
AsSystemOriginSigner<T::AccountId> + AsAuthorizedOrigin + Clone,
{
const IDENTIFIER: &'static str = "PrevalidateAttests";
type Implicit = ();
type Pre = ();
type Val = ();

Expand Down
2 changes: 1 addition & 1 deletion prdoc/pr_2280.prdoc
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ doc:
contextual data that is injected into the transaction extension logic. It is unused in
instances migrated from `SignedExtension`.
- Extensions now track the weight they consume during valdiation, preparation and
post-dispatch through the `TransactionExtensionBase::weight` function.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR 2280 was merged already, then reverted. Maybe we should leave this as is for posterity?

post-dispatch through the `TransactionExtension::weight` function.
georgepisaltu marked this conversation as resolved.
Show resolved Hide resolved
- `TestXt` was removed and its usage in tests was replaced with `UncheckedExtrinsic`
instances.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use scale_info::TypeInfo;
use sp_runtime::{
impl_tx_ext_default,
traits::{
DispatchInfoOf, IdentifyAccount, OriginOf, TransactionExtension, TransactionExtensionBase,
DispatchInfoOf, IdentifyAccount, OriginOf, TransactionExtension,
ValidateResult, Verify,
},
transaction_validity::{InvalidTransaction, ValidTransaction},
Expand Down Expand Up @@ -75,25 +75,6 @@ impl<T: Config, Signer, Signature> fmt::Debug for AuthorizeCoownership<T, Signer
}
}

impl<T: Config + Send + Sync, Signer, Signature> TransactionExtensionBase
for AuthorizeCoownership<T, Signer, Signature>
where
Signer: Clone + Eq + PartialEq + Encode + Decode + TypeInfo + Send + Sync + 'static,
Signature: Verify<Signer = Signer>
+ Clone
+ Eq
+ PartialEq
+ Encode
+ Decode
+ TypeInfo
+ Send
+ Sync
+ 'static,
{
const IDENTIFIER: &'static str = "AuthorizeCoownership";
type Implicit = ();
}

impl<T: Config + Send + Sync, Signer, Signature> TransactionExtension<T::RuntimeCall>
for AuthorizeCoownership<T, Signer, Signature>
where
Expand All @@ -118,6 +99,8 @@ where
+ Sync
+ 'static,
{
const IDENTIFIER: &'static str = "AuthorizeCoownership";
type Implicit = ();
type Val = ();
type Pre = ();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ use frame_support::{
};
use sp_keyring::AccountKeyring;
use sp_runtime::{
traits::{Applyable, Checkable, IdentityLookup, TransactionExtensionBase},
traits::{Applyable, Checkable, IdentityLookup, TransactionExtension},
MultiSignature, MultiSigner,
};

Expand Down
8 changes: 3 additions & 5 deletions substrate/frame/examples/basic/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ use sp_runtime::{
impl_tx_ext_default,
traits::{
Bounded, DispatchInfoOf, OriginOf, SaturatedConversion, Saturating, TransactionExtension,
TransactionExtensionBase, ValidateResult,
ValidateResult,
},
transaction_validity::{InvalidTransaction, ValidTransaction},
};
Expand Down Expand Up @@ -489,15 +489,13 @@ impl<T: Config + Send + Sync> core::fmt::Debug for WatchDummy<T> {
}
}

impl<T: Config + Send + Sync> TransactionExtensionBase for WatchDummy<T> {
const IDENTIFIER: &'static str = "WatchDummy";
type Implicit = ();
}
impl<T: Config + Send + Sync> TransactionExtension<<T as frame_system::Config>::RuntimeCall>
for WatchDummy<T>
where
<T as frame_system::Config>::RuntimeCall: IsSubType<Call<T>>,
{
const IDENTIFIER: &'static str = "WatchDummy";
type Implicit = ();
type Pre = ();
type Val = ();

Expand Down
Loading
Loading