mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-24 11:21:08 +00:00
contracts: Expose environment types for offchain tooling (#14750)
* Expose environment types for offchain tooling * Use EnvironmentType wrapper * Add type impl to test config --------- Co-authored-by: parity-processbot <>
This commit is contained in:
committed by
GitHub
parent
63007e2f55
commit
d8a7490146
@@ -1265,6 +1265,7 @@ impl pallet_contracts::Config for Runtime {
|
|||||||
type CodeHashLockupDepositPercent = CodeHashLockupDepositPercent;
|
type CodeHashLockupDepositPercent = CodeHashLockupDepositPercent;
|
||||||
#[cfg(feature = "unsafe-debug")]
|
#[cfg(feature = "unsafe-debug")]
|
||||||
type Debug = ();
|
type Debug = ();
|
||||||
|
type Environment = ();
|
||||||
}
|
}
|
||||||
|
|
||||||
impl pallet_sudo::Config for Runtime {
|
impl pallet_sudo::Config for Runtime {
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ pub mod weights;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
use crate::{
|
use crate::{
|
||||||
exec::{AccountIdOf, ErrorOrigin, ExecError, Executable, Key, Stack as ExecStack},
|
exec::{AccountIdOf, ErrorOrigin, ExecError, Executable, Key, MomentOf, Stack as ExecStack},
|
||||||
gas::GasMeter,
|
gas::GasMeter,
|
||||||
storage::{meter::Meter as StorageMeter, ContractInfo, DeletionQueueManager},
|
storage::{meter::Meter as StorageMeter, ContractInfo, DeletionQueueManager},
|
||||||
wasm::{CodeInfo, WasmBlob},
|
wasm::{CodeInfo, WasmBlob},
|
||||||
@@ -122,9 +122,13 @@ use frame_support::{
|
|||||||
ConstU32, Contains, Get, Randomness, Time,
|
ConstU32, Contains, Get, Randomness, Time,
|
||||||
},
|
},
|
||||||
weights::Weight,
|
weights::Weight,
|
||||||
BoundedVec, RuntimeDebug, RuntimeDebugNoBound,
|
BoundedVec, DefaultNoBound, RuntimeDebug, RuntimeDebugNoBound,
|
||||||
|
};
|
||||||
|
use frame_system::{
|
||||||
|
ensure_signed,
|
||||||
|
pallet_prelude::{BlockNumberFor, OriginFor},
|
||||||
|
EventRecord, Pallet as System,
|
||||||
};
|
};
|
||||||
use frame_system::{ensure_signed, pallet_prelude::OriginFor, EventRecord, Pallet as System};
|
|
||||||
use pallet_contracts_primitives::{
|
use pallet_contracts_primitives::{
|
||||||
Code, CodeUploadResult, CodeUploadReturnValue, ContractAccessError, ContractExecResult,
|
Code, CodeUploadResult, CodeUploadReturnValue, ContractAccessError, ContractExecResult,
|
||||||
ContractInstantiateResult, ContractResult, ExecReturnValue, GetStorageResult,
|
ContractInstantiateResult, ContractResult, ExecReturnValue, GetStorageResult,
|
||||||
@@ -179,6 +183,36 @@ const SENTINEL: u32 = u32::MAX;
|
|||||||
/// Example: `RUST_LOG=runtime::contracts=debug my_code --dev`
|
/// Example: `RUST_LOG=runtime::contracts=debug my_code --dev`
|
||||||
const LOG_TARGET: &str = "runtime::contracts";
|
const LOG_TARGET: &str = "runtime::contracts";
|
||||||
|
|
||||||
|
/// Wrapper around `PhantomData` to prevent it being filtered by `scale-info`.
|
||||||
|
///
|
||||||
|
/// `scale-info` filters out `PhantomData` fields because usually we are only interested
|
||||||
|
/// in sized types. However, when trying to communicate **types** as opposed to **values**
|
||||||
|
/// we want to have those zero sized types be included.
|
||||||
|
#[derive(Encode, Decode, DefaultNoBound, TypeInfo)]
|
||||||
|
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
|
||||||
|
pub struct EnvironmentType<T>(PhantomData<T>);
|
||||||
|
|
||||||
|
/// List of all runtime configurable types that are used in the communication between
|
||||||
|
/// `pallet-contracts` and any given contract.
|
||||||
|
///
|
||||||
|
/// Since those types are configurable they can vary between
|
||||||
|
/// chains all using `pallet-contracts`. Hence we need a mechanism to communicate those types
|
||||||
|
/// in a way that can be consumed by offchain tooling.
|
||||||
|
///
|
||||||
|
/// This type only exists in order to appear in the metadata where it can be read by
|
||||||
|
/// offchain tooling.
|
||||||
|
#[derive(Encode, Decode, DefaultNoBound, TypeInfo)]
|
||||||
|
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
|
||||||
|
#[scale_info(skip_type_params(T))]
|
||||||
|
pub struct Environment<T: Config> {
|
||||||
|
account_id: EnvironmentType<AccountIdOf<T>>,
|
||||||
|
balance: EnvironmentType<BalanceOf<T>>,
|
||||||
|
hash: EnvironmentType<<T as frame_system::Config>::Hash>,
|
||||||
|
hasher: EnvironmentType<<T as frame_system::Config>::Hashing>,
|
||||||
|
timestamp: EnvironmentType<MomentOf<T>>,
|
||||||
|
block_number: EnvironmentType<BlockNumberFor<T>>,
|
||||||
|
}
|
||||||
|
|
||||||
#[frame_support::pallet]
|
#[frame_support::pallet]
|
||||||
pub mod pallet {
|
pub mod pallet {
|
||||||
use super::*;
|
use super::*;
|
||||||
@@ -360,6 +394,13 @@ pub mod pallet {
|
|||||||
/// Do **not** use it in a production environment or for benchmarking purposes.
|
/// Do **not** use it in a production environment or for benchmarking purposes.
|
||||||
#[cfg(feature = "unsafe-debug")]
|
#[cfg(feature = "unsafe-debug")]
|
||||||
type Debug: unsafe_debug::UnsafeDebug<Self>;
|
type Debug: unsafe_debug::UnsafeDebug<Self>;
|
||||||
|
|
||||||
|
/// Type that bundles together all the runtime configurable interface types.
|
||||||
|
///
|
||||||
|
/// This is not a real config. We just mention the type here as constant so that
|
||||||
|
/// its type appears in the metadata. Only valid value is `()`.
|
||||||
|
#[pallet::constant]
|
||||||
|
type Environment: Get<Environment<Self>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[pallet::hooks]
|
#[pallet::hooks]
|
||||||
|
|||||||
@@ -481,6 +481,7 @@ impl Config for Test {
|
|||||||
type MaxDelegateDependencies = MaxDelegateDependencies;
|
type MaxDelegateDependencies = MaxDelegateDependencies;
|
||||||
#[cfg(feature = "unsafe-debug")]
|
#[cfg(feature = "unsafe-debug")]
|
||||||
type Debug = unsafe_debug::TestDebugger;
|
type Debug = unsafe_debug::TestDebugger;
|
||||||
|
type Environment = ();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const ALICE: AccountId32 = AccountId32::new([1u8; 32]);
|
pub const ALICE: AccountId32 = AccountId32::new([1u8; 32]);
|
||||||
|
|||||||
Reference in New Issue
Block a user