Trait pallet_contracts::pallet::Config
source · pub trait Config: Config {
Show 30 associated items
type Time: Time;
type Randomness: Randomness<Self::Hash, BlockNumberFor<Self>>;
type Currency: Inspect<Self::AccountId> + Mutate<Self::AccountId> + MutateHold<Self::AccountId, Reason = Self::RuntimeHoldReason>;
type RuntimeEvent: From<Event<Self>> + IsType<<Self as Config>::RuntimeEvent>;
type RuntimeCall: Dispatchable<RuntimeOrigin = Self::RuntimeOrigin, PostInfo = PostDispatchInfo> + GetDispatchInfo + Decode + IsType<<Self as Config>::RuntimeCall>;
type RuntimeHoldReason: From<HoldReason>;
type CallFilter: Contains<<Self as Config>::RuntimeCall>;
type WeightPrice: Convert<Weight, <<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>;
type WeightInfo: WeightInfo;
type ChainExtension: ChainExtension<Self> + Default;
type Schedule: Get<Schedule<Self>>;
type CallStack: Array<Item = Frame<Self>>;
type DepositPerByte: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>;
type DefaultDepositLimit: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>;
type DepositPerItem: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>;
type CodeHashLockupDepositPercent: Get<Perbill>;
type AddressGenerator: AddressGenerator<Self>;
type MaxCodeLen: Get<u32>;
type MaxStorageKeyLen: Get<u32>;
type MaxTransientStorageSize: Get<u32>;
type MaxDelegateDependencies: Get<u32>;
type UnsafeUnstableInterface: Get<bool>;
type MaxDebugBufferLen: Get<u32>;
type UploadOrigin: EnsureOrigin<Self::RuntimeOrigin, Success = Self::AccountId>;
type InstantiateOrigin: EnsureOrigin<Self::RuntimeOrigin, Success = Self::AccountId>;
type Migrations: MigrateSequence;
type Debug: Debugger<Self>;
type Environment: Get<Environment<Self>>;
type ApiVersion: Get<ApiVersion>;
type Xcm: Controller<OriginFor<Self>, <Self as Config>::RuntimeCall, BlockNumberFor<Self>>;
}
Expand description
Configuration trait of this pallet.
The main purpose of this trait is to act as an interface between this pallet and the runtime in which it is embedded in. A type, function, or constant in this trait is essentially left to be configured by the runtime that includes this pallet.
Consequently, a runtime that wants to include this pallet must implement this trait.
Required Associated Types§
sourcetype Time: Time
type Time: Time
The time implementation used to supply timestamps to contracts through seal_now
.
sourcetype Randomness: Randomness<Self::Hash, BlockNumberFor<Self>>
type Randomness: Randomness<Self::Hash, BlockNumberFor<Self>>
The generator used to supply randomness to contracts through seal_random
.
§Deprecated
Codes using the randomness functionality cannot be uploaded. Neither can contracts
be instantiated from existing codes that use this deprecated functionality. It will
be removed eventually. Hence for new pallet-contracts
deployments it is okay
to supply a dummy implementation for this type (because it is never used).
sourcetype Currency: Inspect<Self::AccountId> + Mutate<Self::AccountId> + MutateHold<Self::AccountId, Reason = Self::RuntimeHoldReason>
type Currency: Inspect<Self::AccountId> + Mutate<Self::AccountId> + MutateHold<Self::AccountId, Reason = Self::RuntimeHoldReason>
The fungible in which fees are paid and contract balances are held.
sourcetype RuntimeEvent: From<Event<Self>> + IsType<<Self as Config>::RuntimeEvent>
type RuntimeEvent: From<Event<Self>> + IsType<<Self as Config>::RuntimeEvent>
The overarching event type.
sourcetype RuntimeCall: Dispatchable<RuntimeOrigin = Self::RuntimeOrigin, PostInfo = PostDispatchInfo> + GetDispatchInfo + Decode + IsType<<Self as Config>::RuntimeCall>
type RuntimeCall: Dispatchable<RuntimeOrigin = Self::RuntimeOrigin, PostInfo = PostDispatchInfo> + GetDispatchInfo + Decode + IsType<<Self as Config>::RuntimeCall>
The overarching call type.
sourcetype RuntimeHoldReason: From<HoldReason>
type RuntimeHoldReason: From<HoldReason>
Overarching hold reason.
sourcetype CallFilter: Contains<<Self as Config>::RuntimeCall>
type CallFilter: Contains<<Self as Config>::RuntimeCall>
Filter that is applied to calls dispatched by contracts.
Use this filter to control which dispatchables are callable by contracts.
This is applied in addition to frame_system::Config::BaseCallFilter
.
It is recommended to treat this as a whitelist.
§Stability
The runtime must make sure that all dispatchables that are callable by
contracts remain stable. In addition Self::RuntimeCall
itself must remain stable.
This means that no existing variants are allowed to switch their positions.
§Note
Note that dispatchables that are called via contracts do not spawn their own wasm instance for each call (as opposed to when called via a transaction). Therefore please make sure to be restrictive about which dispatchables are allowed in order to not introduce a new DoS vector like memory allocation patterns that can be exploited to drive the runtime into a panic.
This filter does not apply to XCM transact calls. To impose restrictions on XCM transact calls, you must configure them separately within the XCM pallet itself.
sourcetype WeightPrice: Convert<Weight, <<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>
type WeightPrice: Convert<Weight, <<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>
Used to answer contracts’ queries regarding the current weight price. This is not used to calculate the actual fee and is only for informational purposes.
sourcetype WeightInfo: WeightInfo
type WeightInfo: WeightInfo
Describes the weights of the dispatchables of this module and is also used to construct a default cost schedule.
sourcetype ChainExtension: ChainExtension<Self> + Default
type ChainExtension: ChainExtension<Self> + Default
Type that allows the runtime authors to add new host functions for a contract to call.
sourcetype CallStack: Array<Item = Frame<Self>>
type CallStack: Array<Item = Frame<Self>>
The type of the call stack determines the maximum nesting depth of contract calls.
The allowed depth is CallStack::size() + 1
.
Therefore a size of 0
means that a contract cannot use call or instantiate.
In other words only the origin called “root contract” is allowed to execute then.
This setting along with MaxCodeLen
directly affects
memory usage of your runtime.
sourcetype DepositPerByte: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>
type DepositPerByte: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>
The amount of balance a caller has to pay for each byte of storage.
§Note
Changing this value for an existing chain might need a storage migration.
sourcetype DefaultDepositLimit: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>
type DefaultDepositLimit: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>
Fallback value to limit the storage deposit if it’s not being set by the caller.
sourcetype DepositPerItem: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>
type DepositPerItem: Get<<<Self as Config>::Currency as Inspect<<Self as Config>::AccountId>>::Balance>
The amount of balance a caller has to pay for each storage item.
§Note
Changing this value for an existing chain might need a storage migration.
sourcetype CodeHashLockupDepositPercent: Get<Perbill>
type CodeHashLockupDepositPercent: Get<Perbill>
The percentage of the storage deposit that should be held for using a code hash.
Instantiating a contract, or calling chain_extension::Ext::lock_delegate_dependency
protects the code from being removed. In order to prevent abuse these actions are
protected with a percentage of the code deposit.
sourcetype AddressGenerator: AddressGenerator<Self>
type AddressGenerator: AddressGenerator<Self>
The address generator used to generate the addresses of contracts.
sourcetype MaxCodeLen: Get<u32>
type MaxCodeLen: Get<u32>
The maximum length of a contract code in bytes.
The value should be chosen carefully taking into the account the overall memory limit
your runtime has, as well as the maximum allowed callstack
depth. Look into the integrity_test()
for some insights.
sourcetype MaxStorageKeyLen: Get<u32>
type MaxStorageKeyLen: Get<u32>
The maximum allowable length in bytes for storage keys.
sourcetype MaxTransientStorageSize: Get<u32>
type MaxTransientStorageSize: Get<u32>
The maximum size of the transient storage in bytes. This includes keys, values, and previous entries used for storage rollback.
sourcetype MaxDelegateDependencies: Get<u32>
type MaxDelegateDependencies: Get<u32>
The maximum number of delegate_dependencies that a contract can lock with
chain_extension::Ext::lock_delegate_dependency
.
sourcetype UnsafeUnstableInterface: Get<bool>
type UnsafeUnstableInterface: Get<bool>
Make contract callable functions marked as #[unstable]
available.
Contracts that use #[unstable]
functions won’t be able to be uploaded unless
this is set to true
. This is only meant for testnets and dev nodes in order to
experiment with new features.
§Warning
Do not set to true
on productions chains.
sourcetype MaxDebugBufferLen: Get<u32>
type MaxDebugBufferLen: Get<u32>
The maximum length of the debug buffer in bytes.
sourcetype UploadOrigin: EnsureOrigin<Self::RuntimeOrigin, Success = Self::AccountId>
type UploadOrigin: EnsureOrigin<Self::RuntimeOrigin, Success = Self::AccountId>
Origin allowed to upload code.
By default, it is safe to set this to EnsureSigned
, allowing anyone to upload contract
code.
sourcetype InstantiateOrigin: EnsureOrigin<Self::RuntimeOrigin, Success = Self::AccountId>
type InstantiateOrigin: EnsureOrigin<Self::RuntimeOrigin, Success = Self::AccountId>
Origin allowed to instantiate code.
§Note
This is not enforced when a contract instantiates another contract. The
Self::UploadOrigin
should make sure that no code is deployed that does unwanted
instantiations.
By default, it is safe to set this to EnsureSigned
, allowing anyone to instantiate
contract code.
sourcetype Migrations: MigrateSequence
type Migrations: MigrateSequence
The sequence of migration steps that will be applied during a migration.
§Examples
use pallet_contracts::migration::{v10, v11};
type Migrations = (v10::Migration<Runtime, Currency>, v11::Migration<Runtime>);
If you have a single migration step, you can use a tuple with a single element:
use pallet_contracts::migration::v10;
type Migrations = (v10::Migration<Runtime, Currency>,);
sourcetype Debug: Debugger<Self>
type Debug: Debugger<Self>
§Note
For most production chains, it’s recommended to use the ()
implementation of this
trait. This implementation offers additional logging when the log target
“runtime::contracts” is set to trace.
sourcetype Environment: Get<Environment<Self>>
type Environment: Get<Environment<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 ()
.
sourcetype ApiVersion: Get<ApiVersion>
type ApiVersion: Get<ApiVersion>
The version of the HostFn APIs that are available in the runtime.
Only valid value is ()
.
sourcetype Xcm: Controller<OriginFor<Self>, <Self as Config>::RuntimeCall, BlockNumberFor<Self>>
type Xcm: Controller<OriginFor<Self>, <Self as Config>::RuntimeCall, BlockNumberFor<Self>>
A type that exposes XCM APIs, allowing contracts to interact with other parachains, and execute XCM programs.