--- a/.docker/Dockerfile-parachain
+++ b/.docker/Dockerfile-parachain
@@ -41,7 +41,6 @@
RUN git clone $REPO_URL -b $BRANCH && \
cargo build --features=$FEATURE --$PROFILE
-
# ===== BUILD POLKADOT =====
FROM rust-builder as builder-polkadot
--- a/.docker/docker-compose-master.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-version: "3.5"
-
-services:
- blockchain_nodes:
- build:
- context: ../
- dockerfile: .docker/Dockerfile-parachain
- image: blockchain_nodes
- container_name: blockchain_nodes
- expose:
- - 9944
- - 9933
- ports:
- - 127.0.0.1:9944:9944
- - 127.0.0.1:9933:9933
- logging:
- options:
- max-size: "1m"
- max-file: "3"
--- /dev/null
+++ b/.docker/docker-compose-master.yml
@@ -0,0 +1,19 @@
+version: "3.5"
+
+services:
+ blockchain_nodes:
+ build:
+ context: ../
+ dockerfile: .docker/Dockerfile-parachain
+ image: blockchain_nodes
+ container_name: blockchain_nodes
+ expose:
+ - 9944
+ - 9933
+ ports:
+ - 127.0.0.1:9944:9944
+ - 127.0.0.1:9933:9933
+ logging:
+ options:
+ max-size: "1m"
+ max-file: "3"
--- a/.docker/forking/docker-compose-fork.yaml
+++ b/.docker/forking/docker-compose-fork.yaml
@@ -3,8 +3,8 @@
services:
parachain-fork:
build:
- context: ../
- dockerfile: .docker/forking/Dockerfile-parachain-live-fork
+ context: ./
+ dockerfile: ./Dockerfile-parachain-live-fork
image: parachain-fork
container_name: parachain-fork
volumes:
--- a/.docker/forking/docker-compose.tmp-fork.j2
+++ b/.docker/forking/docker-compose.tmp-fork.j2
@@ -10,6 +10,4 @@
- "FEATURE={{ FEATURE }}"
- "RUNTIME={{ RUNTIME }}"
- "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}"
- - "MAINNET_TAG={{ MAINNET_TAG }}"
- - "MAINNET_BRANCH={{ MAINNET_BRANCH }}"
- "FORK_FROM={{ FORK_FROM }}"
--- a/.github/workflows/build-test-master.yml
+++ b/.github/workflows/build-test-master.yml
@@ -22,7 +22,7 @@
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
- build:
+ master-build-and-test:
# The type of runner that the job will run on
runs-on: self-hosted-ci
@@ -35,11 +35,11 @@
matrix:
include:
- network: "Opal"
- features: " "
+ features: "opal-runtime"
- network: "Quartz"
- features: "--features=quartz-runtime"
+ features: "quartz-runtime"
- network: "Unique"
- features: "--features=unique-runtime"
+ features: "unique-runtime"
steps:
- name: Skip if pull request is in Draft
--- a/.github/workflows/fork-update-withdata.yml
+++ b/.github/workflows/fork-update-withdata.yml
@@ -22,39 +22,7 @@
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
- prepare-execution-marix-fork:
-
- name: Prepare execution matrix for fork
-
- runs-on: self-hosted-ci
- outputs:
- matrix: ${{ steps.create_matrix.outputs.matrix }}
- steps:
-
- - name: Clean Workspace
- uses: AutoModality/action-clean@v1.1.0
-
- # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- - uses: actions/checkout@v3
- with:
- ref: ${{ github.head_ref }} #Checking out head commit
-
- - name: Read .env file
- uses: xom9ikk/dotenv@v1.0.2
-
- - name: Create Execution matrix
- uses: fabiocaccamo/create-matrix-action@v2
- id: create_matrix
- with:
- matrix: |
- network {Opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}}, fork_from_address {'wss://eu-ws-opal.unique.network:443'}
- network {Quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}}, fork_from_address {'wss://eu-ws-quartz.unique.network:443'}
- network {Unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}}, fork_from_address {'wss://eu-ws.unique.network:443'}
-
-
-
fork-update-withdata:
- needs: prepare-execution-marix-fork
# The type of runner that the job will run on
runs-on: self-hosted-ci
@@ -64,7 +32,19 @@
strategy:
matrix:
- include: ${{fromJson(needs.prepare-execution-marix-fork.outputs.matrix)}}
+ include:
+ - network: Opal
+ features: opal-runtime
+ runtime: opal
+ fork_from_address: wss://eu-ws-opal.unique.network:443
+ - network: Quartz
+ features: quartz-runtime
+ runtime: quartz
+ fork_from_address: wss://eu-ws-quartz.unique.network:443
+ - network: Unique
+ features: unique-runtime
+ runtime: unique
+ fork_from_address: wss://eu-ws.unique.network:443
steps:
- name: Skip if pull request is in Draft
@@ -106,8 +86,6 @@
RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}
POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }}
POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }}
- MAINNET_TAG=${{ matrix.mainnet_tag }}
- MAINNET_BRANCH=${{ matrix.mainnet_branch }}
FEATURE=${{ matrix.features }}
RUNTIME=${{ matrix.runtime }}
BRANCH=${{ github.head_ref }}
--- a/.github/workflows/try-runtime.yml
+++ b/.github/workflows/try-runtime.yml
@@ -91,7 +91,7 @@
- name: Build the stack
- run: docker-compose -f ".docker/docker-compose-try-runtime.yaml" -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" up -d --build --force-recreate --timeout 300
+ run: docker-compose -f ".docker/docker-compose-try-runtime.yml" -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" up -d --build --force-recreate --timeout 300
- name: Collect Docker Logs
@@ -114,4 +114,4 @@
- name: Stop running containers
if: always() # run this step always
- run: docker-compose -f ".docker/forking/docker-compose-try-runtime.yaml" -f ".docker/forking/docker-compose.try-runtime.${{ matrix.network }}.yml" down
+ run: docker-compose -f ".docker/docker-compose-try-runtime.yml" -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" down
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5309,6 +5309,7 @@
"pallet-balances",
"pallet-base-fee",
"pallet-common",
+ "pallet-configuration",
"pallet-ethereum",
"pallet-evm",
"pallet-evm-coder-substrate",
@@ -5744,6 +5745,22 @@
]
[[package]]
+name = "pallet-configuration"
+version = "0.1.0"
+dependencies = [
+ "fp-evm",
+ "frame-support",
+ "frame-system",
+ "parity-scale-codec 3.1.5",
+ "scale-info",
+ "smallvec",
+ "sp-arithmetic",
+ "sp-core",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
name = "pallet-democracy"
version = "4.0.0-dev"
source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2"
@@ -8625,6 +8642,7 @@
"pallet-balances",
"pallet-base-fee",
"pallet-common",
+ "pallet-configuration",
"pallet-ethereum",
"pallet-evm",
"pallet-evm-coder-substrate",
@@ -12630,6 +12648,7 @@
"pallet-balances",
"pallet-base-fee",
"pallet-common",
+ "pallet-configuration",
"pallet-ethereum",
"pallet-evm",
"pallet-evm-coder-substrate",
--- /dev/null
+++ b/pallets/configuration/Cargo.toml
@@ -0,0 +1,33 @@
+[package]
+name = "pallet-configuration"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+parity-scale-codec = { version = "3.1.5", features = [
+ "derive",
+], default-features = false }
+scale-info = { version = "2.0.1", default-features = false, features = [
+ "derive",
+] }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" }
+sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" }
+smallvec = "1.6.1"
+
+[features]
+default = ["std"]
+std = [
+ "parity-scale-codec/std",
+ "frame-support/std",
+ "frame-system/std",
+ "sp-runtime/std",
+ "sp-std/std",
+ "sp-core/std",
+ "sp-arithmetic/std",
+ "fp-evm/std",
+]
--- /dev/null
+++ b/pallets/configuration/src/lib.rs
@@ -0,0 +1,124 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see .
+
+#![cfg_attr(not(feature = "std"), no_std)]
+
+use core::marker::PhantomData;
+
+use frame_support::{
+ pallet,
+ weights::{WeightToFeePolynomial, WeightToFeeCoefficients, WeightToFeeCoefficient},
+ traits::Get,
+};
+use sp_arithmetic::traits::{BaseArithmetic, Unsigned};
+use smallvec::smallvec;
+
+pub use pallet::*;
+use sp_core::U256;
+use sp_runtime::Perbill;
+
+#[pallet]
+mod pallet {
+ use super::*;
+ use frame_support::{
+ traits::Get,
+ pallet_prelude::{StorageValue, ValueQuery, DispatchResult},
+ };
+ use frame_system::{pallet_prelude::OriginFor, ensure_root};
+
+ #[pallet::config]
+ pub trait Config: frame_system::Config {
+ #[pallet::constant]
+ type DefaultWeightToFeeCoefficient: Get;
+ #[pallet::constant]
+ type DefaultMinGasPrice: Get;
+ }
+
+ #[pallet::storage]
+ pub type WeightToFeeCoefficientOverride = StorageValue<
+ Value = u32,
+ QueryKind = ValueQuery,
+ OnEmpty = T::DefaultWeightToFeeCoefficient,
+ >;
+
+ #[pallet::storage]
+ pub type MinGasPriceOverride =
+ StorageValue;
+
+ #[pallet::call]
+ impl Pallet {
+ #[pallet::weight(T::DbWeight::get().writes(1))]
+ pub fn set_weight_to_fee_coefficient_override(
+ origin: OriginFor,
+ coeff: Option,
+ ) -> DispatchResult {
+ let _sender = ensure_root(origin)?;
+ if let Some(coeff) = coeff {
+ >::set(coeff);
+ } else {
+ >::kill();
+ }
+ Ok(())
+ }
+
+ #[pallet::weight(T::DbWeight::get().writes(1))]
+ pub fn set_min_gas_price_override(
+ origin: OriginFor,
+ coeff: Option,
+ ) -> DispatchResult {
+ let _sender = ensure_root(origin)?;
+ if let Some(coeff) = coeff {
+ >::set(coeff);
+ } else {
+ >::kill();
+ }
+ Ok(())
+ }
+ }
+
+ #[pallet::pallet]
+ #[pallet::generate_store(pub(super) trait Store)]
+ pub struct Pallet(_);
+}
+
+pub struct WeightToFee(PhantomData<(T, B)>);
+
+impl WeightToFeePolynomial for WeightToFee
+where
+ T: Config,
+ B: BaseArithmetic + From + Copy + Unsigned,
+{
+ type Balance = B;
+
+ fn polynomial() -> WeightToFeeCoefficients {
+ smallvec!(WeightToFeeCoefficient {
+ coeff_integer: >::get().into(),
+ coeff_frac: Perbill::zero(),
+ negative: false,
+ degree: 1,
+ })
+ }
+}
+
+pub struct FeeCalculator(PhantomData);
+impl fp_evm::FeeCalculator for FeeCalculator {
+ fn min_gas_price() -> (U256, u64) {
+ (
+ >::get().into(),
+ T::DbWeight::get().reads(1),
+ )
+ }
+}
--- a/pallets/refungible/src/benchmarking.rs
+++ b/pallets/refungible/src/benchmarking.rs
@@ -35,8 +35,8 @@
fn create_max_item_data(
users: impl IntoIterator- ,
-) -> CreateRefungibleExData {
- CreateRefungibleExData {
+) -> CreateItemData {
+ CreateItemData {
users: users
.into_iter()
.collect::>()
@@ -51,7 +51,7 @@
sender: &T::CrossAccountId,
users: impl IntoIterator
- ,
) -> Result {
- let data: CreateRefungibleExData = create_max_item_data(users);
+ let data: CreateItemData = create_max_item_data(users);
>::create_item(&collection, sender, data, &Unlimited)?;
Ok(TokenId(>::get(&collection.id)))
}
--- a/primitives/common/src/constants.rs
+++ b/primitives/common/src/constants.rs
@@ -36,10 +36,10 @@
pub const UNIQUE: Balance = 100 * CENTIUNIQUE;
// Targeting 0.1 UNQ per transfer
-pub const WEIGHT_TO_FEE_COEFF: u32 = 207_890_902;
+pub const WEIGHT_TO_FEE_COEFF: u32 = /**/207_267_232/**/;
// Targeting 0.15 UNQ per transfer via ETH
-pub const MIN_GAS_PRICE: u64 = 1_019_493_469_850;
+pub const MIN_GAS_PRICE: u64 = /**/1_019_488_372_383/**/;
/// We assume that ~10% of the block weight is consumed by `on_initalize` handlers.
/// This is used to limit the maximal weight of a single extrinsic.
--- a/runtime/common/config/ethereum.rs
+++ b/runtime/common/config/ethereum.rs
@@ -50,13 +50,6 @@
}
}
-pub struct FixedFee;
-impl pallet_evm::FeeCalculator for FixedFee {
- fn min_gas_price() -> (U256, u64) {
- (MIN_GAS_PRICE.into(), 0)
- }
-}
-
pub struct EthereumFindAuthor(core::marker::PhantomData);
impl> FindAuthor for EthereumFindAuthor {
fn find_author<'a, I>(digests: I) -> Option
@@ -73,7 +66,7 @@
impl pallet_evm::Config for Runtime {
type BlockGasLimit = BlockGasLimit;
- type FeeCalculator = FixedFee;
+ type FeeCalculator = pallet_configuration::FeeCalculator;
type GasWeightMapping = FixedGasWeightMapping;
type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping;
type CallOrigin = EnsureAddressTruncated;
--- a/runtime/common/config/pallets/mod.rs
+++ b/runtime/common/config/pallets/mod.rs
@@ -25,6 +25,7 @@
},
Runtime, Event, Call, Balances,
};
+use frame_support::traits::{ConstU32, ConstU64};
use up_common::{
types::{AccountId, Balance, BlockNumber},
constants::*,
@@ -91,3 +92,8 @@
type CommonWeightInfo = CommonWeights;
type RefungibleExtensionsWeightInfo = CommonWeights;
}
+
+impl pallet_configuration::Config for Runtime {
+ type DefaultWeightToFeeCoefficient = ConstU32<{ up_common::constants::WEIGHT_TO_FEE_COEFF }>;
+ type DefaultMinGasPrice = ConstU64<{ up_common::constants::MIN_GAS_PRICE }>;
+}
--- a/runtime/common/config/substrate.rs
+++ b/runtime/common/config/substrate.rs
@@ -18,8 +18,7 @@
traits::{Everything, ConstU32},
weights::{
constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight},
- DispatchClass, WeightToFeePolynomial, WeightToFeeCoefficients, ConstantMultiplier,
- WeightToFeeCoefficient,
+ DispatchClass, ConstantMultiplier,
},
parameter_types, PalletId,
};
@@ -32,8 +31,6 @@
limits::{BlockLength, BlockWeights},
EnsureRoot,
};
-use sp_arithmetic::traits::{BaseArithmetic, Unsigned};
-use smallvec::smallvec;
use crate::{
runtime_common::DealWithFees, Runtime, Event, Call, Origin, PalletInfo, System, Balances,
Treasury, SS58Prefix, Version,
@@ -154,32 +151,13 @@
/// This value increases the priority of `Operational` transactions by adding
/// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.
pub const OperationalFeeMultiplier: u8 = 5;
-}
-
-/// Linear implementor of `WeightToFeePolynomial`
-pub struct LinearFee(sp_std::marker::PhantomData);
-
-impl WeightToFeePolynomial for LinearFee
-where
- T: BaseArithmetic + From + Copy + Unsigned,
-{
- type Balance = T;
-
- fn polynomial() -> WeightToFeeCoefficients {
- smallvec!(WeightToFeeCoefficient {
- coeff_integer: WEIGHT_TO_FEE_COEFF.into(),
- coeff_frac: Perbill::zero(),
- negative: false,
- degree: 1,
- })
- }
}
impl pallet_transaction_payment::Config for Runtime {
type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter;
type LengthToFee = ConstantMultiplier;
type OperationalFeeMultiplier = OperationalFeeMultiplier;
- type WeightToFee = LinearFee;
+ type WeightToFee = pallet_configuration::WeightToFee;
type FeeMultiplierUpdate = ();
}
--- a/runtime/common/config/xcm.rs
+++ b/runtime/common/config/xcm.rs
@@ -44,8 +44,7 @@
use xcm_executor::{Config, XcmExecutor, Assets};
use sp_std::marker::PhantomData;
use crate::{
- runtime_common::config::substrate::LinearFee, Runtime, Call, Event, Origin, Balances,
- ParachainInfo, ParachainSystem, PolkadotXcm, XcmpQueue,
+ Runtime, Call, Event, Origin, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, XcmpQueue,
};
use up_common::{
types::{AccountId, Balance},
@@ -234,8 +233,11 @@
}
}
-pub struct XcmConfig;
-impl Config for XcmConfig {
+pub struct XcmConfig(PhantomData);
+impl Config for XcmConfig
+where
+ T: pallet_configuration::Config,
+{
type Call = Call;
type XcmSender = XcmRouter;
// How to withdraw and deposit an asset.
@@ -246,8 +248,13 @@
type LocationInverter = LocationInverter;
type Barrier = Barrier;
type Weigher = FixedWeightBounds;
- type Trader =
- UsingOnlySelfCurrencyComponents, RelayLocation, AccountId, Balances, ()>;
+ type Trader = UsingOnlySelfCurrencyComponents<
+ pallet_configuration::WeightToFee,
+ RelayLocation,
+ AccountId,
+ Balances,
+ (),
+ >;
type ResponseHandler = (); // Don't handle responses for now.
type SubscriptionService = PolkadotXcm;
@@ -261,7 +268,7 @@
type XcmRouter = XcmRouter;
type ExecuteXcmOrigin = EnsureXcmOrigin;
type XcmExecuteFilter = Everything;
- type XcmExecutor = XcmExecutor;
+ type XcmExecutor = XcmExecutor>;
type XcmTeleportFilter = Everything;
type XcmReserveTransferFilter = Everything;
type Weigher = FixedWeightBounds;
@@ -274,13 +281,13 @@
impl cumulus_pallet_xcm::Config for Runtime {
type Event = Event;
- type XcmExecutor = XcmExecutor;
+ type XcmExecutor = XcmExecutor>;
}
impl cumulus_pallet_xcmp_queue::Config for Runtime {
type WeightInfo = ();
type Event = Event;
- type XcmExecutor = XcmExecutor;
+ type XcmExecutor = XcmExecutor>;
type ChannelInfo = ParachainSystem;
type VersionWrapper = ();
type ExecuteOverweightOrigin = frame_system::EnsureRoot;
@@ -290,6 +297,6 @@
impl cumulus_pallet_dmp_queue::Config for Runtime {
type Event = Event;
- type XcmExecutor = XcmExecutor;
+ type XcmExecutor = XcmExecutor>;
type ExecuteOverweightOrigin = frame_system::EnsureRoot;
}
--- a/runtime/common/construct_runtime/mod.rs
+++ b/runtime/common/construct_runtime/mod.rs
@@ -57,7 +57,7 @@
#[runtimes(opal)]
Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event} = 62,
- // free = 63
+ Configuration: pallet_configuration::{Pallet, Call, Storage} = 63,
Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,
// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
--- a/runtime/common/runtime_apis.rs
+++ b/runtime/common/runtime_apis.rs
@@ -639,14 +639,18 @@
list_benchmark!(list, extra, pallet_structure, Structure);
list_benchmark!(list, extra, pallet_inflation, Inflation);
list_benchmark!(list, extra, pallet_fungible, Fungible);
+ list_benchmark!(list, extra, pallet_nonfungible, Nonfungible);
+
+ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))]
list_benchmark!(list, extra, pallet_refungible, Refungible);
- list_benchmark!(list, extra, pallet_nonfungible, Nonfungible);
+
+ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))]
list_benchmark!(list, extra, pallet_unique_scheduler, Scheduler);
- #[cfg(not(feature = "unique-runtime"))]
+ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))]
list_benchmark!(list, extra, pallet_proxy_rmrk_core, RmrkCore);
- #[cfg(not(feature = "unique-runtime"))]
+ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))]
list_benchmark!(list, extra, pallet_proxy_rmrk_equip, RmrkEquip);
// list_benchmark!(list, extra, pallet_evm_coder_substrate, EvmCoderSubstrate);
@@ -690,14 +694,18 @@
add_benchmark!(params, batches, pallet_structure, Structure);
add_benchmark!(params, batches, pallet_inflation, Inflation);
add_benchmark!(params, batches, pallet_fungible, Fungible);
+ add_benchmark!(params, batches, pallet_nonfungible, Nonfungible);
+
+ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))]
add_benchmark!(params, batches, pallet_refungible, Refungible);
- add_benchmark!(params, batches, pallet_nonfungible, Nonfungible);
+
+ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))]
add_benchmark!(params, batches, pallet_unique_scheduler, Scheduler);
- #[cfg(not(feature = "unique-runtime"))]
+ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))]
add_benchmark!(params, batches, pallet_proxy_rmrk_core, RmrkCore);
- #[cfg(not(feature = "unique-runtime"))]
+ #[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))]
add_benchmark!(params, batches, pallet_proxy_rmrk_equip, RmrkEquip);
// add_benchmark!(params, batches, pallet_evm_coder_substrate, EvmCoderSubstrate);
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -87,6 +87,7 @@
'parachain-info/std',
'serde',
'pallet-inflation/std',
+ 'pallet-configuration/std',
'pallet-common/std',
'pallet-structure/std',
'pallet-fungible/std',
@@ -414,6 +415,7 @@
fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" }
pallet-inflation = { path = '../../pallets/inflation', default-features = false }
up-data-structs = { path = '../../primitives/data-structs', default-features = false }
+pallet-configuration = { default-features = false, path = "../../pallets/configuration" }
pallet-common = { default-features = false, path = "../../pallets/common" }
pallet-structure = { default-features = false, path = "../../pallets/structure" }
pallet-fungible = { default-features = false, path = "../../pallets/fungible" }
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -87,6 +87,7 @@
'parachain-info/std',
'serde',
'pallet-inflation/std',
+ 'pallet-configuration/std',
'pallet-common/std',
'pallet-structure/std',
'pallet-fungible/std',
@@ -418,6 +419,7 @@
fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" }
pallet-inflation = { path = '../../pallets/inflation', default-features = false }
up-data-structs = { path = '../../primitives/data-structs', default-features = false }
+pallet-configuration = { default-features = false, path = "../../pallets/configuration" }
pallet-common = { default-features = false, path = "../../pallets/common" }
pallet-structure = { default-features = false, path = "../../pallets/structure" }
pallet-fungible = { default-features = false, path = "../../pallets/fungible" }
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -88,6 +88,7 @@
'parachain-info/std',
'serde',
'pallet-inflation/std',
+ 'pallet-configuration/std',
'pallet-common/std',
'pallet-structure/std',
'pallet-fungible/std',
@@ -411,6 +412,7 @@
rmrk-rpc = { path = "../../primitives/rmrk-rpc", default-features = false }
pallet-inflation = { path = '../../pallets/inflation', default-features = false }
up-data-structs = { path = '../../primitives/data-structs', default-features = false }
+pallet-configuration = { default-features = false, path = "../../pallets/configuration" }
pallet-common = { default-features = false, path = "../../pallets/common" }
pallet-structure = { default-features = false, path = "../../pallets/structure" }
pallet-fungible = { default-features = false, path = "../../pallets/fungible" }
--- a/tests/.eslintrc.json
+++ b/tests/.eslintrc.json
@@ -55,7 +55,13 @@
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-explicit-any": "off",
- "@typescript-eslint/no-unused-vars": "warn",
+ "@typescript-eslint/no-unused-vars": [
+ "warn",
+ {
+ "varsIgnorePattern": "_.+",
+ "argsIgnorePattern": "_.+"
+ }
+ ],
"no-async-promise-executor": "warn",
"@typescript-eslint/no-empty-interface": "off",
"prefer-const": [
--- /dev/null
+++ b/tests/src/calibrate.ts
@@ -0,0 +1,182 @@
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
+import Web3 from 'web3';
+import {collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, recordEthFee, usingWeb3} from './eth/util/helpers';
+import usingApi, {executeTransaction} from './substrate/substrate-api';
+import {createCollectionExpectSuccess, createItemExpectSuccess, transferExpectSuccess, UNIQUE, waitNewBlocks} from './util/helpers';
+import nonFungibleAbi from './eth/nonFungibleAbi.json';
+
+function linearRegression(points: { x: bigint, y: bigint }[]) {
+ let sumxy = 0n;
+ let sumx = 0n;
+ let sumy = 0n;
+ let sumx2 = 0n;
+ const n = points.length;
+ for (let i = 0; i < n; i++) {
+ const p = points[i];
+ sumxy += p.x * p.y;
+ sumx += p.x;
+ sumy += p.y;
+ sumx2 += p.x * p.x;
+ }
+
+ const nb = BigInt(n);
+
+ const a = (nb * sumxy - sumx * sumy) / (nb * sumx2 - sumx * sumx);
+ const b = (sumy - a * sumx) / nb;
+
+ return {a, b};
+}
+
+// JS has no builtin function to calculate sqrt of bigint
+// https://stackoverflow.com/a/53684036/6190169
+function sqrt(value: bigint) {
+ if (value < 0n) {
+ throw 'square root of negative numbers is not supported';
+ }
+
+ if (value < 2n) {
+ return value;
+ }
+
+ function newtonIteration(n: bigint, x0: bigint): bigint {
+ const x1 = ((n / x0) + x0) >> 1n;
+ if (x0 === x1 || x0 === (x1 - 1n)) {
+ return x0;
+ }
+ return newtonIteration(n, x1);
+ }
+
+ return newtonIteration(value, 1n);
+}
+
+function _error(points: { x: bigint, y: bigint }[], hypothesis: (a: bigint) => bigint) {
+ return sqrt(points.map(p => {
+ const v = hypothesis(p.x);
+ const vv = p.y;
+
+ return (v - vv) ** 2n;
+ }).reduce((a, b) => a + b, 0n) / BigInt(points.length));
+}
+
+async function calibrateWeightToFee(api: ApiPromise, privateKey: (account: string) => IKeyringPair) {
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+ const dataPoints = [];
+
+ {
+ const collectionId = await createCollectionExpectSuccess();
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
+ const aliceBalanceBefore = (await api.query.system.account(alice.address)).data.free.toBigInt();
+ await transferExpectSuccess(collectionId, tokenId, alice, bob, 1, 'NFT');
+ const aliceBalanceAfter = (await api.query.system.account(alice.address)).data.free.toBigInt();
+
+ console.log(`Original price: ${Number(aliceBalanceBefore - aliceBalanceAfter) / Number(UNIQUE)} UNQ`);
+ }
+
+ const defaultCoeff = (api.consts.configuration.defaultWeightToFeeCoefficient as any).toBigInt();
+ for (let i = -5; i < 5; i++) {
+ await executeTransaction(api, alice, api.tx.sudo.sudo(api.tx.configuration.setWeightToFeeCoefficientOverride(defaultCoeff + defaultCoeff / 1000n * BigInt(i))));
+
+ const coefficient = (await api.query.configuration.weightToFeeCoefficientOverride() as any).toBigInt();
+ const collectionId = await createCollectionExpectSuccess();
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
+
+ const aliceBalanceBefore = (await api.query.system.account(alice.address)).data.free.toBigInt();
+ await transferExpectSuccess(collectionId, tokenId, alice, bob, 1, 'NFT');
+ const aliceBalanceAfter = (await api.query.system.account(alice.address)).data.free.toBigInt();
+
+ const transferPrice = aliceBalanceBefore - aliceBalanceAfter;
+
+ dataPoints.push({x: transferPrice, y: coefficient});
+ }
+ const {a, b} = linearRegression(dataPoints);
+
+ // console.log(`Error: ${error(dataPoints, x => a*x+b)}`);
+
+ const perfectValue = a * UNIQUE / 10n + b;
+ await executeTransaction(api, alice, api.tx.sudo.sudo(api.tx.configuration.setWeightToFeeCoefficientOverride(perfectValue.toString())));
+
+ {
+ const collectionId = await createCollectionExpectSuccess();
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
+ const aliceBalanceBefore = (await api.query.system.account(alice.address)).data.free.toBigInt();
+ await transferExpectSuccess(collectionId, tokenId, alice, bob, 1, 'NFT');
+ const aliceBalanceAfter = (await api.query.system.account(alice.address)).data.free.toBigInt();
+
+ console.log(`Calibrated price: ${Number(aliceBalanceBefore - aliceBalanceAfter) / Number(UNIQUE)} UNQ`);
+ }
+}
+
+async function calibrateMinGasPrice(api: ApiPromise, web3: Web3, privateKey: (account: string) => IKeyringPair) {
+ const alice = privateKey('//Alice');
+ const caller = await createEthAccountWithBalance(api, web3, privateKey);
+ const receiver = createEthAccount(web3);
+ const dataPoints = [];
+
+ {
+ const collectionId = await createCollectionExpectSuccess();
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', {Ethereum: caller});
+
+ const address = collectionIdToAddress(collectionId);
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
+
+ const cost = await recordEthFee(api, caller, () => contract.methods.transfer(receiver, tokenId).send(caller));
+
+ console.log(`Original price: ${Number(cost) / Number(UNIQUE)} UNQ`);
+ }
+
+ const defaultCoeff = (api.consts.configuration.defaultMinGasPrice as any).toBigInt();
+ for (let i = -8; i < 8; i++) {
+ const gasPrice = defaultCoeff + defaultCoeff / 100000n * BigInt(i);
+ const gasPriceStr = '0x' + gasPrice.toString(16);
+ await executeTransaction(api, alice, api.tx.sudo.sudo(api.tx.configuration.setMinGasPriceOverride(gasPrice)));
+
+ const coefficient = (await api.query.configuration.minGasPriceOverride() as any).toBigInt();
+ const collectionId = await createCollectionExpectSuccess();
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', {Ethereum: caller});
+
+ const address = collectionIdToAddress(collectionId);
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, gasPrice: gasPriceStr, ...GAS_ARGS});
+
+ const transferPrice = await recordEthFee(api, caller, () => contract.methods.transfer(receiver, tokenId).send(caller));
+
+ dataPoints.push({x: transferPrice, y: coefficient});
+ }
+
+ const {a, b} = linearRegression(dataPoints);
+
+ // console.log(`Error: ${error(dataPoints, x => a*x+b)}`);
+
+ // * 0.15 = * 10000 / 66666
+ const perfectValue = a * UNIQUE * 1000000n / 6666666n + b;
+ await executeTransaction(api, alice, api.tx.sudo.sudo(api.tx.configuration.setMinGasPriceOverride(perfectValue.toString())));
+
+ {
+ const collectionId = await createCollectionExpectSuccess();
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', {Ethereum: caller});
+
+ const address = collectionIdToAddress(collectionId);
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
+
+ const cost = await recordEthFee(api, caller, () => contract.methods.transfer(receiver, tokenId).send(caller));
+
+ console.log(`Calibrated price: ${Number(cost) / Number(UNIQUE)} UNQ`);
+ }
+}
+
+(async () => {
+ await usingApi(async (api, privateKey) => {
+ // Second run slightly reduces error sometimes, as price line is not actually straight, this is a curve
+
+ await calibrateWeightToFee(api, privateKey);
+ await calibrateWeightToFee(api, privateKey);
+
+ await usingWeb3(async web3 => {
+ await calibrateMinGasPrice(api, web3, privateKey);
+ await calibrateMinGasPrice(api, web3, privateKey);
+ });
+
+ await api.disconnect();
+ });
+})();
--- /dev/null
+++ b/tests/src/calibrateApply.ts
@@ -0,0 +1,38 @@
+import {readFile, writeFile} from 'fs/promises';
+import path from 'path';
+import usingApi from './substrate/substrate-api';
+
+const formatNumber = (num: string): string => num.split('').reverse().join('').replace(/([0-9]{3})/g, '$1_').split('').reverse().join('').replace(/^_/, '');
+
+(async () => {
+ let weightToFeeCoefficientOverride: string;
+ let minGasPriceOverride: string;
+ await usingApi(async (api, _privateKey) => {
+ weightToFeeCoefficientOverride = (await api.query.configuration.weightToFeeCoefficientOverride() as any).toBigInt().toString();
+ minGasPriceOverride = (await api.query.configuration.minGasPriceOverride() as any).toBigInt().toString();
+ });
+ const constantsFile = path.resolve(__dirname, '../../primitives/common/src/constants.rs');
+ let constants = (await readFile(constantsFile)).toString();
+
+ let weight2feeFound = false;
+ constants = constants.replace(/(\/\*\*\/)[0-9_]+(\/\*<\/weight2fee>\*\/)/, (_f, p, s) => {
+ weight2feeFound = true;
+ return p+formatNumber(weightToFeeCoefficientOverride)+s;
+ });
+ if (!weight2feeFound) {
+ throw new Error('failed to find weight2fee marker in source code');
+ }
+
+ let minGasPriceFound = false;
+ constants = constants.replace(/(\/\*\*\/)[0-9_]+(\/\*<\/mingasprice>\*\/)/, (_f, p, s) => {
+ minGasPriceFound = true;
+ return p+formatNumber(minGasPriceOverride)+s;
+ });
+ if (!minGasPriceFound) {
+ throw new Error('failed to find mingasprice marker in source code');
+ }
+
+ await writeFile(constantsFile, constants);
+})().catch(e => {
+ console.log(e.stack);
+});
--- a/tests/src/eth/base.test.ts
+++ b/tests/src/eth/base.test.ts
@@ -15,14 +15,14 @@
// along with Unique Network. If not, see .
import {
- collectionIdToAddress,
- createEthAccount,
- createEthAccountWithBalance,
- deployFlipper,
- ethBalanceViaSub,
- GAS_ARGS,
- itWeb3,
- recordEthFee,
+ collectionIdToAddress,
+ createEthAccount,
+ createEthAccountWithBalance,
+ deployFlipper,
+ ethBalanceViaSub,
+ GAS_ARGS,
+ itWeb3,
+ recordEthFee,
usingWeb3,
} from './util/helpers';
import {expect} from 'chai';
@@ -66,7 +66,7 @@
const fee = Number(cost) / Number(UNIQUE);
const expectedFee = 0.15;
- const tolerance = 0.00002;
+ const tolerance = 0.001;
expect(Math.abs(fee - expectedFee)).to.be.lessThan(tolerance);
});
--- a/tests/src/interfaces/augment-api-consts.ts
+++ b/tests/src/interfaces/augment-api-consts.ts
@@ -42,6 +42,14 @@
**/
[key: string]: Codec;
};
+ configuration: {
+ defaultMinGasPrice: u64 & AugmentedConst;
+ defaultWeightToFeeCoefficient: u32 & AugmentedConst;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
inflation: {
/**
* Number of blocks that pass between treasury balance updates due to inflation
--- a/tests/src/interfaces/augment-api-errors.ts
+++ b/tests/src/interfaces/augment-api-errors.ts
@@ -173,7 +173,7 @@
**/
TransferNotAllowed: AugmentedError;
/**
- * Target collection doesn't support this operation
+ * The operation is not supported
**/
UnsupportedOperation: AugmentedError;
/**
--- a/tests/src/interfaces/augment-api-query.ts
+++ b/tests/src/interfaces/augment-api-query.ts
@@ -110,6 +110,14 @@
**/
[key: string]: QueryableStorageEntry;
};
+ configuration: {
+ minGasPriceOverride: AugmentedQuery Observable, []> & QueryableStorageEntry;
+ weightToFeeCoefficientOverride: AugmentedQuery Observable, []> & QueryableStorageEntry;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry;
+ };
dmpQueue: {
/**
* The configuration.
--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -104,6 +104,14 @@
**/
[key: string]: SubmittableExtrinsicFunction;
};
+ configuration: {
+ setMinGasPriceOverride: AugmentedSubmittable<(coeff: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>;
+ setWeightToFeeCoefficientOverride: AugmentedSubmittable<(coeff: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction;
+ };
cumulusXcm: {
/**
* Generic tx
--- a/tests/src/interfaces/augment-types.ts
+++ b/tests/src/interfaces/augment-types.ts
@@ -1,7 +1,7 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletConfigurationCall, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default';
import type { Data, StorageKey } from '@polkadot/types';
import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec';
import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets';
@@ -763,6 +763,7 @@
PalletCallMetadataV14: PalletCallMetadataV14;
PalletCommonError: PalletCommonError;
PalletCommonEvent: PalletCommonEvent;
+ PalletConfigurationCall: PalletConfigurationCall;
PalletConstantMetadataLatest: PalletConstantMetadataLatest;
PalletConstantMetadataV14: PalletConstantMetadataV14;
PalletErrorMetadataLatest: PalletErrorMetadataLatest;
--- a/tests/src/interfaces/default/types.ts
+++ b/tests/src/interfaces/default/types.ts
@@ -994,6 +994,19 @@
readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet';
}
+/** @name PalletConfigurationCall */
+export interface PalletConfigurationCall extends Enum {
+ readonly isSetWeightToFeeCoefficientOverride: boolean;
+ readonly asSetWeightToFeeCoefficientOverride: {
+ readonly coeff: Option;
+ } & Struct;
+ readonly isSetMinGasPriceOverride: boolean;
+ readonly asSetMinGasPriceOverride: {
+ readonly coeff: Option;
+ } & Struct;
+ readonly type: 'SetWeightToFeeCoefficientOverride' | 'SetMinGasPriceOverride';
+}
+
/** @name PalletEthereumCall */
export interface PalletEthereumCall extends Enum {
readonly isTransact: boolean;
--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -1571,15 +1571,28 @@
}
},
/**
- * Lookup207: pallet_template_transaction_payment::Call
+ * Lookup207: pallet_configuration::pallet::Call
**/
+ PalletConfigurationCall: {
+ _enum: {
+ set_weight_to_fee_coefficient_override: {
+ coeff: 'Option',
+ },
+ set_min_gas_price_override: {
+ coeff: 'Option'
+ }
+ }
+ },
+ /**
+ * Lookup209: pallet_template_transaction_payment::Call
+ **/
PalletTemplateTransactionPaymentCall: 'Null',
/**
- * Lookup208: pallet_structure::pallet::Call
+ * Lookup210: pallet_structure::pallet::Call
**/
PalletStructureCall: 'Null',
/**
- * Lookup209: pallet_rmrk_core::pallet::Call
+ * Lookup211: pallet_rmrk_core::pallet::Call
**/
PalletRmrkCoreCall: {
_enum: {
@@ -1670,7 +1683,7 @@
}
},
/**
- * Lookup215: rmrk_traits::resource::ResourceTypes, frame_support::storage::bounded_vec::BoundedVec>
+ * Lookup217: rmrk_traits::resource::ResourceTypes, frame_support::storage::bounded_vec::BoundedVec>
**/
RmrkTraitsResourceResourceTypes: {
_enum: {
@@ -1680,7 +1693,7 @@
}
},
/**
- * Lookup217: rmrk_traits::resource::BasicResource>
+ * Lookup219: rmrk_traits::resource::BasicResource>
**/
RmrkTraitsResourceBasicResource: {
src: 'Option',
@@ -1689,7 +1702,7 @@
thumb: 'Option'
},
/**
- * Lookup219: rmrk_traits::resource::ComposableResource, frame_support::storage::bounded_vec::BoundedVec>
+ * Lookup221: rmrk_traits::resource::ComposableResource, frame_support::storage::bounded_vec::BoundedVec>
**/
RmrkTraitsResourceComposableResource: {
parts: 'Vec',
@@ -1700,7 +1713,7 @@
thumb: 'Option'
},
/**
- * Lookup220: rmrk_traits::resource::SlotResource>
+ * Lookup222: rmrk_traits::resource::SlotResource>
**/
RmrkTraitsResourceSlotResource: {
base: 'u32',
@@ -1711,7 +1724,7 @@
thumb: 'Option'
},
/**
- * Lookup222: rmrk_traits::nft::AccountIdOrCollectionNftTuple
+ * Lookup224: rmrk_traits::nft::AccountIdOrCollectionNftTuple
**/
RmrkTraitsNftAccountIdOrCollectionNftTuple: {
_enum: {
@@ -1720,7 +1733,7 @@
}
},
/**
- * Lookup226: pallet_rmrk_equip::pallet::Call
+ * Lookup228: pallet_rmrk_equip::pallet::Call
**/
PalletRmrkEquipCall: {
_enum: {
@@ -1741,7 +1754,7 @@
}
},
/**
- * Lookup229: rmrk_traits::part::PartType, frame_support::storage::bounded_vec::BoundedVec>
+ * Lookup231: rmrk_traits::part::PartType, frame_support::storage::bounded_vec::BoundedVec>
**/
RmrkTraitsPartPartType: {
_enum: {
@@ -1750,7 +1763,7 @@
}
},
/**
- * Lookup231: rmrk_traits::part::FixedPart>
+ * Lookup233: rmrk_traits::part::FixedPart>
**/
RmrkTraitsPartFixedPart: {
id: 'u32',
@@ -1758,7 +1771,7 @@
src: 'Bytes'
},
/**
- * Lookup232: rmrk_traits::part::SlotPart, frame_support::storage::bounded_vec::BoundedVec>
+ * Lookup234: rmrk_traits::part::SlotPart, frame_support::storage::bounded_vec::BoundedVec>
**/
RmrkTraitsPartSlotPart: {
id: 'u32',
@@ -1767,7 +1780,7 @@
z: 'u32'
},
/**
- * Lookup233: rmrk_traits::part::EquippableList>
+ * Lookup235: rmrk_traits::part::EquippableList>
**/
RmrkTraitsPartEquippableList: {
_enum: {
@@ -1777,7 +1790,7 @@
}
},
/**
- * Lookup235: rmrk_traits::theme::Theme, frame_support::storage::bounded_vec::BoundedVec>, S>>
+ * Lookup237: rmrk_traits::theme::Theme, frame_support::storage::bounded_vec::BoundedVec>, S>>
**/
RmrkTraitsTheme: {
name: 'Bytes',
@@ -1785,14 +1798,14 @@
inherit: 'bool'
},
/**
- * Lookup237: rmrk_traits::theme::ThemeProperty>
+ * Lookup239: rmrk_traits::theme::ThemeProperty>
**/
RmrkTraitsThemeThemeProperty: {
key: 'Bytes',
value: 'Bytes'
},
/**
- * Lookup239: pallet_evm::pallet::Call
+ * Lookup241: pallet_evm::pallet::Call
**/
PalletEvmCall: {
_enum: {
@@ -1835,7 +1848,7 @@
}
},
/**
- * Lookup245: pallet_ethereum::pallet::Call
+ * Lookup247: pallet_ethereum::pallet::Call
**/
PalletEthereumCall: {
_enum: {
@@ -1845,7 +1858,7 @@
}
},
/**
- * Lookup246: ethereum::transaction::TransactionV2
+ * Lookup248: ethereum::transaction::TransactionV2
**/
EthereumTransactionTransactionV2: {
_enum: {
@@ -1855,7 +1868,7 @@
}
},
/**
- * Lookup247: ethereum::transaction::LegacyTransaction
+ * Lookup249: ethereum::transaction::LegacyTransaction
**/
EthereumTransactionLegacyTransaction: {
nonce: 'U256',
@@ -1867,7 +1880,7 @@
signature: 'EthereumTransactionTransactionSignature'
},
/**
- * Lookup248: ethereum::transaction::TransactionAction
+ * Lookup250: ethereum::transaction::TransactionAction
**/
EthereumTransactionTransactionAction: {
_enum: {
@@ -1876,7 +1889,7 @@
}
},
/**
- * Lookup249: ethereum::transaction::TransactionSignature
+ * Lookup251: ethereum::transaction::TransactionSignature
**/
EthereumTransactionTransactionSignature: {
v: 'u64',
@@ -1884,7 +1897,7 @@
s: 'H256'
},
/**
- * Lookup251: ethereum::transaction::EIP2930Transaction
+ * Lookup253: ethereum::transaction::EIP2930Transaction
**/
EthereumTransactionEip2930Transaction: {
chainId: 'u64',
@@ -1900,14 +1913,14 @@
s: 'H256'
},
/**
- * Lookup253: ethereum::transaction::AccessListItem
+ * Lookup255: ethereum::transaction::AccessListItem
**/
EthereumTransactionAccessListItem: {
address: 'H160',
storageKeys: 'Vec'
},
/**
- * Lookup254: ethereum::transaction::EIP1559Transaction
+ * Lookup256: ethereum::transaction::EIP1559Transaction
**/
EthereumTransactionEip1559Transaction: {
chainId: 'u64',
@@ -1924,7 +1937,7 @@
s: 'H256'
},
/**
- * Lookup255: pallet_evm_migration::pallet::Call
+ * Lookup257: pallet_evm_migration::pallet::Call
**/
PalletEvmMigrationCall: {
_enum: {
@@ -1942,7 +1955,7 @@
}
},
/**
- * Lookup258: pallet_sudo::pallet::Event
+ * Lookup260: pallet_sudo::pallet::Event
**/
PalletSudoEvent: {
_enum: {
@@ -1958,7 +1971,7 @@
}
},
/**
- * Lookup260: sp_runtime::DispatchError
+ * Lookup262: sp_runtime::DispatchError
**/
SpRuntimeDispatchError: {
_enum: {
@@ -1975,38 +1988,38 @@
}
},
/**
- * Lookup261: sp_runtime::ModuleError
+ * Lookup263: sp_runtime::ModuleError
**/
SpRuntimeModuleError: {
index: 'u8',
error: '[u8;4]'
},
/**
- * Lookup262: sp_runtime::TokenError
+ * Lookup264: sp_runtime::TokenError
**/
SpRuntimeTokenError: {
_enum: ['NoFunds', 'WouldDie', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported']
},
/**
- * Lookup263: sp_runtime::ArithmeticError
+ * Lookup265: sp_runtime::ArithmeticError
**/
SpRuntimeArithmeticError: {
_enum: ['Underflow', 'Overflow', 'DivisionByZero']
},
/**
- * Lookup264: sp_runtime::TransactionalError
+ * Lookup266: sp_runtime::TransactionalError
**/
SpRuntimeTransactionalError: {
_enum: ['LimitReached', 'NoLayer']
},
/**
- * Lookup265: pallet_sudo::pallet::Error
+ * Lookup267: pallet_sudo::pallet::Error
**/
PalletSudoError: {
_enum: ['RequireSudo']
},
/**
- * Lookup266: frame_system::AccountInfo>
+ * Lookup268: frame_system::AccountInfo>
**/
FrameSystemAccountInfo: {
nonce: 'u32',
@@ -2016,7 +2029,7 @@
data: 'PalletBalancesAccountData'
},
/**
- * Lookup267: frame_support::weights::PerDispatchClass
+ * Lookup269: frame_support::weights::PerDispatchClass
**/
FrameSupportWeightsPerDispatchClassU64: {
normal: 'u64',
@@ -2024,13 +2037,13 @@
mandatory: 'u64'
},
/**
- * Lookup268: sp_runtime::generic::digest::Digest
+ * Lookup270: sp_runtime::generic::digest::Digest
**/
SpRuntimeDigest: {
logs: 'Vec'
},
/**
- * Lookup270: sp_runtime::generic::digest::DigestItem
+ * Lookup272: sp_runtime::generic::digest::DigestItem
**/
SpRuntimeDigestDigestItem: {
_enum: {
@@ -2046,7 +2059,7 @@
}
},
/**
- * Lookup272: frame_system::EventRecord
+ * Lookup274: frame_system::EventRecord
**/
FrameSystemEventRecord: {
phase: 'FrameSystemPhase',
@@ -2054,7 +2067,7 @@
topics: 'Vec'
},
/**
- * Lookup274: frame_system::pallet::Event
+ * Lookup276: frame_system::pallet::Event
**/
FrameSystemEvent: {
_enum: {
@@ -2082,7 +2095,7 @@
}
},
/**
- * Lookup275: frame_support::weights::DispatchInfo
+ * Lookup277: frame_support::weights::DispatchInfo
**/
FrameSupportWeightsDispatchInfo: {
weight: 'u64',
@@ -2090,19 +2103,19 @@
paysFee: 'FrameSupportWeightsPays'
},
/**
- * Lookup276: frame_support::weights::DispatchClass
+ * Lookup278: frame_support::weights::DispatchClass
**/
FrameSupportWeightsDispatchClass: {
_enum: ['Normal', 'Operational', 'Mandatory']
},
/**
- * Lookup277: frame_support::weights::Pays
+ * Lookup279: frame_support::weights::Pays
**/
FrameSupportWeightsPays: {
_enum: ['Yes', 'No']
},
/**
- * Lookup278: orml_vesting::module::Event
+ * Lookup280: orml_vesting::module::Event
**/
OrmlVestingModuleEvent: {
_enum: {
@@ -2121,7 +2134,7 @@
}
},
/**
- * Lookup279: cumulus_pallet_xcmp_queue::pallet::Event
+ * Lookup281: cumulus_pallet_xcmp_queue::pallet::Event
**/
CumulusPalletXcmpQueueEvent: {
_enum: {
@@ -2136,7 +2149,7 @@
}
},
/**
- * Lookup280: pallet_xcm::pallet::Event
+ * Lookup282: pallet_xcm::pallet::Event
**/
PalletXcmEvent: {
_enum: {
@@ -2159,7 +2172,7 @@
}
},
/**
- * Lookup281: xcm::v2::traits::Outcome
+ * Lookup283: xcm::v2::traits::Outcome
**/
XcmV2TraitsOutcome: {
_enum: {
@@ -2169,7 +2182,7 @@
}
},
/**
- * Lookup283: cumulus_pallet_xcm::pallet::Event
+ * Lookup285: cumulus_pallet_xcm::pallet::Event
**/
CumulusPalletXcmEvent: {
_enum: {
@@ -2179,7 +2192,7 @@
}
},
/**
- * Lookup284: cumulus_pallet_dmp_queue::pallet::Event
+ * Lookup286: cumulus_pallet_dmp_queue::pallet::Event
**/
CumulusPalletDmpQueueEvent: {
_enum: {
@@ -2210,7 +2223,7 @@
}
},
/**
- * Lookup285: pallet_unique::RawEvent>
+ * Lookup287: pallet_unique::RawEvent>
**/
PalletUniqueRawEvent: {
_enum: {
@@ -2227,7 +2240,7 @@
}
},
/**
- * Lookup286: pallet_unique_scheduler::pallet::Event
+ * Lookup288: pallet_unique_scheduler::pallet::Event
**/
PalletUniqueSchedulerEvent: {
_enum: {
@@ -2252,13 +2265,13 @@
}
},
/**
- * Lookup288: frame_support::traits::schedule::LookupError
+ * Lookup290: frame_support::traits::schedule::LookupError
**/
FrameSupportScheduleLookupError: {
_enum: ['Unknown', 'BadFormat']
},
/**
- * Lookup289: pallet_common::pallet::Event
+ * Lookup291: pallet_common::pallet::Event
**/
PalletCommonEvent: {
_enum: {
@@ -2276,7 +2289,7 @@
}
},
/**
- * Lookup290: pallet_structure::pallet::Event
+ * Lookup292: pallet_structure::pallet::Event
**/
PalletStructureEvent: {
_enum: {
@@ -2284,7 +2297,7 @@
}
},
/**
- * Lookup291: pallet_rmrk_core::pallet::Event
+ * Lookup293: pallet_rmrk_core::pallet::Event
**/
PalletRmrkCoreEvent: {
_enum: {
@@ -2361,7 +2374,7 @@
}
},
/**
- * Lookup292: pallet_rmrk_equip::pallet::Event
+ * Lookup294: pallet_rmrk_equip::pallet::Event
**/
PalletRmrkEquipEvent: {
_enum: {
@@ -2376,7 +2389,7 @@
}
},
/**
- * Lookup293: pallet_evm::pallet::Event
+ * Lookup295: pallet_evm::pallet::Event
**/
PalletEvmEvent: {
_enum: {
@@ -2390,7 +2403,7 @@
}
},
/**
- * Lookup294: ethereum::log::Log
+ * Lookup296: ethereum::log::Log
**/
EthereumLog: {
address: 'H160',
@@ -2398,7 +2411,7 @@
data: 'Bytes'
},
/**
- * Lookup295: pallet_ethereum::pallet::Event
+ * Lookup297: pallet_ethereum::pallet::Event
**/
PalletEthereumEvent: {
_enum: {
@@ -2406,7 +2419,7 @@
}
},
/**
- * Lookup296: evm_core::error::ExitReason
+ * Lookup298: evm_core::error::ExitReason
**/
EvmCoreErrorExitReason: {
_enum: {
@@ -2417,13 +2430,13 @@
}
},
/**
- * Lookup297: evm_core::error::ExitSucceed
+ * Lookup299: evm_core::error::ExitSucceed
**/
EvmCoreErrorExitSucceed: {
_enum: ['Stopped', 'Returned', 'Suicided']
},
/**
- * Lookup298: evm_core::error::ExitError
+ * Lookup300: evm_core::error::ExitError
**/
EvmCoreErrorExitError: {
_enum: {
@@ -2445,13 +2458,13 @@
}
},
/**
- * Lookup301: evm_core::error::ExitRevert
+ * Lookup303: evm_core::error::ExitRevert
**/
EvmCoreErrorExitRevert: {
_enum: ['Reverted']
},
/**
- * Lookup302: evm_core::error::ExitFatal
+ * Lookup304: evm_core::error::ExitFatal
**/
EvmCoreErrorExitFatal: {
_enum: {
@@ -2462,7 +2475,7 @@
}
},
/**
- * Lookup303: frame_system::Phase
+ * Lookup305: frame_system::Phase
**/
FrameSystemPhase: {
_enum: {
@@ -2472,14 +2485,14 @@
}
},
/**
- * Lookup305: frame_system::LastRuntimeUpgradeInfo
+ * Lookup307: frame_system::LastRuntimeUpgradeInfo
**/
FrameSystemLastRuntimeUpgradeInfo: {
specVersion: 'Compact',
specName: 'Text'
},
/**
- * Lookup306: frame_system::limits::BlockWeights
+ * Lookup308: frame_system::limits::BlockWeights
**/
FrameSystemLimitsBlockWeights: {
baseBlock: 'u64',
@@ -2487,7 +2500,7 @@
perClass: 'FrameSupportWeightsPerDispatchClassWeightsPerClass'
},
/**
- * Lookup307: frame_support::weights::PerDispatchClass
+ * Lookup309: frame_support::weights::PerDispatchClass
**/
FrameSupportWeightsPerDispatchClassWeightsPerClass: {
normal: 'FrameSystemLimitsWeightsPerClass',
@@ -2495,7 +2508,7 @@
mandatory: 'FrameSystemLimitsWeightsPerClass'
},
/**
- * Lookup308: frame_system::limits::WeightsPerClass
+ * Lookup310: frame_system::limits::WeightsPerClass
**/
FrameSystemLimitsWeightsPerClass: {
baseExtrinsic: 'u64',
@@ -2504,13 +2517,13 @@
reserved: 'Option'
},
/**
- * Lookup310: frame_system::limits::BlockLength
+ * Lookup311: frame_system::limits::BlockLength
**/
FrameSystemLimitsBlockLength: {
max: 'FrameSupportWeightsPerDispatchClassU32'
},
/**
- * Lookup311: frame_support::weights::PerDispatchClass
+ * Lookup312: frame_support::weights::PerDispatchClass
**/
FrameSupportWeightsPerDispatchClassU32: {
normal: 'u32',
@@ -2518,14 +2531,14 @@
mandatory: 'u32'
},
/**
- * Lookup312: frame_support::weights::RuntimeDbWeight
+ * Lookup313: frame_support::weights::RuntimeDbWeight
**/
FrameSupportWeightsRuntimeDbWeight: {
read: 'u64',
write: 'u64'
},
/**
- * Lookup313: sp_version::RuntimeVersion
+ * Lookup314: sp_version::RuntimeVersion
**/
SpVersionRuntimeVersion: {
specName: 'Text',
@@ -2538,19 +2551,19 @@
stateVersion: 'u8'
},
/**
- * Lookup317: frame_system::pallet::Error
+ * Lookup318: frame_system::pallet::Error
**/
FrameSystemError: {
_enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered']
},
/**
- * Lookup319: orml_vesting::module::Error
+ * Lookup320: orml_vesting::module::Error
**/
OrmlVestingModuleError: {
_enum: ['ZeroVestingPeriod', 'ZeroVestingPeriodCount', 'InsufficientBalanceToLock', 'TooManyVestingSchedules', 'AmountLow', 'MaxVestingSchedulesExceeded']
},
/**
- * Lookup321: cumulus_pallet_xcmp_queue::InboundChannelDetails
+ * Lookup322: cumulus_pallet_xcmp_queue::InboundChannelDetails
**/
CumulusPalletXcmpQueueInboundChannelDetails: {
sender: 'u32',
@@ -2558,19 +2571,19 @@
messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>'
},
/**
- * Lookup322: cumulus_pallet_xcmp_queue::InboundState
+ * Lookup323: cumulus_pallet_xcmp_queue::InboundState
**/
CumulusPalletXcmpQueueInboundState: {
_enum: ['Ok', 'Suspended']
},
/**
- * Lookup325: polkadot_parachain::primitives::XcmpMessageFormat
+ * Lookup326: polkadot_parachain::primitives::XcmpMessageFormat
**/
PolkadotParachainPrimitivesXcmpMessageFormat: {
_enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals']
},
/**
- * Lookup328: cumulus_pallet_xcmp_queue::OutboundChannelDetails
+ * Lookup329: cumulus_pallet_xcmp_queue::OutboundChannelDetails
**/
CumulusPalletXcmpQueueOutboundChannelDetails: {
recipient: 'u32',
@@ -2580,13 +2593,13 @@
lastIndex: 'u16'
},
/**
- * Lookup329: cumulus_pallet_xcmp_queue::OutboundState
+ * Lookup330: cumulus_pallet_xcmp_queue::OutboundState
**/
CumulusPalletXcmpQueueOutboundState: {
_enum: ['Ok', 'Suspended']
},
/**
- * Lookup331: cumulus_pallet_xcmp_queue::QueueConfigData
+ * Lookup332: cumulus_pallet_xcmp_queue::QueueConfigData
**/
CumulusPalletXcmpQueueQueueConfigData: {
suspendThreshold: 'u32',
@@ -2597,29 +2610,29 @@
xcmpMaxIndividualWeight: 'u64'
},
/**
- * Lookup333: cumulus_pallet_xcmp_queue::pallet::Error
+ * Lookup334: cumulus_pallet_xcmp_queue::pallet::Error
**/
CumulusPalletXcmpQueueError: {
_enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit']
},
/**
- * Lookup334: pallet_xcm::pallet::Error
+ * Lookup335: pallet_xcm::pallet::Error
**/
PalletXcmError: {
_enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed']
},
/**
- * Lookup335: cumulus_pallet_xcm::pallet::Error
+ * Lookup336: cumulus_pallet_xcm::pallet::Error
**/
CumulusPalletXcmError: 'Null',
/**
- * Lookup336: cumulus_pallet_dmp_queue::ConfigData
+ * Lookup337: cumulus_pallet_dmp_queue::ConfigData
**/
CumulusPalletDmpQueueConfigData: {
maxIndividual: 'u64'
},
/**
- * Lookup337: cumulus_pallet_dmp_queue::PageIndexData
+ * Lookup338: cumulus_pallet_dmp_queue::PageIndexData
**/
CumulusPalletDmpQueuePageIndexData: {
beginUsed: 'u32',
@@ -2627,19 +2640,19 @@
overweightCount: 'u64'
},
/**
- * Lookup340: cumulus_pallet_dmp_queue::pallet::Error
+ * Lookup341: cumulus_pallet_dmp_queue::pallet::Error
**/
CumulusPalletDmpQueueError: {
_enum: ['Unknown', 'OverLimit']
},
/**
- * Lookup344: pallet_unique::Error
+ * Lookup345: pallet_unique::Error
**/
PalletUniqueError: {
_enum: ['CollectionDecimalPointLimitExceeded', 'ConfirmUnsetSponsorFail', 'EmptyArgument', 'RepartitionCalledOnNonRefungibleCollection']
},
/**
- * Lookup347: pallet_unique_scheduler::ScheduledV3, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32>
+ * Lookup348: pallet_unique_scheduler::ScheduledV3, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32>
**/
PalletUniqueSchedulerScheduledV3: {
maybeId: 'Option<[u8;16]>',
@@ -2649,7 +2662,7 @@
origin: 'OpalRuntimeOriginCaller'
},
/**
- * Lookup348: opal_runtime::OriginCaller
+ * Lookup349: opal_runtime::OriginCaller
**/
OpalRuntimeOriginCaller: {
_enum: {
@@ -2758,7 +2771,7 @@
}
},
/**
- * Lookup349: frame_support::dispatch::RawOrigin
+ * Lookup350: frame_support::dispatch::RawOrigin
**/
FrameSupportDispatchRawOrigin: {
_enum: {
@@ -2768,7 +2781,7 @@
}
},
/**
- * Lookup350: pallet_xcm::pallet::Origin
+ * Lookup351: pallet_xcm::pallet::Origin
**/
PalletXcmOrigin: {
_enum: {
@@ -2777,7 +2790,7 @@
}
},
/**
- * Lookup351: cumulus_pallet_xcm::pallet::Origin
+ * Lookup352: cumulus_pallet_xcm::pallet::Origin
**/
CumulusPalletXcmOrigin: {
_enum: {
@@ -2786,7 +2799,7 @@
}
},
/**
- * Lookup352: pallet_ethereum::RawOrigin
+ * Lookup353: pallet_ethereum::RawOrigin
**/
PalletEthereumRawOrigin: {
_enum: {
@@ -2794,17 +2807,17 @@
}
},
/**
- * Lookup353: sp_core::Void
+ * Lookup354: sp_core::Void
**/
SpCoreVoid: 'Null',
/**
- * Lookup354: pallet_unique_scheduler::pallet::Error
+ * Lookup355: pallet_unique_scheduler::pallet::Error
**/
PalletUniqueSchedulerError: {
_enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange']
},
/**
- * Lookup355: up_data_structs::Collection
+ * Lookup356: up_data_structs::Collection
**/
UpDataStructsCollection: {
owner: 'AccountId32',
@@ -2818,7 +2831,7 @@
externalCollection: 'bool'
},
/**
- * Lookup356: up_data_structs::SponsorshipState
+ * Lookup357: up_data_structs::SponsorshipState
**/
UpDataStructsSponsorshipState: {
_enum: {
@@ -2828,7 +2841,7 @@
}
},
/**
- * Lookup357: up_data_structs::Properties
+ * Lookup358: up_data_structs::Properties
**/
UpDataStructsProperties: {
map: 'UpDataStructsPropertiesMapBoundedVec',
@@ -2836,15 +2849,15 @@
spaceLimit: 'u32'
},
/**
- * Lookup358: up_data_structs::PropertiesMap>
+ * Lookup359: up_data_structs::PropertiesMap>
**/
UpDataStructsPropertiesMapBoundedVec: 'BTreeMap',
/**
- * Lookup363: up_data_structs::PropertiesMap
+ * Lookup364: up_data_structs::PropertiesMap
**/
UpDataStructsPropertiesMapPropertyPermission: 'BTreeMap',
/**
- * Lookup370: up_data_structs::CollectionStats
+ * Lookup371: up_data_structs::CollectionStats
**/
UpDataStructsCollectionStats: {
created: 'u32',
@@ -2852,18 +2865,18 @@
alive: 'u32'
},
/**
- * Lookup371: up_data_structs::TokenChild
+ * Lookup372: up_data_structs::TokenChild
**/
UpDataStructsTokenChild: {
token: 'u32',
collection: 'u32'
},
/**
- * Lookup372: PhantomType::up_data_structs
+ * Lookup373: PhantomType::up_data_structs
**/
PhantomTypeUpDataStructs: '[(UpDataStructsTokenData,UpDataStructsRpcCollection,RmrkTraitsCollectionCollectionInfo,RmrkTraitsNftNftInfo,RmrkTraitsResourceResourceInfo,RmrkTraitsPropertyPropertyInfo,RmrkTraitsBaseBaseInfo,RmrkTraitsPartPartType,RmrkTraitsTheme,RmrkTraitsNftNftChild);0]',
/**
- * Lookup374: up_data_structs::TokenData>
+ * Lookup375: up_data_structs::TokenData>
**/
UpDataStructsTokenData: {
properties: 'Vec',
@@ -2871,7 +2884,7 @@
pieces: 'u128'
},
/**
- * Lookup376: up_data_structs::RpcCollection
+ * Lookup377: up_data_structs::RpcCollection
**/
UpDataStructsRpcCollection: {
owner: 'AccountId32',
@@ -2887,7 +2900,7 @@
readOnly: 'bool'
},
/**
- * Lookup377: rmrk_traits::collection::CollectionInfo, frame_support::storage::bounded_vec::BoundedVec, sp_core::crypto::AccountId32>
+ * Lookup378: rmrk_traits::collection::CollectionInfo, frame_support::storage::bounded_vec::BoundedVec, sp_core::crypto::AccountId32>
**/
RmrkTraitsCollectionCollectionInfo: {
issuer: 'AccountId32',
@@ -2897,7 +2910,7 @@
nftsCount: 'u32'
},
/**
- * Lookup378: rmrk_traits::nft::NftInfo>
+ * Lookup379: rmrk_traits::nft::NftInfo>
**/
RmrkTraitsNftNftInfo: {
owner: 'RmrkTraitsNftAccountIdOrCollectionNftTuple',
@@ -2907,14 +2920,14 @@
pending: 'bool'
},
/**
- * Lookup380: rmrk_traits::nft::RoyaltyInfo
+ * Lookup381: rmrk_traits::nft::RoyaltyInfo
**/
RmrkTraitsNftRoyaltyInfo: {
recipient: 'AccountId32',
amount: 'Permill'
},
/**
- * Lookup381: rmrk_traits::resource::ResourceInfo, frame_support::storage::bounded_vec::BoundedVec>
+ * Lookup382: rmrk_traits::resource::ResourceInfo, frame_support::storage::bounded_vec::BoundedVec>
**/
RmrkTraitsResourceResourceInfo: {
id: 'u32',
@@ -2923,14 +2936,14 @@
pendingRemoval: 'bool'
},
/**
- * Lookup382: rmrk_traits::property::PropertyInfo, frame_support::storage::bounded_vec::BoundedVec>
+ * Lookup383: rmrk_traits::property::PropertyInfo