difftreelog
merge develop
in: master
91 files changed
.envdiffbeforeafterboth--- a/.env
+++ b/.env
@@ -1,6 +1,6 @@
RUST_TOOLCHAIN=nightly-2022-05-11
RUST_C=1.62.0-nightly
-POLKA_VERSION=release-v0.9.22
+POLKA_VERSION=release-v0.9.23
UNIQUE_BRANCH=develop
USER=***
PASS=***
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -68,7 +68,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
dependencies = [
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
"once_cell",
"version_check",
]
@@ -99,9 +99,9 @@
[[package]]
name = "anyhow"
-version = "1.0.57"
+version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
[[package]]
name = "approx"
@@ -188,9 +188,9 @@
[[package]]
name = "async-global-executor"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd8b508d585e01084059b60f06ade4cb7415cd2e4084b71dd1cb44e7d3fb9880"
+checksum = "5262ed948da60dd8956c6c5aca4d4163593dddb7b32d73267c93dab7b2e98940"
dependencies = [
"async-channel",
"async-executor",
@@ -198,6 +198,7 @@
"async-lock",
"blocking",
"futures-lite",
+ "num_cpus",
"once_cell",
]
@@ -248,9 +249,9 @@
[[package]]
name = "async-std"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52580991739c5cdb36cde8b2a516371c0a3b70dda36d916cc08b82372916808c"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
dependencies = [
"async-attributes",
"async-channel",
@@ -267,7 +268,6 @@
"kv-log-macro",
"log",
"memchr",
- "num_cpus",
"once_cell",
"pin-project-lite 0.2.9",
"pin-utils",
@@ -371,7 +371,7 @@
checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
dependencies = [
"futures-core",
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
"instant",
"pin-project-lite 0.2.9",
"rand 0.8.5",
@@ -429,7 +429,7 @@
[[package]]
name = "beefy-gadget"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"beefy-primitives",
"fnv",
@@ -437,7 +437,7 @@
"futures-timer",
"hex",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sc-chain-spec",
"sc-client-api",
@@ -463,14 +463,14 @@
[[package]]
name = "beefy-gadget-rpc"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"beefy-gadget",
"beefy-primitives",
"futures 0.3.21",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sc-rpc",
"sc-utils",
@@ -483,14 +483,14 @@
[[package]]
name = "beefy-merkle-tree"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
[[package]]
name = "beefy-primitives"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-api",
"sp-application-crypto",
@@ -695,7 +695,7 @@
"bp-runtime",
"finality-grandpa",
"frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -711,7 +711,7 @@
dependencies = [
"bp-runtime",
"frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-std",
]
@@ -726,7 +726,7 @@
"frame-support",
"frame-system",
"impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -742,7 +742,7 @@
"bp-runtime",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-api",
"sp-core",
@@ -760,7 +760,7 @@
"bp-polkadot-core",
"bp-runtime",
"frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"smallvec",
"sp-api",
"sp-runtime",
@@ -776,7 +776,7 @@
"frame-support",
"hash-db",
"num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -794,7 +794,7 @@
"bp-header-chain",
"ed25519-dalek",
"finality-grandpa",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-application-crypto",
"sp-finality-grandpa",
"sp-runtime",
@@ -810,7 +810,7 @@
"bp-polkadot-core",
"bp-rococo",
"bp-runtime",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-api",
"sp-runtime",
"sp-std",
@@ -831,7 +831,7 @@
"pallet-bridge-grandpa",
"pallet-bridge-messages",
"pallet-transaction-payment",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-api",
"sp-core",
@@ -1067,16 +1067,16 @@
[[package]]
name = "clap"
-version = "3.1.18"
+version = "3.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
+checksum = "d53da17d37dba964b9b3ecb5c5a1f193a2762c700e6829201e645b9381c99dc7"
dependencies = [
"atty",
"bitflags",
"clap_derive",
"clap_lex",
"indexmap",
- "lazy_static",
+ "once_cell",
"strsim",
"termcolor",
"textwrap",
@@ -1084,9 +1084,9 @@
[[package]]
name = "clap_derive"
-version = "3.1.18"
+version = "3.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"
+checksum = "c11d40217d16aee8508cc8e5fde8b4ff24639758608e5374e731b53f85749fb9"
dependencies = [
"heck 0.4.0",
"proc-macro-error",
@@ -1097,9 +1097,9 @@
[[package]]
name = "clap_lex"
-version = "0.2.0"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213"
+checksum = "5538cd660450ebeb4234cfecf8f2284b844ffc4c50531e66d584ad5b91293613"
dependencies = [
"os_str_bytes",
]
@@ -1297,9 +1297,9 @@
[[package]]
name = "crossbeam-channel"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53"
+checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c"
dependencies = [
"cfg-if 1.0.0",
"crossbeam-utils",
@@ -1318,15 +1318,15 @@
[[package]]
name = "crossbeam-epoch"
-version = "0.9.8"
+version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
+checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d"
dependencies = [
"autocfg",
"cfg-if 1.0.0",
"crossbeam-utils",
- "lazy_static",
"memoffset",
+ "once_cell",
"scopeguard",
]
@@ -1342,12 +1342,12 @@
[[package]]
name = "crossbeam-utils"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
+checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978"
dependencies = [
"cfg-if 1.0.0",
- "lazy_static",
+ "once_cell",
]
[[package]]
@@ -1431,7 +1431,7 @@
[[package]]
name = "cumulus-client-cli"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"clap",
"sc-cli",
@@ -1442,14 +1442,14 @@
[[package]]
name = "cumulus-client-collator"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-client-consensus-common",
"cumulus-client-network",
"cumulus-primitives-core",
"cumulus-relay-chain-interface",
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -1466,13 +1466,13 @@
[[package]]
name = "cumulus-client-consensus-aura"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"async-trait",
"cumulus-client-consensus-common",
"cumulus-primitives-core",
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sc-consensus",
"sc-consensus-aura",
@@ -1495,13 +1495,13 @@
[[package]]
name = "cumulus-client-consensus-common"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"async-trait",
"cumulus-relay-chain-interface",
"dyn-clone",
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"sc-client-api",
"sc-consensus",
@@ -1516,14 +1516,14 @@
[[package]]
name = "cumulus-client-network"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"async-trait",
"cumulus-relay-chain-interface",
"derive_more",
"futures 0.3.21",
"futures-timer",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"polkadot-node-primitives",
"polkadot-parachain",
@@ -1541,13 +1541,13 @@
[[package]]
name = "cumulus-client-pov-recovery"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-primitives-core",
"cumulus-relay-chain-interface",
"futures 0.3.21",
"futures-timer",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-node-primitives",
"polkadot-node-subsystem",
"polkadot-overseer",
@@ -1565,7 +1565,7 @@
[[package]]
name = "cumulus-client-service"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-client-cli",
"cumulus-client-collator",
@@ -1573,7 +1573,7 @@
"cumulus-client-pov-recovery",
"cumulus-primitives-core",
"cumulus-relay-chain-interface",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"polkadot-overseer",
"polkadot-primitives",
@@ -1595,13 +1595,13 @@
[[package]]
name = "cumulus-pallet-aura-ext"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"frame-executive",
"frame-support",
"frame-system",
"pallet-aura",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-application-crypto",
@@ -1613,13 +1613,13 @@
[[package]]
name = "cumulus-pallet-dmp-queue"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-primitives-core",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-io",
"sp-runtime",
@@ -1631,7 +1631,7 @@
[[package]]
name = "cumulus-pallet-parachain-system"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-pallet-parachain-system-proc-macro",
"cumulus-primitives-core",
@@ -1642,7 +1642,7 @@
"impl-trait-for-tuples",
"log",
"pallet-balances",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"scale-info",
"serde",
@@ -1661,7 +1661,7 @@
[[package]]
name = "cumulus-pallet-parachain-system-proc-macro"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -1672,12 +1672,12 @@
[[package]]
name = "cumulus-pallet-xcm"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-primitives-core",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-io",
@@ -1689,13 +1689,13 @@
[[package]]
name = "cumulus-pallet-xcmp-queue"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-primitives-core",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rand_chacha 0.3.1",
"scale-info",
"sp-runtime",
@@ -1707,10 +1707,10 @@
[[package]]
name = "cumulus-primitives-core"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-core-primitives",
"polkadot-parachain",
"polkadot-primitives",
@@ -1723,13 +1723,13 @@
[[package]]
name = "cumulus-primitives-parachain-inherent"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"async-trait",
"cumulus-primitives-core",
"cumulus-relay-chain-interface",
"cumulus-test-relay-sproof-builder",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"scale-info",
"sp-api",
@@ -1746,11 +1746,11 @@
[[package]]
name = "cumulus-primitives-timestamp"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-primitives-core",
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-inherents",
"sp-std",
"sp-timestamp",
@@ -1759,11 +1759,11 @@
[[package]]
name = "cumulus-primitives-utility"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-primitives-core",
"frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-core-primitives",
"polkadot-parachain",
"polkadot-primitives",
@@ -1776,7 +1776,7 @@
[[package]]
name = "cumulus-relay-chain-inprocess-interface"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"async-trait",
"cumulus-primitives-core",
@@ -1807,14 +1807,14 @@
[[package]]
name = "cumulus-relay-chain-interface"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"async-trait",
"cumulus-primitives-core",
"derive_more",
"futures 0.3.21",
"jsonrpsee-core",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"polkadot-overseer",
"polkadot-service",
@@ -1831,7 +1831,7 @@
[[package]]
name = "cumulus-relay-chain-rpc-interface"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"async-trait",
"backoff",
@@ -1840,7 +1840,7 @@
"futures 0.3.21",
"futures-timer",
"jsonrpsee",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"polkadot-service",
"sc-client-api",
@@ -1857,10 +1857,10 @@
[[package]]
name = "cumulus-test-relay-sproof-builder"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-primitives-core",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"sp-runtime",
"sp-state-machine",
@@ -2115,9 +2115,9 @@
[[package]]
name = "dyn-clone"
-version = "1.0.5"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28"
+checksum = "140206b78fb2bc3edbcfc9b5ccbd0b30699cfe8d348b8b31b330e47df5291a5a"
[[package]]
name = "ecdsa"
@@ -2286,7 +2286,7 @@
"ethereum-types",
"hash-db",
"hash256-std-hasher",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rlp",
"rlp-derive",
"scale-info",
@@ -2329,7 +2329,7 @@
"evm-gasometer",
"evm-runtime",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"primitive-types",
"rlp",
"scale-info",
@@ -2368,7 +2368,7 @@
version = "0.35.0"
source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.23#e9252ed42dc26fc85b6703b1ba50660a08209e55"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"primitive-types",
"scale-info",
"serde",
@@ -2504,7 +2504,7 @@
"fp-storage",
"kvdb-rocksdb",
"parity-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sc-client-db",
"sp-core",
@@ -2546,8 +2546,8 @@
"jsonrpsee",
"libsecp256k1",
"log",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"prometheus",
"rand 0.8.5",
"rlp",
@@ -2623,7 +2623,7 @@
"futures-timer",
"log",
"num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.11.2",
"scale-info",
]
@@ -2682,9 +2682,9 @@
[[package]]
name = "fork-tree"
version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
]
[[package]]
@@ -2703,7 +2703,7 @@
source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.23#29adc958b0541466d564c781aa70fb7e3ef263a2"
dependencies = [
"ethereum",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-core",
"sp-runtime",
"sp-std",
@@ -2717,7 +2717,7 @@
"evm",
"frame-support",
"impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"serde",
"sp-core",
"sp-std",
@@ -2740,7 +2740,7 @@
"ethereum",
"ethereum-types",
"fp-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-api",
"sp-core",
@@ -2756,7 +2756,7 @@
dependencies = [
"ethereum",
"frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"scale-info",
"serde",
@@ -2770,19 +2770,19 @@
version = "2.0.0"
source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.23#29adc958b0541466d564c781aa70fb7e3ef263a2"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
]
[[package]]
name = "frame-benchmarking"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
"linregress",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"paste",
"scale-info",
"serde",
@@ -2798,7 +2798,7 @@
[[package]]
name = "frame-benchmarking-cli"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"Inflector",
"chrono",
@@ -2816,7 +2816,7 @@
"linked-hash-map",
"log",
"memory-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rand 0.8.5",
"rand_pcg 0.3.1",
"sc-block-builder",
@@ -2848,7 +2848,7 @@
[[package]]
name = "frame-election-provider-solution-type"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -2859,12 +2859,12 @@
[[package]]
name = "frame-election-provider-support"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-election-provider-solution-type",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-arithmetic",
"sp-npos-elections",
@@ -2875,11 +2875,11 @@
[[package]]
name = "frame-executive"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -2895,7 +2895,7 @@
checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d"
dependencies = [
"cfg-if 1.0.0",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
]
@@ -2903,7 +2903,7 @@
[[package]]
name = "frame-support"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"bitflags",
"frame-metadata",
@@ -2912,7 +2912,7 @@
"k256",
"log",
"once_cell",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"paste",
"scale-info",
"serde",
@@ -2933,7 +2933,7 @@
[[package]]
name = "frame-support-procedural"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"Inflector",
"frame-support-procedural-tools",
@@ -2945,7 +2945,7 @@
[[package]]
name = "frame-support-procedural-tools"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support-procedural-tools-derive",
"proc-macro-crate",
@@ -2957,7 +2957,7 @@
[[package]]
name = "frame-support-procedural-tools-derive"
version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"proc-macro2",
"quote",
@@ -2967,11 +2967,11 @@
[[package]]
name = "frame-system"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -2984,12 +2984,12 @@
[[package]]
name = "frame-system-benchmarking"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-runtime",
@@ -2999,16 +2999,16 @@
[[package]]
name = "frame-system-rpc-runtime-api"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-api",
]
[[package]]
name = "frame-try-runtime"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"sp-api",
@@ -3225,13 +3225,13 @@
[[package]]
name = "getrandom"
-version = "0.2.6"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
dependencies = [
"cfg-if 1.0.0",
"libc",
- "wasi 0.10.0+wasi-snapshot-preview1",
+ "wasi 0.11.0+wasi-snapshot-preview1",
]
[[package]]
@@ -3263,9 +3263,9 @@
[[package]]
name = "globset"
-version = "0.4.8"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
+checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a"
dependencies = [
"aho-corasick",
"bstr",
@@ -3555,9 +3555,9 @@
[[package]]
name = "if-watch"
-version = "1.0.0"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae8f4a3c3d4c89351ca83e120c1c00b27df945d38e05695668c9d4b4f7bc52f3"
+checksum = "774d59367a3d26965d21ac70a86fcb697d83405d1c4312d1d8a6855296af0cf7"
dependencies = [
"async-io",
"core-foundation",
@@ -3577,7 +3577,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
]
[[package]]
@@ -3611,12 +3611,12 @@
[[package]]
name = "indexmap"
-version = "1.8.2"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a"
+checksum = "6c6392766afd7964e2531940894cffe4bd8d7d17dbc3c1c4857040fd4b33bdb3"
dependencies = [
"autocfg",
- "hashbrown 0.11.2",
+ "hashbrown 0.12.1",
"serde",
]
@@ -3706,9 +3706,9 @@
[[package]]
name = "js-sys"
-version = "0.3.57"
+version = "0.3.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397"
+checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
dependencies = [
"wasm-bindgen",
]
@@ -3927,7 +3927,7 @@
"pallet-vesting",
"pallet-xcm",
"pallet-xcm-benchmarks",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"polkadot-runtime-common",
"polkadot-runtime-parachains",
@@ -4074,7 +4074,7 @@
"bytes 1.1.0",
"futures 0.3.21",
"futures-timer",
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
"instant",
"lazy_static",
"libp2p-autonat",
@@ -4245,7 +4245,7 @@
"libp2p-core",
"libp2p-swarm",
"log",
- "lru 0.7.6",
+ "lru 0.7.7",
"prost 0.9.0",
"prost-build",
"smallvec",
@@ -4710,9 +4710,9 @@
[[package]]
name = "lru"
-version = "0.7.6"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8015d95cb7b2ddd3c0d32ca38283ceb1eea09b4713ee380bceb942d85a244228"
+checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a"
dependencies = [
"hashbrown 0.11.2",
]
@@ -4899,9 +4899,9 @@
[[package]]
name = "mio"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
+checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
dependencies = [
"libc",
"log",
@@ -5152,9 +5152,9 @@
[[package]]
name = "num-complex"
-version = "0.4.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790"
+checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19"
dependencies = [
"num-traits",
]
@@ -5250,7 +5250,7 @@
[[package]]
name = "opal-runtime"
-version = "0.9.22"
+version = "0.9.23"
dependencies = [
"cumulus-pallet-aura-ext",
"cumulus-pallet-dmp-queue",
@@ -5299,10 +5299,10 @@
"pallet-transaction-payment-rpc-runtime-api",
"pallet-treasury",
"pallet-unique",
- "pallet-unq-scheduler",
+ "pallet-unique-scheduler",
"pallet-xcm",
"parachain-info",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"rmrk-rpc",
"scale-info",
@@ -5393,7 +5393,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-io",
@@ -5419,12 +5419,12 @@
[[package]]
name = "pallet-aura"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
"pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-application-crypto",
"sp-consensus-aura",
@@ -5435,12 +5435,12 @@
[[package]]
name = "pallet-authority-discovery"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
"pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-application-crypto",
"sp-authority-discovery",
@@ -5451,12 +5451,12 @@
[[package]]
name = "pallet-authorship"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
"impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-authorship",
"sp-runtime",
@@ -5466,7 +5466,7 @@
[[package]]
name = "pallet-babe"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -5475,7 +5475,7 @@
"pallet-authorship",
"pallet-session",
"pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-application-crypto",
"sp-consensus-babe",
@@ -5490,7 +5490,7 @@
[[package]]
name = "pallet-bags-list"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-election-provider-support",
@@ -5498,7 +5498,7 @@
"frame-system",
"log",
"pallet-balances",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -5510,13 +5510,13 @@
[[package]]
name = "pallet-balances"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-runtime",
"sp-std",
@@ -5530,7 +5530,7 @@
"fp-evm",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -5540,13 +5540,13 @@
[[package]]
name = "pallet-beefy"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"beefy-primitives",
"frame-support",
"frame-system",
"pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-runtime",
@@ -5556,7 +5556,7 @@
[[package]]
name = "pallet-beefy-mmr"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"beefy-merkle-tree",
"beefy-primitives",
@@ -5567,7 +5567,7 @@
"pallet-beefy",
"pallet-mmr",
"pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -5579,14 +5579,14 @@
[[package]]
name = "pallet-bounties"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
"pallet-treasury",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -5604,7 +5604,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-runtime",
@@ -5624,7 +5624,7 @@
"frame-system",
"log",
"num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-finality-grandpa",
@@ -5646,7 +5646,7 @@
"frame-system",
"log",
"num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -5657,7 +5657,7 @@
[[package]]
name = "pallet-child-bounties"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -5665,7 +5665,7 @@
"log",
"pallet-bounties",
"pallet-treasury",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -5676,13 +5676,13 @@
[[package]]
name = "pallet-collective"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -5702,7 +5702,7 @@
"frame-system",
"pallet-evm",
"pallet-evm-coder-substrate",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -5714,12 +5714,12 @@
[[package]]
name = "pallet-democracy"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-io",
@@ -5730,14 +5730,14 @@
[[package]]
name = "pallet-election-provider-multi-phase"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-election-provider-support",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rand 0.7.3",
"scale-info",
"sp-arithmetic",
@@ -5753,12 +5753,12 @@
[[package]]
name = "pallet-election-provider-support-benchmarking"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-election-provider-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-npos-elections",
"sp-runtime",
]
@@ -5766,13 +5766,13 @@
[[package]]
name = "pallet-elections-phragmen"
version = "5.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -5800,7 +5800,7 @@
"log",
"pallet-evm",
"pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rlp",
"scale-info",
"serde",
@@ -5825,7 +5825,7 @@
"impl-trait-for-tuples",
"log",
"pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"primitive-types",
"rlp",
"scale-info",
@@ -5848,7 +5848,7 @@
"frame-system",
"pallet-ethereum",
"pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-std",
@@ -5867,7 +5867,7 @@
"pallet-common",
"pallet-evm",
"pallet-evm-coder-substrate",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-runtime",
@@ -5885,7 +5885,7 @@
"frame-support",
"frame-system",
"pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -5903,7 +5903,7 @@
"frame-system",
"pallet-ethereum",
"pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -5925,7 +5925,7 @@
"pallet-evm",
"pallet-evm-coder-substrate",
"pallet-structure",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-runtime",
@@ -5936,12 +5936,12 @@
[[package]]
name = "pallet-gilt"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-arithmetic",
"sp-runtime",
@@ -5951,7 +5951,7 @@
[[package]]
name = "pallet-grandpa"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -5959,7 +5959,7 @@
"log",
"pallet-authorship",
"pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-application-crypto",
"sp-core",
@@ -5974,13 +5974,13 @@
[[package]]
name = "pallet-identity"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"enumflags2",
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-io",
"sp-runtime",
@@ -5990,14 +5990,14 @@
[[package]]
name = "pallet-im-online"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
"pallet-authorship",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-application-crypto",
"sp-core",
@@ -6010,12 +6010,12 @@
[[package]]
name = "pallet-indices"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -6034,7 +6034,7 @@
"pallet-balances",
"pallet-randomness-collective-flip",
"pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -6046,13 +6046,13 @@
[[package]]
name = "pallet-membership"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -6063,13 +6063,13 @@
[[package]]
name = "pallet-mmr"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"ckb-merkle-mountain-range",
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -6081,10 +6081,10 @@
[[package]]
name = "pallet-mmr-rpc"
version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"jsonrpsee",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"serde",
"sp-api",
"sp-blockchain",
@@ -6096,12 +6096,12 @@
[[package]]
name = "pallet-multisig"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6111,11 +6111,11 @@
[[package]]
name = "pallet-nicks"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6125,12 +6125,12 @@
[[package]]
name = "pallet-nomination-pools"
version = "1.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-runtime",
@@ -6141,7 +6141,7 @@
[[package]]
name = "pallet-nomination-pools-benchmarking"
version = "1.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-election-provider-support",
@@ -6150,7 +6150,7 @@
"pallet-bags-list",
"pallet-nomination-pools",
"pallet-staking",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-runtime",
"sp-staking",
@@ -6170,7 +6170,7 @@
"pallet-evm",
"pallet-evm-coder-substrate",
"pallet-structure",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-runtime",
@@ -6182,13 +6182,13 @@
[[package]]
name = "pallet-offences"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
"log",
"pallet-balances",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-runtime",
@@ -6199,7 +6199,7 @@
[[package]]
name = "pallet-offences-benchmarking"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-election-provider-support",
@@ -6212,7 +6212,7 @@
"pallet-offences",
"pallet-session",
"pallet-staking",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-runtime",
"sp-staking",
@@ -6222,12 +6222,12 @@
[[package]]
name = "pallet-preimage"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -6238,12 +6238,12 @@
[[package]]
name = "pallet-proxy"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6253,11 +6253,11 @@
[[package]]
name = "pallet-randomness-collective-flip"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"safe-mix",
"scale-info",
"sp-runtime",
@@ -6267,12 +6267,12 @@
[[package]]
name = "pallet-recovery"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6289,7 +6289,7 @@
"pallet-common",
"pallet-evm",
"pallet-structure",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-runtime",
@@ -6310,7 +6310,7 @@
"pallet-evm",
"pallet-nonfungible",
"pallet-structure",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rmrk-traits",
"scale-info",
"sp-core",
@@ -6330,7 +6330,7 @@
"pallet-evm",
"pallet-nonfungible",
"pallet-rmrk-core",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rmrk-traits",
"scale-info",
"sp-core",
@@ -6342,13 +6342,13 @@
[[package]]
name = "pallet-scheduler"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6358,14 +6358,14 @@
[[package]]
name = "pallet-session"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
"impl-trait-for-tuples",
"log",
"pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -6379,7 +6379,7 @@
[[package]]
name = "pallet-session-benchmarking"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -6395,11 +6395,11 @@
[[package]]
name = "pallet-society"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rand_chacha 0.2.2",
"scale-info",
"sp-runtime",
@@ -6409,7 +6409,7 @@
[[package]]
name = "pallet-staking"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-election-provider-support",
@@ -6418,7 +6418,7 @@
"log",
"pallet-authorship",
"pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rand_chacha 0.2.2",
"scale-info",
"serde",
@@ -6432,7 +6432,7 @@
[[package]]
name = "pallet-staking-reward-curve"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -6443,7 +6443,7 @@
[[package]]
name = "pallet-staking-reward-fn"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"log",
"sp-arithmetic",
@@ -6458,7 +6458,7 @@
"frame-system",
"pallet-common",
"pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-std",
"up-data-structs",
@@ -6467,11 +6467,11 @@
[[package]]
name = "pallet-sudo"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6488,7 +6488,7 @@
"frame-system",
"pallet-balances",
"pallet-transaction-payment",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -6501,13 +6501,13 @@
[[package]]
name = "pallet-timestamp"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-inherents",
"sp-io",
@@ -6519,14 +6519,14 @@
[[package]]
name = "pallet-tips"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
"pallet-treasury",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -6538,11 +6538,11 @@
[[package]]
name = "pallet-transaction-payment"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -6554,11 +6554,11 @@
[[package]]
name = "pallet-transaction-payment-rpc"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"jsonrpsee",
"pallet-transaction-payment-rpc-runtime-api",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-api",
"sp-blockchain",
"sp-core",
@@ -6569,10 +6569,10 @@
[[package]]
name = "pallet-transaction-payment-rpc-runtime-api"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"pallet-transaction-payment",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-api",
"sp-runtime",
]
@@ -6580,14 +6580,14 @@
[[package]]
name = "pallet-treasury"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"impl-trait-for-tuples",
"pallet-balances",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-runtime",
@@ -6607,7 +6607,7 @@
"pallet-evm",
"pallet-evm-coder-substrate",
"pallet-nonfungible",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -6618,14 +6618,14 @@
]
[[package]]
-name = "pallet-unq-scheduler"
+name = "pallet-unique-scheduler"
version = "0.1.0"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -6639,12 +6639,12 @@
[[package]]
name = "pallet-utility"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -6655,13 +6655,13 @@
[[package]]
name = "pallet-vesting"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-runtime",
"sp-std",
@@ -6675,7 +6675,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -6694,7 +6694,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-runtime",
"sp-std",
@@ -6705,12 +6705,12 @@
[[package]]
name = "parachain-info"
version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
dependencies = [
"cumulus-primitives-core",
"frame-support",
"frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
]
@@ -6750,15 +6750,15 @@
[[package]]
name = "parity-scale-codec"
-version = "3.1.2"
+version = "3.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8b44461635bbb1a0300f100a841e571e7d919c81c73075ef5d152ffdb521066"
+checksum = "9182e4a71cae089267ab03e67c99368db7cd877baf50f931e5d6d4b71e195ac0"
dependencies = [
"arrayvec 0.7.2",
"bitvec 1.0.0",
"byte-slice-cast",
"impl-trait-for-tuples",
- "parity-scale-codec-derive 3.1.2",
+ "parity-scale-codec-derive 3.1.3",
"serde",
]
@@ -6776,9 +6776,9 @@
[[package]]
name = "parity-scale-codec-derive"
-version = "3.1.2"
+version = "3.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c45ed1f39709f5a89338fab50e59816b2e8815f5bb58276e7ddf9afd495f73f8"
+checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -6802,7 +6802,7 @@
"ethereum-types",
"hashbrown 0.12.1",
"impl-trait-for-tuples",
- "lru 0.7.6",
+ "lru 0.7.7",
"parity-util-mem-derive",
"parking_lot 0.12.1",
"primitive-types",
@@ -7086,8 +7086,8 @@
"derive_more",
"fatality",
"futures 0.3.21",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"polkadot-erasure-coding",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
@@ -7108,8 +7108,8 @@
dependencies = [
"fatality",
"futures 0.3.21",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"polkadot-erasure-coding",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
@@ -7213,7 +7213,7 @@
version = "0.9.23"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"scale-info",
"sp-core",
@@ -7229,8 +7229,8 @@
"derive_more",
"fatality",
"futures 0.3.21",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"polkadot-erasure-coding",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
@@ -7249,7 +7249,7 @@
version = "0.9.23"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-node-primitives",
"polkadot-primitives",
"reed-solomon-novelpoly",
@@ -7287,7 +7287,7 @@
"async-trait",
"bytes 1.1.0",
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"polkadot-node-network-protocol",
"polkadot-node-subsystem",
@@ -7305,7 +7305,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
dependencies = [
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-erasure-coding",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -7327,9 +7327,9 @@
"futures 0.3.21",
"futures-timer",
"kvdb",
- "lru 0.7.6",
+ "lru 0.7.7",
"merlin",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-node-jaeger",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -7355,7 +7355,7 @@
"futures 0.3.21",
"futures-timer",
"kvdb",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-erasure-coding",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -7407,7 +7407,7 @@
dependencies = [
"async-trait",
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-node-core-pvf",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -7441,7 +7441,7 @@
"futures 0.3.21",
"futures-timer",
"kvdb",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-node-primitives",
"polkadot-node-subsystem",
"polkadot-node-subsystem-util",
@@ -7458,8 +7458,8 @@
"fatality",
"futures 0.3.21",
"kvdb",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"polkadot-node-primitives",
"polkadot-node-subsystem",
"polkadot-node-subsystem-util",
@@ -7515,7 +7515,7 @@
"async-std",
"futures 0.3.21",
"futures-timer",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"pin-project 1.0.10",
"polkadot-core-primitives",
"polkadot-node-subsystem-util",
@@ -7577,7 +7577,7 @@
"lazy_static",
"log",
"mick-jaeger",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"polkadot-node-primitives",
"polkadot-primitives",
@@ -7595,7 +7595,7 @@
"futures 0.3.21",
"futures-timer",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"prioritized-metered-channel",
"sc-cli",
@@ -7614,14 +7614,14 @@
"derive_more",
"fatality",
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-node-jaeger",
"polkadot-node-primitives",
"polkadot-primitives",
"rand 0.8.5",
"sc-authority-discovery",
"sc-network",
- "strum 0.24.0",
+ "strum 0.24.1",
"thiserror",
"tracing-gum",
]
@@ -7633,7 +7633,7 @@
dependencies = [
"bounded-vec",
"futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"polkadot-primitives",
"schnorrkel",
@@ -7688,9 +7688,9 @@
"futures 0.3.21",
"itertools",
"kvdb",
- "lru 0.7.6",
+ "lru 0.7.7",
"parity-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"parking_lot 0.11.2",
"pin-project 1.0.10",
@@ -7717,7 +7717,7 @@
dependencies = [
"futures 0.3.21",
"futures-timer",
- "lru 0.7.6",
+ "lru 0.7.7",
"orchestra",
"parity-util-mem",
"parking_lot 0.12.1",
@@ -7739,7 +7739,7 @@
dependencies = [
"derive_more",
"frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"polkadot-core-primitives",
"scale-info",
@@ -7772,7 +7772,7 @@
"bitvec 1.0.0",
"frame-system",
"hex-literal",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"polkadot-core-primitives",
"polkadot-parachain",
@@ -7879,7 +7879,7 @@
"pallet-utility",
"pallet-vesting",
"pallet-xcm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"polkadot-runtime-common",
"polkadot-runtime-constants",
@@ -7938,7 +7938,7 @@
"pallet-transaction-payment",
"pallet-treasury",
"pallet-vesting",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"polkadot-runtime-parachains",
"rustc-hex",
@@ -7977,7 +7977,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
dependencies = [
"bs58",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"sp-std",
"sp-tracing",
@@ -8003,7 +8003,7 @@
"pallet-staking",
"pallet-timestamp",
"pallet-vesting",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"polkadot-runtime-metrics",
"rand 0.8.5",
@@ -8040,7 +8040,7 @@
"kusama-runtime",
"kvdb",
"kvdb-rocksdb",
- "lru 0.7.6",
+ "lru 0.7.7",
"pallet-babe",
"pallet-im-online",
"pallet-staking",
@@ -8138,7 +8138,7 @@
"fatality",
"futures 0.3.21",
"indexmap",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -8155,7 +8155,7 @@
version = "0.9.23"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-primitives",
"sp-core",
]
@@ -8190,7 +8190,7 @@
"pallet-transaction-payment-rpc-runtime-api",
"pallet-vesting",
"pallet-xcm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"polkadot-primitives",
"polkadot-runtime-common",
@@ -8383,9 +8383,9 @@
[[package]]
name = "proc-macro2"
-version = "1.0.39"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
dependencies = [
"unicode-ident",
]
@@ -8514,7 +8514,7 @@
[[package]]
name = "quartz-runtime"
-version = "0.9.22"
+version = "0.9.23"
dependencies = [
"cumulus-pallet-aura-ext",
"cumulus-pallet-dmp-queue",
@@ -8528,11 +8528,14 @@
"fp-evm-mapping",
"fp-rpc",
"fp-self-contained",
+ "frame-benchmarking",
"frame-executive",
"frame-support",
"frame-system",
+ "frame-system-benchmarking",
"frame-system-rpc-runtime-api",
"frame-try-runtime",
+ "hex-literal",
"log",
"orml-vesting",
"pallet-aura",
@@ -8560,10 +8563,10 @@
"pallet-transaction-payment-rpc-runtime-api",
"pallet-treasury",
"pallet-unique",
- "pallet-unq-scheduler",
+ "pallet-unique-scheduler",
"pallet-xcm",
"parachain-info",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"rmrk-rpc",
"scale-info",
@@ -8610,9 +8613,9 @@
[[package]]
name = "quote"
-version = "1.0.18"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
dependencies = [
"proc-macro2",
]
@@ -8689,7 +8692,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
dependencies = [
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
]
[[package]]
@@ -8774,7 +8777,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
dependencies = [
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
"redox_syscall",
"thiserror",
]
@@ -8864,12 +8867,12 @@
[[package]]
name = "remote-externalities"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"env_logger",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"serde",
"serde_json",
"sp-core",
@@ -8967,7 +8970,7 @@
name = "rmrk-traits"
version = "0.1.0"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
]
@@ -9028,7 +9031,7 @@
"pallet-transaction-payment-rpc-runtime-api",
"pallet-utility",
"pallet-xcm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"polkadot-primitives",
"polkadot-runtime-common",
@@ -9181,9 +9184,9 @@
[[package]]
name = "rustversion"
-version = "1.0.6"
+version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf"
[[package]]
name = "rw-stream-sink"
@@ -9232,7 +9235,7 @@
[[package]]
name = "sc-allocator"
version = "4.1.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"log",
"sp-core",
@@ -9243,7 +9246,7 @@
[[package]]
name = "sc-authority-discovery"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"futures 0.3.21",
@@ -9251,7 +9254,7 @@
"ip_network",
"libp2p",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"prost 0.10.4",
"prost-build",
"rand 0.7.3",
@@ -9270,12 +9273,12 @@
[[package]]
name = "sc-basic-authorship"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"futures-timer",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-block-builder",
"sc-client-api",
"sc-proposer-metrics",
@@ -9293,9 +9296,9 @@
[[package]]
name = "sc-block-builder"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sp-api",
"sp-block-builder",
@@ -9309,11 +9312,11 @@
[[package]]
name = "sc-chain-spec"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"impl-trait-for-tuples",
"memmap2 0.5.4",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-chain-spec-derive",
"sc-network",
"sc-telemetry",
@@ -9326,7 +9329,7 @@
[[package]]
name = "sc-chain-spec-derive"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -9337,7 +9340,7 @@
[[package]]
name = "sc-cli"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"chrono",
"clap",
@@ -9347,7 +9350,7 @@
"libp2p",
"log",
"names",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rand 0.7.3",
"regex",
"rpassword",
@@ -9376,13 +9379,13 @@
[[package]]
name = "sc-client-api"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"fnv",
"futures 0.3.21",
"hash-db",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sc-executor",
"sc-transaction-pool-api",
@@ -9404,7 +9407,7 @@
[[package]]
name = "sc-client-db"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"hash-db",
"kvdb",
@@ -9413,7 +9416,7 @@
"linked-hash-map",
"log",
"parity-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sc-client-api",
"sc-state-db",
@@ -9429,7 +9432,7 @@
[[package]]
name = "sc-consensus"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"futures 0.3.21",
@@ -9453,12 +9456,12 @@
[[package]]
name = "sc-consensus-aura"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"futures 0.3.21",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-block-builder",
"sc-client-api",
"sc-consensus",
@@ -9482,7 +9485,7 @@
[[package]]
name = "sc-consensus-babe"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"fork-tree",
@@ -9492,7 +9495,7 @@
"num-bigint",
"num-rational 0.2.4",
"num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"rand 0.7.3",
"retain_mut",
@@ -9525,7 +9528,7 @@
[[package]]
name = "sc-consensus-babe-rpc"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"jsonrpsee",
@@ -9547,10 +9550,10 @@
[[package]]
name = "sc-consensus-epochs"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"fork-tree",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sc-consensus",
"sp-blockchain",
@@ -9560,14 +9563,14 @@
[[package]]
name = "sc-consensus-manual-seal"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"assert_matches",
"async-trait",
"futures 0.3.21",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sc-consensus",
"sc-consensus-aura",
@@ -9594,13 +9597,13 @@
[[package]]
name = "sc-consensus-slots"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"futures 0.3.21",
"futures-timer",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sc-consensus",
"sc-telemetry",
@@ -9619,7 +9622,7 @@
[[package]]
name = "sc-consensus-uncles"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"sc-client-api",
"sp-authorship",
@@ -9630,11 +9633,11 @@
[[package]]
name = "sc-executor"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"lazy_static",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sc-executor-common",
"sc-executor-wasmi",
@@ -9657,10 +9660,10 @@
[[package]]
name = "sc-executor-common"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"environmental",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-allocator",
"sp-maybe-compressed-blob",
"sp-sandbox",
@@ -9674,10 +9677,10 @@
[[package]]
name = "sc-executor-wasmi"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-allocator",
"sc-executor-common",
"sp-runtime-interface",
@@ -9689,12 +9692,12 @@
[[package]]
name = "sc-executor-wasmtime"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"cfg-if 1.0.0",
"libc",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-wasm 0.42.2",
"sc-allocator",
"sc-executor-common",
@@ -9707,7 +9710,7 @@
[[package]]
name = "sc-finality-grandpa"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"ahash",
"async-trait",
@@ -9718,7 +9721,7 @@
"futures-timer",
"hex",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"rand 0.8.5",
"sc-block-builder",
@@ -9747,13 +9750,13 @@
[[package]]
name = "sc-finality-grandpa-rpc"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"finality-grandpa",
"futures 0.3.21",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sc-finality-grandpa",
"sc-rpc",
@@ -9768,7 +9771,7 @@
[[package]]
name = "sc-informant"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"ansi_term",
"futures 0.3.21",
@@ -9785,7 +9788,7 @@
[[package]]
name = "sc-keystore"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"hex",
@@ -9800,7 +9803,7 @@
[[package]]
name = "sc-network"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"asynchronous-codec",
@@ -9818,8 +9821,8 @@
"linked-hash-map",
"linked_hash_set",
"log",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"pin-project 1.0.10",
"prost 0.10.4",
@@ -9852,11 +9855,11 @@
[[package]]
name = "sc-network-common"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"libp2p",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"prost-build",
"sc-peerset",
"smallvec",
@@ -9865,14 +9868,14 @@
[[package]]
name = "sc-network-gossip"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"ahash",
"futures 0.3.21",
"futures-timer",
"libp2p",
"log",
- "lru 0.7.6",
+ "lru 0.7.7",
"sc-network",
"sp-runtime",
"substrate-prometheus-endpoint",
@@ -9882,12 +9885,12 @@
[[package]]
name = "sc-network-light"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"libp2p",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"prost 0.10.4",
"prost-build",
"sc-client-api",
@@ -9902,7 +9905,7 @@
[[package]]
name = "sc-network-sync"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"bitflags",
"either",
@@ -9910,8 +9913,8 @@
"futures 0.3.21",
"libp2p",
"log",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"prost 0.10.4",
"prost-build",
"sc-client-api",
@@ -9931,7 +9934,7 @@
[[package]]
name = "sc-offchain"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"bytes 1.1.0",
"fnv",
@@ -9942,7 +9945,7 @@
"hyper-rustls",
"num_cpus",
"once_cell",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"rand 0.7.3",
"sc-client-api",
@@ -9959,7 +9962,7 @@
[[package]]
name = "sc-peerset"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"libp2p",
@@ -9972,7 +9975,7 @@
[[package]]
name = "sc-proposer-metrics"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"log",
"substrate-prometheus-endpoint",
@@ -9981,13 +9984,13 @@
[[package]]
name = "sc-rpc"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"hash-db",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sc-block-builder",
"sc-chain-spec",
@@ -10011,12 +10014,12 @@
[[package]]
name = "sc-rpc-api"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sc-chain-spec",
"sc-transaction-pool-api",
@@ -10034,7 +10037,7 @@
[[package]]
name = "sc-rpc-server"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"jsonrpsee",
@@ -10047,7 +10050,7 @@
[[package]]
name = "sc-service"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"directories",
@@ -10057,7 +10060,7 @@
"hash-db",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"parking_lot 0.12.1",
"pin-project 1.0.10",
@@ -10112,10 +10115,10 @@
[[package]]
name = "sc-state-db"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"parity-util-mem-derive",
"parking_lot 0.12.1",
@@ -10126,10 +10129,10 @@
[[package]]
name = "sc-sync-state-rpc"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"jsonrpsee",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-chain-spec",
"sc-client-api",
"sc-consensus-babe",
@@ -10145,7 +10148,7 @@
[[package]]
name = "sc-sysinfo"
version = "6.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"libc",
@@ -10164,7 +10167,7 @@
[[package]]
name = "sc-telemetry"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"chrono",
"futures 0.3.21",
@@ -10182,7 +10185,7 @@
[[package]]
name = "sc-tracing"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"ansi_term",
"atty",
@@ -10213,7 +10216,7 @@
[[package]]
name = "sc-tracing-proc-macro"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -10224,13 +10227,13 @@
[[package]]
name = "sc-transaction-pool"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"futures-timer",
"linked-hash-map",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"parking_lot 0.12.1",
"retain_mut",
@@ -10251,7 +10254,7 @@
[[package]]
name = "sc-transaction-pool-api"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"log",
@@ -10264,7 +10267,7 @@
[[package]]
name = "sc-utils"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"futures-timer",
@@ -10283,7 +10286,7 @@
"bitvec 1.0.0",
"cfg-if 1.0.0",
"derive_more",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info-derive",
"serde",
]
@@ -10630,7 +10633,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
dependencies = [
"enumn",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"paste",
"sp-runtime",
"sp-std",
@@ -10703,11 +10706,11 @@
[[package]]
name = "sp-api"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"hash-db",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-api-proc-macro",
"sp-core",
"sp-runtime",
@@ -10720,7 +10723,7 @@
[[package]]
name = "sp-api-proc-macro"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"blake2",
"proc-macro-crate",
@@ -10732,9 +10735,9 @@
[[package]]
name = "sp-application-crypto"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-core",
@@ -10745,11 +10748,11 @@
[[package]]
name = "sp-arithmetic"
version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"integer-sqrt",
"num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-debug-derive",
@@ -10760,9 +10763,9 @@
[[package]]
name = "sp-authority-discovery"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-api",
"sp-application-crypto",
@@ -10773,10 +10776,10 @@
[[package]]
name = "sp-authorship"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-inherents",
"sp-runtime",
"sp-std",
@@ -10785,9 +10788,9 @@
[[package]]
name = "sp-block-builder"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-api",
"sp-inherents",
"sp-runtime",
@@ -10797,12 +10800,12 @@
[[package]]
name = "sp-blockchain"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"log",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"sp-api",
"sp-consensus",
@@ -10815,13 +10818,13 @@
[[package]]
name = "sp-consensus"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"futures 0.3.21",
"futures-timer",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-core",
"sp-inherents",
"sp-runtime",
@@ -10834,10 +10837,10 @@
[[package]]
name = "sp-consensus-aura"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-api",
"sp-application-crypto",
@@ -10852,11 +10855,11 @@
[[package]]
name = "sp-consensus-babe"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"merlin",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-api",
@@ -10875,9 +10878,9 @@
[[package]]
name = "sp-consensus-slots"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-arithmetic",
@@ -10889,9 +10892,9 @@
[[package]]
name = "sp-consensus-vrf"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"schnorrkel",
"sp-core",
@@ -10902,7 +10905,7 @@
[[package]]
name = "sp-core"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"base58",
"bitflags",
@@ -10920,7 +10923,7 @@
"log",
"merlin",
"num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"parking_lot 0.12.1",
"primitive-types",
@@ -10948,7 +10951,7 @@
[[package]]
name = "sp-core-hashing"
version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"blake2",
"byteorder",
@@ -10962,7 +10965,7 @@
[[package]]
name = "sp-core-hashing-proc-macro"
version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"proc-macro2",
"quote",
@@ -10973,7 +10976,7 @@
[[package]]
name = "sp-database"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"kvdb",
"parking_lot 0.12.1",
@@ -10982,7 +10985,7 @@
[[package]]
name = "sp-debug-derive"
version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"proc-macro2",
"quote",
@@ -10992,10 +10995,10 @@
[[package]]
name = "sp-externalities"
version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"environmental",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-std",
"sp-storage",
]
@@ -11003,11 +11006,11 @@
[[package]]
name = "sp-finality-grandpa"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"finality-grandpa",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-api",
@@ -11021,11 +11024,11 @@
[[package]]
name = "sp-inherents"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-core",
"sp-runtime",
"sp-std",
@@ -11035,13 +11038,13 @@
[[package]]
name = "sp-io"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"hash-db",
"libsecp256k1",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"secp256k1",
"sp-core",
@@ -11060,7 +11063,7 @@
[[package]]
name = "sp-keyring"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"lazy_static",
"sp-core",
@@ -11071,12 +11074,12 @@
[[package]]
name = "sp-keystore"
version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"futures 0.3.21",
"merlin",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"schnorrkel",
"serde",
@@ -11088,7 +11091,7 @@
[[package]]
name = "sp-maybe-compressed-blob"
version = "4.1.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"thiserror",
"zstd",
@@ -11097,10 +11100,10 @@
[[package]]
name = "sp-mmr-primitives"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"serde",
"sp-api",
"sp-core",
@@ -11112,9 +11115,9 @@
[[package]]
name = "sp-npos-elections"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"serde",
"sp-arithmetic",
@@ -11126,7 +11129,7 @@
[[package]]
name = "sp-offchain"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"sp-api",
"sp-core",
@@ -11136,7 +11139,7 @@
[[package]]
name = "sp-panic-handler"
version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"backtrace",
"lazy_static",
@@ -11146,7 +11149,7 @@
[[package]]
name = "sp-rpc"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"rustc-hash",
"serde",
@@ -11156,13 +11159,13 @@
[[package]]
name = "sp-runtime"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"either",
"hash256-std-hasher",
"impl-trait-for-tuples",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-util-mem",
"paste",
"rand 0.7.3",
@@ -11178,10 +11181,10 @@
[[package]]
name = "sp-runtime-interface"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"primitive-types",
"sp-externalities",
"sp-runtime-interface-proc-macro",
@@ -11195,7 +11198,7 @@
[[package]]
name = "sp-runtime-interface-proc-macro"
version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"Inflector",
"proc-macro-crate",
@@ -11207,10 +11210,10 @@
[[package]]
name = "sp-sandbox"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-core",
"sp-io",
"sp-std",
@@ -11221,7 +11224,7 @@
[[package]]
name = "sp-serializer"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"serde",
"serde_json",
@@ -11230,9 +11233,9 @@
[[package]]
name = "sp-session"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-api",
"sp-core",
@@ -11244,9 +11247,9 @@
[[package]]
name = "sp-staking"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-runtime",
"sp-std",
@@ -11255,12 +11258,12 @@
[[package]]
name = "sp-state-machine"
version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"hash-db",
"log",
"num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.12.1",
"rand 0.7.3",
"smallvec",
@@ -11277,15 +11280,15 @@
[[package]]
name = "sp-std"
version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
[[package]]
name = "sp-storage"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"impl-serde",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"ref-cast",
"serde",
"sp-debug-derive",
@@ -11295,7 +11298,7 @@
[[package]]
name = "sp-tasks"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"log",
"sp-core",
@@ -11308,12 +11311,12 @@
[[package]]
name = "sp-timestamp"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"futures-timer",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-api",
"sp-inherents",
"sp-runtime",
@@ -11324,9 +11327,9 @@
[[package]]
name = "sp-tracing"
version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-std",
"tracing",
"tracing-core",
@@ -11336,7 +11339,7 @@
[[package]]
name = "sp-transaction-pool"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"sp-api",
"sp-runtime",
@@ -11345,11 +11348,11 @@
[[package]]
name = "sp-transaction-storage-proof"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-inherents",
@@ -11361,11 +11364,11 @@
[[package]]
name = "sp-trie"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"hash-db",
"memory-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-std",
@@ -11377,10 +11380,10 @@
[[package]]
name = "sp-version"
version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"impl-serde",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parity-wasm 0.42.2",
"scale-info",
"serde",
@@ -11394,9 +11397,9 @@
[[package]]
name = "sp-version-proc-macro"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"proc-macro2",
"quote",
"syn",
@@ -11405,11 +11408,11 @@
[[package]]
name = "sp-wasm-interface"
version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"impl-trait-for-tuples",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-std",
"wasmi",
"wasmtime",
@@ -11511,9 +11514,9 @@
[[package]]
name = "strum"
-version = "0.24.0"
+version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e96acfc1b70604b8b2f1ffa4c57e59176c7dbb05d556c71ecd2f5498a1dee7f8"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
dependencies = [
"strum_macros 0.24.0",
]
@@ -11560,7 +11563,7 @@
[[package]]
name = "substrate-build-script-utils"
version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"platforms",
]
@@ -11568,13 +11571,13 @@
[[package]]
name = "substrate-frame-rpc-system"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"frame-system-rpc-runtime-api",
"futures 0.3.21",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sc-rpc-api",
"sc-transaction-pool-api",
@@ -11589,7 +11592,7 @@
[[package]]
name = "substrate-prometheus-endpoint"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures-util",
"hyper",
@@ -11602,11 +11605,11 @@
[[package]]
name = "substrate-state-trie-migration-rpc"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sc-rpc-api",
"scale-info",
@@ -11623,12 +11626,12 @@
[[package]]
name = "substrate-test-client"
version = "2.0.1"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"async-trait",
"futures 0.3.21",
"hex",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sc-client-api",
"sc-client-db",
"sc-consensus",
@@ -11649,7 +11652,7 @@
[[package]]
name = "substrate-test-utils"
version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"futures 0.3.21",
"substrate-test-utils-derive",
@@ -11659,7 +11662,7 @@
[[package]]
name = "substrate-test-utils-derive"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -11670,7 +11673,7 @@
[[package]]
name = "substrate-wasm-builder"
version = "5.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"ansi_term",
"build-helper",
@@ -11691,9 +11694,9 @@
[[package]]
name = "syn"
-version = "1.0.96"
+version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
dependencies = [
"proc-macro2",
"quote",
@@ -11799,7 +11802,7 @@
"pallet-timestamp",
"pallet-transaction-payment",
"pallet-unique",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
"sp-io",
@@ -12028,9 +12031,9 @@
[[package]]
name = "tower-service"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
@@ -12107,7 +12110,7 @@
"ahash",
"lazy_static",
"log",
- "lru 0.7.6",
+ "lru 0.7.7",
"tracing-core",
]
@@ -12228,12 +12231,12 @@
[[package]]
name = "try-runtime-cli"
version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
dependencies = [
"clap",
"jsonrpsee",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"remote-externalities",
"sc-chain-spec",
"sc-cli",
@@ -12282,7 +12285,7 @@
"jsonrpsee",
"pallet-common",
"pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rmrk-rpc",
"sp-api",
"sp-blockchain",
@@ -12329,9 +12332,9 @@
[[package]]
name = "unicode-ident"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
[[package]]
name = "unicode-normalization"
@@ -12362,7 +12365,7 @@
[[package]]
name = "unique-node"
-version = "0.9.22"
+version = "0.9.23"
dependencies = [
"clap",
"cumulus-client-cli",
@@ -12392,7 +12395,7 @@
"pallet-ethereum",
"pallet-transaction-payment-rpc",
"pallet-transaction-payment-rpc-runtime-api",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"parking_lot 0.11.2",
"polkadot-cli",
"polkadot-parachain",
@@ -12499,7 +12502,7 @@
[[package]]
name = "unique-runtime"
-version = "0.9.22"
+version = "0.9.23"
dependencies = [
"cumulus-pallet-aura-ext",
"cumulus-pallet-dmp-queue",
@@ -12548,10 +12551,10 @@
"pallet-transaction-payment-rpc-runtime-api",
"pallet-treasury",
"pallet-unique",
- "pallet-unq-scheduler",
+ "pallet-unique-scheduler",
"pallet-xcm",
"parachain-info",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"rmrk-rpc",
"scale-info",
@@ -12581,7 +12584,7 @@
[[package]]
name = "unique-runtime-common"
-version = "0.9.22"
+version = "0.9.23"
dependencies = [
"evm-coder",
"fp-rpc",
@@ -12593,7 +12596,8 @@
"pallet-nonfungible",
"pallet-refungible",
"pallet-unique",
- "parity-scale-codec 3.1.2",
+ "pallet-unique-scheduler",
+ "parity-scale-codec 3.1.5",
"rmrk-rpc",
"scale-info",
"sp-consensus-aura",
@@ -12640,7 +12644,7 @@
"frame-support",
"frame-system",
"pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"rmrk-traits",
"scale-info",
"serde",
@@ -12656,7 +12660,7 @@
dependencies = [
"pallet-common",
"pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-api",
"sp-core",
"sp-runtime",
@@ -12765,9 +12769,9 @@
[[package]]
name = "wasm-bindgen"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad"
+checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
dependencies = [
"cfg-if 1.0.0",
"wasm-bindgen-macro",
@@ -12775,9 +12779,9 @@
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4"
+checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
dependencies = [
"bumpalo",
"lazy_static",
@@ -12790,9 +12794,9 @@
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.30"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2"
+checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
dependencies = [
"cfg-if 1.0.0",
"js-sys",
@@ -12802,9 +12806,9 @@
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5"
+checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -12812,9 +12816,9 @@
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b"
+checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
dependencies = [
"proc-macro2",
"quote",
@@ -12825,9 +12829,9 @@
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744"
+checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
[[package]]
name = "wasm-gc-api"
@@ -13065,9 +13069,9 @@
[[package]]
name = "web-sys"
-version = "0.3.57"
+version = "0.3.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"
+checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -13157,7 +13161,7 @@
"pallet-vesting",
"pallet-xcm",
"pallet-xcm-benchmarks",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"polkadot-primitives",
"polkadot-runtime-common",
@@ -13252,15 +13256,15 @@
[[package]]
name = "windows"
-version = "0.29.0"
+version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aac7fef12f4b59cd0a29339406cc9203ab44e440ddff6b3f5a41455349fa9cf3"
+checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f"
dependencies = [
- "windows_aarch64_msvc 0.29.0",
- "windows_i686_gnu 0.29.0",
- "windows_i686_msvc 0.29.0",
- "windows_x86_64_gnu 0.29.0",
- "windows_x86_64_msvc 0.29.0",
+ "windows_aarch64_msvc 0.34.0",
+ "windows_i686_gnu 0.34.0",
+ "windows_i686_msvc 0.34.0",
+ "windows_x86_64_gnu 0.34.0",
+ "windows_x86_64_msvc 0.34.0",
]
[[package]]
@@ -13278,9 +13282,9 @@
[[package]]
name = "windows_aarch64_msvc"
-version = "0.29.0"
+version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3d027175d00b01e0cbeb97d6ab6ebe03b12330a35786cbaca5252b1c4bf5d9b"
+checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
[[package]]
name = "windows_aarch64_msvc"
@@ -13290,9 +13294,9 @@
[[package]]
name = "windows_i686_gnu"
-version = "0.29.0"
+version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8793f59f7b8e8b01eda1a652b2697d87b93097198ae85f823b969ca5b89bba58"
+checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
[[package]]
name = "windows_i686_gnu"
@@ -13302,9 +13306,9 @@
[[package]]
name = "windows_i686_msvc"
-version = "0.29.0"
+version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8602f6c418b67024be2996c512f5f995de3ba417f4c75af68401ab8756796ae4"
+checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
[[package]]
name = "windows_i686_msvc"
@@ -13314,9 +13318,9 @@
[[package]]
name = "windows_x86_64_gnu"
-version = "0.29.0"
+version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3d615f419543e0bd7d2b3323af0d86ff19cbc4f816e6453f36a2c2ce889c354"
+checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
[[package]]
name = "windows_x86_64_gnu"
@@ -13326,9 +13330,9 @@
[[package]]
name = "windows_x86_64_msvc"
-version = "0.29.0"
+version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11d95421d9ed3672c280884da53201a5c46b7b2765ca6faf34b0d71cf34a3561"
+checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
[[package]]
name = "windows_x86_64_msvc"
@@ -13379,7 +13383,7 @@
"derivative",
"impl-trait-for-tuples",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"scale-info",
"xcm-procedural",
]
@@ -13393,7 +13397,7 @@
"frame-system",
"log",
"pallet-transaction-payment",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"polkadot-parachain",
"scale-info",
"sp-arithmetic",
@@ -13413,7 +13417,7 @@
"frame-support",
"impl-trait-for-tuples",
"log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
"sp-arithmetic",
"sp-core",
"sp-io",
Makefilediffbeforeafterboth--- a/Makefile
+++ b/Makefile
@@ -59,11 +59,11 @@
.PHONY: _bench
_bench:
- cargo run --release --features runtime-benchmarks,unique-runtime -- \
- benchmark pallet --pallet pallet-$(PALLET) \
+ cargo run --release --features runtime-benchmarks,$(RUNTIME) -- \
+ benchmark pallet --pallet pallet-$(if $(PALLET),$(PALLET),$(error Must set PALLET)) \
--wasm-execution compiled --extrinsic '*' \
- --template .maintain/frame-weight-template.hbs --steps=50 --repeat=200 --heap-pages=4096 \
- --output=./pallets/$(PALLET)/src/weights.rs
+ --template .maintain/frame-weight-template.hbs --steps=50 --repeat=80 --heap-pages=4096 \
+ --output=./pallets/$(if $(PALLET_DIR),$(PALLET_DIR),$(PALLET))/src/weights.rs
.PHONY: bench-evm-migration
bench-evm-migration:
@@ -93,9 +93,17 @@
bench-structure:
make _bench PALLET=structure
+.PHONY: bench-scheduler
+bench-scheduler:
+ make _bench PALLET=unique-scheduler PALLET_DIR=scheduler
+
.PHONY: bench-rmrk-core
bench-rmrk-core:
make _bench PALLET=proxy-rmrk-core
+.PHONY: bench-rmrk-equip
+bench-rmrk-equip:
+ make _bench PALLET=proxy-rmrk-equip
+
.PHONY: bench
-bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-rmrk-core
+bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-scheduler bench-rmrk-core bench-rmrk-equip
node/cli/Cargo.tomldiffbeforeafterboth--- a/node/cli/Cargo.toml
+++ b/node/cli/Cargo.toml
@@ -291,7 +291,7 @@
license = 'GPLv3'
name = 'unique-node'
repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.22'
+version = '0.9.23'
[[bin]]
name = 'unique-collator'
@@ -323,7 +323,9 @@
[features]
default = []
runtime-benchmarks = [
- 'unique-runtime/runtime-benchmarks',
+ 'unique-runtime?/runtime-benchmarks',
+ 'quartz-runtime?/runtime-benchmarks',
+ 'opal-runtime/runtime-benchmarks',
'polkadot-service/runtime-benchmarks',
]
try-runtime = []
node/cli/src/chain_spec.rsdiffbeforeafterboth--- a/node/cli/src/chain_spec.rs
+++ b/node/cli/src/chain_spec.rs
@@ -26,13 +26,13 @@
use unique_runtime_common::types::*;
#[cfg(feature = "unique-runtime")]
-use unique_runtime as default_runtime;
+pub use unique_runtime as default_runtime;
#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]
-use quartz_runtime as default_runtime;
+pub use quartz_runtime as default_runtime;
#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]
-use opal_runtime as default_runtime;
+pub use opal_runtime as default_runtime;
/// The `ChainSpec` parameterized for the unique runtime.
#[cfg(feature = "unique-runtime")]
node/cli/src/command.rsdiffbeforeafterboth--- a/node/cli/src/command.rs
+++ b/node/cli/src/command.rs
@@ -33,7 +33,9 @@
// limitations under the License.
use crate::{
- chain_spec::{self, RuntimeId, RuntimeIdentification, ServiceId, ServiceIdentification},
+ chain_spec::{
+ self, RuntimeId, RuntimeIdentification, ServiceId, ServiceIdentification, default_runtime,
+ },
cli::{Cli, RelayChainCli, Subcommand},
service::{new_partial, start_node, start_dev_node},
};
@@ -44,7 +46,7 @@
#[cfg(feature = "quartz-runtime")]
use crate::service::QuartzRuntimeExecutor;
-use crate::service::OpalRuntimeExecutor;
+use crate::service::{OpalRuntimeExecutor, DefaultRuntimeExecutor};
use codec::Encode;
use cumulus_primitives_core::ParaId;
@@ -371,7 +373,6 @@
Ok(())
}
- #[cfg(feature = "unique-runtime")]
Some(Subcommand::Benchmark(cmd)) => {
use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE};
let runner = cli.create_runner(cmd)?;
@@ -379,7 +380,7 @@
match cmd {
BenchmarkCmd::Pallet(cmd) => {
if cfg!(feature = "runtime-benchmarks") {
- runner.sync_run(|config| cmd.run::<Block, UniqueRuntimeExecutor>(config))
+ runner.sync_run(|config| cmd.run::<Block, DefaultRuntimeExecutor>(config))
} else {
Err("Benchmarking wasn't enabled when building the node. \
You can enable it with `--features runtime-benchmarks`."
@@ -388,16 +389,16 @@
}
BenchmarkCmd::Block(cmd) => runner.sync_run(|config| {
let partials = new_partial::<
- unique_runtime::RuntimeApi,
- UniqueRuntimeExecutor,
+ default_runtime::RuntimeApi,
+ DefaultRuntimeExecutor,
_,
>(&config, crate::service::parachain_build_import_queue)?;
cmd.run(partials.client)
}),
BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| {
let partials = new_partial::<
- unique_runtime::RuntimeApi,
- UniqueRuntimeExecutor,
+ default_runtime::RuntimeApi,
+ DefaultRuntimeExecutor,
_,
>(&config, crate::service::parachain_build_import_queue)?;
let db = partials.backend.expose_db();
@@ -410,10 +411,6 @@
}
BenchmarkCmd::Overhead(_) => Err("Unsupported benchmarking command".into()),
}
- }
- #[cfg(not(feature = "unique-runtime"))]
- Some(Subcommand::Benchmark(..)) => {
- Err("benchmarking is only available with unique runtime enabled".into())
}
Some(Subcommand::TryRuntime(cmd)) => {
if cfg!(feature = "try-runtime") {
node/cli/src/service.rsdiffbeforeafterboth--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -77,13 +77,21 @@
#[cfg(feature = "quartz-runtime")]
/// Quartz native executor instance.
-
pub struct QuartzRuntimeExecutor;
/// Opal native executor instance.
pub struct OpalRuntimeExecutor;
#[cfg(feature = "unique-runtime")]
+pub type DefaultRuntimeExecutor = UniqueRuntimeExecutor;
+
+#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]
+pub type DefaultRuntimeExecutor = QuartzRuntimeExecutor;
+
+#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]
+pub type DefaultRuntimeExecutor = OpalRuntimeExecutor;
+
+#[cfg(feature = "unique-runtime")]
impl NativeExecutionDispatch for UniqueRuntimeExecutor {
type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
node/rpc/Cargo.tomldiffbeforeafterboth--- a/node/rpc/Cargo.toml
+++ b/node/rpc/Cargo.toml
@@ -63,3 +63,4 @@
[features]
default = []
std = []
+unique-runtime = []
node/rpc/src/lib.rsdiffbeforeafterboth--- a/node/rpc/src/lib.rs
+++ b/node/rpc/src/lib.rs
@@ -169,7 +169,11 @@
Eth, EthApiServer, EthDevSigner, EthFilter, EthFilterApiServer, EthPubSub,
EthPubSubApiServer, EthSigner, Net, NetApiServer, Web3, Web3ApiServer,
};
- use uc_rpc::{UniqueApiServer, Unique, RmrkApiServer, Rmrk};
+ use uc_rpc::{UniqueApiServer, Unique};
+
+ #[cfg(not(feature = "unique-runtime"))]
+ use uc_rpc::{RmrkApiServer, Rmrk};
+
// use pallet_contracts_rpc::{Contracts, ContractsApi};
use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer};
use substrate_frame_rpc_system::{System, SystemApiServer};
@@ -223,6 +227,8 @@
)?;
io.merge(Unique::new(client.clone()).into_rpc())?;
+
+ #[cfg(not(feature = "unique-runtime"))]
io.merge(Rmrk::new(client.clone()).into_rpc())?;
if let Some(filter_pool) = filter_pool {
pallets/common/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/common/src/benchmarking.rs
+++ b/pallets/common/src/benchmarking.rs
@@ -96,10 +96,11 @@
permissions: Some(CollectionPermissions {
nesting: Some(NestingPermissions {
token_owner: false,
- admin: false,
+ collection_admin: false,
restricted: None,
permissive: true,
}),
+ mint_mode: Some(true),
..Default::default()
}),
..Default::default()
pallets/common/src/erc.rsdiffbeforeafterboth--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -22,7 +22,9 @@
pub use pallet_evm::{PrecompileOutput, PrecompileResult, PrecompileHandle, account::CrossAccountId};
use pallet_evm_coder_substrate::dispatch_to_evm;
use sp_std::vec::Vec;
-use up_data_structs::{Property, SponsoringRateLimit, OwnerRestrictedSet, AccessMode};
+use up_data_structs::{
+ Property, SponsoringRateLimit, OwnerRestrictedSet, AccessMode, CollectionPermissions,
+};
use alloc::format;
use crate::{Pallet, CollectionHandle, Config, CollectionProperties};
@@ -47,10 +49,15 @@
#[solidity_interface(name = "Collection")]
impl<T: Config> CollectionHandle<T>
-// where
-// T::AccountId: From<H256>
+where
+ T::AccountId: From<[u8; 32]>,
{
- fn set_collection_property(&mut self, caller: caller, key: string, value: bytes) -> Result<()> {
+ fn set_collection_property(
+ &mut self,
+ caller: caller,
+ key: string,
+ value: bytes,
+ ) -> Result<void> {
let caller = T::CrossAccountId::from_eth(caller);
let key = <Vec<u8>>::from(key)
.try_into()
@@ -83,7 +90,7 @@
}
fn set_collection_sponsor(&mut self, caller: caller, sponsor: address) -> Result<void> {
- check_is_owner(caller, self)?;
+ check_is_owner_or_admin(caller, self)?;
let sponsor = T::CrossAccountId::from_eth(sponsor);
self.set_sponsor(sponsor.as_sub().clone())
@@ -97,14 +104,14 @@
.confirm_sponsorship(caller.as_sub())
.map_err(dispatch_to_evm::<T>)?
{
- return Err(Error::Revert("Caller is not set as sponsor".into()));
+ return Err("caller is not set as sponsor".into());
}
save(self)
}
#[solidity(rename_selector = "setCollectionLimit")]
fn set_int_limit(&mut self, caller: caller, limit: string, value: uint32) -> Result<void> {
- check_is_owner(caller, self)?;
+ check_is_owner_or_admin(caller, self)?;
let mut limits = self.limits.clone();
match limit.as_str() {
@@ -128,7 +135,7 @@
}
_ => {
return Err(Error::Revert(format!(
- "Unknown integer limit \"{}\"",
+ "unknown integer limit \"{}\"",
limit
)))
}
@@ -140,7 +147,7 @@
#[solidity(rename_selector = "setCollectionLimit")]
fn set_bool_limit(&mut self, caller: caller, limit: string, value: bool) -> Result<void> {
- check_is_owner(caller, self)?;
+ check_is_owner_or_admin(caller, self)?;
let mut limits = self.limits.clone();
match limit.as_str() {
@@ -155,7 +162,7 @@
}
_ => {
return Err(Error::Revert(format!(
- "Unknown boolean limit \"{}\"",
+ "unknown boolean limit \"{}\"",
limit
)))
}
@@ -169,52 +176,48 @@
Ok(crate::eth::collection_id_to_address(self.id))
}
- // fn add_admin_substrate(&self, caller: caller, new_admin: uint256) -> Result<void> {
- // let mut new_admin_h256 = H256::default();
- // new_admin.to_little_endian(&mut new_admin_h256.0);
- // let account_id = T::AccountId::from(new_admin_h256);
- // let caller = T::CrossAccountId::from_eth(caller);
- // let new_admin = T::CrossAccountId::from_sub(account_id);
- // <Pallet<T>>::toggle_admin(&self, &caller, &new_admin, true)
- // .map_err(dispatch_to_evm::<T>)?;
- // Ok(())
- // }
+ fn add_collection_admin_substrate(&self, caller: caller, new_admin: uint256) -> Result<void> {
+ let caller = T::CrossAccountId::from_eth(caller);
+ let mut new_admin_arr: [u8; 32] = Default::default();
+ new_admin.to_big_endian(&mut new_admin_arr);
+ let account_id = T::AccountId::from(new_admin_arr);
+ let new_admin = T::CrossAccountId::from_sub(account_id);
+ <Pallet<T>>::toggle_admin(self, &caller, &new_admin, true).map_err(dispatch_to_evm::<T>)?;
+ Ok(())
+ }
- // fn remove_admin_substrate(&self, caller: caller, new_admin: uint256) -> Result<void> {
- // let mut new_admin_h256 = H256::default();
- // new_admin.to_little_endian(&mut new_admin_h256.0);
- // let account_id = T::AccountId::from(new_admin_h256);
- // let caller = T::CrossAccountId::from_eth(caller);
- // let new_admin = T::CrossAccountId::from_sub(account_id);
- // <Pallet<T>>::toggle_admin(&self, &caller, &new_admin, false)
- // .map_err(dispatch_to_evm::<T>)?;
- // Ok(())
- // }
+ fn remove_collection_admin_substrate(
+ &self,
+ caller: caller,
+ new_admin: uint256,
+ ) -> Result<void> {
+ let caller = T::CrossAccountId::from_eth(caller);
+ let mut new_admin_arr: [u8; 32] = Default::default();
+ new_admin.to_big_endian(&mut new_admin_arr);
+ let account_id = T::AccountId::from(new_admin_arr);
+ let new_admin = T::CrossAccountId::from_sub(account_id);
+ <Pallet<T>>::toggle_admin(self, &caller, &new_admin, false)
+ .map_err(dispatch_to_evm::<T>)?;
+ Ok(())
+ }
fn add_collection_admin(&self, caller: caller, new_admin: address) -> Result<void> {
let caller = T::CrossAccountId::from_eth(caller);
- self.check_is_owner_or_admin(&caller)
- .map_err(dispatch_to_evm::<T>)?;
let new_admin = T::CrossAccountId::from_eth(new_admin);
- <Pallet<T>>::toggle_admin(&self, &caller, &new_admin, true)
- .map_err(dispatch_to_evm::<T>)?;
+ <Pallet<T>>::toggle_admin(self, &caller, &new_admin, true).map_err(dispatch_to_evm::<T>)?;
Ok(())
}
fn remove_collection_admin(&self, caller: caller, admin: address) -> Result<void> {
let caller = T::CrossAccountId::from_eth(caller);
- self.check_is_owner_or_admin(&caller)
- .map_err(dispatch_to_evm::<T>)?;
let admin = T::CrossAccountId::from_eth(admin);
- <Pallet<T>>::toggle_admin(&self, &caller, &admin, false).map_err(dispatch_to_evm::<T>)?;
+ <Pallet<T>>::toggle_admin(self, &caller, &admin, false).map_err(dispatch_to_evm::<T>)?;
Ok(())
}
#[solidity(rename_selector = "setCollectionNesting")]
fn set_nesting_bool(&mut self, caller: caller, enable: bool) -> Result<void> {
- let caller = T::CrossAccountId::from_eth(caller);
- self.check_is_owner_or_admin(&caller)
- .map_err(dispatch_to_evm::<T>)?;
+ check_is_owner_or_admin(caller, self)?;
let mut permissions = self.collection.permissions.clone();
let mut nesting = permissions.nesting().clone();
@@ -240,11 +243,9 @@
collections: Vec<address>,
) -> Result<void> {
if collections.is_empty() {
- return Err("No addresses provided".into());
+ return Err("no addresses provided".into());
}
- let caller = T::CrossAccountId::from_eth(caller);
- self.check_is_owner_or_admin(&caller)
- .map_err(dispatch_to_evm::<T>)?;
+ check_is_owner_or_admin(caller, self)?;
let mut permissions = self.collection.permissions.clone();
match enable {
@@ -280,27 +281,34 @@
}
fn set_collection_access(&mut self, caller: caller, mode: uint8) -> Result<void> {
- let caller = T::CrossAccountId::from_eth(caller);
- self.check_is_owner_or_admin(&caller)
- .map_err(dispatch_to_evm::<T>)?;
- self.collection.permissions.access = Some(match mode {
- 0 => AccessMode::Normal,
- 1 => AccessMode::AllowList,
- _ => return Err("Not supported access mode".into()),
- });
- save(self)?;
- Ok(())
+ check_is_owner_or_admin(caller, self)?;
+ let permissions = CollectionPermissions {
+ access: Some(match mode {
+ 0 => AccessMode::Normal,
+ 1 => AccessMode::AllowList,
+ _ => return Err("not supported access mode".into()),
+ }),
+ ..Default::default()
+ };
+ self.collection.permissions = <Pallet<T>>::clamp_permissions(
+ self.collection.mode.clone(),
+ &self.collection.permissions,
+ permissions,
+ )
+ .map_err(dispatch_to_evm::<T>)?;
+
+ save(self)
}
fn add_to_collection_allow_list(&self, caller: caller, user: address) -> Result<void> {
- let caller = check_is_owner_or_admin(caller, self)?;
+ let caller = T::CrossAccountId::from_eth(caller);
let user = T::CrossAccountId::from_eth(user);
<Pallet<T>>::toggle_allowlist(self, &caller, &user, true).map_err(dispatch_to_evm::<T>)?;
Ok(())
}
fn remove_from_collection_allow_list(&self, caller: caller, user: address) -> Result<void> {
- let caller = check_is_owner_or_admin(caller, self)?;
+ let caller = T::CrossAccountId::from_eth(caller);
let user = T::CrossAccountId::from_eth(user);
<Pallet<T>>::toggle_allowlist(self, &caller, &user, false).map_err(dispatch_to_evm::<T>)?;
Ok(())
@@ -308,18 +316,19 @@
fn set_collection_mint_mode(&mut self, caller: caller, mode: bool) -> Result<void> {
check_is_owner_or_admin(caller, self)?;
- self.collection.permissions.mint_mode = Some(mode);
- save(self)?;
- Ok(())
- }
-}
+ let permissions = CollectionPermissions {
+ mint_mode: Some(mode),
+ ..Default::default()
+ };
+ self.collection.permissions = <Pallet<T>>::clamp_permissions(
+ self.collection.mode.clone(),
+ &self.collection.permissions,
+ permissions,
+ )
+ .map_err(dispatch_to_evm::<T>)?;
-fn check_is_owner<T: Config>(caller: caller, collection: &CollectionHandle<T>) -> Result<void> {
- let caller = T::CrossAccountId::from_eth(caller);
- collection
- .check_is_owner(&caller)
- .map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;
- Ok(())
+ save(self)
+ }
}
fn check_is_owner_or_admin<T: Config>(
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -74,7 +74,7 @@
RmrkPropertyInfo,
RmrkBaseInfo,
RmrkPartType,
- RmrkTheme,
+ RmrkBoundedTheme,
RmrkNftChild,
CollectionPermissions,
SchemaVersion,
@@ -148,7 +148,7 @@
.saturating_mul(writes),
))
}
- pub fn save(self) -> Result<(), DispatchError> {
+ pub fn save(self) -> DispatchResult {
<CollectionById<T>>::insert(self.id, self.collection);
Ok(())
}
@@ -543,7 +543,7 @@
RmrkPropertyInfo,
RmrkBaseInfo<T::AccountId>,
RmrkPartType,
- RmrkTheme,
+ RmrkBoundedTheme,
RmrkNftChild,
)>,
),
@@ -1019,7 +1019,7 @@
}
#[transactional]
- pub fn set_property_permissions(
+ pub fn set_token_property_permissions(
collection: &CollectionHandle<T>,
sender: &T::CrossAccountId,
property_permissions: Vec<PropertyKeyPermission>,
@@ -1164,6 +1164,7 @@
old_limit: &CollectionLimits,
mut new_limit: CollectionLimits,
) -> Result<CollectionLimits, DispatchError> {
+ let limits = old_limit;
limit_default!(old_limit, new_limit,
account_token_ownership_limit => ensure!(
new_limit <= MAX_TOKEN_OWNERSHIP,
@@ -1190,6 +1191,7 @@
),
sponsor_approve_timeout => {},
owner_can_transfer => ensure!(
+ !limits.owner_can_transfer_instaled() ||
old_limit || !new_limit,
<Error<T>>::OwnerPermissionsCantBeReverted,
),
@@ -1210,11 +1212,14 @@
limit_default_clone!(old_limit, new_limit,
access => {},
mint_mode => {},
- nesting => ensure!(
- // Permissive is only allowed for tests and internal usage of chain for now
- old_limit.permissive || !new_limit.permissive,
- <Error<T>>::NoPermission,
- ),
+ nesting => {
+ #[cfg(not(feature = "runtime-benchmarks"))]
+ ensure!(
+ // Permissive is only allowed for tests and internal usage of chain for now
+ old_limit.permissive || !new_limit.permissive,
+ <Error<T>>::NoPermission,
+ )
+ },
);
Ok(new_limit)
}
@@ -1237,7 +1242,7 @@
fn delete_collection_properties(amount: u32) -> Weight;
fn set_token_properties(amount: u32) -> Weight;
fn delete_token_properties(amount: u32) -> Weight;
- fn set_property_permissions(amount: u32) -> Weight;
+ fn set_token_property_permissions(amount: u32) -> Weight;
fn transfer() -> Weight;
fn approve() -> Weight;
fn transfer_from() -> Weight;
@@ -1316,7 +1321,7 @@
token_id: TokenId,
property_keys: Vec<PropertyKey>,
) -> DispatchResultWithPostInfo;
- fn set_property_permissions(
+ fn set_token_property_permissions(
&self,
sender: &T::CrossAccountId,
property_permissions: Vec<PropertyKeyPermission>,
pallets/evm-migration/src/weights.rsdiffbeforeafterboth--- a/pallets/evm-migration/src/weights.rs
+++ b/pallets/evm-migration/src/weights.rs
@@ -3,12 +3,13 @@
//! Autogenerated weights for pallet_evm_migration
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// target/release/unique-collator
// benchmark
+// pallet
// --pallet
// pallet-evm-migration
// --wasm-execution
@@ -44,23 +45,23 @@
// Storage: System Account (r:1 w:0)
// Storage: EVM AccountCodes (r:1 w:0)
fn begin() -> Weight {
- (6_441_000 as Weight)
+ (6_914_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: EvmMigration MigrationPending (r:1 w:0)
// Storage: EVM AccountStorages (r:0 w:1)
fn set_data(b: u32, ) -> Weight {
- (3_424_000 as Weight)
+ (2_875_000 as Weight)
// Standard Error: 0
- .saturating_add((973_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add((794_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
}
// Storage: EvmMigration MigrationPending (r:1 w:1)
// Storage: EVM AccountCodes (r:0 w:1)
fn finish(b: u32, ) -> Weight {
- (4_702_000 as Weight)
+ (6_320_000 as Weight)
// Standard Error: 0
.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
@@ -74,23 +75,23 @@
// Storage: System Account (r:1 w:0)
// Storage: EVM AccountCodes (r:1 w:0)
fn begin() -> Weight {
- (6_441_000 as Weight)
+ (6_914_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: EvmMigration MigrationPending (r:1 w:0)
// Storage: EVM AccountStorages (r:0 w:1)
fn set_data(b: u32, ) -> Weight {
- (3_424_000 as Weight)
+ (2_875_000 as Weight)
// Standard Error: 0
- .saturating_add((973_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add((794_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
}
// Storage: EvmMigration MigrationPending (r:1 w:1)
// Storage: EVM AccountCodes (r:0 w:1)
fn finish(b: u32, ) -> Weight {
- (4_702_000 as Weight)
+ (6_320_000 as Weight)
// Standard Error: 0
.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
pallets/fungible/src/common.rsdiffbeforeafterboth--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -72,7 +72,7 @@
0
}
- fn set_property_permissions(_amount: u32) -> Weight {
+ fn set_token_property_permissions(_amount: u32) -> Weight {
// Error
0
}
@@ -302,7 +302,7 @@
fail!(<Error<T>>::SettingPropertiesNotAllowed)
}
- fn set_property_permissions(
+ fn set_token_property_permissions(
&self,
_sender: &T::CrossAccountId,
_property_permissions: Vec<PropertyKeyPermission>,
pallets/fungible/src/erc.rsdiffbeforeafterboth--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -152,12 +152,15 @@
via("CollectionHandle<T>", common_mut, Collection)
)
)]
-impl<T: Config> FungibleHandle<T> {}
+impl<T: Config> FungibleHandle<T> where T::AccountId: From<[u8; 32]> {}
generate_stubgen!(gen_impl, UniqueFungibleCall<()>, true);
generate_stubgen!(gen_iface, UniqueFungibleCall<()>, false);
-impl<T: Config> CommonEvmHandler for FungibleHandle<T> {
+impl<T: Config> CommonEvmHandler for FungibleHandle<T>
+where
+ T::AccountId: From<[u8; 32]>,
+{
const CODE: &'static [u8] = include_bytes!("./stubs/UniqueFungible.raw");
fn call(self, handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {
pallets/fungible/src/weights.rsdiffbeforeafterboth--- a/pallets/fungible/src/weights.rs
+++ b/pallets/fungible/src/weights.rs
@@ -3,12 +3,13 @@
//! Autogenerated weights for pallet_fungible
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// target/release/unique-collator
// benchmark
+// pallet
// --pallet
// pallet-fungible
// --wasm-execution
@@ -18,7 +19,7 @@
// --template
// .maintain/frame-weight-template.hbs
// --steps=50
-// --repeat=200
+// --repeat=80
// --heap-pages=4096
// --output=./pallets/fungible/src/weights.rs
@@ -47,16 +48,16 @@
// Storage: Fungible TotalSupply (r:1 w:1)
// Storage: Fungible Balance (r:1 w:1)
fn create_item() -> Weight {
- (14_407_000 as Weight)
+ (17_828_000 as Weight)
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
// Storage: Fungible TotalSupply (r:1 w:1)
// Storage: Fungible Balance (r:4 w:4)
fn create_multiple_items_ex(b: u32, ) -> Weight {
- (13_030_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((3_779_000 as Weight).saturating_mul(b as Weight))
+ (17_574_000 as Weight)
+ // Standard Error: 3_000
+ .saturating_add((4_288_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -65,28 +66,27 @@
// Storage: Fungible TotalSupply (r:1 w:1)
// Storage: Fungible Balance (r:1 w:1)
fn burn_item() -> Weight {
- (15_565_000 as Weight)
+ (18_417_000 as Weight)
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
-
// Storage: Fungible Balance (r:2 w:2)
fn transfer() -> Weight {
- (17_713_000 as Weight)
+ (20_090_000 as Weight)
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
// Storage: Fungible Balance (r:1 w:0)
// Storage: Fungible Allowance (r:0 w:1)
fn approve() -> Weight {
- (14_834_000 as Weight)
+ (17_532_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Fungible Allowance (r:1 w:1)
// Storage: Fungible Balance (r:2 w:2)
fn transfer_from() -> Weight {
- (25_189_000 as Weight)
+ (29_869_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
}
@@ -94,7 +94,7 @@
// Storage: Fungible TotalSupply (r:1 w:1)
// Storage: Fungible Balance (r:1 w:1)
fn burn_from() -> Weight {
- (24_065_000 as Weight)
+ (27_835_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
}
@@ -105,16 +105,16 @@
// Storage: Fungible TotalSupply (r:1 w:1)
// Storage: Fungible Balance (r:1 w:1)
fn create_item() -> Weight {
- (14_407_000 as Weight)
+ (17_828_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
// Storage: Fungible TotalSupply (r:1 w:1)
// Storage: Fungible Balance (r:4 w:4)
fn create_multiple_items_ex(b: u32, ) -> Weight {
- (13_030_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((3_779_000 as Weight).saturating_mul(b as Weight))
+ (17_574_000 as Weight)
+ // Standard Error: 3_000
+ .saturating_add((4_288_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
@@ -123,28 +123,27 @@
// Storage: Fungible TotalSupply (r:1 w:1)
// Storage: Fungible Balance (r:1 w:1)
fn burn_item() -> Weight {
- (15_565_000 as Weight)
+ (18_417_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
-
// Storage: Fungible Balance (r:2 w:2)
fn transfer() -> Weight {
- (17_713_000 as Weight)
+ (20_090_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
// Storage: Fungible Balance (r:1 w:0)
// Storage: Fungible Allowance (r:0 w:1)
fn approve() -> Weight {
- (14_834_000 as Weight)
+ (17_532_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Fungible Allowance (r:1 w:1)
// Storage: Fungible Balance (r:2 w:2)
fn transfer_from() -> Weight {
- (25_189_000 as Weight)
+ (29_869_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
}
@@ -152,7 +151,7 @@
// Storage: Fungible TotalSupply (r:1 w:1)
// Storage: Fungible Balance (r:1 w:1)
fn burn_from() -> Weight {
- (24_065_000 as Weight)
+ (27_835_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
}
pallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/benchmarking.rs
+++ b/pallets/nonfungible/src/benchmarking.rs
@@ -147,7 +147,7 @@
<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;
}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}
- set_property_permissions {
+ set_token_property_permissions {
let b in 0..MAX_PROPERTIES_PER_ITEM;
bench_init!{
owner: sub; collection: collection(owner);
@@ -161,7 +161,7 @@
token_owner: false,
},
}).collect::<Vec<_>>();
- }: {<Pallet<T>>::set_property_permissions(&collection, &owner, perms)?}
+ }: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}
set_token_properties {
let b in 0..MAX_PROPERTIES_PER_ITEM;
@@ -177,7 +177,7 @@
token_owner: true,
},
}).collect::<Vec<_>>();
- <Pallet<T>>::set_property_permissions(&collection, &owner, perms)?;
+ <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;
let props = (0..b).map(|k| Property {
key: property_key(k as usize),
value: property_value(),
@@ -199,7 +199,7 @@
token_owner: true,
},
}).collect::<Vec<_>>();
- <Pallet<T>>::set_property_permissions(&collection, &owner, perms)?;
+ <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;
let props = (0..b).map(|k| Property {
key: property_key(k as usize),
value: property_value(),
pallets/nonfungible/src/common.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -89,8 +89,8 @@
<SelfWeightOf<T>>::delete_token_properties(amount)
}
- fn set_property_permissions(amount: u32) -> Weight {
- <SelfWeightOf<T>>::set_property_permissions(amount)
+ fn set_token_property_permissions(amount: u32) -> Weight {
+ <SelfWeightOf<T>>::set_token_property_permissions(amount)
}
fn transfer() -> Weight {
@@ -242,16 +242,16 @@
)
}
- fn set_property_permissions(
+ fn set_token_property_permissions(
&self,
sender: &T::CrossAccountId,
property_permissions: Vec<PropertyKeyPermission>,
) -> DispatchResultWithPostInfo {
let weight =
- <CommonWeights<T>>::set_property_permissions(property_permissions.len() as u32);
+ <CommonWeights<T>>::set_token_property_permissions(property_permissions.len() as u32);
with_weight(
- <Pallet<T>>::set_property_permissions(self, sender, property_permissions),
+ <Pallet<T>>::set_token_property_permissions(self, sender, property_permissions),
weight,
)
}
pallets/nonfungible/src/erc.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -583,13 +583,16 @@
TokenProperties,
)
)]
-impl<T: Config> NonfungibleHandle<T> {}
+impl<T: Config> NonfungibleHandle<T> where T::AccountId: From<[u8; 32]> {}
// Not a tests, but code generators
generate_stubgen!(gen_impl, UniqueNFTCall<()>, true);
generate_stubgen!(gen_iface, UniqueNFTCall<()>, false);
-impl<T: Config> CommonEvmHandler for NonfungibleHandle<T> {
+impl<T: Config> CommonEvmHandler for NonfungibleHandle<T>
+where
+ T::AccountId: From<[u8; 32]>,
+{
const CODE: &'static [u8] = include_bytes!("./stubs/UniqueNFT.raw");
fn call(self, handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {
pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -28,7 +28,7 @@
use up_data_structs::{
AccessMode, CollectionId, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData,
mapping::TokenAddressMapping, budget::Budget, Property, PropertyPermission, PropertyKey,
- PropertyKeyPermission, Properties, PropertyScope, TrySetProperty, TokenChild,
+ PropertyKeyPermission, Properties, PropertyScope, TrySetProperty, TokenChild, AuxPropertyValue,
};
use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm};
use pallet_common::{
@@ -124,6 +124,19 @@
OnEmpty = up_data_structs::TokenProperties,
>;
+ #[pallet::storage]
+ #[pallet::getter(fn token_aux_property)]
+ pub type TokenAuxProperties<T: Config> = StorageNMap<
+ Key = (
+ Key<Twox64Concat, CollectionId>,
+ Key<Twox64Concat, TokenId>,
+ Key<Twox64Concat, PropertyScope>,
+ Key<Twox64Concat, PropertyKey>,
+ ),
+ Value = AuxPropertyValue,
+ QueryKind = OptionQuery,
+ >;
+
/// Used to enumerate tokens owned by account
#[pallet::storage]
pub type Owned<T: Config> = StorageNMap<
@@ -294,6 +307,33 @@
Ok(())
}
+ pub fn try_mutate_token_aux_property<R, E>(
+ collection_id: CollectionId,
+ token_id: TokenId,
+ scope: PropertyScope,
+ key: PropertyKey,
+ f: impl FnOnce(&mut Option<AuxPropertyValue>) -> Result<R, E>,
+ ) -> Result<R, E> {
+ <TokenAuxProperties<T>>::try_mutate((collection_id, token_id, scope, key), f)
+ }
+
+ pub fn remove_token_aux_property(
+ collection_id: CollectionId,
+ token_id: TokenId,
+ scope: PropertyScope,
+ key: PropertyKey,
+ ) {
+ <TokenAuxProperties<T>>::remove((collection_id, token_id, scope, key));
+ }
+
+ pub fn iterate_token_aux_properties(
+ collection_id: CollectionId,
+ token_id: TokenId,
+ scope: PropertyScope,
+ ) -> impl Iterator<Item = (PropertyKey, AuxPropertyValue)> {
+ <TokenAuxProperties<T>>::iter_prefix((collection_id, token_id, scope))
+ }
+
pub fn current_token_id(collection_id: CollectionId) -> TokenId {
TokenId(<TokensMinted<T>>::get(collection_id))
}
@@ -375,6 +415,7 @@
<TokensBurnt<T>>::insert(collection.id, burnt);
<TokenData<T>>::remove((collection.id, token));
<TokenProperties<T>>::remove((collection.id, token));
+ <TokenAuxProperties<T>>::remove_prefix((collection.id, token), None);
let old_spender = <Allowance<T>>::take((collection.id, token));
if let Some(old_spender) = old_spender {
@@ -594,12 +635,12 @@
<PalletCommon<T>>::delete_collection_properties(collection, sender, property_keys)
}
- pub fn set_property_permissions(
+ pub fn set_token_property_permissions(
collection: &CollectionHandle<T>,
sender: &T::CrossAccountId,
property_permissions: Vec<PropertyKeyPermission>,
) -> DispatchResult {
- <PalletCommon<T>>::set_property_permissions(collection, sender, property_permissions)
+ <PalletCommon<T>>::set_token_property_permissions(collection, sender, property_permissions)
}
pub fn set_property_permission(
@@ -1008,7 +1049,7 @@
nesting_budget,
)? {
// Pass
- } else if nesting.admin && handle.is_owner_or_admin(&sender) {
+ } else if nesting.collection_admin && handle.is_owner_or_admin(&sender) {
// Pass
} else {
fail!(<CommonError<T>>::UserIsNotAllowedToNest);
pallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterbothbinary blob — no preview
pallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -297,7 +297,40 @@
}
}
-// Selector: 6aea9834
+// Selector: 780e9d63
+contract ERC721Enumerable is Dummy, ERC165 {
+ // Selector: tokenByIndex(uint256) 4f6ccce7
+ function tokenByIndex(uint256 index) public view returns (uint256) {
+ require(false, stub_error);
+ index;
+ dummy;
+ return 0;
+ }
+
+ // Not implemented
+ //
+ // Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59
+ function tokenOfOwnerByIndex(address owner, uint256 index)
+ public
+ view
+ returns (uint256)
+ {
+ require(false, stub_error);
+ owner;
+ index;
+ dummy;
+ return 0;
+ }
+
+ // Selector: totalSupply() 18160ddd
+ function totalSupply() public view returns (uint256) {
+ require(false, stub_error);
+ dummy;
+ return 0;
+ }
+}
+
+// Selector: 7d9262e6
contract Collection is Dummy, ERC165 {
// Selector: setCollectionProperty(string,bytes) 2f073f66
function setCollectionProperty(string memory key, bytes memory value)
@@ -366,6 +399,20 @@
return 0x0000000000000000000000000000000000000000;
}
+ // Selector: addCollectionAdminSubstrate(uint256) 5730062b
+ function addCollectionAdminSubstrate(uint256 newAdmin) public view {
+ require(false, stub_error);
+ newAdmin;
+ dummy;
+ }
+
+ // Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
+ function removeCollectionAdminSubstrate(uint256 newAdmin) public view {
+ require(false, stub_error);
+ newAdmin;
+ dummy;
+ }
+
// Selector: addCollectionAdmin(address) 92e462c7
function addCollectionAdmin(address newAdmin) public view {
require(false, stub_error);
@@ -423,39 +470,6 @@
require(false, stub_error);
mode;
dummy = 0;
- }
-}
-
-// Selector: 780e9d63
-contract ERC721Enumerable is Dummy, ERC165 {
- // Selector: tokenByIndex(uint256) 4f6ccce7
- function tokenByIndex(uint256 index) public view returns (uint256) {
- require(false, stub_error);
- index;
- dummy;
- return 0;
- }
-
- // Not implemented
- //
- // Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59
- function tokenOfOwnerByIndex(address owner, uint256 index)
- public
- view
- returns (uint256)
- {
- require(false, stub_error);
- owner;
- index;
- dummy;
- return 0;
- }
-
- // Selector: totalSupply() 18160ddd
- function totalSupply() public view returns (uint256) {
- require(false, stub_error);
- dummy;
- return 0;
}
}
pallets/nonfungible/src/weights.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/weights.rs
+++ b/pallets/nonfungible/src/weights.rs
@@ -3,12 +3,13 @@
//! Autogenerated weights for pallet_nonfungible
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// target/release/unique-collator
// benchmark
+// pallet
// --pallet
// pallet-nonfungible
// --wasm-execution
@@ -18,7 +19,7 @@
// --template
// .maintain/frame-weight-template.hbs
// --steps=50
-// --repeat=200
+// --repeat=80
// --heap-pages=4096
// --output=./pallets/nonfungible/src/weights.rs
@@ -42,9 +43,9 @@
fn approve() -> Weight;
fn transfer_from() -> Weight;
fn burn_from() -> Weight;
- fn set_property_permissions(b: u32) -> Weight;
- fn set_token_properties(b: u32) -> Weight;
- fn delete_token_properties(b: u32) -> Weight;
+ fn set_token_property_permissions(b: u32, ) -> Weight;
+ fn set_token_properties(b: u32, ) -> Weight;
+ fn delete_token_properties(b: u32, ) -> Weight;
}
/// Weights for pallet_nonfungible using the Substrate node and recommended hardware.
@@ -55,7 +56,7 @@
// Storage: Nonfungible TokenData (r:0 w:1)
// Storage: Nonfungible Owned (r:0 w:1)
fn create_item() -> Weight {
- (18_450_000 as Weight)
+ (24_135_000 as Weight)
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(4 as Weight))
}
@@ -64,9 +65,9 @@
// Storage: Nonfungible TokenData (r:0 w:4)
// Storage: Nonfungible Owned (r:0 w:4)
fn create_multiple_items(b: u32, ) -> Weight {
- (10_228_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((4_392_000 as Weight).saturating_mul(b as Weight))
+ (21_952_000 as Weight)
+ // Standard Error: 5_000
+ .saturating_add((4_727_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
.saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(b as Weight)))
@@ -76,23 +77,25 @@
// Storage: Nonfungible TokenData (r:0 w:4)
// Storage: Nonfungible Owned (r:0 w:4)
fn create_multiple_items_ex(b: u32, ) -> Weight {
- (6_543_000 as Weight)
- // Standard Error: 2_000
- .saturating_add((7_175_000 as Weight).saturating_mul(b as Weight))
+ (10_432_000 as Weight)
+ // Standard Error: 6_000
+ .saturating_add((7_383_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
.saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(b as Weight)))
}
// Storage: Nonfungible TokenData (r:1 w:1)
+ // Storage: Nonfungible TokenChildren (r:1 w:0)
// Storage: Nonfungible TokensBurnt (r:1 w:1)
// Storage: Nonfungible AccountBalance (r:1 w:1)
// Storage: Nonfungible Allowance (r:1 w:0)
// Storage: Nonfungible Owned (r:0 w:1)
+ // Storage: Nonfungible TokenProperties (r:0 w:1)
fn burn_item() -> Weight {
- (24_554_000 as Weight)
- .saturating_add(T::DbWeight::get().reads(4 as Weight))
- .saturating_add(T::DbWeight::get().writes(4 as Weight))
+ (29_798_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(5 as Weight))
+ .saturating_add(T::DbWeight::get().writes(5 as Weight))
}
// Storage: Nonfungible TokenChildren (r:1 w:0)
// Storage: Nonfungible TokenData (r:1 w:1)
@@ -102,7 +105,7 @@
// Storage: Nonfungible Owned (r:0 w:1)
// Storage: Nonfungible TokenProperties (r:0 w:1)
fn burn_recursively_self_raw() -> Weight {
- (86_136_000 as Weight)
+ (37_955_000 as Weight)
.saturating_add(T::DbWeight::get().reads(5 as Weight))
.saturating_add(T::DbWeight::get().writes(5 as Weight))
}
@@ -116,11 +119,11 @@
// Storage: Common CollectionById (r:1 w:0)
fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight {
(0 as Weight)
- // Standard Error: 42_828_000
- .saturating_add((381_478_000 as Weight).saturating_mul(b as Weight))
- .saturating_add(T::DbWeight::get().reads(6 as Weight))
+ // Standard Error: 1_349_000
+ .saturating_add((275_145_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(T::DbWeight::get().reads(7 as Weight))
.saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
- .saturating_add(T::DbWeight::get().writes(5 as Weight))
+ .saturating_add(T::DbWeight::get().writes(6 as Weight))
.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
}
// Storage: Nonfungible TokenData (r:1 w:1)
@@ -128,14 +131,14 @@
// Storage: Nonfungible Allowance (r:1 w:0)
// Storage: Nonfungible Owned (r:0 w:2)
fn transfer() -> Weight {
- (28_339_000 as Weight)
+ (27_867_000 as Weight)
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(5 as Weight))
}
// Storage: Nonfungible TokenData (r:1 w:0)
// Storage: Nonfungible Allowance (r:1 w:1)
fn approve() -> Weight {
- (17_616_000 as Weight)
+ (18_824_000 as Weight)
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
@@ -144,25 +147,27 @@
// Storage: Nonfungible AccountBalance (r:2 w:2)
// Storage: Nonfungible Owned (r:0 w:2)
fn transfer_from() -> Weight {
- (32_196_000 as Weight)
+ (32_879_000 as Weight)
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(6 as Weight))
}
// Storage: Nonfungible Allowance (r:1 w:1)
// Storage: Nonfungible TokenData (r:1 w:1)
+ // Storage: Nonfungible TokenChildren (r:1 w:0)
// Storage: Nonfungible TokensBurnt (r:1 w:1)
// Storage: Nonfungible AccountBalance (r:1 w:1)
// Storage: Nonfungible Owned (r:0 w:1)
+ // Storage: Nonfungible TokenProperties (r:0 w:1)
fn burn_from() -> Weight {
- (27_580_000 as Weight)
- .saturating_add(T::DbWeight::get().reads(4 as Weight))
- .saturating_add(T::DbWeight::get().writes(5 as Weight))
+ (37_061_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(5 as Weight))
+ .saturating_add(T::DbWeight::get().writes(6 as Weight))
}
// Storage: Common CollectionPropertyPermissions (r:1 w:1)
- fn set_property_permissions(b: u32, ) -> Weight {
+ fn set_token_property_permissions(b: u32, ) -> Weight {
(0 as Weight)
- // Standard Error: 3_432_000
- .saturating_add((126_888_000 as Weight).saturating_mul(b as Weight))
+ // Standard Error: 57_000
+ .saturating_add((15_149_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
@@ -171,8 +176,8 @@
// Storage: Nonfungible TokenProperties (r:1 w:1)
fn set_token_properties(b: u32, ) -> Weight {
(0 as Weight)
- // Standard Error: 158_583_000
- .saturating_add((4_707_700_000 as Weight).saturating_mul(b as Weight))
+ // Standard Error: 2_278_000
+ .saturating_add((409_613_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
@@ -181,8 +186,8 @@
// Storage: Nonfungible TokenProperties (r:1 w:1)
fn delete_token_properties(b: u32, ) -> Weight {
(0 as Weight)
- // Standard Error: 169_018_000
- .saturating_add((4_783_967_000 as Weight).saturating_mul(b as Weight))
+ // Standard Error: 2_234_000
+ .saturating_add((408_185_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
@@ -195,7 +200,7 @@
// Storage: Nonfungible TokenData (r:0 w:1)
// Storage: Nonfungible Owned (r:0 w:1)
fn create_item() -> Weight {
- (18_450_000 as Weight)
+ (24_135_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(4 as Weight))
}
@@ -204,9 +209,9 @@
// Storage: Nonfungible TokenData (r:0 w:4)
// Storage: Nonfungible Owned (r:0 w:4)
fn create_multiple_items(b: u32, ) -> Weight {
- (10_228_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((4_392_000 as Weight).saturating_mul(b as Weight))
+ (21_952_000 as Weight)
+ // Standard Error: 5_000
+ .saturating_add((4_727_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
.saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(b as Weight)))
@@ -216,23 +221,25 @@
// Storage: Nonfungible TokenData (r:0 w:4)
// Storage: Nonfungible Owned (r:0 w:4)
fn create_multiple_items_ex(b: u32, ) -> Weight {
- (6_543_000 as Weight)
- // Standard Error: 2_000
- .saturating_add((7_175_000 as Weight).saturating_mul(b as Weight))
+ (10_432_000 as Weight)
+ // Standard Error: 6_000
+ .saturating_add((7_383_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
.saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(b as Weight)))
}
// Storage: Nonfungible TokenData (r:1 w:1)
+ // Storage: Nonfungible TokenChildren (r:1 w:0)
// Storage: Nonfungible TokensBurnt (r:1 w:1)
// Storage: Nonfungible AccountBalance (r:1 w:1)
// Storage: Nonfungible Allowance (r:1 w:0)
// Storage: Nonfungible Owned (r:0 w:1)
+ // Storage: Nonfungible TokenProperties (r:0 w:1)
fn burn_item() -> Weight {
- (24_554_000 as Weight)
- .saturating_add(RocksDbWeight::get().reads(4 as Weight))
- .saturating_add(RocksDbWeight::get().writes(4 as Weight))
+ (29_798_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(5 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(5 as Weight))
}
// Storage: Nonfungible TokenChildren (r:1 w:0)
// Storage: Nonfungible TokenData (r:1 w:1)
@@ -242,7 +249,7 @@
// Storage: Nonfungible Owned (r:0 w:1)
// Storage: Nonfungible TokenProperties (r:0 w:1)
fn burn_recursively_self_raw() -> Weight {
- (86_136_000 as Weight)
+ (37_955_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
.saturating_add(RocksDbWeight::get().writes(5 as Weight))
}
@@ -256,11 +263,11 @@
// Storage: Common CollectionById (r:1 w:0)
fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight {
(0 as Weight)
- // Standard Error: 42_828_000
- .saturating_add((381_478_000 as Weight).saturating_mul(b as Weight))
- .saturating_add(RocksDbWeight::get().reads(6 as Weight))
+ // Standard Error: 1_349_000
+ .saturating_add((275_145_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(RocksDbWeight::get().reads(7 as Weight))
.saturating_add(RocksDbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
- .saturating_add(RocksDbWeight::get().writes(5 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(6 as Weight))
.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
}
// Storage: Nonfungible TokenData (r:1 w:1)
@@ -268,14 +275,14 @@
// Storage: Nonfungible Allowance (r:1 w:0)
// Storage: Nonfungible Owned (r:0 w:2)
fn transfer() -> Weight {
- (28_339_000 as Weight)
+ (27_867_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(5 as Weight))
}
// Storage: Nonfungible TokenData (r:1 w:0)
// Storage: Nonfungible Allowance (r:1 w:1)
fn approve() -> Weight {
- (17_616_000 as Weight)
+ (18_824_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
@@ -284,25 +291,27 @@
// Storage: Nonfungible AccountBalance (r:2 w:2)
// Storage: Nonfungible Owned (r:0 w:2)
fn transfer_from() -> Weight {
- (32_196_000 as Weight)
+ (32_879_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(6 as Weight))
}
// Storage: Nonfungible Allowance (r:1 w:1)
// Storage: Nonfungible TokenData (r:1 w:1)
+ // Storage: Nonfungible TokenChildren (r:1 w:0)
// Storage: Nonfungible TokensBurnt (r:1 w:1)
// Storage: Nonfungible AccountBalance (r:1 w:1)
// Storage: Nonfungible Owned (r:0 w:1)
+ // Storage: Nonfungible TokenProperties (r:0 w:1)
fn burn_from() -> Weight {
- (27_580_000 as Weight)
- .saturating_add(RocksDbWeight::get().reads(4 as Weight))
- .saturating_add(RocksDbWeight::get().writes(5 as Weight))
+ (37_061_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(5 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(6 as Weight))
}
// Storage: Common CollectionPropertyPermissions (r:1 w:1)
- fn set_property_permissions(b: u32, ) -> Weight {
+ fn set_token_property_permissions(b: u32, ) -> Weight {
(0 as Weight)
- // Standard Error: 3_432_000
- .saturating_add((126_888_000 as Weight).saturating_mul(b as Weight))
+ // Standard Error: 57_000
+ .saturating_add((15_149_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
@@ -311,8 +320,8 @@
// Storage: Nonfungible TokenProperties (r:1 w:1)
fn set_token_properties(b: u32, ) -> Weight {
(0 as Weight)
- // Standard Error: 158_583_000
- .saturating_add((4_707_700_000 as Weight).saturating_mul(b as Weight))
+ // Standard Error: 2_278_000
+ .saturating_add((409_613_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
@@ -321,8 +330,8 @@
// Storage: Nonfungible TokenProperties (r:1 w:1)
fn delete_token_properties(b: u32, ) -> Weight {
(0 as Weight)
- // Standard Error: 169_018_000
- .saturating_add((4_783_967_000 as Weight).saturating_mul(b as Weight))
+ // Standard Error: 2_234_000
+ .saturating_add((408_185_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
pallets/proxy-rmrk-core/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/proxy-rmrk-core/src/benchmarking.rs
+++ b/pallets/proxy-rmrk-core/src/benchmarking.rs
@@ -6,21 +6,523 @@
traits::{Currency, Get},
BoundedVec,
};
+use sp_runtime::Permill;
+
+use up_data_structs::*;
-use crate::{Config, Pallet, Call};
+use super::*;
const SEED: u32 = 1;
fn create_data<S: Get<u32>>() -> BoundedVec<u8, S> {
+ vec![b'A'; S::get() as usize].try_into().expect("size == S")
+}
+
+fn create_u32_array<S: Get<u32>>() -> BoundedVec<u32, S> {
vec![0; S::get() as usize].try_into().expect("size == S")
}
+fn create_basic_resource() -> RmrkBasicResource {
+ RmrkBasicResource {
+ src: Some(create_data()),
+ metadata: Some(create_data()),
+ license: Some(create_data()),
+ thumb: Some(create_data()),
+ }
+}
+
+fn create_composable_resource() -> RmrkComposableResource {
+ RmrkComposableResource {
+ parts: create_u32_array(),
+ base: 100,
+ src: Some(create_data()),
+ metadata: Some(create_data()),
+ license: Some(create_data()),
+ thumb: Some(create_data()),
+ }
+}
+
+fn create_slot_resource() -> RmrkSlotResource {
+ RmrkSlotResource {
+ base: 100,
+ slot: 200,
+ src: Some(create_data()),
+ metadata: Some(create_data()),
+ license: Some(create_data()),
+ thumb: Some(create_data()),
+ }
+}
+
+fn create_max_resource_types_array<S: Get<u32>>(num: usize) -> BoundedVec<RmrkResourceTypes, S> {
+ vec![RmrkResourceTypes::Composable(create_composable_resource()); num]
+ .try_into()
+ .expect("num <= S")
+}
+
+fn create_max_collection<T: Config>(owner: &T::AccountId) -> DispatchResult {
+ <T as pallet_common::Config>::Currency::deposit_creating(
+ owner,
+ T::CollectionCreationPrice::get(),
+ );
+
+ let metadata = create_data();
+ let max = None;
+ let symbol = create_data();
+
+ <Pallet<T>>::create_collection(
+ RawOrigin::Signed(owner.clone()).into(),
+ metadata,
+ max,
+ symbol,
+ )
+}
+
+fn create_nft<T: Config>(owner: &T::AccountId, collection_id: RmrkCollectionId) -> DispatchResult {
+ let royalty_recipient = Some(owner.clone());
+ let royalty_amount = Some(Permill::from_percent(25));
+ let metadata = create_data();
+ let transferable = true;
+
+ <Pallet<T>>::mint_nft(
+ RawOrigin::Signed(owner.clone()).into(),
+ None,
+ collection_id,
+ royalty_recipient,
+ royalty_amount,
+ metadata,
+ transferable,
+ None,
+ )
+}
+
+struct NftBuilder {
+ collection_id: RmrkCollectionId,
+ current_nft_id: RmrkNftId,
+}
+
+impl NftBuilder {
+ fn new(collection_id: RmrkCollectionId) -> Self {
+ Self {
+ collection_id,
+ current_nft_id: 0,
+ }
+ }
+
+ fn build<T: Config>(&mut self, owner: &T::AccountId) -> Result<RmrkNftId, DispatchError> {
+ create_nft::<T>(owner, self.collection_id)?;
+ self.current_nft_id += 1;
+
+ Ok(self.current_nft_id)
+ }
+
+ fn build_tower<T: Config>(
+ &mut self,
+ owner: &T::AccountId,
+ height: u32,
+ ) -> Result<(RmrkNftId, RmrkNftId), DispatchError> {
+ self.build::<T>(owner)?;
+
+ let root_nft_id = self.current_nft_id;
+ let mut prev_nft_id = root_nft_id;
+
+ for _ in 0..height {
+ self.build::<T>(owner)?;
+
+ let new_owner =
+ <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+ self.collection_id,
+ prev_nft_id,
+ );
+
+ <Pallet<T>>::send(
+ RawOrigin::Signed(owner.clone()).into(),
+ self.collection_id,
+ self.current_nft_id,
+ new_owner,
+ )?;
+
+ prev_nft_id = self.current_nft_id;
+ }
+
+ let deepest_nft_id = self.current_nft_id;
+
+ Ok((root_nft_id, deepest_nft_id))
+ }
+
+ fn build_wide_tree<T: Config>(
+ &mut self,
+ owner: &T::AccountId,
+ width: u32,
+ ) -> Result<RmrkNftId, DispatchError> {
+ self.build::<T>(owner)?;
+
+ let root_nft_id = self.current_nft_id;
+
+ let root_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+ self.collection_id,
+ root_nft_id,
+ );
+
+ for _ in 0..width {
+ self.build::<T>(owner)?;
+
+ <Pallet<T>>::send(
+ RawOrigin::Signed(owner.clone()).into(),
+ self.collection_id,
+ self.current_nft_id,
+ root_owner.clone(),
+ )?;
+ }
+
+ Ok(root_nft_id)
+ }
+}
+
benchmarks! {
create_collection {
let caller = account("caller", 0, SEED);
<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
let metadata = create_data();
- // TODO: Fix CollectionTokenPrefixLimitExceeded with create_data
- let symbol = vec![].try_into().expect("0 <= x");
- }: _(RawOrigin::Signed(caller), metadata, None, symbol)
+ let max = None;
+ let symbol = create_data();
+ }: _(RawOrigin::Signed(caller), metadata, max, symbol)
+
+ destroy_collection {
+ let caller = account("caller", 0, SEED);
+
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+ }: _(RawOrigin::Signed(caller), collection_id)
+
+ change_collection_issuer {
+ let caller: T::AccountId = account("caller", 0, SEED);
+
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let new_owner: T::AccountId = account("new_owner", 0, SEED);
+
+ let new_owner_source = T::Lookup::unlookup(new_owner);
+ }: _(RawOrigin::Signed(caller), collection_id, new_owner_source)
+
+ lock_collection {
+ let caller: T::AccountId = account("caller", 0, SEED);
+
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+ }: _(RawOrigin::Signed(caller), collection_id)
+
+ mint_nft {
+ let b in 0..100;
+
+ let caller: T::AccountId = account("caller", 0, SEED);
+
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+ let owner = caller.clone();
+
+ let royalty_recipient = Some(caller.clone());
+ let royalty_amount = Some(Permill::from_percent(25));
+ let metadata = create_data();
+ let transferable = true;
+ }: _(
+ RawOrigin::Signed(caller),
+ None,
+ collection_id,
+ royalty_recipient,
+ royalty_amount,
+ metadata,
+ transferable,
+ Some(create_max_resource_types_array(b as usize))
+ )
+
+ burn_nft {
+ let b in 0..200;
+
+ let caller: T::AccountId = account("caller", 0, SEED);
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let root_nft_id = nft_builder.build_wide_tree::<T>(&caller, b)?;
+ let max_burns = b + 1;
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ root_nft_id,
+ max_burns
+ )
+
+ send {
+ let caller: T::AccountId = account("caller", 0, SEED);
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let src_nft_id = nft_builder.build::<T>(&caller)?;
+ let (_, target_nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 2)?;
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ src_nft_id,
+ <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(collection_id, target_nft_id)
+ )
+
+ accept_nft {
+ let caller: T::AccountId = account("caller", 0, SEED);
+ let sender: T::AccountId = account("sender", 0, SEED);
+
+ create_max_collection::<T>(&sender)?;
+ let src_collection_id = 0;
+
+ create_max_collection::<T>(&caller)?;
+ let target_collection_id = 1;
+
+ let mut src_nft_builder = NftBuilder::new(src_collection_id);
+ let src_nft_id = src_nft_builder.build::<T>(&sender)?;
+
+ let mut target_nft_builder = NftBuilder::new(target_collection_id);
+ let fake_target_nft_id = target_nft_builder.build::<T>(&caller)?;
+ let (_, target_nft_id) = target_nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+
+ let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+ target_collection_id,
+ fake_target_nft_id
+ );
+
+ let actual_new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+ target_collection_id,
+ target_nft_id
+ );
+
+ <Pallet<T>>::send(
+ RawOrigin::Signed(sender.clone()).into(),
+ src_collection_id,
+ src_nft_id,
+ new_owner,
+ )?;
+ }: _(
+ RawOrigin::Signed(caller),
+ src_collection_id,
+ src_nft_id,
+ actual_new_owner
+ )
+
+ reject_nft {
+ let caller: T::AccountId = account("caller", 0, SEED);
+ let sender: T::AccountId = account("sender", 0, SEED);
+
+ create_max_collection::<T>(&sender)?;
+ let src_collection_id = 0;
+
+ create_max_collection::<T>(&caller)?;
+ let target_collection_id = 1;
+
+ let mut src_nft_builder = NftBuilder::new(src_collection_id);
+ let (src_root_nft_id, _) = src_nft_builder.build_tower::<T>(&sender, NESTING_BUDGET - 1)?;
+
+ let mut target_nft_builder = NftBuilder::new(target_collection_id);
+ let target_nft_id = target_nft_builder.build::<T>(&caller)?;
+
+ let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+ target_collection_id,
+ target_nft_id
+ );
+
+ <Pallet<T>>::send(
+ RawOrigin::Signed(sender.clone()).into(),
+ src_collection_id,
+ src_root_nft_id,
+ new_owner,
+ )?;
+ }: _(
+ RawOrigin::Signed(caller),
+ src_collection_id,
+ src_root_nft_id
+ )
+
+ set_property {
+ let caller: T::AccountId = account("caller", 0, SEED);
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+
+ let key = create_data();
+ let value = create_data();
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ Some(nft_id),
+ key,
+ value
+ )
+
+ set_priority {
+ let caller: T::AccountId = account("caller", 0, SEED);
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+ let priorities = create_u32_array();
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ nft_id,
+ priorities
+ )
+
+ add_basic_resource {
+ let caller: T::AccountId = account("caller", 0, SEED);
+
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+ let resource = create_basic_resource();
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ nft_id,
+ resource
+ )
+
+ add_composable_resource {
+ let caller: T::AccountId = account("caller", 0, SEED);
+
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+ let resource = create_composable_resource();
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ nft_id,
+ resource
+ )
+
+ add_slot_resource {
+ let caller: T::AccountId = account("caller", 0, SEED);
+
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+ let resource = create_slot_resource();
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ nft_id,
+ resource
+ )
+
+ remove_resource {
+ let caller: T::AccountId = account("caller", 0, SEED);
+
+ create_max_collection::<T>(&caller)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+ let resource = create_basic_resource();
+
+ <Pallet<T>>::add_basic_resource(
+ RawOrigin::Signed(caller.clone()).into(),
+ collection_id,
+ nft_id,
+ resource
+ )?;
+
+ let resource_id = 0;
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ nft_id,
+ resource_id
+ )
+
+ accept_resource {
+ let caller: T::AccountId = account("caller", 0, SEED);
+ let admin: T::AccountId = account("admin", 0, SEED);
+
+ create_max_collection::<T>(&admin)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let root_nft_id = 1;
+ let (_, nested_nft_id) = nft_builder.build_tower::<T>(&admin, NESTING_BUDGET - 1)?;
+ let resource = create_basic_resource();
+
+ let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::AccountId(caller.clone());
+
+ <Pallet<T>>::send(
+ RawOrigin::Signed(admin.clone()).into(),
+ collection_id,
+ root_nft_id,
+ new_owner,
+ )?;
+
+ <Pallet<T>>::add_basic_resource(
+ RawOrigin::Signed(admin.clone()).into(),
+ collection_id,
+ nested_nft_id,
+ resource
+ )?;
+
+ let resource_id = 0;
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ nested_nft_id,
+ resource_id
+ )
+
+ accept_resource_removal {
+ let caller: T::AccountId = account("caller", 0, SEED);
+ let admin: T::AccountId = account("admin", 0, SEED);
+
+ create_max_collection::<T>(&admin)?;
+ let collection_id = 0;
+
+ let mut nft_builder = NftBuilder::new(collection_id);
+ let root_nft_id = 1;
+ let (_, nested_nft_id) = nft_builder.build_tower::<T>(&admin, NESTING_BUDGET - 1)?;
+ let resource = create_basic_resource();
+
+ <Pallet<T>>::add_basic_resource(
+ RawOrigin::Signed(admin.clone()).into(),
+ collection_id,
+ nested_nft_id,
+ resource
+ )?;
+
+ let resource_id = 0;
+
+ let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::AccountId(caller.clone());
+
+ <Pallet<T>>::send(
+ RawOrigin::Signed(admin.clone()).into(),
+ collection_id,
+ root_nft_id,
+ new_owner,
+ )?;
+
+ <Pallet<T>>::remove_resource(
+ RawOrigin::Signed(admin).into(),
+ collection_id,
+ nested_nft_id,
+ resource_id
+ )?;
+ }: _(
+ RawOrigin::Signed(caller),
+ collection_id,
+ nested_nft_id,
+ resource_id
+ )
}
pallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth--- a/pallets/proxy-rmrk-core/src/lib.rs
+++ b/pallets/proxy-rmrk-core/src/lib.rs
@@ -35,6 +35,7 @@
pub mod benchmarking;
pub mod misc;
pub mod property;
+pub mod rpc;
pub mod weights;
pub type SelfWeightOf<T> = <T as Config>::WeightInfo;
@@ -45,7 +46,7 @@
use RmrkProperty::*;
-const NESTING_BUDGET: u32 = 5;
+pub const NESTING_BUDGET: u32 = 5;
#[frame_support::pallet]
pub mod pallet {
@@ -67,10 +68,6 @@
#[pallet::storage]
pub type UniqueCollectionId<T: Config> =
StorageMap<_, Twox64Concat, RmrkCollectionId, CollectionId, ValueQuery>;
-
- #[pallet::storage]
- pub type RmrkInernalCollectionId<T: Config> =
- StorageMap<_, Twox64Concat, CollectionId, RmrkCollectionId, ValueQuery>;
#[pallet::pallet]
#[pallet::generate_store(pub(super) trait Store)]
@@ -158,6 +155,8 @@
NftTypeEncodeError,
RmrkPropertyKeyIsTooLong,
RmrkPropertyValueIsTooLong,
+ RmrkPropertyIsNotFound,
+ UnableToDecodeRmrkData,
/* RMRK compatible events */
CollectionNotEmpty,
@@ -171,7 +170,9 @@
CannotSendToDescendentOrSelf,
CannotAcceptNonOwnedNft,
CannotRejectNonOwnedNft,
+ CannotRejectNonPendingNft,
ResourceNotPending,
+ NoAvailableResourceId,
}
#[pallet::call]
@@ -202,7 +203,7 @@
permissions: Some(CollectionPermissions {
nesting: Some(NestingPermissions {
token_owner: true,
- admin: false,
+ collection_admin: false,
restricted: None,
permissive: false,
@@ -224,8 +225,13 @@
let rmrk_collection_id = <CollectionIndex<T>>::get();
<UniqueCollectionId<T>>::insert(rmrk_collection_id, unique_collection_id);
- <RmrkInernalCollectionId<T>>::insert(unique_collection_id, rmrk_collection_id);
+ <PalletCommon<T>>::set_scoped_collection_property(
+ unique_collection_id,
+ PropertyScope::Rmrk,
+ Self::rmrk_property(RmrkInternalCollectionId, &rmrk_collection_id)?,
+ )?;
+
<CollectionIndex<T>>::mutate(|n| *n += 1);
Self::deposit_event(Event::CollectionCreated {
@@ -237,8 +243,8 @@
}
/// destroy collection
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::destroy_collection())]
pub fn destroy_collection(
origin: OriginFor<T>,
collection_id: RmrkCollectionId,
@@ -269,8 +275,8 @@
/// - `origin`: sender of the transaction
/// - `collection_id`: collection id of the nft to change issuer of
/// - `new_issuer`: Collection's new issuer
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::change_collection_issuer())]
pub fn change_collection_issuer(
origin: OriginFor<T>,
collection_id: RmrkCollectionId,
@@ -300,8 +306,8 @@
}
/// lock collection
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::lock_collection())]
pub fn lock_collection(
origin: OriginFor<T>,
collection_id: RmrkCollectionId,
@@ -341,19 +347,22 @@
/// - `royalty`: Permillage reward from each trade for the Recipient
/// - `metadata`: Arbitrary data about an nft, e.g. IPFS hash
/// - `transferable`: Ability to transfer this NFT
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::mint_nft(resources.as_ref().map(|r| r.len() as u32).unwrap_or(0)))]
pub fn mint_nft(
origin: OriginFor<T>,
- owner: T::AccountId,
+ owner: Option<T::AccountId>,
collection_id: RmrkCollectionId,
recipient: Option<T::AccountId>,
royalty_amount: Option<Permill>,
metadata: RmrkString,
transferable: bool,
+ resources: Option<BoundedVec<RmrkResourceTypes, MaxResourcesOnMint>>,
) -> DispatchResult {
let sender = ensure_signed(origin)?;
- let sender = T::CrossAccountId::from_sub(sender);
+ let cross_sender = T::CrossAccountId::from_sub(sender.clone());
+
+ let owner = owner.unwrap_or(sender.clone());
let cross_owner = T::CrossAccountId::from_sub(owner.clone());
let collection = Self::get_typed_nft_collection(
@@ -368,7 +377,7 @@
});
let nft_id = Self::create_nft(
- &sender,
+ &cross_sender,
&cross_owner,
&collection,
[
@@ -378,21 +387,8 @@
Self::rmrk_property(RoyaltyInfo, &royalty_info)?,
Self::rmrk_property(Metadata, &metadata)?,
Self::rmrk_property(Equipped, &false)?,
- Self::rmrk_property(
- ResourceCollection,
- &Self::init_collection(
- sender.clone(),
- CreateCollectionData {
- ..Default::default()
- },
- [Self::rmrk_property(
- CollectionType,
- &misc::CollectionType::Resource,
- )?]
- .into_iter(),
- )?,
- )?, // todo possibly add limits to the collection if rmrk warrants them
Self::rmrk_property(ResourcePriorities, &<Vec<u8>>::new())?,
+ Self::rmrk_property(NextResourceId, &(0 as RmrkResourceId))?,
]
.into_iter(),
)
@@ -401,6 +397,12 @@
err => Self::map_unique_err_to_proxy(err),
})?;
+ if let Some(resources) = resources {
+ for resource in resources {
+ Self::resource_add(sender.clone(), collection.id, nft_id, resource)?;
+ }
+ }
+
Self::deposit_event(Event::NftMinted {
owner,
collection_id,
@@ -411,12 +413,13 @@
}
/// burn nft
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::burn_nft(*max_burns))]
pub fn burn_nft(
origin: OriginFor<T>,
collection_id: RmrkCollectionId,
nft_id: RmrkNftId,
+ max_burns: u32,
) -> DispatchResult {
let sender = ensure_signed(origin)?;
let cross_sender = T::CrossAccountId::from_sub(sender.clone());
@@ -431,8 +434,10 @@
cross_sender,
Self::unique_collection_id(collection_id)?,
nft_id.into(),
+ max_burns,
+ <Error<T>>::NoPermission,
)
- .map_err(Self::map_unique_err_to_proxy)?;
+ .map_err(|err| Self::map_unique_err_to_proxy(err.error))?;
Self::deposit_event(Event::NFTBurned {
owner: sender,
@@ -449,8 +454,8 @@
/// - `rmrk_collection_id`: collection id of the nft to be transferred
/// - `rmrk_nft_id`: nft id of the nft to be transferred
/// - `new_owner`: new owner of the nft which can be either an account or a NFT
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::send())]
pub fn send(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
@@ -561,8 +566,8 @@
/// - `rmrk_nft_id`: nft id of the nft to be accepted
/// - `new_owner`: either origin's account ID or origin-owned NFT, whichever the NFT was
/// sent to
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::accept_nft())]
pub fn accept_nft(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
@@ -636,8 +641,8 @@
/// - `origin`: sender of the transaction
/// - `rmrk_collection_id`: collection id of the nft to be accepted
/// - `rmrk_nft_id`: nft id of the nft to be accepted
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::reject_nft())]
pub fn reject_nft(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
@@ -653,15 +658,28 @@
Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
collection.check_is_external()?;
- Self::destroy_nft(cross_sender, collection_id, nft_id).map_err(|err| {
- if err == <CommonError<T>>::NoPermission.into()
- || err == <CommonError<T>>::ApprovedValueTooLow.into()
- {
- <Error<T>>::CannotRejectNonOwnedNft.into()
- } else {
- Self::map_unique_err_to_proxy(err)
- }
- })?;
+ ensure!(
+ <TokenData<T>>::get((collection_id, nft_id)).is_some(),
+ <Error<T>>::NoAvailableNftId
+ );
+
+ ensure!(
+ Self::get_nft_property_decoded(
+ collection_id,
+ nft_id,
+ RmrkProperty::PendingNftAccept
+ )?,
+ <Error<T>>::CannotRejectNonPendingNft
+ );
+
+ Self::destroy_nft(
+ cross_sender,
+ collection_id,
+ nft_id,
+ NESTING_BUDGET,
+ <Error<T>>::CannotRejectNonOwnedNft,
+ )
+ .map_err(|err| Self::map_unique_err_to_proxy(err.error))?;
Self::deposit_event(Event::NFTRejected {
sender,
@@ -673,13 +691,13 @@
}
/// accept the addition of a new resource to an existing NFT
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::accept_resource())]
pub fn accept_resource(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
rmrk_nft_id: RmrkNftId,
- rmrk_resource_id: RmrkResourceId,
+ resource_id: RmrkResourceId,
) -> DispatchResult {
let sender = ensure_signed(origin)?;
let cross_sender = T::CrossAccountId::from_sub(sender);
@@ -691,7 +709,6 @@
collection.check_is_external()?;
let nft_id = rmrk_nft_id.into();
- let resource_id = rmrk_resource_id.into();
let budget = budget::Value::new(NESTING_BUDGET);
@@ -699,44 +716,31 @@
<PalletStructure<T>>::find_topmost_owner(collection_id, nft_id, &budget)
.map_err(|_| <Error<T>>::ResourceDoesntExist)?;
- let resource_collection_id: CollectionId =
- Self::get_nft_property_decoded(collection_id, nft_id, ResourceCollection)
- .map_err(|_| <Error<T>>::ResourceDoesntExist)?;
-
- let is_pending: bool = Self::get_nft_property_decoded(
- resource_collection_id,
- resource_id,
- PendingResourceAccept,
- )
- .map_err(|_| <Error<T>>::ResourceDoesntExist)?;
-
- ensure!(is_pending, <Error<T>>::ResourceNotPending);
+ Self::try_mutate_resource_info(collection_id, nft_id, resource_id, |res| {
+ ensure!(res.pending, <Error<T>>::ResourceNotPending);
+ ensure!(cross_sender == nft_owner, <Error<T>>::NoPermission);
- ensure!(cross_sender == nft_owner, <Error<T>>::NoPermission);
+ res.pending = false;
- <PalletNft<T>>::set_scoped_token_property(
- resource_collection_id,
- rmrk_resource_id.into(),
- PropertyScope::Rmrk,
- Self::rmrk_property(PendingResourceAccept, &false)?,
- )?;
+ Ok(())
+ })?;
Self::deposit_event(Event::<T>::ResourceAccepted {
nft_id: rmrk_nft_id,
- resource_id: rmrk_resource_id,
+ resource_id,
});
Ok(())
}
/// accept the removal of a resource of an existing NFT
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::accept_resource_removal())]
pub fn accept_resource_removal(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
rmrk_nft_id: RmrkNftId,
- rmrk_resource_id: RmrkResourceId,
+ resource_id: RmrkResourceId,
) -> DispatchResult {
let sender = ensure_signed(origin)?;
let cross_sender = T::CrossAccountId::from_sub(sender);
@@ -748,7 +752,6 @@
collection.check_is_external()?;
let nft_id = rmrk_nft_id.into();
- let resource_id = rmrk_resource_id.into();
let budget = budget::Value::new(NESTING_BUDGET);
@@ -758,38 +761,41 @@
ensure!(cross_sender == nft_owner, <Error<T>>::NoPermission);
- let resource_collection_id: CollectionId =
- Self::get_nft_property_decoded(collection_id, nft_id, ResourceCollection)
- .map_err(|_| <Error<T>>::ResourceDoesntExist)?;
+ let resource_id_key = Self::rmrk_property_key(ResourceId(resource_id))?;
- let is_pending: bool = Self::get_nft_property_decoded(
- resource_collection_id,
- resource_id,
- PendingResourceRemoval,
- )
- .map_err(|_| <Error<T>>::ResourceDoesntExist)?;
+ let resource_info = <PalletNft<T>>::token_aux_property((
+ collection_id,
+ nft_id,
+ PropertyScope::Rmrk,
+ resource_id_key.clone(),
+ ))
+ .ok_or(<Error<T>>::ResourceDoesntExist)?;
- ensure!(is_pending, <Error<T>>::ResourceNotPending);
+ let resource_info: RmrkResourceInfo = Self::decode_property(&resource_info)?;
- let resource_collection = Self::get_typed_nft_collection(
- resource_collection_id,
- misc::CollectionType::Resource,
- )?;
+ ensure!(
+ resource_info.pending_removal,
+ <Error<T>>::ResourceNotPending
+ );
- <PalletNft<T>>::burn(&resource_collection, &cross_sender, rmrk_resource_id.into())
- .map_err(Self::map_unique_err_to_proxy)?;
+ <PalletNft<T>>::remove_token_aux_property(
+ collection_id,
+ nft_id,
+ PropertyScope::Rmrk,
+ resource_id_key,
+ );
Self::deposit_event(Event::<T>::ResourceRemovalAccepted {
nft_id: rmrk_nft_id,
- resource_id: rmrk_resource_id,
+ resource_id,
});
Ok(())
}
/// set a custom value on an NFT
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::set_property())]
pub fn set_property(
origin: OriginFor<T>,
#[pallet::compact] rmrk_collection_id: RmrkCollectionId,
@@ -848,8 +854,8 @@
}
/// set a different order of resource priority
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::set_priority())]
pub fn set_priority(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
@@ -887,8 +893,8 @@
}
/// Create basic resource
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::add_basic_resource())]
pub fn add_basic_resource(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
@@ -906,15 +912,7 @@
sender,
collection_id,
nft_id.into(),
- [
- Self::rmrk_property(TokenType, &NftType::Resource)?,
- Self::rmrk_property(ResourceType, &misc::ResourceType::Basic)?,
- Self::rmrk_property(Src, &resource.src)?,
- Self::rmrk_property(Metadata, &resource.metadata)?,
- Self::rmrk_property(License, &resource.license)?,
- Self::rmrk_property(Thumb, &resource.thumb)?,
- ]
- .into_iter(),
+ RmrkResourceTypes::Basic(resource),
)?;
Self::deposit_event(Event::ResourceAdded {
@@ -925,13 +923,12 @@
}
/// Create composable resource
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::add_composable_resource())]
pub fn add_composable_resource(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
nft_id: RmrkNftId,
- _resource_id: RmrkBoundedResource,
resource: RmrkComposableResource,
) -> DispatchResult {
let sender = ensure_signed(origin.clone())?;
@@ -945,17 +942,7 @@
sender,
collection_id,
nft_id.into(),
- [
- Self::rmrk_property(TokenType, &NftType::Resource)?,
- Self::rmrk_property(ResourceType, &misc::ResourceType::Composable)?,
- Self::rmrk_property(Parts, &resource.parts)?,
- Self::rmrk_property(Base, &resource.base)?,
- Self::rmrk_property(Src, &resource.src)?,
- Self::rmrk_property(Metadata, &resource.metadata)?,
- Self::rmrk_property(License, &resource.license)?,
- Self::rmrk_property(Thumb, &resource.thumb)?,
- ]
- .into_iter(),
+ RmrkResourceTypes::Composable(resource),
)?;
Self::deposit_event(Event::ResourceAdded {
@@ -966,8 +953,8 @@
}
/// Create slot resource
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::add_slot_resource())]
pub fn add_slot_resource(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
@@ -985,17 +972,7 @@
sender,
collection_id,
nft_id.into(),
- [
- Self::rmrk_property(TokenType, &NftType::Resource)?,
- Self::rmrk_property(ResourceType, &misc::ResourceType::Slot)?,
- Self::rmrk_property(Base, &resource.base)?,
- Self::rmrk_property(Src, &resource.src)?,
- Self::rmrk_property(Metadata, &resource.metadata)?,
- Self::rmrk_property(Slot, &resource.slot)?,
- Self::rmrk_property(License, &resource.license)?,
- Self::rmrk_property(Thumb, &resource.thumb)?,
- ]
- .into_iter(),
+ RmrkResourceTypes::Slot(resource),
)?;
Self::deposit_event(Event::ResourceAdded {
@@ -1006,8 +983,8 @@
}
/// remove resource
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::remove_resource())]
pub fn remove_resource(
origin: OriginFor<T>,
rmrk_collection_id: RmrkCollectionId,
@@ -1021,7 +998,7 @@
Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
collection.check_is_external()?;
- Self::resource_remove(sender, collection_id, nft_id.into(), resource_id.into())?;
+ Self::resource_remove(sender, collection_id, nft_id.into(), resource_id)?;
Self::deposit_event(Event::ResourceRemoval {
nft_id,
@@ -1050,19 +1027,29 @@
) -> Result<Property, DispatchError> {
let key = rmrk_key.to_key::<T>()?;
+ let value = Self::encode_property(value)?;
+
+ let property = Property { key, value };
+
+ Ok(property)
+ }
+
+ pub fn encode_property<E: Encode, S: Get<u32>>(
+ value: &E,
+ ) -> Result<BoundedBytes<S>, DispatchError> {
let value = value
.encode()
.try_into()
.map_err(|_| <Error<T>>::RmrkPropertyValueIsTooLong)?;
- let property = Property { key, value };
-
- Ok(property)
+ Ok(value)
}
- pub fn decode_property<D: Decode>(vec: PropertyValue) -> Result<D, DispatchError> {
+ pub fn decode_property<D: Decode, S: Get<u32>>(
+ vec: &BoundedBytes<S>,
+ ) -> Result<D, DispatchError> {
vec.decode()
- .map_err(|_| <Error<T>>::RmrkPropertyValueIsTooLong.into())
+ .map_err(|_| <Error<T>>::UnableToDecodeRmrkData.into())
}
pub fn rebind<L, S>(vec: &BoundedVec<u8, L>) -> Result<BoundedVec<u8, S>, DispatchError>
@@ -1124,7 +1111,9 @@
sender: T::CrossAccountId,
collection_id: CollectionId,
token_id: TokenId,
- ) -> DispatchResult {
+ max_burns: u32,
+ error_if_not_owned: Error<T>,
+ ) -> DispatchResultWithPostInfo {
let collection =
Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
@@ -1133,16 +1122,57 @@
let from = token_data.owner;
- let budget = budget::Value::new(NESTING_BUDGET);
+ let owner_check_budget = budget::Value::new(NESTING_BUDGET);
- <PalletNft<T>>::burn_from(&collection, &sender, &from, token_id, &budget)
+ ensure!(
+ <PalletStructure<T>>::check_indirectly_owned(
+ sender.clone(),
+ collection_id,
+ token_id,
+ None,
+ &owner_check_budget
+ )?,
+ error_if_not_owned,
+ );
+
+ let burns_budget = budget::Value::new(max_burns);
+ let breadth_budget = budget::Value::new(max_burns);
+
+ <PalletNft<T>>::burn_recursively(
+ &collection,
+ &from,
+ token_id,
+ &burns_budget,
+ &breadth_budget,
+ )
}
+ fn acquire_next_resource_id(
+ collection_id: CollectionId,
+ nft_id: TokenId,
+ ) -> Result<RmrkResourceId, DispatchError> {
+ let resource_id: RmrkResourceId =
+ Self::get_nft_property_decoded(collection_id, nft_id, NextResourceId)?;
+
+ let next_id = resource_id
+ .checked_add(1)
+ .ok_or(<Error<T>>::NoAvailableResourceId)?;
+
+ <PalletNft<T>>::set_scoped_token_property(
+ collection_id,
+ nft_id,
+ PropertyScope::Rmrk,
+ Self::rmrk_property(NextResourceId, &next_id)?,
+ )?;
+
+ Ok(resource_id)
+ }
+
fn resource_add(
sender: T::AccountId,
collection_id: CollectionId,
- token_id: TokenId,
- resource_properties: impl Iterator<Item = Property>,
+ nft_id: TokenId,
+ resource: RmrkResourceTypes,
) -> Result<RmrkResourceId, DispatchError> {
let collection =
Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
@@ -1151,77 +1181,108 @@
let sender = T::CrossAccountId::from_sub(sender);
let budget = budget::Value::new(NESTING_BUDGET);
- let nft_owner = <PalletStructure<T>>::find_topmost_owner(collection_id, token_id, &budget)
+ let nft_owner = <PalletStructure<T>>::find_topmost_owner(collection_id, nft_id, &budget)
.map_err(Self::map_unique_err_to_proxy)?;
let pending = sender != nft_owner;
- let resource_collection_id: CollectionId =
- Self::get_nft_property_decoded(collection_id, token_id, ResourceCollection)?;
- let resource_collection =
- Self::get_typed_nft_collection(resource_collection_id, misc::CollectionType::Resource)?;
+ let id = Self::acquire_next_resource_id(collection_id, nft_id)?;
- // todo probably add extra connections to bases, slots, etc., when RMRK starts to use them
+ let resource_info = RmrkResourceInfo {
+ id,
+ resource,
+ pending,
+ pending_removal: false,
+ };
- let resource_id = Self::create_nft(
- &sender,
- &nft_owner,
- &resource_collection,
- resource_properties.chain(
- [
- Self::rmrk_property(PendingResourceAccept, &pending)?,
- Self::rmrk_property(PendingResourceRemoval, &false)?,
- ]
- .into_iter(),
- ),
- )
- .map_err(|err| match err {
- DispatchError::Arithmetic(_) => <Error<T>>::NoAvailableNftId.into(),
- err => Self::map_unique_err_to_proxy(err),
- })?;
+ <PalletNft<T>>::try_mutate_token_aux_property(
+ collection_id,
+ nft_id,
+ PropertyScope::Rmrk,
+ Self::rmrk_property_key(ResourceId(id))?,
+ |value| -> DispatchResult {
+ *value = Some(Self::encode_property(&resource_info)?);
- Ok(resource_id.0)
+ Ok(())
+ },
+ )?;
+
+ Ok(id)
}
fn resource_remove(
sender: T::AccountId,
collection_id: CollectionId,
nft_id: TokenId,
- resource_id: TokenId,
+ resource_id: RmrkResourceId,
) -> DispatchResult {
let collection =
Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
ensure!(collection.owner == sender, Error::<T>::NoPermission);
- let resource_collection_id: CollectionId =
- Self::get_nft_property_decoded(collection_id, nft_id, ResourceCollection)?;
- let resource_collection =
- Self::get_typed_nft_collection(resource_collection_id, misc::CollectionType::Resource)?;
+ let resource_id_key = Self::rmrk_property_key(ResourceId(resource_id))?;
+ let scope = PropertyScope::Rmrk;
+
ensure!(
- <PalletNft<T>>::token_exists(&resource_collection, resource_id),
- Error::<T>::ResourceDoesntExist
+ <PalletNft<T>>::token_aux_property((
+ collection_id,
+ nft_id,
+ scope,
+ resource_id_key.clone()
+ ))
+ .is_some(),
+ <Error<T>>::ResourceDoesntExist
);
- let budget = up_data_structs::budget::Value::new(10);
+ let budget = up_data_structs::budget::Value::new(NESTING_BUDGET);
let topmost_owner =
<PalletStructure<T>>::find_topmost_owner(collection_id, nft_id, &budget)?;
let sender = T::CrossAccountId::from_sub(sender);
if topmost_owner == sender {
- <PalletNft<T>>::burn(&resource_collection, &sender, resource_id)
- .map_err(Self::map_unique_err_to_proxy)?;
+ <PalletNft<T>>::remove_token_aux_property(
+ collection_id,
+ nft_id,
+ PropertyScope::Rmrk,
+ Self::rmrk_property_key(ResourceId(resource_id))?,
+ );
} else {
- <PalletNft<T>>::set_scoped_token_property(
- resource_collection_id,
- resource_id,
- PropertyScope::Rmrk,
- Self::rmrk_property(PendingResourceRemoval, &true)?,
- )?;
+ Self::try_mutate_resource_info(collection_id, nft_id, resource_id, |res| {
+ res.pending_removal = true;
+
+ Ok(())
+ })?;
}
Ok(())
}
+ fn try_mutate_resource_info(
+ collection_id: CollectionId,
+ nft_id: TokenId,
+ resource_id: RmrkResourceId,
+ f: impl FnOnce(&mut RmrkResourceInfo) -> DispatchResult,
+ ) -> DispatchResult {
+ <PalletNft<T>>::try_mutate_token_aux_property(
+ collection_id,
+ nft_id,
+ PropertyScope::Rmrk,
+ Self::rmrk_property_key(ResourceId(resource_id))?,
+ |value| match value {
+ Some(value) => {
+ let mut resource_info: RmrkResourceInfo = Self::decode_property(value)?;
+
+ f(&mut resource_info)?;
+
+ *value = Self::encode_property(&resource_info)?;
+
+ Ok(())
+ }
+ None => Err(<Error<T>>::ResourceDoesntExist.into()),
+ },
+ )
+ }
+
fn change_collection_owner(
collection_id: CollectionId,
collection_type: misc::CollectionType,
@@ -1237,7 +1298,7 @@
collection.save()
}
- fn check_collection_owner(
+ pub fn check_collection_owner(
collection: &NonfungibleHandle<T>,
account: &T::CrossAccountId,
) -> DispatchResult {
@@ -1260,8 +1321,7 @@
pub fn rmrk_collection_id(
unique_collection_id: CollectionId,
) -> Result<RmrkCollectionId, DispatchError> {
- <RmrkInernalCollectionId<T>>::try_get(unique_collection_id)
- .map_err(|_| <Error<T>>::CollectionUnknown.into())
+ Self::get_collection_property_decoded(unique_collection_id, RmrkInternalCollectionId)
}
pub fn get_nft_collection(
@@ -1296,14 +1356,19 @@
collection_id: CollectionId,
key: RmrkProperty,
) -> Result<V, DispatchError> {
- Self::decode_property(Self::get_collection_property(collection_id, key)?)
+ Self::decode_property(&Self::get_collection_property(collection_id, key)?)
}
pub fn get_collection_type(
collection_id: CollectionId,
) -> Result<misc::CollectionType, DispatchError> {
- Self::get_collection_property_decoded(collection_id, CollectionType)
- .map_err(|_| <Error<T>>::CorruptedCollectionType.into())
+ Self::get_collection_property_decoded(collection_id, CollectionType).map_err(|err| {
+ if err != <Error<T>>::CollectionUnknown.into() {
+ <Error<T>>::CorruptedCollectionType.into()
+ } else {
+ err
+ }
+ })
}
pub fn ensure_collection_type(
@@ -1349,7 +1414,7 @@
) -> Result<PropertyValue, DispatchError> {
let nft_property = <PalletNft<T>>::token_properties((collection_id, nft_id))
.get(&Self::rmrk_property_key(key)?)
- .ok_or(<Error<T>>::NoAvailableNftId)? // todo replace with better error?
+ .ok_or(<Error<T>>::RmrkPropertyIsNotFound)?
.clone();
Ok(nft_property)
@@ -1360,7 +1425,7 @@
nft_id: TokenId,
key: RmrkProperty,
) -> Result<V, DispatchError> {
- Self::decode_property(Self::get_nft_property(collection_id, nft_id, key)?)
+ Self::decode_property(&Self::get_nft_property(collection_id, nft_id, key)?)
}
pub fn nft_exists(collection_id: CollectionId, nft_id: TokenId) -> bool {
pallets/proxy-rmrk-core/src/misc.rsdiffbeforeafterboth--- a/pallets/proxy-rmrk-core/src/misc.rs
+++ b/pallets/proxy-rmrk-core/src/misc.rs
@@ -61,22 +61,13 @@
#[derive(Encode, Decode, PartialEq, Eq)]
pub enum CollectionType {
Regular,
- Resource,
Base,
}
#[derive(Encode, Decode, PartialEq, Eq)]
pub enum NftType {
Regular,
- Resource,
FixedPart,
SlotPart,
Theme,
-}
-
-#[derive(Encode, Decode, PartialEq, Eq)]
-pub enum ResourceType {
- Basic,
- Composable,
- Slot,
}
pallets/proxy-rmrk-core/src/property.rsdiffbeforeafterboth--- a/pallets/proxy-rmrk-core/src/property.rs
+++ b/pallets/proxy-rmrk-core/src/property.rs
@@ -17,25 +17,23 @@
use super::*;
use core::convert::AsRef;
+const RESOURCE_ID_PREFIX: &str = "rsid-";
+
pub enum RmrkProperty<'r> {
Metadata,
CollectionType,
+ RmrkInternalCollectionId,
TokenType,
Transferable,
RoyaltyInfo,
Equipped,
- ResourceCollection,
ResourcePriorities,
- ResourceType,
+ NextResourceId,
+ ResourceId(RmrkResourceId),
PendingNftAccept,
- PendingResourceAccept,
- PendingResourceRemoval,
Parts,
Base,
Src,
- Slot,
- License,
- Thumb,
EquippedNft,
BaseType,
ExternalPartId,
@@ -66,22 +64,18 @@
match self {
Self::Metadata => key!("metadata"),
Self::CollectionType => key!("collection-type"),
+ Self::RmrkInternalCollectionId => key!("internal-id"),
Self::TokenType => key!("token-type"),
Self::Transferable => key!("transferable"),
Self::RoyaltyInfo => key!("royalty-info"),
Self::Equipped => key!("equipped"),
- Self::ResourceCollection => key!("resource-collection"),
Self::ResourcePriorities => key!("resource-priorities"),
- Self::ResourceType => key!("resource-type"),
+ Self::NextResourceId => key!("next-resource-id"),
+ Self::ResourceId(id) => key!(RESOURCE_ID_PREFIX, id.to_le_bytes()),
Self::PendingNftAccept => key!("pending-nft-accept"),
- Self::PendingResourceAccept => key!("pending-resource-accept"),
- Self::PendingResourceRemoval => key!("pending-resource-removal"),
Self::Parts => key!("parts"),
Self::Base => key!("base"),
Self::Src => key!("src"),
- Self::Slot => key!("slot"),
- Self::License => key!("license"),
- Self::Thumb => key!("thumb"),
Self::EquippedNft => key!("equipped-nft"),
Self::BaseType => key!("base-type"),
Self::ExternalPartId => key!("ext-part-id"),
pallets/proxy-rmrk-core/src/rpc.rsdiffbeforeafterboth--- /dev/null
+++ b/pallets/proxy-rmrk-core/src/rpc.rs
@@ -0,0 +1,265 @@
+use super::*;
+
+pub fn last_collection_idx<T: Config>() -> Result<RmrkCollectionId, DispatchError> {
+ Ok(<Pallet<T>>::last_collection_idx())
+}
+
+pub fn collection_by_id<T: Config>(
+ collection_id: RmrkCollectionId,
+) -> Result<Option<RmrkCollectionInfo<T::AccountId>>, DispatchError> {
+ let (collection, collection_id) = match <Pallet<T>>::get_typed_nft_collection_mapped(
+ collection_id,
+ misc::CollectionType::Regular,
+ ) {
+ Ok(c) => c,
+ Err(_) => return Ok(None),
+ };
+
+ let nfts_count = collection.total_supply();
+
+ Ok(Some(RmrkCollectionInfo {
+ issuer: collection.owner.clone(),
+ metadata: <Pallet<T>>::get_collection_property_decoded(
+ collection_id,
+ RmrkProperty::Metadata,
+ )?,
+ max: collection.limits.token_limit,
+ symbol: <Pallet<T>>::rebind(&collection.token_prefix)?,
+ nfts_count,
+ }))
+}
+
+pub fn nft_by_id<T: Config>(
+ collection_id: RmrkCollectionId,
+ nft_by_id: RmrkNftId,
+) -> Result<Option<RmrkInstanceInfo<T::AccountId>>, DispatchError> {
+ let (collection, collection_id) = match <Pallet<T>>::get_typed_nft_collection_mapped(
+ collection_id,
+ misc::CollectionType::Regular,
+ ) {
+ Ok(c) => c,
+ Err(_) => return Ok(None),
+ };
+
+ let nft_id = TokenId(nft_by_id);
+ if !<Pallet<T>>::nft_exists(collection_id, nft_id) {
+ return Ok(None);
+ }
+
+ let owner = match collection.token_owner(nft_id) {
+ Some(owner) => match T::CrossTokenAddressMapping::address_to_token(&owner) {
+ Some((col, tok)) => {
+ let rmrk_collection = <Pallet<T>>::rmrk_collection_id(col)?;
+
+ RmrkAccountIdOrCollectionNftTuple::CollectionAndNftTuple(rmrk_collection, tok.0)
+ }
+ None => RmrkAccountIdOrCollectionNftTuple::AccountId(owner.as_sub().clone()),
+ },
+ None => return Ok(None),
+ };
+
+ Ok(Some(RmrkInstanceInfo {
+ owner: owner,
+ royalty: <Pallet<T>>::get_nft_property_decoded(
+ collection_id,
+ nft_id,
+ RmrkProperty::RoyaltyInfo,
+ )?,
+ metadata: <Pallet<T>>::get_nft_property_decoded(
+ collection_id,
+ nft_id,
+ RmrkProperty::Metadata,
+ )?,
+ equipped: <Pallet<T>>::get_nft_property_decoded(
+ collection_id,
+ nft_id,
+ RmrkProperty::Equipped,
+ )?,
+ pending: <Pallet<T>>::get_nft_property_decoded(
+ collection_id,
+ nft_id,
+ RmrkProperty::PendingNftAccept,
+ )?,
+ }))
+}
+
+pub fn account_tokens<T: Config>(
+ account_id: T::AccountId,
+ collection_id: RmrkCollectionId,
+) -> Result<Vec<RmrkNftId>, DispatchError> {
+ let cross_account_id = CrossAccountId::from_sub(account_id);
+
+ let (collection, collection_id) = match <Pallet<T>>::get_typed_nft_collection_mapped(
+ collection_id,
+ misc::CollectionType::Regular,
+ ) {
+ Ok(c) => c,
+ Err(_) => return Ok(Vec::new()),
+ };
+
+ let tokens = collection
+ .account_tokens(cross_account_id)
+ .into_iter()
+ .filter(|token| {
+ let is_pending = <Pallet<T>>::get_nft_property_decoded(
+ collection_id,
+ *token,
+ RmrkProperty::PendingNftAccept,
+ )
+ .unwrap_or(true);
+
+ !is_pending
+ })
+ .map(|token| token.0)
+ .collect();
+
+ Ok(tokens)
+}
+
+pub fn nft_children<T: Config>(
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+) -> Result<Vec<RmrkNftChild>, DispatchError> {
+ let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+ Ok(id) => id,
+ Err(_) => return Ok(Vec::new()),
+ };
+ let nft_id = TokenId(nft_id);
+ if !<Pallet<T>>::nft_exists(collection_id, nft_id) {
+ return Ok(Vec::new());
+ }
+
+ Ok(
+ pallet_nonfungible::TokenChildren::<T>::iter_prefix((collection_id, nft_id))
+ .filter_map(|((child_collection, child_token), _)| {
+ let is_pending = <Pallet<T>>::get_nft_property_decoded(
+ child_collection,
+ child_token,
+ RmrkProperty::PendingNftAccept,
+ )
+ .ok()?;
+
+ if is_pending {
+ return None;
+ }
+
+ let rmrk_child_collection =
+ <Pallet<T>>::rmrk_collection_id(child_collection).ok()?;
+
+ Some(RmrkNftChild {
+ collection_id: rmrk_child_collection,
+ nft_id: child_token.0,
+ })
+ })
+ .collect(),
+ )
+}
+
+pub fn collection_properties<T: Config>(
+ collection_id: RmrkCollectionId,
+ filter_keys: Option<Vec<RmrkPropertyKey>>,
+) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+ let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+ Ok(id) => id,
+ Err(_) => return Ok(Vec::new()),
+ };
+ if <Pallet<T>>::ensure_collection_type(collection_id, misc::CollectionType::Regular).is_err() {
+ return Ok(Vec::new());
+ }
+
+ let properties = <Pallet<T>>::filter_user_properties(
+ collection_id,
+ /* token_id = */ None,
+ filter_keys,
+ |key, value| RmrkPropertyInfo { key, value },
+ )?;
+
+ Ok(properties)
+}
+
+pub fn nft_properties<T: Config>(
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+ filter_keys: Option<Vec<RmrkPropertyKey>>,
+) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+ let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+ Ok(id) => id,
+ Err(_) => return Ok(Vec::new()),
+ };
+ let token_id = TokenId(nft_id);
+
+ if <Pallet<T>>::ensure_nft_type(collection_id, token_id, NftType::Regular).is_err() {
+ return Ok(Vec::new());
+ }
+
+ let properties = <Pallet<T>>::filter_user_properties(
+ collection_id,
+ Some(token_id),
+ filter_keys,
+ |key, value| RmrkPropertyInfo { key, value },
+ )?;
+
+ Ok(properties)
+}
+
+pub fn nft_resources<T: Config>(
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
+ let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+ Ok(id) => id,
+ Err(_) => return Ok(Vec::new()),
+ };
+ if <Pallet<T>>::ensure_collection_type(collection_id, misc::CollectionType::Regular).is_err() {
+ return Ok(Vec::new());
+ }
+
+ let nft_id = TokenId(nft_id);
+ if <Pallet<T>>::ensure_nft_type(collection_id, nft_id, NftType::Regular).is_err() {
+ return Ok(Vec::new());
+ }
+
+ let resources = <pallet_nonfungible::Pallet<T>>::iterate_token_aux_properties(
+ collection_id,
+ nft_id,
+ PropertyScope::Rmrk,
+ )
+ .filter_map(|(_, value)| {
+ let resource_info: RmrkResourceInfo = <Pallet<T>>::decode_property(&value).ok()?;
+
+ Some(resource_info)
+ })
+ .collect();
+
+ Ok(resources)
+}
+
+pub fn nft_resource_priority<T: Config>(
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+ resource_id: RmrkResourceId,
+) -> Result<Option<u32>, DispatchError> {
+ let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+ Ok(id) => id,
+ Err(_) => return Ok(None),
+ };
+ if <Pallet<T>>::ensure_collection_type(collection_id, misc::CollectionType::Regular).is_err() {
+ return Ok(None);
+ }
+
+ let nft_id = TokenId(nft_id);
+ if <Pallet<T>>::ensure_nft_type(collection_id, nft_id, NftType::Regular).is_err() {
+ return Ok(None);
+ }
+
+ let priorities: Vec<_> = <Pallet<T>>::get_nft_property_decoded(
+ collection_id,
+ nft_id,
+ RmrkProperty::ResourcePriorities,
+ )?;
+ Ok(priorities
+ .into_iter()
+ .enumerate()
+ .find(|(_, id)| *id == resource_id)
+ .map(|(priority, _): (usize, RmrkResourceId)| priority as u32))
+}
pallets/proxy-rmrk-core/src/weights.rsdiffbeforeafterboth--- a/pallets/proxy-rmrk-core/src/weights.rs
+++ b/pallets/proxy-rmrk-core/src/weights.rs
@@ -3,7 +3,7 @@
//! Autogenerated weights for pallet_proxy_rmrk_core
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-06-09, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-17, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
@@ -19,7 +19,7 @@
// --template
// .maintain/frame-weight-template.hbs
// --steps=50
-// --repeat=200
+// --repeat=80
// --heap-pages=4096
// --output=./pallets/proxy-rmrk-core/src/weights.rs
@@ -34,6 +34,22 @@
/// Weight functions needed for pallet_proxy_rmrk_core.
pub trait WeightInfo {
fn create_collection() -> Weight;
+ fn destroy_collection() -> Weight;
+ fn change_collection_issuer() -> Weight;
+ fn lock_collection() -> Weight;
+ fn mint_nft(b: u32, ) -> Weight;
+ fn burn_nft(b: u32, ) -> Weight;
+ fn send() -> Weight;
+ fn accept_nft() -> Weight;
+ fn reject_nft() -> Weight;
+ fn set_property() -> Weight;
+ fn set_priority() -> Weight;
+ fn add_basic_resource() -> Weight;
+ fn add_composable_resource() -> Weight;
+ fn add_slot_resource() -> Weight;
+ fn remove_resource() -> Weight;
+ fn accept_resource() -> Weight;
+ fn accept_resource_removal() -> Weight;
}
/// Weights for pallet_proxy_rmrk_core using the Substrate node and recommended hardware.
@@ -47,11 +63,204 @@
// Storage: Common CollectionProperties (r:0 w:1)
// Storage: Common CollectionById (r:0 w:1)
// Storage: RmrkCore UniqueCollectionId (r:0 w:1)
- // Storage: RmrkCore RmrkInernalCollectionId (r:0 w:1)
fn create_collection() -> Weight {
- (76_647_000 as Weight)
+ (42_359_000 as Weight)
.saturating_add(T::DbWeight::get().reads(5 as Weight))
- .saturating_add(T::DbWeight::get().writes(9 as Weight))
+ .saturating_add(T::DbWeight::get().writes(8 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:1)
+ // Storage: Common CollectionById (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:1 w:0)
+ // Storage: Common DestroyedCollectionCount (r:1 w:1)
+ // Storage: Nonfungible TokensMinted (r:0 w:1)
+ // Storage: Nonfungible TokensBurnt (r:0 w:1)
+ // Storage: Common AdminAmount (r:0 w:1)
+ fn destroy_collection() -> Weight {
+ (45_375_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(5 as Weight))
+ .saturating_add(T::DbWeight::get().writes(6 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:1)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ fn change_collection_issuer() -> Weight {
+ (22_753_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(3 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:1)
+ // Storage: Nonfungible TokensMinted (r:1 w:0)
+ // Storage: Nonfungible TokensBurnt (r:1 w:0)
+ fn lock_collection() -> Weight {
+ (24_356_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(5 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokensMinted (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:1 w:1)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:1)
+ // Storage: Nonfungible TokenAuxProperties (r:2 w:2)
+ fn mint_nft(b: u32, ) -> Weight {
+ (44_853_000 as Weight)
+ // Standard Error: 2_000
+ .saturating_add((10_721_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(T::DbWeight::get().reads(6 as Weight))
+ .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
+ .saturating_add(T::DbWeight::get().writes(5 as Weight))
+ .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:1 w:1)
+ // Storage: Nonfungible TokenChildren (r:1 w:0)
+ // Storage: Nonfungible TokensBurnt (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:1 w:1)
+ // Storage: Nonfungible Allowance (r:1 w:0)
+ // Storage: Nonfungible Owned (r:0 w:1)
+ // Storage: Nonfungible TokenProperties (r:0 w:1)
+ fn burn_nft(b: u32, ) -> Weight {
+ (0 as Weight)
+ // Standard Error: 1_590_000
+ .saturating_add((319_825_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(T::DbWeight::get().reads(9 as Weight))
+ .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
+ .saturating_add(T::DbWeight::get().writes(6 as Weight))
+ .saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:1)
+ // Storage: Nonfungible TokenProperties (r:1 w:0)
+ // Storage: Nonfungible AccountBalance (r:2 w:2)
+ // Storage: Nonfungible Allowance (r:1 w:0)
+ // Storage: Nonfungible TokenChildren (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:2)
+ fn send() -> Weight {
+ (72_576_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(12 as Weight))
+ .saturating_add(T::DbWeight::get().writes(6 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:2 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:2 w:0)
+ // Storage: Nonfungible TokenData (r:6 w:1)
+ // Storage: Nonfungible AccountBalance (r:2 w:2)
+ // Storage: Nonfungible Allowance (r:1 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenChildren (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:2)
+ fn accept_nft() -> Weight {
+ (79_670_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(15 as Weight))
+ .saturating_add(T::DbWeight::get().writes(7 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:5)
+ // Storage: Nonfungible TokenProperties (r:1 w:5)
+ // Storage: Nonfungible TokenChildren (r:9 w:4)
+ // Storage: Nonfungible TokensBurnt (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:5 w:5)
+ // Storage: Nonfungible Allowance (r:5 w:0)
+ // Storage: Nonfungible Owned (r:0 w:5)
+ fn reject_nft() -> Weight {
+ (254_989_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(29 as Weight))
+ .saturating_add(T::DbWeight::get().writes(25 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ fn set_property() -> Weight {
+ (48_651_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(9 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ fn set_priority() -> Weight {
+ (47_579_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(9 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn add_basic_resource() -> Weight {
+ (55_013_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(10 as Weight))
+ .saturating_add(T::DbWeight::get().writes(2 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn add_composable_resource() -> Weight {
+ (55_184_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(10 as Weight))
+ .saturating_add(T::DbWeight::get().writes(2 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn add_slot_resource() -> Weight {
+ (54_792_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(10 as Weight))
+ .saturating_add(T::DbWeight::get().writes(2 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ fn remove_resource() -> Weight {
+ (46_447_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(9 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn accept_resource() -> Weight {
+ (45_096_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(9 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn accept_resource_removal() -> Weight {
+ (45_445_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(9 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
}
}
@@ -65,10 +274,203 @@
// Storage: Common CollectionProperties (r:0 w:1)
// Storage: Common CollectionById (r:0 w:1)
// Storage: RmrkCore UniqueCollectionId (r:0 w:1)
- // Storage: RmrkCore RmrkInernalCollectionId (r:0 w:1)
fn create_collection() -> Weight {
- (76_647_000 as Weight)
+ (42_359_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(5 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(8 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:1)
+ // Storage: Common CollectionById (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:1 w:0)
+ // Storage: Common DestroyedCollectionCount (r:1 w:1)
+ // Storage: Nonfungible TokensMinted (r:0 w:1)
+ // Storage: Nonfungible TokensBurnt (r:0 w:1)
+ // Storage: Common AdminAmount (r:0 w:1)
+ fn destroy_collection() -> Weight {
+ (45_375_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
- .saturating_add(RocksDbWeight::get().writes(9 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(6 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:1)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ fn change_collection_issuer() -> Weight {
+ (22_753_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(3 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:1)
+ // Storage: Nonfungible TokensMinted (r:1 w:0)
+ // Storage: Nonfungible TokensBurnt (r:1 w:0)
+ fn lock_collection() -> Weight {
+ (24_356_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(5 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokensMinted (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:1 w:1)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:1)
+ // Storage: Nonfungible TokenAuxProperties (r:2 w:2)
+ fn mint_nft(b: u32, ) -> Weight {
+ (44_853_000 as Weight)
+ // Standard Error: 2_000
+ .saturating_add((10_721_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(RocksDbWeight::get().reads(6 as Weight))
+ .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
+ .saturating_add(RocksDbWeight::get().writes(5 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:1 w:1)
+ // Storage: Nonfungible TokenChildren (r:1 w:0)
+ // Storage: Nonfungible TokensBurnt (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:1 w:1)
+ // Storage: Nonfungible Allowance (r:1 w:0)
+ // Storage: Nonfungible Owned (r:0 w:1)
+ // Storage: Nonfungible TokenProperties (r:0 w:1)
+ fn burn_nft(b: u32, ) -> Weight {
+ (0 as Weight)
+ // Standard Error: 1_590_000
+ .saturating_add((319_825_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(RocksDbWeight::get().reads(9 as Weight))
+ .saturating_add(RocksDbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
+ .saturating_add(RocksDbWeight::get().writes(6 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:1)
+ // Storage: Nonfungible TokenProperties (r:1 w:0)
+ // Storage: Nonfungible AccountBalance (r:2 w:2)
+ // Storage: Nonfungible Allowance (r:1 w:0)
+ // Storage: Nonfungible TokenChildren (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:2)
+ fn send() -> Weight {
+ (72_576_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(12 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(6 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:2 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:2 w:0)
+ // Storage: Nonfungible TokenData (r:6 w:1)
+ // Storage: Nonfungible AccountBalance (r:2 w:2)
+ // Storage: Nonfungible Allowance (r:1 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenChildren (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:2)
+ fn accept_nft() -> Weight {
+ (79_670_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(15 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(7 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:5)
+ // Storage: Nonfungible TokenProperties (r:1 w:5)
+ // Storage: Nonfungible TokenChildren (r:9 w:4)
+ // Storage: Nonfungible TokensBurnt (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:5 w:5)
+ // Storage: Nonfungible Allowance (r:5 w:0)
+ // Storage: Nonfungible Owned (r:0 w:5)
+ fn reject_nft() -> Weight {
+ (254_989_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(29 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(25 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ fn set_property() -> Weight {
+ (48_651_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(9 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ fn set_priority() -> Weight {
+ (47_579_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(9 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn add_basic_resource() -> Weight {
+ (55_013_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(10 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(2 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn add_composable_resource() -> Weight {
+ (55_184_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(10 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(2 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn add_slot_resource() -> Weight {
+ (54_792_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(10 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(2 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ fn remove_resource() -> Weight {
+ (46_447_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(9 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn accept_resource() -> Weight {
+ (45_096_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(9 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ }
+ // Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: Nonfungible TokenData (r:5 w:0)
+ // Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+ fn accept_resource_removal() -> Weight {
+ (45_445_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(9 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
}
pallets/proxy-rmrk-equip/src/benchmarking.rsdiffbeforeafterboth--- /dev/null
+++ b/pallets/proxy-rmrk-equip/src/benchmarking.rs
@@ -0,0 +1,120 @@
+use sp_std::vec;
+
+use frame_benchmarking::{benchmarks, account};
+use frame_system::RawOrigin;
+use frame_support::{
+ traits::{Currency, Get},
+ BoundedVec,
+};
+
+use up_data_structs::*;
+
+use super::*;
+
+const SEED: u32 = 1;
+
+fn create_data<S: Get<u32>>() -> BoundedVec<u8, S> {
+ vec![b'A'; S::get() as usize].try_into().expect("size == S")
+}
+
+fn create_u32_array<S: Get<u32>>() -> BoundedVec<u32, S> {
+ vec![0; S::get() as usize].try_into().expect("size == S")
+}
+
+fn create_max_part(id: RmrkSlotId) -> RmrkPartType {
+ RmrkPartType::SlotPart(RmrkSlotPart {
+ id,
+ equippable: RmrkEquippableList::Custom(create_u32_array()),
+ src: create_data(),
+ z: 1,
+ })
+}
+
+fn create_parts_array<S: Get<u32>>(num: u32) -> BoundedVec<RmrkPartType, S> {
+ let mut parts: BoundedVec<RmrkPartType, S> = vec![].try_into().expect("0 <= S");
+
+ for i in 0..num {
+ parts.try_push(create_max_part(i)).expect("num <= S");
+ }
+
+ parts
+}
+
+fn create_max_theme_property() -> RmrkThemeProperty {
+ RmrkThemeProperty {
+ key: create_data(),
+ value: create_data(),
+ }
+}
+
+fn create_theme_properties_array<S: Get<u32>>(num: u32) -> BoundedVec<RmrkThemeProperty, S> {
+ vec![create_max_theme_property(); num as usize]
+ .try_into()
+ .expect("num <= S")
+}
+
+fn create_max_theme(name: RmrkString, props_num: u32) -> RmrkBoundedTheme {
+ RmrkBoundedTheme {
+ name,
+ properties: create_theme_properties_array(props_num),
+ inherit: false,
+ }
+}
+
+benchmarks! {
+ create_base {
+ let b in 0..RmrkPartsLimit::get();
+
+ let caller = account("caller", 0, SEED);
+ <T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
+
+ let base_type = create_data();
+ let symbol = create_data();
+ let parts = create_parts_array(b);
+ }: _(RawOrigin::Signed(caller), base_type, symbol, parts)
+
+ theme_add {
+ let b in 0..MaxPropertiesPerTheme::get();
+
+ let caller = account("caller", 0, SEED);
+ <T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
+
+ let base_type = create_data();
+ let symbol = create_data();
+ let parts = create_parts_array(0);
+
+ <Pallet<T>>::create_base(RawOrigin::Signed(caller.clone()).into(), base_type, symbol, parts)?;
+ let base_id = 1;
+
+
+ let default_theme_name = b"default".to_vec().try_into().expect("default is a valid name; qed");
+ let default_theme = create_max_theme(default_theme_name, 0);
+
+ <Pallet<T>>::theme_add(RawOrigin::Signed(caller.clone()).into(), base_id, default_theme)?;
+
+ let theme = create_max_theme(create_data(), b);
+ }: _(RawOrigin::Signed(caller), base_id, theme)
+
+ equippable {
+ let caller = account("caller", 0, SEED);
+ <T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
+
+ let base_id = 1;
+ let slot_id = 42;
+
+ let base_type = create_data();
+ let symbol = create_data();
+ let parts = vec! {
+ RmrkPartType::SlotPart(RmrkSlotPart {
+ id: slot_id,
+ equippable: RmrkEquippableList::All,
+ src: create_data(),
+ z: 1,
+ })
+ }.try_into().expect("1 <= RmrkPartsLimit");
+
+ <Pallet<T>>::create_base(RawOrigin::Signed(caller.clone()).into(), base_type, symbol, parts)?;
+
+ let equippables = RmrkEquippableList::Custom(create_u32_array());
+ }: _(RawOrigin::Signed(caller), base_id, slot_id, equippables)
+}
pallets/proxy-rmrk-equip/src/lib.rsdiffbeforeafterboth--- a/pallets/proxy-rmrk-equip/src/lib.rs
+++ b/pallets/proxy-rmrk-equip/src/lib.rs
@@ -22,15 +22,23 @@
use up_data_structs::*;
use pallet_common::{Pallet as PalletCommon, Error as CommonError};
use pallet_rmrk_core::{
- Pallet as PalletCore,
+ Pallet as PalletCore, Error as CoreError,
misc::{self, *},
property::RmrkProperty::*,
};
use pallet_nonfungible::{Pallet as PalletNft, NonfungibleHandle};
use pallet_evm::account::CrossAccountId;
+use weights::WeightInfo;
pub use pallet::*;
+#[cfg(feature = "runtime-benchmarks")]
+pub mod benchmarking;
+pub mod rpc;
+pub mod weights;
+
+pub type SelfWeightOf<T> = <T as Config>::WeightInfo;
+
#[frame_support::pallet]
pub mod pallet {
use super::*;
@@ -38,6 +46,7 @@
#[pallet::config]
pub trait Config: frame_system::Config + pallet_rmrk_core::Config {
type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
+ type WeightInfo: WeightInfo;
}
#[pallet::storage]
@@ -61,6 +70,10 @@
issuer: T::AccountId,
base_id: RmrkBaseId,
},
+ EquippablesUpdated {
+ base_id: RmrkBaseId,
+ slot_id: RmrkSlotId,
+ },
}
#[pallet::error]
@@ -70,6 +83,8 @@
NoAvailablePartId,
BaseDoesntExist,
NeedsDefaultThemeFirst,
+ PartDoesntExist,
+ NoEquippableOnFixedPart,
}
#[pallet::call]
@@ -83,12 +98,12 @@
/// - symbol: arbitrary client-chosen symbol
/// - parts: array of Fixed and Slot parts composing the base, confined in length by
/// RmrkPartsLimit
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::create_base(parts.len() as u32))]
pub fn create_base(
origin: OriginFor<T>,
base_type: RmrkString,
- symbol: RmrkString,
+ symbol: RmrkBaseSymbol,
parts: BoundedVec<RmrkPartType, RmrkPartsLimit>,
) -> DispatchResult {
let sender = ensure_signed(origin)?;
@@ -125,17 +140,7 @@
let collection = <PalletCore<T>>::get_nft_collection(collection_id)?;
for part in parts {
- let part_id = part.id();
- let part_token_id = Self::create_part(&cross_sender, &collection, part)?;
-
- <InernalPartId<T>>::insert(collection_id, part_id, part_token_id);
-
- <PalletNft<T>>::set_scoped_token_property(
- collection_id,
- part_token_id,
- PropertyScope::Rmrk,
- <PalletCore<T>>::rmrk_property(ExternalPartId, &part_id)?,
- )?;
+ Self::create_part(&cross_sender, &collection, part)?;
}
Self::deposit_event(Event::BaseCreated {
@@ -159,12 +164,12 @@
/// - key: arbitrary BoundedString, defined by client
/// - value: arbitrary BoundedString, defined by client
/// - inherit: optional bool
- #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
#[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::theme_add(theme.properties.len() as u32))]
pub fn theme_add(
origin: OriginFor<T>,
base_id: RmrkBaseId,
- theme: RmrkTheme,
+ theme: RmrkBoundedTheme,
) -> DispatchResult {
let sender = ensure_signed(origin)?;
@@ -173,12 +178,7 @@
let collection_id: CollectionId = base_id.into();
- let collection = <PalletCore<T>>::get_typed_nft_collection(
- collection_id,
- misc::CollectionType::Base,
- )
- .map_err(|_| <Error<T>>::BaseDoesntExist)?;
- collection.check_is_external()?;
+ let collection = Self::get_base(collection_id)?;
if theme.name.as_slice() == b"default" {
<BaseHasDefaultTheme<T>>::insert(collection_id, true);
@@ -213,6 +213,55 @@
Ok(())
}
+
+ #[transactional]
+ #[pallet::weight(<SelfWeightOf<T>>::equippable())]
+ pub fn equippable(
+ origin: OriginFor<T>,
+ base_id: RmrkBaseId,
+ slot_id: RmrkSlotId,
+ equippables: RmrkEquippableList,
+ ) -> DispatchResult {
+ let sender = ensure_signed(origin)?;
+
+ let base_collection_id = base_id.into();
+ let collection = Self::get_base(base_collection_id)?;
+
+ <PalletCore<T>>::check_collection_owner(
+ &collection,
+ &T::CrossAccountId::from_sub(sender),
+ )
+ .map_err(|err| {
+ if err == <CoreError<T>>::NoPermission.into() {
+ <Error<T>>::PermissionError.into()
+ } else {
+ err
+ }
+ })?;
+
+ let part_id = Self::internal_part_id(base_collection_id, slot_id)
+ .ok_or(<Error<T>>::PartDoesntExist)?;
+
+ let nft_type = <PalletCore<T>>::get_nft_type(base_collection_id, part_id)
+ .map_err(|_| <Error<T>>::PartDoesntExist)?;
+
+ match nft_type {
+ NftType::Regular | NftType::Theme => return Err(<Error<T>>::PermissionError.into()),
+ NftType::FixedPart => return Err(<Error<T>>::NoEquippableOnFixedPart.into()),
+ NftType::SlotPart => {
+ <PalletNft<T>>::set_scoped_token_property(
+ base_collection_id,
+ part_id,
+ PropertyScope::Rmrk,
+ <PalletCore<T>>::rmrk_property(EquippableList, &equippables)?,
+ )?;
+ }
+ }
+
+ Self::deposit_event(Event::EquippablesUpdated { base_id, slot_id });
+
+ Ok(())
+ }
}
}
@@ -221,9 +270,10 @@
sender: &T::CrossAccountId,
collection: &NonfungibleHandle<T>,
part: RmrkPartType,
- ) -> Result<TokenId, DispatchError> {
+ ) -> DispatchResult {
let owner = sender;
+ let part_id = part.id();
let src = part.src();
let z_index = part.z_index();
@@ -232,21 +282,40 @@
RmrkPartType::SlotPart(_) => NftType::SlotPart,
};
- let token_id = <PalletCore<T>>::create_nft(
- sender,
- owner,
- collection,
+ let token_id = match Self::internal_part_id(collection.id, part_id) {
+ Some(token_id) => token_id,
+ None => {
+ let token_id =
+ <PalletCore<T>>::create_nft(sender, owner, collection, [].into_iter())
+ .map_err(|err| match err {
+ DispatchError::Arithmetic(_) => <Error<T>>::NoAvailablePartId.into(),
+ err => err,
+ })?;
+
+ <InernalPartId<T>>::insert(collection.id, part_id, token_id);
+
+ <PalletNft<T>>::set_scoped_token_property(
+ collection.id,
+ token_id,
+ PropertyScope::Rmrk,
+ <PalletCore<T>>::rmrk_property(ExternalPartId, &part_id)?,
+ )?;
+
+ token_id
+ }
+ };
+
+ <PalletNft<T>>::set_scoped_token_properties(
+ collection.id,
+ token_id,
+ PropertyScope::Rmrk,
[
<PalletCore<T>>::rmrk_property(TokenType, &nft_type)?,
<PalletCore<T>>::rmrk_property(Src, &src)?,
<PalletCore<T>>::rmrk_property(ZIndex, &z_index)?,
]
.into_iter(),
- )
- .map_err(|err| match err {
- DispatchError::Arithmetic(_) => <Error<T>>::NoAvailablePartId.into(),
- err => err,
- })?;
+ )?;
if let RmrkPartType::SlotPart(part) = part {
<PalletNft<T>>::set_scoped_token_property(
@@ -257,6 +326,21 @@
)?;
}
- Ok(token_id)
+ Ok(())
+ }
+
+ fn get_base(base_id: CollectionId) -> Result<NonfungibleHandle<T>, DispatchError> {
+ let collection =
+ <PalletCore<T>>::get_typed_nft_collection(base_id, misc::CollectionType::Base)
+ .map_err(|err| {
+ if err == <CoreError<T>>::CollectionUnknown.into() {
+ <Error<T>>::BaseDoesntExist.into()
+ } else {
+ err
+ }
+ })?;
+ collection.check_is_external()?;
+
+ Ok(collection)
}
}
pallets/proxy-rmrk-equip/src/rpc.rsdiffbeforeafterboth--- /dev/null
+++ b/pallets/proxy-rmrk-equip/src/rpc.rs
@@ -0,0 +1,186 @@
+use super::*;
+use pallet_rmrk_core::{misc, property::*};
+use sp_std::vec::Vec;
+
+pub fn base<T: Config>(
+ base_id: RmrkBaseId,
+) -> Result<Option<RmrkBaseInfo<T::AccountId>>, DispatchError> {
+ let (collection, collection_id) =
+ match <PalletCore<T>>::get_typed_nft_collection_mapped(base_id, misc::CollectionType::Base)
+ {
+ Ok(c) => c,
+ Err(_) => return Ok(None),
+ };
+
+ Ok(Some(RmrkBaseInfo {
+ issuer: collection.owner.clone(),
+ base_type: <PalletCore<T>>::get_collection_property_decoded(
+ collection_id,
+ RmrkProperty::BaseType,
+ )?,
+ symbol: <PalletCore<T>>::rebind(&collection.token_prefix)?,
+ }))
+}
+
+pub fn base_parts<T: Config>(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
+ use pallet_common::CommonCollectionOperations;
+
+ let (collection, collection_id) =
+ match <PalletCore<T>>::get_typed_nft_collection_mapped(base_id, misc::CollectionType::Base)
+ {
+ Ok(c) => c,
+ Err(_) => return Ok(Vec::new()),
+ };
+
+ let parts = collection
+ .collection_tokens()
+ .into_iter()
+ .filter_map(|token_id| {
+ let nft_type = <PalletCore<T>>::get_nft_type(collection_id, token_id).ok()?;
+
+ match nft_type {
+ NftType::FixedPart => Some(RmrkPartType::FixedPart(RmrkFixedPart {
+ id: <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ token_id,
+ RmrkProperty::ExternalPartId,
+ )
+ .ok()?,
+ src: <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ token_id,
+ RmrkProperty::Src,
+ )
+ .ok()?,
+ z: <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ token_id,
+ RmrkProperty::ZIndex,
+ )
+ .ok()?,
+ })),
+ NftType::SlotPart => Some(RmrkPartType::SlotPart(RmrkSlotPart {
+ id: <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ token_id,
+ RmrkProperty::ExternalPartId,
+ )
+ .ok()?,
+ src: <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ token_id,
+ RmrkProperty::Src,
+ )
+ .ok()?,
+ z: <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ token_id,
+ RmrkProperty::ZIndex,
+ )
+ .ok()?,
+ equippable: <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ token_id,
+ RmrkProperty::EquippableList,
+ )
+ .ok()?,
+ })),
+ _ => None,
+ }
+ })
+ .collect();
+
+ Ok(parts)
+}
+
+pub fn theme_names<T: Config>(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
+ use pallet_common::CommonCollectionOperations;
+
+ let (collection, collection_id) =
+ match <PalletCore<T>>::get_typed_nft_collection_mapped(base_id, misc::CollectionType::Base)
+ {
+ Ok(c) => c,
+ Err(_) => return Ok(Vec::new()),
+ };
+
+ let theme_names = collection
+ .collection_tokens()
+ .iter()
+ .filter_map(|token_id| {
+ let nft_type = <PalletCore<T>>::get_nft_type(collection_id, *token_id).ok()?;
+
+ match nft_type {
+ NftType::Theme => <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ *token_id,
+ RmrkProperty::ThemeName,
+ )
+ .ok(),
+ _ => None,
+ }
+ })
+ .collect();
+
+ Ok(theme_names)
+}
+
+pub fn theme<T: Config>(
+ base_id: RmrkBaseId,
+ theme_name: RmrkThemeName,
+ filter_keys: Option<Vec<RmrkPropertyKey>>,
+) -> Result<Option<RmrkTheme>, DispatchError> {
+ use pallet_common::CommonCollectionOperations;
+
+ let (collection, collection_id) =
+ match <PalletCore<T>>::get_typed_nft_collection_mapped(base_id, misc::CollectionType::Base)
+ {
+ Ok(c) => c,
+ Err(_) => return Ok(None),
+ };
+
+ let theme_info = collection
+ .collection_tokens()
+ .into_iter()
+ .find_map(|token_id| {
+ <PalletCore<T>>::ensure_nft_type(collection_id, token_id, NftType::Theme).ok()?;
+
+ let name: RmrkString = <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ token_id,
+ RmrkProperty::ThemeName,
+ )
+ .ok()?;
+
+ if name == theme_name {
+ Some((name, token_id))
+ } else {
+ None
+ }
+ });
+
+ let (name, theme_id) = match theme_info {
+ Some((name, theme_id)) => (name, theme_id),
+ None => return Ok(None),
+ };
+
+ let properties = <PalletCore<T>>::filter_user_properties(
+ collection_id,
+ Some(theme_id),
+ filter_keys,
+ |key, value| RmrkThemeProperty { key, value },
+ )?;
+
+ let inherit = <PalletCore<T>>::get_nft_property_decoded(
+ collection_id,
+ theme_id,
+ RmrkProperty::ThemeInherit,
+ )?;
+
+ let theme = RmrkTheme {
+ name,
+ properties,
+ inherit,
+ };
+
+ Ok(Some(theme))
+}
pallets/proxy-rmrk-equip/src/weights.rsdiffbeforeafterboth--- /dev/null
+++ b/pallets/proxy-rmrk-equip/src/weights.rs
@@ -0,0 +1,138 @@
+// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs
+
+//! Autogenerated weights for pallet_proxy_rmrk_equip
+//!
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2022-06-20, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
+
+// Executed Command:
+// target/release/unique-collator
+// benchmark
+// pallet
+// --pallet
+// pallet-proxy-rmrk-equip
+// --wasm-execution
+// compiled
+// --extrinsic
+// *
+// --template
+// .maintain/frame-weight-template.hbs
+// --steps=50
+// --repeat=80
+// --heap-pages=4096
+// --output=./pallets/proxy-rmrk-equip/src/weights.rs
+
+#![cfg_attr(rustfmt, rustfmt_skip)]
+#![allow(unused_parens)]
+#![allow(unused_imports)]
+#![allow(clippy::unnecessary_cast)]
+
+use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
+use sp_std::marker::PhantomData;
+
+/// Weight functions needed for pallet_proxy_rmrk_equip.
+pub trait WeightInfo {
+ fn create_base(b: u32, ) -> Weight;
+ fn theme_add(b: u32, ) -> Weight;
+ fn equippable() -> Weight;
+}
+
+/// Weights for pallet_proxy_rmrk_equip using the Substrate node and recommended hardware.
+pub struct SubstrateWeight<T>(PhantomData<T>);
+impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
+ // Storage: Common CreatedCollectionCount (r:1 w:1)
+ // Storage: Common DestroyedCollectionCount (r:1 w:0)
+ // Storage: System Account (r:2 w:2)
+ // Storage: Common CollectionPropertyPermissions (r:0 w:1)
+ // Storage: Common CollectionProperties (r:0 w:1)
+ // Storage: Common CollectionById (r:0 w:1)
+ // Storage: RmrkEquip InernalPartId (r:1 w:1)
+ // Storage: Nonfungible TokensMinted (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:1 w:1)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:1)
+ fn create_base(b: u32, ) -> Weight {
+ (44_927_000 as Weight)
+ // Standard Error: 9_000
+ .saturating_add((18_896_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(T::DbWeight::get().reads(6 as Weight))
+ .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(b as Weight)))
+ .saturating_add(T::DbWeight::get().writes(8 as Weight))
+ .saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
+ }
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: RmrkEquip BaseHasDefaultTheme (r:1 w:0)
+ // Storage: Nonfungible TokensMinted (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:1 w:1)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:1)
+ fn theme_add(b: u32, ) -> Weight {
+ (39_120_000 as Weight)
+ // Standard Error: 11_000
+ .saturating_add((2_367_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(T::DbWeight::get().reads(6 as Weight))
+ .saturating_add(T::DbWeight::get().writes(5 as Weight))
+ }
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: RmrkEquip InernalPartId (r:1 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ fn equippable() -> Weight {
+ (27_172_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ }
+}
+
+// For backwards compatibility and tests
+impl WeightInfo for () {
+ // Storage: Common CreatedCollectionCount (r:1 w:1)
+ // Storage: Common DestroyedCollectionCount (r:1 w:0)
+ // Storage: System Account (r:2 w:2)
+ // Storage: Common CollectionPropertyPermissions (r:0 w:1)
+ // Storage: Common CollectionProperties (r:0 w:1)
+ // Storage: Common CollectionById (r:0 w:1)
+ // Storage: RmrkEquip InernalPartId (r:1 w:1)
+ // Storage: Nonfungible TokensMinted (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:1 w:1)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:1)
+ fn create_base(b: u32, ) -> Weight {
+ (44_927_000 as Weight)
+ // Standard Error: 9_000
+ .saturating_add((18_896_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(RocksDbWeight::get().reads(6 as Weight))
+ .saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(b as Weight)))
+ .saturating_add(RocksDbWeight::get().writes(8 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
+ }
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: RmrkEquip BaseHasDefaultTheme (r:1 w:0)
+ // Storage: Nonfungible TokensMinted (r:1 w:1)
+ // Storage: Nonfungible AccountBalance (r:1 w:1)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:0 w:1)
+ // Storage: Nonfungible Owned (r:0 w:1)
+ fn theme_add(b: u32, ) -> Weight {
+ (39_120_000 as Weight)
+ // Standard Error: 11_000
+ .saturating_add((2_367_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(RocksDbWeight::get().reads(6 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(5 as Weight))
+ }
+ // Storage: Common CollectionProperties (r:1 w:0)
+ // Storage: Common CollectionById (r:1 w:0)
+ // Storage: RmrkEquip InernalPartId (r:1 w:0)
+ // Storage: Nonfungible TokenProperties (r:1 w:1)
+ fn equippable() -> Weight {
+ (27_172_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ }
+}
pallets/refungible/src/common.rsdiffbeforeafterboth--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -77,16 +77,19 @@
0
}
- fn set_token_properties(amount: u32) -> Weight {
- <SelfWeightOf<T>>::set_token_properties(amount)
+ fn set_token_properties(_amount: u32) -> Weight {
+ // Error
+ 0
}
- fn delete_token_properties(amount: u32) -> Weight {
- <SelfWeightOf<T>>::delete_token_properties(amount)
+ fn delete_token_properties(_amount: u32) -> Weight {
+ // Error
+ 0
}
- fn set_property_permissions(amount: u32) -> Weight {
- <SelfWeightOf<T>>::set_property_permissions(amount)
+ fn set_token_property_permissions(_amount: u32) -> Weight {
+ // Error
+ 0
}
fn transfer() -> Weight {
@@ -315,7 +318,7 @@
fail!(<Error<T>>::SettingPropertiesNotAllowed)
}
- fn set_property_permissions(
+ fn set_token_property_permissions(
&self,
_sender: &T::CrossAccountId,
_property_permissions: Vec<PropertyKeyPermission>,
pallets/refungible/src/weights.rsdiffbeforeafterboth--- a/pallets/refungible/src/weights.rs
+++ b/pallets/refungible/src/weights.rs
@@ -3,12 +3,13 @@
//! Autogenerated weights for pallet_refungible
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// target/release/unique-collator
// benchmark
+// pallet
// --pallet
// pallet-refungible
// --wasm-execution
@@ -18,7 +19,7 @@
// --template
// .maintain/frame-weight-template.hbs
// --steps=50
-// --repeat=200
+// --repeat=80
// --heap-pages=4096
// --output=./pallets/refungible/src/weights.rs
@@ -38,9 +39,6 @@
fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight;
fn burn_item_partial() -> Weight;
fn burn_item_fully() -> Weight;
- fn set_token_properties(amount: u32) -> Weight;
- fn delete_token_properties(amount: u32) -> Weight;
- fn set_property_permissions(amount: u32) -> Weight;
fn transfer_normal() -> Weight;
fn transfer_creating() -> Weight;
fn transfer_removing() -> Weight;
@@ -63,7 +61,7 @@
// Storage: Refungible TokenData (r:0 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn create_item() -> Weight {
- (21_255_000 as Weight)
+ (21_321_000 as Weight)
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(6 as Weight))
}
@@ -74,9 +72,9 @@
// Storage: Refungible TokenData (r:0 w:4)
// Storage: Refungible Owned (r:0 w:4)
fn create_multiple_items(b: u32, ) -> Weight {
- (18_052_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((5_549_000 as Weight).saturating_mul(b as Weight))
+ (16_313_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((5_464_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
@@ -88,9 +86,9 @@
// Storage: Refungible TokenData (r:0 w:4)
// Storage: Refungible Owned (r:0 w:4)
fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight {
- (15_766_000 as Weight)
- // Standard Error: 2_000
- .saturating_add((8_187_000 as Weight).saturating_mul(b as Weight))
+ (15_631_000 as Weight)
+ // Standard Error: 5_000
+ .saturating_add((8_141_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -103,9 +101,9 @@
// Storage: Refungible Balance (r:0 w:4)
// Storage: Refungible Owned (r:0 w:4)
fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight {
- (5_675_000 as Weight)
- // Standard Error: 2_000
- .saturating_add((6_315_000 as Weight).saturating_mul(b as Weight))
+ (11_191_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((6_321_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
@@ -116,7 +114,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn burn_item_partial() -> Weight {
- (23_518_000 as Weight)
+ (24_421_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(4 as Weight))
}
@@ -127,29 +125,13 @@
// Storage: Refungible TokenData (r:0 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn burn_item_fully() -> Weight {
- (32_489_000 as Weight)
+ (32_900_000 as Weight)
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(6 as Weight))
}
-
- fn set_token_properties(_amount: u32) -> Weight {
- // Error
- 0
- }
-
- fn delete_token_properties(_amount: u32) -> Weight {
- // Error
- 0
- }
-
- fn set_property_permissions(_amount: u32) -> Weight {
- // Error
- 0
- }
-
// Storage: Refungible Balance (r:2 w:2)
fn transfer_normal() -> Weight {
- (19_766_000 as Weight)
+ (20_215_000 as Weight)
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
@@ -157,7 +139,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn transfer_creating() -> Weight {
- (23_360_000 as Weight)
+ (24_809_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(4 as Weight))
}
@@ -165,7 +147,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn transfer_removing() -> Weight {
- (25_344_000 as Weight)
+ (26_704_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(4 as Weight))
}
@@ -173,21 +155,21 @@
// Storage: Refungible AccountBalance (r:2 w:2)
// Storage: Refungible Owned (r:0 w:2)
fn transfer_creating_removing() -> Weight {
- (28_553_000 as Weight)
+ (28_728_000 as Weight)
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(6 as Weight))
}
// Storage: Refungible Balance (r:1 w:0)
// Storage: Refungible Allowance (r:0 w:1)
fn approve() -> Weight {
- (15_356_000 as Weight)
+ (16_107_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Refungible Allowance (r:1 w:1)
// Storage: Refungible Balance (r:2 w:2)
fn transfer_from_normal() -> Weight {
- (28_832_000 as Weight)
+ (28_765_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
}
@@ -196,7 +178,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn transfer_from_creating() -> Weight {
- (32_132_000 as Weight)
+ (32_788_000 as Weight)
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(5 as Weight))
}
@@ -205,7 +187,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn transfer_from_removing() -> Weight {
- (33_237_000 as Weight)
+ (34_523_000 as Weight)
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(5 as Weight))
}
@@ -214,7 +196,7 @@
// Storage: Refungible AccountBalance (r:2 w:2)
// Storage: Refungible Owned (r:0 w:2)
fn transfer_from_creating_removing() -> Weight {
- (36_399_000 as Weight)
+ (36_749_000 as Weight)
.saturating_add(T::DbWeight::get().reads(5 as Weight))
.saturating_add(T::DbWeight::get().writes(7 as Weight))
}
@@ -226,7 +208,7 @@
// Storage: Refungible TokenData (r:0 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn burn_from() -> Weight {
- (42_043_000 as Weight)
+ (42_259_000 as Weight)
.saturating_add(T::DbWeight::get().reads(5 as Weight))
.saturating_add(T::DbWeight::get().writes(7 as Weight))
}
@@ -241,7 +223,7 @@
// Storage: Refungible TokenData (r:0 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn create_item() -> Weight {
- (21_255_000 as Weight)
+ (21_321_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(6 as Weight))
}
@@ -252,9 +234,9 @@
// Storage: Refungible TokenData (r:0 w:4)
// Storage: Refungible Owned (r:0 w:4)
fn create_multiple_items(b: u32, ) -> Weight {
- (18_052_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((5_549_000 as Weight).saturating_mul(b as Weight))
+ (16_313_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((5_464_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
@@ -266,9 +248,9 @@
// Storage: Refungible TokenData (r:0 w:4)
// Storage: Refungible Owned (r:0 w:4)
fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight {
- (15_766_000 as Weight)
- // Standard Error: 2_000
- .saturating_add((8_187_000 as Weight).saturating_mul(b as Weight))
+ (15_631_000 as Weight)
+ // Standard Error: 5_000
+ .saturating_add((8_141_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
@@ -281,9 +263,9 @@
// Storage: Refungible Balance (r:0 w:4)
// Storage: Refungible Owned (r:0 w:4)
fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight {
- (5_675_000 as Weight)
- // Standard Error: 2_000
- .saturating_add((6_315_000 as Weight).saturating_mul(b as Weight))
+ (11_191_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((6_321_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
@@ -294,7 +276,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn burn_item_partial() -> Weight {
- (23_518_000 as Weight)
+ (24_421_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(4 as Weight))
}
@@ -305,29 +287,13 @@
// Storage: Refungible TokenData (r:0 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn burn_item_fully() -> Weight {
- (32_489_000 as Weight)
+ (32_900_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(6 as Weight))
- }
-
- fn set_token_properties(_amount: u32) -> Weight {
- // Error
- 0
- }
-
- fn delete_token_properties(_amount: u32) -> Weight {
- // Error
- 0
- }
-
- fn set_property_permissions(_amount: u32) -> Weight {
- // Error
- 0
}
-
// Storage: Refungible Balance (r:2 w:2)
fn transfer_normal() -> Weight {
- (19_766_000 as Weight)
+ (20_215_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
@@ -335,7 +301,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn transfer_creating() -> Weight {
- (23_360_000 as Weight)
+ (24_809_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(4 as Weight))
}
@@ -343,7 +309,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn transfer_removing() -> Weight {
- (25_344_000 as Weight)
+ (26_704_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(4 as Weight))
}
@@ -351,21 +317,21 @@
// Storage: Refungible AccountBalance (r:2 w:2)
// Storage: Refungible Owned (r:0 w:2)
fn transfer_creating_removing() -> Weight {
- (28_553_000 as Weight)
+ (28_728_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(6 as Weight))
}
// Storage: Refungible Balance (r:1 w:0)
// Storage: Refungible Allowance (r:0 w:1)
fn approve() -> Weight {
- (15_356_000 as Weight)
+ (16_107_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Refungible Allowance (r:1 w:1)
// Storage: Refungible Balance (r:2 w:2)
fn transfer_from_normal() -> Weight {
- (28_832_000 as Weight)
+ (28_765_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
}
@@ -374,7 +340,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn transfer_from_creating() -> Weight {
- (32_132_000 as Weight)
+ (32_788_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(5 as Weight))
}
@@ -383,7 +349,7 @@
// Storage: Refungible AccountBalance (r:1 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn transfer_from_removing() -> Weight {
- (33_237_000 as Weight)
+ (34_523_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(5 as Weight))
}
@@ -392,7 +358,7 @@
// Storage: Refungible AccountBalance (r:2 w:2)
// Storage: Refungible Owned (r:0 w:2)
fn transfer_from_creating_removing() -> Weight {
- (36_399_000 as Weight)
+ (36_749_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
.saturating_add(RocksDbWeight::get().writes(7 as Weight))
}
@@ -404,7 +370,7 @@
// Storage: Refungible TokenData (r:0 w:1)
// Storage: Refungible Owned (r:0 w:1)
fn burn_from() -> Weight {
- (42_043_000 as Weight)
+ (42_259_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
.saturating_add(RocksDbWeight::get().writes(7 as Weight))
}
pallets/scheduler/Cargo.tomldiffbeforeafterboth--- a/pallets/scheduler/Cargo.toml
+++ b/pallets/scheduler/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "pallet-unq-scheduler"
+name = "pallet-unique-scheduler"
version = "0.1.0"
authors = ["Unique Network <support@uniquenetwork.io>"]
edition = "2021"
pallets/scheduler/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/scheduler/src/benchmarking.rs
+++ b/pallets/scheduler/src/benchmarking.rs
@@ -34,35 +34,57 @@
//! Scheduler pallet benchmarking.
-#![cfg(feature = "runtime-benchmarks")]
-
use super::*;
-use sp_std::{vec, prelude::*};
+use frame_benchmarking::{benchmarks, account};
+use frame_support::{
+ ensure,
+ traits::{OnInitialize},
+};
use frame_system::RawOrigin;
-use frame_support::{ensure, traits::OnInitialize};
-use frame_benchmarking::{benchmarks, impl_benchmark_test_suite};
+use sp_runtime::traits::Hash;
+use sp_std::{prelude::*, vec};
-use crate::Module as Scheduler;
+use crate::Pallet as Scheduler;
use frame_system::Pallet as System;
+use frame_support::traits::Currency;
const BLOCK_NUMBER: u32 = 2;
-// Add `n` named items to the schedule
-fn fill_schedule<T: Config>(when: T::BlockNumber, n: u32) -> Result<(), &'static str> {
- // Essentially a no-op call.
- let call = frame_system::Call::set_storage { items: vec![] };
+/// Add `n` named items to the schedule.
+///
+/// For `resolved`:
+/// - `None`: aborted (hash without preimage)
+/// - `Some(true)`: hash resolves into call if possible, plain call otherwise
+/// - `Some(false)`: plain call
+fn fill_schedule<T: Config>(
+ when: T::BlockNumber,
+ n: u32,
+ periodic: bool,
+ resolved: Option<bool>,
+) -> Result<(), &'static str> {
+ let t = DispatchTime::At(when);
+ let caller = account("user", 0, 1);
+
+ // Give the sender account max funds for transfer (their account will never reasonably be killed).
+ T::Currency::make_free_balance_be(&caller, T::Currency::minimum_balance());
+
for i in 0..n {
- // Named schedule is strictly heavier than anonymous
- Scheduler::<T>::do_schedule_named(
- i.encode(),
- DispatchTime::At(when),
- // Add periodicity
- Some((T::BlockNumber::one(), 100)),
- // HARD_DEADLINE priority means it gets executed no matter what
- 0,
- frame_system::RawOrigin::Root.into(),
- call.clone().into(),
- )?;
+ let (call, hash) = call_and_hash::<T>(i);
+ let call_or_hash = match resolved {
+ Some(_) => call.into(),
+ None => CallOrHashOf::<T>::Hash(hash),
+ };
+ let period = match periodic {
+ true => Some(((i + 100).into(), 100)),
+ false => None,
+ };
+
+ let slice_id: [u8; 4] = i.encode().try_into().unwrap();
+ let mut id: [u8; 16] = [0; 16];
+ id[..4].clone_from_slice(&slice_id);
+
+ let origin = frame_system::RawOrigin::Signed(caller.clone()).into();
+ Scheduler::<T>::do_schedule_named(id, t, period, 0, origin, call_or_hash)?;
}
ensure!(
Agenda::<T>::get(when).len() == n as usize,
@@ -71,54 +93,121 @@
Ok(())
}
+fn call_and_hash<T: Config>(i: u32) -> (<T as Config>::Call, T::Hash) {
+ // Essentially a no-op call.
+ let call: <T as Config>::Call = frame_system::Call::remark { remark: i.encode() }.into();
+ let hash = T::Hashing::hash_of(&call);
+ (call, hash)
+}
+
benchmarks! {
- schedule {
- let s in 0 .. T::MaxScheduledPerBlock::get();
+ on_initialize_periodic_named_resolved {
+ let s in 1 .. T::MaxScheduledPerBlock::get();
let when = BLOCK_NUMBER.into();
- let periodic = Some((T::BlockNumber::one(), 100));
- let priority = 0;
- // Essentially a no-op call.
- let call = Box::new(frame_system::Call::set_storage { items: vec![] }.into());
+ fill_schedule::<T>(when, s, true, Some(true))?;
+ }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+ verify {
+ assert_eq!(System::<T>::event_count(), s);
+ for i in 0..s {
+ assert_eq!(Agenda::<T>::get(when + (i + 100).into()).len(), 1 as usize);
+ }
+ }
- fill_schedule::<T>(when, s)?;
- }: _(RawOrigin::Root, when, periodic, priority, call)
+ on_initialize_named_resolved {
+ let s in 1 .. T::MaxScheduledPerBlock::get();
+ let when = BLOCK_NUMBER.into();
+ fill_schedule::<T>(when, s, false, Some(true))?;
+ }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
verify {
- ensure!(
- Agenda::<T>::get(when).len() == (s + 1) as usize,
- "didn't add to schedule"
- );
+ assert_eq!(System::<T>::event_count(), s);
+ assert!(Agenda::<T>::iter().count() == 0);
}
- cancel {
+ on_initialize_periodic {
let s in 1 .. T::MaxScheduledPerBlock::get();
let when = BLOCK_NUMBER.into();
+ fill_schedule::<T>(when, s, true, Some(false))?;
+ }: { Scheduler::<T>::on_initialize(when); }
+ verify {
+ assert_eq!(System::<T>::event_count(), s);
+ for i in 0..s {
+ assert_eq!(Agenda::<T>::get(when + (i + 100).into()).len(), 1 as usize);
+ }
+ }
- fill_schedule::<T>(when, s)?;
- assert_eq!(Agenda::<T>::get(when).len(), s as usize);
- }: _(RawOrigin::Root, when, 0)
+ on_initialize_periodic_resolved {
+ let s in 1 .. T::MaxScheduledPerBlock::get();
+ let when = BLOCK_NUMBER.into();
+ fill_schedule::<T>(when, s, true, Some(true))?;
+ }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
verify {
- ensure!(
- Lookup::<T>::get(0.encode()).is_none(),
- "didn't remove from lookup"
- );
- // Removed schedule is NONE
- ensure!(
- Agenda::<T>::get(when)[0].is_none(),
- "didn't remove from schedule"
- );
+ assert_eq!(System::<T>::event_count(), s );
+ for i in 0..s {
+ assert_eq!(Agenda::<T>::get(when + (i + 100).into()).len(), 1 as usize);
+ }
}
+ on_initialize_aborted {
+ let s in 1 .. T::MaxScheduledPerBlock::get();
+ let when = BLOCK_NUMBER.into();
+ fill_schedule::<T>(when, s, false, None)?;
+ }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+ verify {
+ assert_eq!(System::<T>::event_count(), 0);
+ }
+
+ on_initialize_named_aborted {
+ let s in 1 .. T::MaxScheduledPerBlock::get();
+ let when = BLOCK_NUMBER.into();
+ fill_schedule::<T>(when, s, false, Some(false))?;
+ }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+ verify {
+ }
+
+ on_initialize_named {
+ let s in 1 .. T::MaxScheduledPerBlock::get();
+ let when = BLOCK_NUMBER.into();
+ fill_schedule::<T>(when, s, false, None)?;
+ }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+ verify {
+ assert_eq!(System::<T>::event_count(), 0);
+ }
+
+ on_initialize {
+ let s in 1 .. T::MaxScheduledPerBlock::get();
+ let when = BLOCK_NUMBER.into();
+ fill_schedule::<T>(when, s, false, Some(false))?;
+ }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+ verify {
+ assert_eq!(System::<T>::event_count(), s);
+ assert!(Agenda::<T>::iter().count() == 0);
+ }
+
+ on_initialize_resolved {
+ let s in 1 .. T::MaxScheduledPerBlock::get();
+ let when = BLOCK_NUMBER.into();
+ fill_schedule::<T>(when, s, false, Some(true))?;
+ }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+ verify {
+ assert_eq!(System::<T>::event_count(), s);
+ assert!(Agenda::<T>::iter().count() == 0);
+ }
+
schedule_named {
+ let caller: T::AccountId = account("user", 0, 1);
+ let origin: RawOrigin<T::AccountId> = frame_system::RawOrigin::Signed(caller.clone());
let s in 0 .. T::MaxScheduledPerBlock::get();
- let id = s.encode();
+ let slice_id: [u8; 4] = s.encode().try_into().unwrap();
+ let mut id: [u8; 16] = [0; 16];
+ id[..4].clone_from_slice(&slice_id);
let when = BLOCK_NUMBER.into();
let periodic = Some((T::BlockNumber::one(), 100));
let priority = 0;
// Essentially a no-op call.
- let call = Box::new(frame_system::Call::set_storage { items: vec![] }.into());
-
- fill_schedule::<T>(when, s)?;
- }: _(RawOrigin::Root, id, when, periodic, priority, call)
+ let inner_call = frame_system::Call::set_storage { items: vec![] }.into();
+ let call = Box::new(CallOrHashOf::<T>::Value(inner_call));
+ fill_schedule::<T>(when, s, true, Some(false))?;
+ }: _(origin, id, when, periodic, priority, call)
verify {
ensure!(
Agenda::<T>::get(when).len() == (s + 1) as usize,
@@ -127,14 +216,16 @@
}
cancel_named {
+ let caller: T::AccountId = account("user", 0, 1);
+ let origin: RawOrigin<T::AccountId> = frame_system::RawOrigin::Signed(caller.clone());
let s in 1 .. T::MaxScheduledPerBlock::get();
let when = BLOCK_NUMBER.into();
-
- fill_schedule::<T>(when, s)?;
- }: _(RawOrigin::Root, 0.encode())
+ let id = 0.encode().try_into().unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
+ fill_schedule::<T>(when, s, true, Some(false))?;
+ }: _(origin, id)
verify {
ensure!(
- Lookup::<T>::get(0.encode()).is_none(),
+ Lookup::<T>::get(id).is_none(),
"didn't remove from lookup"
);
// Removed schedule is NONE
@@ -144,21 +235,5 @@
);
}
- // TODO [#7141]: Make this more complex and flexible so it can be used in automation.
- #[extra]
- on_initialize {
- let s in 0 .. T::MaxScheduledPerBlock::get();
- let when = BLOCK_NUMBER.into();
- fill_schedule::<T>(when, s)?;
- }: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
- verify {
- assert_eq!(System::<T>::event_count(), s);
- // Next block should have all the schedules again
- ensure!(
- Agenda::<T>::get(when + T::BlockNumber::one()).len() == s as usize,
- "didn't append schedule"
- );
- }
+ impl_benchmark_test_suite!(Scheduler, crate::mock::new_test_ext(), crate::mock::Test);
}
-
-impl_benchmark_test_suite!(Scheduler, crate::tests::new_test_ext(), crate::tests::Test,);
pallets/scheduler/src/lib.rsdiffbeforeafterboth--- a/pallets/scheduler/src/lib.rs
+++ b/pallets/scheduler/src/lib.rs
@@ -60,9 +60,8 @@
// Ensure we're `no_std` when compiling for Wasm.
#![cfg_attr(not(feature = "std"), no_std)]
-// FIXME
-// #[cfg(feature = "runtime-benchmarks")]
-// mod benchmarking;
+#[cfg(feature = "runtime-benchmarks")]
+mod benchmarking;
pub mod weights;
@@ -159,11 +158,10 @@
Self::on_initialize_periodic(2) - Self::on_initialize_periodic(1)
}
(true, true, Some(false)) => {
- Self::on_initialize_periodic_named(2) - Self::on_initialize_periodic_named(1)
- }
- (false, false, Some(true)) => {
- Self::on_initialize_resolved(2) - Self::on_initialize_resolved(1)
+ Self::on_initialize_periodic_named_resolved(2)
+ - Self::on_initialize_periodic_named_resolved(1)
}
+ (false, false, Some(true)) => Self::on_initialize(2) - Self::on_initialize(1),
(false, true, Some(true)) => {
Self::on_initialize_named_resolved(2) - Self::on_initialize_named_resolved(1)
}
@@ -608,97 +606,8 @@
}
Ok(when)
- }
-
- fn do_schedule(
- when: DispatchTime<T::BlockNumber>,
- maybe_periodic: Option<schedule::Period<T::BlockNumber>>,
- priority: schedule::Priority,
- origin: T::PalletsOrigin,
- call: CallOrHashOf<T>,
- ) -> Result<TaskAddress<T::BlockNumber>, DispatchError> {
- let when = Self::resolve_time(when)?;
- call.ensure_requested::<T::PreimageProvider>();
-
- // sanitize maybe_periodic
- let maybe_periodic = maybe_periodic
- .filter(|p| p.1 > 1 && !p.0.is_zero())
- // Remove one from the number of repetitions since we will schedule one now.
- .map(|(p, c)| (p, c - 1));
- let s = Some(Scheduled {
- maybe_id: None,
- priority,
- call,
- maybe_periodic,
- origin,
- _phantom: PhantomData::<T::AccountId>::default(),
- });
- Agenda::<T>::append(when, s);
- let index = Agenda::<T>::decode_len(when).unwrap_or(1) as u32 - 1;
- Self::deposit_event(Event::Scheduled { when, index });
-
- Ok((when, index))
}
- fn do_cancel(
- origin: Option<T::PalletsOrigin>,
- (when, index): TaskAddress<T::BlockNumber>,
- ) -> Result<(), DispatchError> {
- let scheduled = Agenda::<T>::try_mutate(when, |agenda| {
- agenda.get_mut(index as usize).map_or(
- Ok(None),
- |s| -> Result<Option<Scheduled<_, _, _, _>>, DispatchError> {
- if let (Some(ref o), Some(ref s)) = (origin, s.borrow()) {
- if matches!(
- T::OriginPrivilegeCmp::cmp_privilege(o, &s.origin),
- Some(Ordering::Less) | None
- ) {
- return Err(BadOrigin.into());
- }
- };
- Ok(s.take())
- },
- )
- })?;
- if let Some(s) = scheduled {
- s.call.ensure_unrequested::<T::PreimageProvider>();
- if let Some(id) = s.maybe_id {
- Lookup::<T>::remove(id);
- }
- Self::deposit_event(Event::Canceled { when, index });
- Ok(())
- } else {
- Err(Error::<T>::NotFound)?
- }
- }
-
- fn do_reschedule(
- (when, index): TaskAddress<T::BlockNumber>,
- new_time: DispatchTime<T::BlockNumber>,
- ) -> Result<TaskAddress<T::BlockNumber>, DispatchError> {
- let new_time = Self::resolve_time(new_time)?;
-
- if new_time == when {
- return Err(Error::<T>::RescheduleNoChange.into());
- }
-
- Agenda::<T>::try_mutate(when, |agenda| -> DispatchResult {
- let task = agenda.get_mut(index as usize).ok_or(Error::<T>::NotFound)?;
- let task = task.take().ok_or(Error::<T>::NotFound)?;
- Agenda::<T>::append(new_time, Some(task));
- Ok(())
- })?;
-
- let new_index = Agenda::<T>::decode_len(new_time).unwrap_or(1) as u32 - 1;
- Self::deposit_event(Event::Canceled { when, index });
- Self::deposit_event(Event::Scheduled {
- when: new_time,
- index: new_index,
- });
-
- Ok((new_time, new_index))
- }
-
fn do_schedule_named(
id: ScheduledId,
when: DispatchTime<T::BlockNumber>,
@@ -789,125 +698,5 @@
Err(Error::<T>::NotFound)?
}
})
- }
-
- fn do_reschedule_named(
- id: ScheduledId,
- new_time: DispatchTime<T::BlockNumber>,
- ) -> Result<TaskAddress<T::BlockNumber>, DispatchError> {
- let new_time = Self::resolve_time(new_time)?;
-
- Lookup::<T>::try_mutate_exists(
- id,
- |lookup| -> Result<TaskAddress<T::BlockNumber>, DispatchError> {
- let (when, index) = lookup.ok_or(Error::<T>::NotFound)?;
-
- if new_time == when {
- return Err(Error::<T>::RescheduleNoChange.into());
- }
-
- Agenda::<T>::try_mutate(when, |agenda| -> DispatchResult {
- let task = agenda.get_mut(index as usize).ok_or(Error::<T>::NotFound)?;
- let task = task.take().ok_or(Error::<T>::NotFound)?;
- Agenda::<T>::append(new_time, Some(task));
-
- Ok(())
- })?;
-
- let new_index = Agenda::<T>::decode_len(new_time).unwrap_or(1) as u32 - 1;
- Self::deposit_event(Event::Canceled { when, index });
- Self::deposit_event(Event::Scheduled {
- when: new_time,
- index: new_index,
- });
-
- *lookup = Some((new_time, new_index));
-
- Ok((new_time, new_index))
- },
- )
- }
-}
-
-impl<T: Config> schedule::v2::Anon<T::BlockNumber, <T as Config>::Call, T::PalletsOrigin>
- for Pallet<T>
-{
- type Address = TaskAddress<T::BlockNumber>;
- type Hash = T::Hash;
-
- fn schedule(
- when: DispatchTime<T::BlockNumber>,
- maybe_periodic: Option<schedule::Period<T::BlockNumber>>,
- priority: schedule::Priority,
- origin: T::PalletsOrigin,
- call: CallOrHashOf<T>,
- ) -> Result<Self::Address, DispatchError> {
- Self::do_schedule(when, maybe_periodic, priority, origin, call)
- }
-
- fn cancel((when, index): Self::Address) -> Result<(), ()> {
- Self::do_cancel(None, (when, index)).map_err(|_| ())
- }
-
- fn reschedule(
- address: Self::Address,
- when: DispatchTime<T::BlockNumber>,
- ) -> Result<Self::Address, DispatchError> {
- Self::do_reschedule(address, when)
- }
-
- fn next_dispatch_time((when, index): Self::Address) -> Result<T::BlockNumber, ()> {
- Agenda::<T>::get(when)
- .get(index as usize)
- .ok_or(())
- .map(|_| when)
- }
-}
-
-impl<T: Config> schedule::v2::Named<T::BlockNumber, <T as Config>::Call, T::PalletsOrigin>
- for Pallet<T>
-{
- type Address = TaskAddress<T::BlockNumber>;
- type Hash = T::Hash;
-
- fn schedule_named(
- id: Vec<u8>,
- when: DispatchTime<T::BlockNumber>,
- maybe_periodic: Option<schedule::Period<T::BlockNumber>>,
- priority: schedule::Priority,
- origin: T::PalletsOrigin,
- call: CallOrHashOf<T>,
- ) -> Result<Self::Address, ()> {
- let inner_id: ScheduledId = id
- .try_into()
- .unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
- Self::do_schedule_named(inner_id, when, maybe_periodic, priority, origin, call)
- .map_err(|_| ())
- }
-
- fn cancel_named(id: Vec<u8>) -> Result<(), ()> {
- let inner_id: ScheduledId = id
- .try_into()
- .unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
- Self::do_cancel_named(None, inner_id).map_err(|_| ())
- }
-
- fn reschedule_named(
- id: Vec<u8>,
- when: DispatchTime<T::BlockNumber>,
- ) -> Result<Self::Address, DispatchError> {
- let inner_id: ScheduledId = id
- .try_into()
- .unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
- Self::do_reschedule_named(inner_id, when)
- }
-
- fn next_dispatch_time(id: Vec<u8>) -> Result<T::BlockNumber, ()> {
- let inner_id: ScheduledId = id
- .try_into()
- .unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
- Lookup::<T>::get(inner_id)
- .and_then(|(when, index)| Agenda::<T>::get(when).get(index as usize).map(|_| when))
- .ok_or(())
}
}
pallets/scheduler/src/weights.rsdiffbeforeafterboth--- a/pallets/scheduler/src/weights.rs
+++ b/pallets/scheduler/src/weights.rs
@@ -1,213 +1,183 @@
-// This file is part of Substrate.
-
-// Copyright (C) 2022 Parity Technologies (UK) Ltd.
-// SPDX-License-Identifier: Apache-2.0
-
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs
-//! Autogenerated weights for pallet_scheduler
+//! Autogenerated weights for pallet_unique_scheduler
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-01-31, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
-// ./target/production/substrate
+// target/release/unique-collator
// benchmark
-// --chain=dev
+// pallet
+// --pallet
+// pallet-unique-scheduler
+// --wasm-execution
+// compiled
+// --extrinsic
+// *
+// --template
+// .maintain/frame-weight-template.hbs
// --steps=50
-// --repeat=20
-// --pallet=pallet_scheduler
-// --extrinsic=*
-// --execution=wasm
-// --wasm-execution=compiled
+// --repeat=80
// --heap-pages=4096
-// --output=./frame/scheduler/src/weights.rs
-// --template=.maintain/frame-weight-template.hbs
-// --header=HEADER-APACHE2
-// --raw
+// --output=./pallets/scheduler/src/weights.rs
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
+#![allow(clippy::unnecessary_cast)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
-/// Weight functions needed for pallet_scheduler.
+/// Weight functions needed for pallet_unique_scheduler.
pub trait WeightInfo {
fn on_initialize_periodic_named_resolved(s: u32, ) -> Weight;
fn on_initialize_named_resolved(s: u32, ) -> Weight;
+ fn on_initialize_periodic(s: u32, ) -> Weight;
fn on_initialize_periodic_resolved(s: u32, ) -> Weight;
- fn on_initialize_resolved(s: u32, ) -> Weight;
+ fn on_initialize_aborted(s: u32, ) -> Weight;
fn on_initialize_named_aborted(s: u32, ) -> Weight;
- fn on_initialize_aborted(s: u32, ) -> Weight;
- fn on_initialize_periodic_named(s: u32, ) -> Weight;
- fn on_initialize_periodic(s: u32, ) -> Weight;
fn on_initialize_named(s: u32, ) -> Weight;
fn on_initialize(s: u32, ) -> Weight;
- fn schedule(s: u32, ) -> Weight;
- fn cancel(s: u32, ) -> Weight;
+ fn on_initialize_resolved(s: u32, ) -> Weight;
fn schedule_named(s: u32, ) -> Weight;
fn cancel_named(s: u32, ) -> Weight;
}
-/// Weights for pallet_scheduler using the Substrate node and recommended hardware.
+/// Weights for pallet_unique_scheduler using the Substrate node and recommended hardware.
pub struct SubstrateWeight<T>(PhantomData<T>);
impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
// Storage: Scheduler Agenda (r:2 w:2)
- // Storage: Preimage PreimageFor (r:1 w:1)
- // Storage: Preimage StatusFor (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize_periodic_named_resolved(s: u32, ) -> Weight {
- (11_587_000 as Weight)
- // Standard Error: 17_000
- .saturating_add((17_428_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(s as Weight)))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- .saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(s as Weight)))
+ (27_374_000 as Weight)
+ // Standard Error: 7_000
+ .saturating_add((9_673_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(T::DbWeight::get().reads(4 as Weight))
+ .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
+ .saturating_add(T::DbWeight::get().writes(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:1 w:1)
- // Storage: Preimage PreimageFor (r:1 w:1)
- // Storage: Preimage StatusFor (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize_named_resolved(s: u32, ) -> Weight {
- (8_965_000 as Weight)
- // Standard Error: 11_000
- .saturating_add((13_410_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(s as Weight)))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(s as Weight)))
+ (25_967_000 as Weight)
+ // Standard Error: 6_000
+ .saturating_add((5_916_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(T::DbWeight::get().reads(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:2 w:2)
- // Storage: Preimage PreimageFor (r:1 w:1)
- // Storage: Preimage StatusFor (r:1 w:1)
- fn on_initialize_periodic_resolved(s: u32, ) -> Weight {
- (8_654_000 as Weight)
- // Standard Error: 17_000
- .saturating_add((14_990_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(s as Weight)))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(s as Weight)))
- }
- // Storage: Scheduler Agenda (r:1 w:1)
- // Storage: Preimage PreimageFor (r:1 w:1)
- // Storage: Preimage StatusFor (r:1 w:1)
- fn on_initialize_resolved(s: u32, ) -> Weight {
- (9_303_000 as Weight)
- // Standard Error: 10_000
- .saturating_add((12_244_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(s as Weight)))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
+ // Storage: Scheduler Lookup (r:0 w:1)
+ fn on_initialize_periodic(s: u32, ) -> Weight {
+ (27_097_000 as Weight)
+ // Standard Error: 5_000
+ .saturating_add((9_652_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(T::DbWeight::get().reads(4 as Weight))
+ .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
+ .saturating_add(T::DbWeight::get().writes(4 as Weight))
.saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:2 w:2)
- // Storage: Preimage PreimageFor (r:1 w:0)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
- fn on_initialize_named_aborted(s: u32, ) -> Weight {
- (7_506_000 as Weight)
- // Standard Error: 3_000
- .saturating_add((5_208_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(2 as Weight))
+ fn on_initialize_periodic_resolved(s: u32, ) -> Weight {
+ (43_116_000 as Weight)
+ // Standard Error: 18_000
+ .saturating_add((8_352_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
- .saturating_add(T::DbWeight::get().writes(2 as Weight))
- .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
+ .saturating_add(T::DbWeight::get().writes(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:2 w:2)
- // Storage: Preimage PreimageFor (r:1 w:0)
+ // Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize_aborted(s: u32, ) -> Weight {
- (8_046_000 as Weight)
- // Standard Error: 3_000
- .saturating_add((2_914_000 as Weight).saturating_mul(s as Weight))
+ (4_921_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((2_249_000 as Weight).saturating_mul(s as Weight))
.saturating_add(T::DbWeight::get().reads(2 as Weight))
- .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
+ .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
- // Storage: Scheduler Agenda (r:2 w:2)
+ // Storage: Scheduler Agenda (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
- fn on_initialize_periodic_named(s: u32, ) -> Weight {
- (13_704_000 as Weight)
- // Standard Error: 4_000
- .saturating_add((8_186_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
- }
- // Storage: Scheduler Agenda (r:2 w:2)
- fn on_initialize_periodic(s: u32, ) -> Weight {
- (12_668_000 as Weight)
- // Standard Error: 5_000
- .saturating_add((5_868_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ fn on_initialize_named_aborted(s: u32, ) -> Weight {
+ (26_934_000 as Weight)
+ // Standard Error: 7_000
+ .saturating_add((5_819_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(T::DbWeight::get().reads(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes(4 as Weight))
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
- // Storage: Scheduler Agenda (r:1 w:1)
+ // Storage: Scheduler Agenda (r:2 w:2)
// Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize_named(s: u32, ) -> Weight {
- (13_946_000 as Weight)
- // Standard Error: 4_000
- .saturating_add((4_367_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ (6_423_000 as Weight)
+ // Standard Error: 1_000
+ .saturating_add((2_141_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(T::DbWeight::get().reads(2 as Weight))
+ .saturating_add(T::DbWeight::get().writes(2 as Weight))
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
+ // Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize(s: u32, ) -> Weight {
- (13_151_000 as Weight)
- // Standard Error: 4_000
- .saturating_add((3_455_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ (27_586_000 as Weight)
+ // Standard Error: 11_000
+ .saturating_add((5_264_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(T::DbWeight::get().reads(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:1 w:1)
- fn schedule(s: u32, ) -> Weight {
- (14_040_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((89_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- }
- // Storage: Scheduler Agenda (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
- fn cancel(s: u32, ) -> Weight {
- (14_376_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((576_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(2 as Weight))
+ fn on_initialize_resolved(s: u32, ) -> Weight {
+ (24_356_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((5_301_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(T::DbWeight::get().reads(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Lookup (r:1 w:1)
// Storage: Scheduler Agenda (r:1 w:1)
fn schedule_named(s: u32, ) -> Weight {
- (16_806_000 as Weight)
+ (14_871_000 as Weight)
// Standard Error: 1_000
- .saturating_add((102_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add((183_000 as Weight).saturating_mul(s as Weight))
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
// Storage: Scheduler Lookup (r:1 w:1)
// Storage: Scheduler Agenda (r:1 w:1)
fn cancel_named(s: u32, ) -> Weight {
- (15_852_000 as Weight)
- // Standard Error: 2_000
- .saturating_add((590_000 as Weight).saturating_mul(s as Weight))
+ (16_676_000 as Weight)
+ // Standard Error: 1_000
+ .saturating_add((500_000 as Weight).saturating_mul(s as Weight))
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
@@ -216,148 +186,134 @@
// For backwards compatibility and tests
impl WeightInfo for () {
// Storage: Scheduler Agenda (r:2 w:2)
- // Storage: Preimage PreimageFor (r:1 w:1)
- // Storage: Preimage StatusFor (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize_periodic_named_resolved(s: u32, ) -> Weight {
- (11_587_000 as Weight)
- // Standard Error: 17_000
- .saturating_add((17_428_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(s as Weight)))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(s as Weight)))
+ (27_374_000 as Weight)
+ // Standard Error: 7_000
+ .saturating_add((9_673_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(RocksDbWeight::get().reads(4 as Weight))
+ .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
+ .saturating_add(RocksDbWeight::get().writes(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:1 w:1)
- // Storage: Preimage PreimageFor (r:1 w:1)
- // Storage: Preimage StatusFor (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize_named_resolved(s: u32, ) -> Weight {
- (8_965_000 as Weight)
- // Standard Error: 11_000
- .saturating_add((13_410_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(s as Weight)))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(s as Weight)))
+ (25_967_000 as Weight)
+ // Standard Error: 6_000
+ .saturating_add((5_916_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(RocksDbWeight::get().reads(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:2 w:2)
- // Storage: Preimage PreimageFor (r:1 w:1)
- // Storage: Preimage StatusFor (r:1 w:1)
- fn on_initialize_periodic_resolved(s: u32, ) -> Weight {
- (8_654_000 as Weight)
- // Standard Error: 17_000
- .saturating_add((14_990_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(s as Weight)))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(s as Weight)))
- }
- // Storage: Scheduler Agenda (r:1 w:1)
- // Storage: Preimage PreimageFor (r:1 w:1)
- // Storage: Preimage StatusFor (r:1 w:1)
- fn on_initialize_resolved(s: u32, ) -> Weight {
- (9_303_000 as Weight)
- // Standard Error: 10_000
- .saturating_add((12_244_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(s as Weight)))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
+ // Storage: Scheduler Lookup (r:0 w:1)
+ fn on_initialize_periodic(s: u32, ) -> Weight {
+ (27_097_000 as Weight)
+ // Standard Error: 5_000
+ .saturating_add((9_652_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(RocksDbWeight::get().reads(4 as Weight))
+ .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
+ .saturating_add(RocksDbWeight::get().writes(4 as Weight))
.saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:2 w:2)
- // Storage: Preimage PreimageFor (r:1 w:0)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
- fn on_initialize_named_aborted(s: u32, ) -> Weight {
- (7_506_000 as Weight)
- // Standard Error: 3_000
- .saturating_add((5_208_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(2 as Weight))
+ fn on_initialize_periodic_resolved(s: u32, ) -> Weight {
+ (43_116_000 as Weight)
+ // Standard Error: 18_000
+ .saturating_add((8_352_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
- .saturating_add(RocksDbWeight::get().writes(2 as Weight))
- .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
+ .saturating_add(RocksDbWeight::get().writes(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:2 w:2)
- // Storage: Preimage PreimageFor (r:1 w:0)
+ // Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize_aborted(s: u32, ) -> Weight {
- (8_046_000 as Weight)
- // Standard Error: 3_000
- .saturating_add((2_914_000 as Weight).saturating_mul(s as Weight))
+ (4_921_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((2_249_000 as Weight).saturating_mul(s as Weight))
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
- .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
- // Storage: Scheduler Agenda (r:2 w:2)
+ // Storage: Scheduler Agenda (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
- fn on_initialize_periodic_named(s: u32, ) -> Weight {
- (13_704_000 as Weight)
- // Standard Error: 4_000
- .saturating_add((8_186_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
- }
- // Storage: Scheduler Agenda (r:2 w:2)
- fn on_initialize_periodic(s: u32, ) -> Weight {
- (12_668_000 as Weight)
- // Standard Error: 5_000
- .saturating_add((5_868_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ fn on_initialize_named_aborted(s: u32, ) -> Weight {
+ (26_934_000 as Weight)
+ // Standard Error: 7_000
+ .saturating_add((5_819_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(RocksDbWeight::get().reads(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(4 as Weight))
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
- // Storage: Scheduler Agenda (r:1 w:1)
+ // Storage: Scheduler Agenda (r:2 w:2)
// Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize_named(s: u32, ) -> Weight {
- (13_946_000 as Weight)
- // Standard Error: 4_000
- .saturating_add((4_367_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ (6_423_000 as Weight)
+ // Standard Error: 1_000
+ .saturating_add((2_141_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(RocksDbWeight::get().reads(2 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(2 as Weight))
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
+ // Storage: Scheduler Lookup (r:0 w:1)
fn on_initialize(s: u32, ) -> Weight {
- (13_151_000 as Weight)
- // Standard Error: 4_000
- .saturating_add((3_455_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ (27_586_000 as Weight)
+ // Standard Error: 11_000
+ .saturating_add((5_264_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(RocksDbWeight::get().reads(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Agenda (r:1 w:1)
- fn schedule(s: u32, ) -> Weight {
- (14_040_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((89_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- }
- // Storage: Scheduler Agenda (r:1 w:1)
+ // Storage: System Account (r:1 w:1)
+ // Storage: System AllExtrinsicsLen (r:1 w:1)
+ // Storage: System BlockWeight (r:1 w:1)
// Storage: Scheduler Lookup (r:0 w:1)
- fn cancel(s: u32, ) -> Weight {
- (14_376_000 as Weight)
- // Standard Error: 1_000
- .saturating_add((576_000 as Weight).saturating_mul(s as Weight))
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(2 as Weight))
+ fn on_initialize_resolved(s: u32, ) -> Weight {
+ (24_356_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((5_301_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add(RocksDbWeight::get().reads(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
}
// Storage: Scheduler Lookup (r:1 w:1)
// Storage: Scheduler Agenda (r:1 w:1)
fn schedule_named(s: u32, ) -> Weight {
- (16_806_000 as Weight)
+ (14_871_000 as Weight)
// Standard Error: 1_000
- .saturating_add((102_000 as Weight).saturating_mul(s as Weight))
+ .saturating_add((183_000 as Weight).saturating_mul(s as Weight))
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
// Storage: Scheduler Lookup (r:1 w:1)
// Storage: Scheduler Agenda (r:1 w:1)
fn cancel_named(s: u32, ) -> Weight {
- (15_852_000 as Weight)
- // Standard Error: 2_000
- .saturating_add((590_000 as Weight).saturating_mul(s as Weight))
+ (16_676_000 as Weight)
+ // Standard Error: 1_000
+ .saturating_add((500_000 as Weight).saturating_mul(s as Weight))
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
pallets/structure/src/weights.rsdiffbeforeafterboth--- a/pallets/structure/src/weights.rs
+++ b/pallets/structure/src/weights.rs
@@ -3,12 +3,13 @@
//! Autogenerated weights for pallet_structure
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-24, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// target/release/unique-collator
// benchmark
+// pallet
// --pallet
// pallet-structure
// --wasm-execution
@@ -41,7 +42,7 @@
// Storage: Common CollectionById (r:1 w:0)
// Storage: Nonfungible TokenData (r:1 w:0)
fn find_parent() -> Weight {
- (6_302_000 as Weight)
+ (7_013_000 as Weight)
.saturating_add(T::DbWeight::get().reads(2 as Weight))
}
}
@@ -51,7 +52,7 @@
// Storage: Common CollectionById (r:1 w:0)
// Storage: Nonfungible TokenData (r:1 w:0)
fn find_parent() -> Weight {
- (6_302_000 as Weight)
+ (7_013_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
}
}
pallets/unique/src/lib.rsdiffbeforeafterboth--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -491,7 +491,7 @@
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;
- target_collection.check_is_owner(&sender)?;
+ target_collection.check_is_owner_or_admin(&sender)?;
target_collection.check_is_internal()?;
target_collection.set_sponsor(new_sponsor.clone())?;
@@ -670,9 +670,9 @@
dispatch_tx::<T, _>(collection_id, |d| d.delete_token_properties(sender, token_id, property_keys))
}
- #[weight = T::CommonWeightInfo::set_property_permissions(property_permissions.len() as u32)]
+ #[weight = T::CommonWeightInfo::set_token_property_permissions(property_permissions.len() as u32)]
#[transactional]
- pub fn set_property_permissions(
+ pub fn set_token_property_permissions(
origin,
collection_id: CollectionId,
property_permissions: Vec<PropertyKeyPermission>,
@@ -681,7 +681,7 @@
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
- dispatch_tx::<T, _>(collection_id, |d| d.set_property_permissions(&sender, property_permissions))
+ dispatch_tx::<T, _>(collection_id, |d| d.set_token_property_permissions(&sender, property_permissions))
}
#[weight = T::CommonWeightInfo::create_multiple_items_ex(&data)]
@@ -865,7 +865,7 @@
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;
target_collection.check_is_internal()?;
- target_collection.check_is_owner(&sender)?;
+ target_collection.check_is_owner_or_admin(&sender)?;
let old_limit = &target_collection.limits;
target_collection.limits = <PalletCommon<T>>::clamp_limits(target_collection.mode.clone(), &old_limit, new_limit)?;
@@ -887,7 +887,7 @@
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;
target_collection.check_is_internal()?;
- target_collection.check_is_owner(&sender)?;
+ target_collection.check_is_owner_or_admin(&sender)?;
let old_limit = &target_collection.permissions;
target_collection.permissions = <PalletCommon<T>>::clamp_permissions(target_collection.mode.clone(), &old_limit, new_limit)?;
pallets/unique/src/weights.rsdiffbeforeafterboth--- a/pallets/unique/src/weights.rs
+++ b/pallets/unique/src/weights.rs
@@ -3,12 +3,13 @@
//! Autogenerated weights for pallet_unique
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// target/release/unique-collator
// benchmark
+// pallet
// --pallet
// pallet-unique
// --wasm-execution
@@ -18,7 +19,7 @@
// --template
// .maintain/frame-weight-template.hbs
// --steps=50
-// --repeat=200
+// --repeat=80
// --heap-pages=4096
// --output=./pallets/unique/src/weights.rs
@@ -36,8 +37,6 @@
fn destroy_collection() -> Weight;
fn add_to_allow_list() -> Weight;
fn remove_from_allow_list() -> Weight;
- fn set_public_access_mode() -> Weight;
- fn set_mint_permission() -> Weight;
fn change_collection_owner() -> Weight;
fn add_collection_admin() -> Weight;
fn remove_collection_admin() -> Weight;
@@ -45,9 +44,6 @@
fn confirm_sponsorship() -> Weight;
fn remove_collection_sponsor() -> Weight;
fn set_transfers_enabled_flag() -> Weight;
- fn set_offchain_schema(b: u32, ) -> Weight;
- fn set_const_on_chain_schema(b: u32, ) -> Weight;
- fn set_schema_version() -> Weight;
fn set_collection_limits() -> Weight;
}
@@ -57,51 +53,43 @@
// Storage: Common CreatedCollectionCount (r:1 w:1)
// Storage: Common DestroyedCollectionCount (r:1 w:0)
// Storage: System Account (r:2 w:2)
+ // Storage: Common CollectionPropertyPermissions (r:0 w:1)
+ // Storage: Common CollectionProperties (r:0 w:1)
// Storage: Common CollectionById (r:0 w:1)
fn create_collection() -> Weight {
- (28_929_000 as Weight)
+ (39_427_000 as Weight)
.saturating_add(T::DbWeight::get().reads(4 as Weight))
- .saturating_add(T::DbWeight::get().writes(4 as Weight))
+ .saturating_add(T::DbWeight::get().writes(6 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:1 w:0)
// Storage: Common DestroyedCollectionCount (r:1 w:1)
// Storage: Nonfungible TokensMinted (r:0 w:1)
// Storage: Nonfungible TokensBurnt (r:0 w:1)
// Storage: Common AdminAmount (r:0 w:1)
+ // Storage: Common CollectionProperties (r:0 w:1)
fn destroy_collection() -> Weight {
- (40_303_000 as Weight)
- .saturating_add(T::DbWeight::get().reads(2 as Weight))
- .saturating_add(T::DbWeight::get().writes(5 as Weight))
+ (48_339_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(3 as Weight))
+ .saturating_add(T::DbWeight::get().writes(6 as Weight))
}
// Storage: Common CollectionById (r:1 w:0)
// Storage: Common Allowlist (r:0 w:1)
fn add_to_allow_list() -> Weight {
- (15_989_000 as Weight)
+ (17_379_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:0)
// Storage: Common Allowlist (r:0 w:1)
fn remove_from_allow_list() -> Weight {
- (15_582_000 as Weight)
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_public_access_mode() -> Weight {
- (14_846_000 as Weight)
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_mint_permission() -> Weight {
- (14_534_000 as Weight)
+ (17_490_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn change_collection_owner() -> Weight {
- (14_990_000 as Weight)
+ (17_701_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
@@ -109,7 +97,7 @@
// Storage: Common IsAdmin (r:1 w:1)
// Storage: Common AdminAmount (r:1 w:1)
fn add_collection_admin() -> Weight {
- (19_957_000 as Weight)
+ (23_301_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
@@ -117,55 +105,37 @@
// Storage: Common IsAdmin (r:1 w:1)
// Storage: Common AdminAmount (r:1 w:1)
fn remove_collection_admin() -> Weight {
- (21_209_000 as Weight)
+ (24_859_000 as Weight)
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn set_collection_sponsor() -> Weight {
- (14_963_000 as Weight)
+ (17_795_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn confirm_sponsorship() -> Weight {
- (14_478_000 as Weight)
+ (17_297_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn remove_collection_sponsor() -> Weight {
- (14_393_000 as Weight)
+ (17_079_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn set_transfers_enabled_flag() -> Weight {
- (7_309_000 as Weight)
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_offchain_schema(_b: u32, ) -> Weight {
- (15_220_000 as Weight)
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_const_on_chain_schema(_b: u32, ) -> Weight {
- (14_984_000 as Weight)
- .saturating_add(T::DbWeight::get().reads(1 as Weight))
- .saturating_add(T::DbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_schema_version() -> Weight {
- (14_596_000 as Weight)
+ (9_734_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn set_collection_limits() -> Weight {
- (15_339_000 as Weight)
+ (17_998_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
@@ -176,51 +146,43 @@
// Storage: Common CreatedCollectionCount (r:1 w:1)
// Storage: Common DestroyedCollectionCount (r:1 w:0)
// Storage: System Account (r:2 w:2)
+ // Storage: Common CollectionPropertyPermissions (r:0 w:1)
+ // Storage: Common CollectionProperties (r:0 w:1)
// Storage: Common CollectionById (r:0 w:1)
fn create_collection() -> Weight {
- (28_929_000 as Weight)
+ (39_427_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
- .saturating_add(RocksDbWeight::get().writes(4 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(6 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
+ // Storage: Nonfungible TokenData (r:1 w:0)
// Storage: Common DestroyedCollectionCount (r:1 w:1)
// Storage: Nonfungible TokensMinted (r:0 w:1)
// Storage: Nonfungible TokensBurnt (r:0 w:1)
// Storage: Common AdminAmount (r:0 w:1)
+ // Storage: Common CollectionProperties (r:0 w:1)
fn destroy_collection() -> Weight {
- (40_303_000 as Weight)
- .saturating_add(RocksDbWeight::get().reads(2 as Weight))
- .saturating_add(RocksDbWeight::get().writes(5 as Weight))
+ (48_339_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(3 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(6 as Weight))
}
// Storage: Common CollectionById (r:1 w:0)
// Storage: Common Allowlist (r:0 w:1)
fn add_to_allow_list() -> Weight {
- (15_989_000 as Weight)
+ (17_379_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:0)
// Storage: Common Allowlist (r:0 w:1)
fn remove_from_allow_list() -> Weight {
- (15_582_000 as Weight)
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_public_access_mode() -> Weight {
- (14_846_000 as Weight)
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_mint_permission() -> Weight {
- (14_534_000 as Weight)
+ (17_490_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn change_collection_owner() -> Weight {
- (14_990_000 as Weight)
+ (17_701_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
@@ -228,7 +190,7 @@
// Storage: Common IsAdmin (r:1 w:1)
// Storage: Common AdminAmount (r:1 w:1)
fn add_collection_admin() -> Weight {
- (19_957_000 as Weight)
+ (23_301_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
@@ -236,55 +198,37 @@
// Storage: Common IsAdmin (r:1 w:1)
// Storage: Common AdminAmount (r:1 w:1)
fn remove_collection_admin() -> Weight {
- (21_209_000 as Weight)
+ (24_859_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn set_collection_sponsor() -> Weight {
- (14_963_000 as Weight)
+ (17_795_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn confirm_sponsorship() -> Weight {
- (14_478_000 as Weight)
+ (17_297_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn remove_collection_sponsor() -> Weight {
- (14_393_000 as Weight)
+ (17_079_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
fn set_transfers_enabled_flag() -> Weight {
- (7_309_000 as Weight)
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_offchain_schema(_b: u32, ) -> Weight {
- (15_220_000 as Weight)
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
- fn set_const_on_chain_schema(_b: u32, ) -> Weight {
- (14_984_000 as Weight)
+ (9_734_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Common CollectionById (r:1 w:1)
- fn set_schema_version() -> Weight {
- (14_596_000 as Weight)
- .saturating_add(RocksDbWeight::get().reads(1 as Weight))
- .saturating_add(RocksDbWeight::get().writes(1 as Weight))
- }
- // Storage: Common CollectionById (r:1 w:1)
fn set_collection_limits() -> Weight {
- (15_339_000 as Weight)
+ (17_998_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
primitives/data-structs/src/lib.rsdiffbeforeafterboth--- a/primitives/data-structs/src/lib.rs
+++ b/primitives/data-structs/src/lib.rs
@@ -39,15 +39,15 @@
// RMRK
use rmrk_traits::{
CollectionInfo, NftInfo, ResourceInfo, PropertyInfo, BaseInfo, PartType, Theme, ThemeProperty,
- ResourceTypes, BasicResource, ComposableResource, SlotResource,
+ ResourceTypes, BasicResource, ComposableResource, SlotResource, EquippableList,
};
pub use rmrk_traits::{
primitives::{
CollectionId as RmrkCollectionId, NftId as RmrkNftId, BaseId as RmrkBaseId,
- PartId as RmrkPartId, ResourceId as RmrkResourceId,
+ SlotId as RmrkSlotId, PartId as RmrkPartId, ResourceId as RmrkResourceId,
},
NftChild as RmrkNftChild, AccountIdOrCollectionNftTuple as RmrkAccountIdOrCollectionNftTuple,
- FixedPart as RmrkFixedPart, SlotPart as RmrkSlotPart, EquippableList as RmrkEquippableList,
+ FixedPart as RmrkFixedPart, SlotPart as RmrkSlotPart,
};
mod bounded;
@@ -104,15 +104,10 @@
pub const MAX_PROPERTY_VALUE_LENGTH: u32 = 32768;
pub const MAX_PROPERTIES_PER_ITEM: u32 = 64;
+pub const MAX_AUX_PROPERTY_VALUE_LENGTH: u32 = 2048;
+
pub const MAX_COLLECTION_PROPERTIES_SIZE: u32 = 40960;
pub const MAX_TOKEN_PROPERTIES_SIZE: u32 = 32768;
-
-// RMRK constants
-pub const RMRK_STRING_LIMIT: u32 = 128;
-pub const RMRK_COLLECTION_SYMBOL_LIMIT: u32 = 100;
-pub const RMRK_RESOURCE_SYMBOL_LIMIT: u32 = 10;
-pub const RMRK_KEY_LIMIT: u32 = 32;
-pub const RMRK_VALUE_LIMIT: u32 = 256;
/// How much items can be created per single
/// create_many call
@@ -416,8 +411,11 @@
.min(MAX_SPONSOR_TIMEOUT)
}
pub fn owner_can_transfer(&self) -> bool {
- self.owner_can_transfer.unwrap_or(true)
+ self.owner_can_transfer.unwrap_or(false)
}
+ pub fn owner_can_transfer_instaled(&self) -> bool {
+ self.owner_can_transfer.is_some()
+ }
pub fn owner_can_destroy(&self) -> bool {
self.owner_can_destroy.unwrap_or(true)
}
@@ -454,7 +452,7 @@
pub fn nesting(&self) -> &NestingPermissions {
static DEFAULT: NestingPermissions = NestingPermissions {
token_owner: false,
- admin: false,
+ collection_admin: false,
restricted: None,
permissive: false,
@@ -497,7 +495,7 @@
/// Owner of token can nest tokens under it
pub token_owner: bool,
/// Admin of token collection can nest tokens under token
- pub admin: bool,
+ pub collection_admin: bool,
/// If set - only tokens from specified collections can be nested
pub restricted: Option<OwnerRestrictedSet>,
@@ -658,8 +656,12 @@
}
}
-pub type PropertyKey = BoundedVec<u8, ConstU32<MAX_PROPERTY_KEY_LENGTH>>;
-pub type PropertyValue = BoundedVec<u8, ConstU32<MAX_PROPERTY_VALUE_LENGTH>>;
+pub type BoundedBytes<S> = BoundedVec<u8, S>;
+
+pub type AuxPropertyValue = BoundedBytes<ConstU32<MAX_AUX_PROPERTY_VALUE_LENGTH>>;
+
+pub type PropertyKey = BoundedBytes<ConstU32<MAX_PROPERTY_KEY_LENGTH>>;
+pub type PropertyValue = BoundedBytes<ConstU32<MAX_PROPERTY_VALUE_LENGTH>>;
#[derive(Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone)]
#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
@@ -719,7 +721,7 @@
EmptyPropertyKey,
}
-#[derive(Clone, Copy)]
+#[derive(Encode, Decode, MaxEncodedLen, TypeInfo, PartialEq, Clone, Copy)]
pub enum PropertyScope {
None,
Rmrk,
@@ -812,7 +814,7 @@
for byte in key.as_slice().iter() {
let byte = *byte;
- if !byte.is_ascii_alphanumeric() && byte != b'_' && byte != b'-' {
+ if !byte.is_ascii_alphanumeric() && byte != b'_' && byte != b'-' && byte != b'.' {
return Err(PropertiesError::InvalidCharacterInPropertyKey);
}
}
@@ -946,19 +948,25 @@
#[derive(PartialEq, TypeInfo)]
pub const RmrkStringLimit: u32 = 128;
#[derive(PartialEq)]
- pub const RmrkCollectionSymbolLimit: u32 = 100;
+ pub const RmrkCollectionSymbolLimit: u32 = MAX_TOKEN_PREFIX_LENGTH;
#[derive(PartialEq)]
pub const RmrkResourceSymbolLimit: u32 = 10;
#[derive(PartialEq)]
+ pub const RmrkBaseSymbolLimit: u32 = MAX_TOKEN_PREFIX_LENGTH;
+ #[derive(PartialEq)]
pub const RmrkKeyLimit: u32 = 32;
#[derive(PartialEq)]
pub const RmrkValueLimit: u32 = 256;
#[derive(PartialEq)]
pub const RmrkMaxCollectionsEquippablePerPart: u32 = 100;
#[derive(PartialEq)]
- pub const RmrkPartsLimit: u32 = 3;
+ pub const MaxPropertiesPerTheme: u32 = 5;
+ #[derive(PartialEq)]
+ pub const RmrkPartsLimit: u32 = 25;
#[derive(PartialEq)]
- pub const RmrkMaxPriorities: u32 = 3;
+ pub const RmrkMaxPriorities: u32 = 25;
+ #[derive(PartialEq)]
+ pub const MaxResourcesOnMint: u32 = 100;
}
impl From<RmrkCollectionId> for CollectionId {
@@ -979,10 +987,13 @@
pub type RmrkResourceInfo = ResourceInfo<RmrkString, RmrkBoundedParts>;
pub type RmrkPropertyInfo = PropertyInfo<RmrkKeyString, RmrkValueString>;
pub type RmrkBaseInfo<AccountId> = BaseInfo<AccountId, RmrkString>;
-pub type RmrkPartType =
- PartType<RmrkString, BoundedVec<RmrkCollectionId, RmrkMaxCollectionsEquippablePerPart>>;
+pub type BoundedEquippableCollectionIds =
+ BoundedVec<RmrkCollectionId, RmrkMaxCollectionsEquippablePerPart>;
+pub type RmrkPartType = PartType<RmrkString, BoundedEquippableCollectionIds>;
+pub type RmrkEquippableList = EquippableList<BoundedEquippableCollectionIds>;
pub type RmrkThemeProperty = ThemeProperty<RmrkString>;
pub type RmrkTheme = Theme<RmrkString, Vec<RmrkThemeProperty>>;
+pub type RmrkBoundedTheme = Theme<RmrkString, BoundedVec<RmrkThemeProperty, MaxPropertiesPerTheme>>;
pub type RmrkResourceTypes = ResourceTypes<RmrkString, RmrkBoundedParts>;
pub type RmrkBasicResource = BasicResource<RmrkString>;
@@ -991,6 +1002,7 @@
pub type RmrkString = BoundedVec<u8, RmrkStringLimit>;
pub type RmrkCollectionSymbol = BoundedVec<u8, RmrkCollectionSymbolLimit>;
+pub type RmrkBaseSymbol = BoundedVec<u8, RmrkBaseSymbolLimit>;
pub type RmrkKeyString = BoundedVec<u8, RmrkKeyLimit>;
pub type RmrkValueString = BoundedVec<u8, RmrkValueLimit>;
pub type RmrkBoundedResource = BoundedVec<u8, RmrkResourceSymbolLimit>;
runtime/common/Cargo.tomldiffbeforeafterboth--- a/runtime/common/Cargo.toml
+++ b/runtime/common/Cargo.toml
@@ -6,7 +6,7 @@
license = 'All Rights Reserved'
name = 'unique-runtime-common'
repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.22'
+version = '0.9.23'
[features]
default = ['std']
@@ -89,6 +89,10 @@
default-features = false
path = "../../pallets/refungible"
+[dependencies.pallet-unique-scheduler]
+default-features = false
+path = "../../pallets/scheduler"
+
[dependencies.up-data-structs]
default-features = false
path = "../../primitives/data-structs"
runtime/common/src/constants.rsdiffbeforeafterboth--- a/runtime/common/src/constants.rs
+++ b/runtime/common/src/constants.rs
@@ -38,7 +38,7 @@
pub const WEIGHT_TO_FEE_COEFF: u32 = 142_688_000;
// Targeting 0.15 UNQ per transfer
-pub const MIN_GAS_PRICE: u64 = 1_018_751_825_264;
+pub const MIN_GAS_PRICE: u64 = 1_019_493_469_850;
/// 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.
runtime/common/src/dispatch.rsdiffbeforeafterboth--- a/runtime/common/src/dispatch.rs
+++ b/runtime/common/src/dispatch.rs
@@ -112,6 +112,7 @@
+ pallet_fungible::Config
+ pallet_nonfungible::Config
+ pallet_refungible::Config,
+ T::AccountId: From<[u8; 32]>,
{
fn is_reserved(target: &H160) -> bool {
map_eth_to_id(target).is_some()
runtime/common/src/runtime_apis.rsdiffbeforeafterboth--- a/runtime/common/src/runtime_apis.rs
+++ b/runtime/common/src/runtime_apis.rs
@@ -144,396 +144,6 @@
}
}
- impl rmrk_rpc::RmrkApi<
- Block,
- AccountId,
- RmrkCollectionInfo<AccountId>,
- RmrkInstanceInfo<AccountId>,
- RmrkResourceInfo,
- RmrkPropertyInfo,
- RmrkBaseInfo<AccountId>,
- RmrkPartType,
- RmrkTheme
- > for Runtime {
- fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {
- Ok(RmrkCore::last_collection_idx())
- }
-
- fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {
- use pallet_proxy_rmrk_core::{RmrkProperty, misc::CollectionType};
- use pallet_common::CommonCollectionOperations;
-
- let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(collection_id, CollectionType::Regular) {
- Ok(c) => c,
- Err(_) => return Ok(None),
- };
-
- let nfts_count = collection.total_supply();
-
- Ok(Some(RmrkCollectionInfo {
- issuer: collection.owner.clone(),
- metadata: RmrkCore::get_collection_property_decoded(collection_id, RmrkProperty::Metadata)?,
- max: collection.limits.token_limit,
- symbol: RmrkCore::rebind(&collection.token_prefix)?,
- nfts_count
- }))
- }
-
- fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {
- use up_data_structs::mapping::TokenAddressMapping;
- use pallet_proxy_rmrk_core::{RmrkProperty, misc::CollectionType};
- use pallet_common::CommonCollectionOperations;
-
- let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(collection_id, CollectionType::Regular) {
- Ok(c) => c,
- Err(_) => return Ok(None),
- };
-
- let nft_id = TokenId(nft_by_id);
- if !RmrkCore::nft_exists(collection_id, nft_id) { return Ok(None); }
-
- let owner = match collection.token_owner(nft_id) {
- Some(owner) => match <Runtime as pallet_common::Config>::CrossTokenAddressMapping::address_to_token(&owner) {
- Some((col, tok)) => {
- let rmrk_collection = RmrkCore::rmrk_collection_id(col)?;
-
- RmrkAccountIdOrCollectionNftTuple::CollectionAndNftTuple(rmrk_collection, tok.0)
- }
- None => RmrkAccountIdOrCollectionNftTuple::AccountId(owner.as_sub().clone())
- },
- None => return Ok(None)
- };
-
- Ok(Some(RmrkInstanceInfo {
- owner: owner,
- royalty: RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::RoyaltyInfo)?,
- metadata: RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::Metadata)?,
- equipped: RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::Equipped)?,
- pending: RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::PendingNftAccept)?,
- }))
- }
-
- fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {
- use pallet_proxy_rmrk_core::{RmrkProperty, misc::CollectionType};
- use pallet_common::CommonCollectionOperations;
-
- let cross_account_id = CrossAccountId::from_sub(account_id);
-
- let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(collection_id, CollectionType::Regular) {
- Ok(c) => c,
- Err(_) => return Ok(Vec::new()),
- };
-
- let tokens = collection.account_tokens(cross_account_id)
- .into_iter()
- .filter(|token| {
- let is_pending = RmrkCore::get_nft_property_decoded(
- collection_id,
- *token,
- RmrkProperty::PendingNftAccept
- ).unwrap_or(true);
-
- !is_pending
- })
- .map(|token| token.0)
- .collect();
-
- Ok(tokens)
- }
-
- fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {
- use pallet_proxy_rmrk_core::RmrkProperty;
-
- let collection_id = match RmrkCore::unique_collection_id(collection_id) {
- Ok(id) => id,
- Err(_) => return Ok(Vec::new())
- };
- let nft_id = TokenId(nft_id);
- if !RmrkCore::nft_exists(collection_id, nft_id) { return Ok(Vec::new()); }
-
- Ok(
- pallet_nonfungible::TokenChildren::<Runtime>::iter_prefix((collection_id, nft_id))
- .filter_map(|((child_collection, child_token), _)| {
- let is_pending = RmrkCore::get_nft_property_decoded(
- child_collection,
- child_token,
- RmrkProperty::PendingNftAccept
- ).ok()?;
-
- if is_pending {
- return None;
- }
-
- let rmrk_child_collection = RmrkCore::rmrk_collection_id(
- child_collection
- ).ok()?;
-
- Some(RmrkNftChild {
- collection_id: rmrk_child_collection,
- nft_id: child_token.0,
- })
- }).collect()
- )
- }
-
- fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
- use pallet_proxy_rmrk_core::misc::CollectionType;
-
- let collection_id = match RmrkCore::unique_collection_id(collection_id) {
- Ok(id) => id,
- Err(_) => return Ok(Vec::new())
- };
- if RmrkCore::ensure_collection_type(collection_id, CollectionType::Regular).is_err() {
- return Ok(Vec::new());
- }
-
- let properties = RmrkCore::filter_user_properties(
- collection_id,
- /* token_id = */ None,
- filter_keys,
- |key, value| RmrkPropertyInfo {
- key,
- value
- }
- )?;
-
- Ok(properties)
- }
-
- fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
- use pallet_proxy_rmrk_core::misc::NftType;
-
- let collection_id = match RmrkCore::unique_collection_id(collection_id) {
- Ok(id) => id,
- Err(_) => return Ok(Vec::new())
- };
- let token_id = TokenId(nft_id);
-
- if RmrkCore::ensure_nft_type(collection_id, token_id, NftType::Regular).is_err() {
- return Ok(Vec::new());
- }
-
- let properties = RmrkCore::filter_user_properties(
- collection_id,
- Some(token_id),
- filter_keys,
- |key, value| RmrkPropertyInfo {
- key,
- value
- }
- )?;
-
- Ok(properties)
- }
-
- fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
- use pallet_proxy_rmrk_core::{RmrkProperty, misc::{CollectionType, NftType, ResourceType}};
- use pallet_common::CommonCollectionOperations;
-
- let collection_id = match RmrkCore::unique_collection_id(collection_id) {
- Ok(id) => id,
- Err(_) => return Ok(Vec::new())
- };
- if RmrkCore::ensure_collection_type(collection_id, CollectionType::Regular).is_err() { return Ok(Vec::new()); }
-
- let nft_id = TokenId(nft_id);
- if RmrkCore::ensure_nft_type(collection_id, nft_id, NftType::Regular).is_err() { return Ok(Vec::new()); }
-
- let res_collection_id: CollectionId = RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::ResourceCollection)?;
- let resource_collection = RmrkCore::get_typed_nft_collection(res_collection_id, CollectionType::Resource)?;
-
- let resources = resource_collection
- .collection_tokens()
- .iter()
- .filter_map(|(res_id)| Some(RmrkResourceInfo {
- id: res_id.0,
- pending: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::PendingResourceAccept).ok()?,
- pending_removal: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::PendingResourceRemoval).ok()?,
- resource: match RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::ResourceType).ok()? {
- ResourceType::Basic => RmrkResourceTypes::Basic(RmrkBasicResource {
- src: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Src).ok()?,
- metadata: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Metadata).ok()?,
- license: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::License).ok()?,
- thumb: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Thumb).ok()?,
- }),
- ResourceType::Composable => RmrkResourceTypes::Composable(RmrkComposableResource {
- parts: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Parts).ok()?,
- base: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Base).ok()?,
- src: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Src).ok()?,
- metadata: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Metadata).ok()?,
- license: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::License).ok()?,
- thumb: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Thumb).ok()?,
- }),
- ResourceType::Slot => RmrkResourceTypes::Slot(RmrkSlotResource {
- base: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Base).ok()?,
- src: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Src).ok()?,
- metadata: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Metadata).ok()?,
- slot: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Slot).ok()?,
- license: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::License).ok()?,
- thumb: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Thumb).ok()?,
- }),
- },
- }))
- .collect();
-
- Ok(resources)
- }
-
- fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {
- use pallet_proxy_rmrk_core::{RmrkProperty, misc::{CollectionType, NftType}};
-
- let collection_id = match RmrkCore::unique_collection_id(collection_id) {
- Ok(id) => id,
- Err(_) => return Ok(None)
- };
- if RmrkCore::ensure_collection_type(collection_id, CollectionType::Regular).is_err() { return Ok(None); }
-
- let nft_id = TokenId(nft_id);
- if RmrkCore::ensure_nft_type(collection_id, nft_id, NftType::Regular).is_err() { return Ok(None); }
-
- let priorities: Vec<_> = RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::ResourcePriorities)?;
- Ok(
- priorities.into_iter()
- .enumerate()
- .find(|(_, id)| *id == resource_id)
- .map(|(priority, _): (usize, RmrkResourceId)| priority as u32)
- )
- }
-
- fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {
- use pallet_proxy_rmrk_core::{
- RmrkProperty, misc::{CollectionType},
- };
-
- let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(base_id, CollectionType::Base) {
- Ok(c) => c,
- Err(_) => return Ok(None),
- };
-
- Ok(Some(RmrkBaseInfo {
- issuer: collection.owner.clone(),
- base_type: RmrkCore::get_collection_property_decoded(collection_id, RmrkProperty::BaseType)?,
- symbol: RmrkCore::rebind(&collection.token_prefix)?,
- }))
- }
-
- fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
- use pallet_proxy_rmrk_core::{RmrkProperty, misc::{CollectionType, NftType}};
- use pallet_common::CommonCollectionOperations;
-
- let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(base_id, CollectionType::Base) {
- Ok(c) => c,
- Err(_) => return Ok(Vec::new()),
- };
-
- let parts = collection.collection_tokens()
- .into_iter()
- .filter_map(|token_id| {
- let nft_type = RmrkCore::get_nft_type(collection_id, token_id).ok()?;
-
- match nft_type {
- NftType::FixedPart => Some(RmrkPartType::FixedPart(RmrkFixedPart {
- id: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::ExternalPartId).ok()?,
- src: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::Src).ok()?,
- z: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::ZIndex).ok()?,
- })),
- NftType::SlotPart => Some(RmrkPartType::SlotPart(RmrkSlotPart {
- id: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::ExternalPartId).ok()?,
- src: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::Src).ok()?,
- z: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::ZIndex).ok()?,
- equippable: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::EquippableList).ok()?,
- })),
- _ => None
- }
- })
- .collect();
-
- Ok(parts)
- }
-
- fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
- use pallet_proxy_rmrk_core::{RmrkProperty, misc::CollectionType};
- use pallet_common::CommonCollectionOperations;
-
- let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(base_id, CollectionType::Base) {
- Ok(c) => c,
- Err(_) => return Ok(Vec::new()),
- };
-
- let theme_names = collection.collection_tokens()
- .iter()
- .filter_map(|token_id| {
- let nft_type = RmrkCore::get_nft_type(collection_id, *token_id).ok()?;
-
- match nft_type {
- Theme => RmrkCore::get_nft_property_decoded(collection_id, *token_id, RmrkProperty::ThemeName).ok(),
- _ => None
- }
- })
- .collect();
-
- Ok(theme_names)
- }
-
- fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {
- use pallet_proxy_rmrk_core::{
- RmrkProperty,
- misc::{CollectionType, NftType}
- };
- use pallet_common::CommonCollectionOperations;
-
- let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(base_id, CollectionType::Base) {
- Ok(c) => c,
- Err(_) => return Ok(None),
- };
-
- let theme_info = collection.collection_tokens()
- .into_iter()
- .find_map(|token_id| {
- RmrkCore::ensure_nft_type(collection_id, token_id, NftType::Theme).ok()?;
-
- let name: RmrkString = RmrkCore::get_nft_property_decoded(
- collection_id, token_id, RmrkProperty::ThemeName
- ).ok()?;
-
- if name == theme_name {
- Some((name, token_id))
- } else {
- None
- }
- });
-
- let (name, theme_id) = match theme_info {
- Some((name, theme_id)) => (name, theme_id),
- None => return Ok(None)
- };
-
- let properties = RmrkCore::filter_user_properties(
- collection_id,
- Some(theme_id),
- filter_keys,
- |key, value| RmrkThemeProperty {
- key,
- value
- }
- )?;
-
- let inherit = RmrkCore::get_nft_property_decoded(
- collection_id,
- theme_id,
- RmrkProperty::ThemeInherit
- )?;
-
- let theme = RmrkTheme {
- name,
- properties,
- inherit,
- };
-
- Ok(Some(theme))
- }
- }
-
impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion {
VERSION
@@ -843,7 +453,14 @@
list_benchmark!(list, extra, pallet_fungible, Fungible);
list_benchmark!(list, extra, pallet_refungible, Refungible);
list_benchmark!(list, extra, pallet_nonfungible, Nonfungible);
+ list_benchmark!(list, extra, pallet_unique_scheduler, Scheduler);
+
+ #[cfg(not(feature = "unique-runtime"))]
list_benchmark!(list, extra, pallet_proxy_rmrk_core, RmrkCore);
+
+ #[cfg(not(feature = "unique-runtime"))]
+ list_benchmark!(list, extra, pallet_proxy_rmrk_equip, RmrkEquip);
+
// list_benchmark!(list, extra, pallet_evm_coder_substrate, EvmCoderSubstrate);
let storage_info = AllPalletsReversedWithSystemFirst::storage_info();
@@ -887,7 +504,14 @@
add_benchmark!(params, batches, pallet_fungible, Fungible);
add_benchmark!(params, batches, pallet_refungible, Refungible);
add_benchmark!(params, batches, pallet_nonfungible, Nonfungible);
+ add_benchmark!(params, batches, pallet_unique_scheduler, Scheduler);
+
+ #[cfg(not(feature = "unique-runtime"))]
add_benchmark!(params, batches, pallet_proxy_rmrk_core, RmrkCore);
+
+ #[cfg(not(feature = "unique-runtime"))]
+ add_benchmark!(params, batches, pallet_proxy_rmrk_equip, RmrkEquip);
+
// add_benchmark!(params, batches, pallet_evm_coder_substrate, EvmCoderSubstrate);
if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }
runtime/common/src/weights.rsdiffbeforeafterboth--- a/runtime/common/src/weights.rs
+++ b/runtime/common/src/weights.rs
@@ -70,8 +70,8 @@
dispatch_weight::<T>() + max_weight_of!(delete_token_properties(amount))
}
- fn set_property_permissions(amount: u32) -> Weight {
- dispatch_weight::<T>() + max_weight_of!(set_property_permissions(amount))
+ fn set_token_property_permissions(amount: u32) -> Weight {
+ dispatch_weight::<T>() + max_weight_of!(set_token_property_permissions(amount))
}
fn transfer() -> Weight {
runtime/opal/Cargo.tomldiffbeforeafterboth--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -10,7 +10,7 @@
license = 'GPLv3'
name = 'opal-runtime'
repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.22'
+version = '0.9.23'
[package.metadata.docs.rs]
targets = ['x86_64-unknown-linux-gnu']
@@ -34,8 +34,10 @@
'pallet-refungible/runtime-benchmarks',
'pallet-nonfungible/runtime-benchmarks',
'pallet-proxy-rmrk-core/runtime-benchmarks',
+ 'pallet-proxy-rmrk-equip/runtime-benchmarks',
'pallet-unique/runtime-benchmarks',
'pallet-inflation/runtime-benchmarks',
+ 'pallet-unique-scheduler/runtime-benchmarks',
'pallet-xcm/runtime-benchmarks',
'sp-runtime/runtime-benchmarks',
'xcm-builder/runtime-benchmarks',
@@ -93,7 +95,7 @@
'pallet-proxy-rmrk-core/std',
'pallet-proxy-rmrk-equip/std',
'pallet-unique/std',
- 'pallet-unq-scheduler/std',
+ 'pallet-unique-scheduler/std',
'pallet-charge-transaction/std',
'up-data-structs/std',
'sp-api/std',
@@ -412,7 +414,7 @@
pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
pallet-proxy-rmrk-core = { default-features = false, path = "../../pallets/proxy-rmrk-core", package = "pallet-rmrk-core" }
pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
-pallet-unq-scheduler = { path = '../../pallets/scheduler', default-features = false }
+pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.23", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
runtime/opal/src/lib.rsdiffbeforeafterboth--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -69,16 +69,14 @@
WeightToFee,
},
};
-use pallet_unq_scheduler::DispatchCall;
+use pallet_unique_scheduler::DispatchCall;
use up_data_structs::{
CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,
CollectionStats, RpcCollection,
mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},
TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,
- RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkThemeProperty, RmrkCollectionId,
- RmrkNftId, RmrkAccountIdOrCollectionNftTuple, RmrkNftChild, RmrkPropertyKey, RmrkResourceTypes,
- RmrkBasicResource, RmrkComposableResource, RmrkSlotResource, RmrkResourceId, RmrkBaseId,
- RmrkFixedPart, RmrkSlotPart, RmrkString,
+ RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkCollectionId, RmrkNftId,
+ RmrkNftChild, RmrkPropertyKey, RmrkResourceId, RmrkBaseId,
};
// use pallet_contracts::weights::WeightInfo;
@@ -194,7 +192,7 @@
spec_name: create_runtime_str!(RUNTIME_NAME),
impl_name: create_runtime_str!(RUNTIME_NAME),
authoring_version: 1,
- spec_version: 922000,
+ spec_version: 923000,
impl_version: 0,
apis: RUNTIME_API_VERSIONS,
transaction_version: 1,
@@ -920,6 +918,7 @@
}
impl pallet_proxy_rmrk_equip::Config for Runtime {
+ type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight<Self>;
type Event = Event;
}
@@ -965,7 +964,7 @@
}
pub struct SchedulerPaymentExecutor;
-impl<T: frame_system::Config + pallet_unq_scheduler::Config, SelfContainedSignedInfo>
+impl<T: frame_system::Config + pallet_unique_scheduler::Config, SelfContainedSignedInfo>
DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor
where
<T as frame_system::Config>::Call: Member
@@ -975,13 +974,13 @@
+ From<frame_system::Call<Runtime>>,
SelfContainedSignedInfo: Send + Sync + 'static,
Call: From<<T as frame_system::Config>::Call>
- + From<<T as pallet_unq_scheduler::Config>::Call>
+ + From<<T as pallet_unique_scheduler::Config>::Call>
+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,
sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,
{
fn dispatch_call(
signer: <T as frame_system::Config>::AccountId,
- call: <T as pallet_unq_scheduler::Config>::Call,
+ call: <T as pallet_unique_scheduler::Config>::Call,
) -> Result<
Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,
TransactionValidityError,
@@ -1007,7 +1006,7 @@
fn reserve_balance(
id: [u8; 16],
sponsor: <T as frame_system::Config>::AccountId,
- call: <T as pallet_unq_scheduler::Config>::Call,
+ call: <T as pallet_unique_scheduler::Config>::Call,
count: u32,
) -> Result<(), DispatchError> {
let dispatch_info = call.get_dispatch_info();
@@ -1024,7 +1023,7 @@
fn pay_for_call(
id: [u8; 16],
sponsor: <T as frame_system::Config>::AccountId,
- call: <T as pallet_unq_scheduler::Config>::Call,
+ call: <T as pallet_unique_scheduler::Config>::Call,
) -> Result<u128, DispatchError> {
let dispatch_info = call.get_dispatch_info();
let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);
@@ -1065,7 +1064,7 @@
}
}
-impl pallet_unq_scheduler::Config for Runtime {
+impl pallet_unique_scheduler::Config for Runtime {
type Event = Event;
type Origin = Origin;
type Currency = Balances;
@@ -1154,7 +1153,7 @@
// Unique Pallets
Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,
Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,
- Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
+ Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
// free = 63
Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,
// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
@@ -1311,7 +1310,73 @@
}};
}
-impl_common_runtime_apis!();
+impl_common_runtime_apis! {
+ #![custom_apis]
+
+ impl rmrk_rpc::RmrkApi<
+ Block,
+ AccountId,
+ RmrkCollectionInfo<AccountId>,
+ RmrkInstanceInfo<AccountId>,
+ RmrkResourceInfo,
+ RmrkPropertyInfo,
+ RmrkBaseInfo<AccountId>,
+ RmrkPartType,
+ RmrkTheme
+ > for Runtime {
+ fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::last_collection_idx::<Runtime>()
+ }
+
+ fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::collection_by_id::<Runtime>(collection_id)
+ }
+
+ fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::nft_by_id::<Runtime>(collection_id, nft_by_id)
+ }
+
+ fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::account_tokens::<Runtime>(account_id, collection_id)
+ }
+
+ fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::nft_children::<Runtime>(collection_id, nft_id)
+ }
+
+ fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::collection_properties::<Runtime>(collection_id, filter_keys)
+ }
+
+ fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::nft_properties::<Runtime>(collection_id, nft_id, filter_keys)
+ }
+
+ fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::nft_resources::<Runtime>(collection_id, nft_id)
+ }
+
+ fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {
+ pallet_proxy_rmrk_core::rpc::nft_resource_priority::<Runtime>(collection_id, nft_id, resource_id)
+ }
+
+ fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {
+ pallet_proxy_rmrk_equip::rpc::base::<Runtime>(base_id)
+ }
+
+ fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
+ pallet_proxy_rmrk_equip::rpc::base_parts::<Runtime>(base_id)
+ }
+
+ fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
+ pallet_proxy_rmrk_equip::rpc::theme_names::<Runtime>(base_id)
+ }
+
+ fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {
+ pallet_proxy_rmrk_equip::rpc::theme::<Runtime>(base_id, theme_name, filter_keys)
+ }
+ }
+}
struct CheckInherents;
runtime/quartz/Cargo.tomldiffbeforeafterboth--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -10,7 +10,7 @@
license = 'GPLv3'
name = 'quartz-runtime'
repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.22'
+version = '0.9.23'
[package.metadata.docs.rs]
targets = ['x86_64-unknown-linux-gnu']
@@ -37,6 +37,7 @@
'pallet-proxy-rmrk-equip/runtime-benchmarks',
'pallet-unique/runtime-benchmarks',
'pallet-inflation/runtime-benchmarks',
+ 'pallet-unique-scheduler/runtime-benchmarks',
'pallet-xcm/runtime-benchmarks',
'sp-runtime/runtime-benchmarks',
'xcm-builder/runtime-benchmarks',
@@ -94,7 +95,7 @@
'pallet-proxy-rmrk-core/std',
'pallet-proxy-rmrk-equip/std',
'pallet-unique/std',
- 'pallet-unq-scheduler/std',
+ 'pallet-unique-scheduler/std',
'pallet-charge-transaction/std',
'up-data-structs/std',
'sp-api/std',
@@ -419,7 +420,7 @@
pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
pallet-proxy-rmrk-core = { default-features = false, path = "../../pallets/proxy-rmrk-core", package = "pallet-rmrk-core" }
pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
-pallet-unq-scheduler = { path = '../../pallets/scheduler', default-features = false }
+pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.23", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
runtime/quartz/src/lib.rsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! The Substrate Node Template runtime. This can be compiled with `#[no_std]`, ready for Wasm.1819#![cfg_attr(not(feature = "std"), no_std)]20// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256.21#![recursion_limit = "1024"]22#![allow(clippy::from_over_into, clippy::identity_op)]23#![allow(clippy::fn_to_numeric_cast_with_truncation)]24// Make the WASM binary available.25#[cfg(feature = "std")]26include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));2728use sp_api::impl_runtime_apis;29use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H256, U256, H160};30use sp_runtime::DispatchError;31use fp_self_contained::*;32// #[cfg(any(feature = "std", test))]33// pub use sp_runtime::BuildStorage;3435use sp_runtime::{36 Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys,37 traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member},38 transaction_validity::{TransactionSource, TransactionValidity},39 ApplyExtrinsicResult, RuntimeAppPublic,40};4142use sp_std::prelude::*;4344#[cfg(feature = "std")]45use sp_version::NativeVersion;46use sp_version::RuntimeVersion;47pub use pallet_transaction_payment::{48 Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo,49};50// A few exports that help ease life for downstream crates.51pub use pallet_balances::Call as BalancesCall;52pub use pallet_evm::{53 EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _,54 OnMethodCall, Account as EVMAccount, FeeCalculator, GasWeightMapping,55};56pub use frame_support::{57 construct_runtime, match_types,58 dispatch::DispatchResult,59 PalletId, parameter_types, StorageValue, ConsensusEngineId,60 traits::{61 tokens::currency::Currency as CurrencyT, OnUnbalanced as OnUnbalancedT, Everything,62 Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem, LockIdentifier,63 OnUnbalanced, Randomness, FindAuthor, ConstU32, Imbalance, PrivilegeCmp,64 },65 weights::{66 constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},67 DispatchClass, DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,68 WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients, ConstantMultiplier,69 WeightToFee,70 },71};72use pallet_unq_scheduler::DispatchCall;73use up_data_structs::{74 CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,75 CollectionStats, RpcCollection,76 mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},77 TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,78 RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkThemeProperty, RmrkCollectionId,79 RmrkNftId, RmrkAccountIdOrCollectionNftTuple, RmrkNftChild, RmrkPropertyKey, RmrkResourceTypes,80 RmrkBasicResource, RmrkComposableResource, RmrkSlotResource, RmrkResourceId, RmrkBaseId,81 RmrkFixedPart, RmrkSlotPart, RmrkString,82};8384// use pallet_contracts::weights::WeightInfo;85// #[cfg(any(feature = "std", test))]86use frame_system::{87 self as frame_system, EnsureRoot, EnsureSigned,88 limits::{BlockWeights, BlockLength},89};90use sp_arithmetic::{91 traits::{BaseArithmetic, Unsigned},92};93use smallvec::smallvec;94use codec::{Encode, Decode};95use fp_rpc::TransactionStatus;96use sp_runtime::{97 traits::{98 Applyable, BlockNumberProvider, Dispatchable, PostDispatchInfoOf, DispatchInfoOf,99 Saturating, CheckedConversion,100 },101 generic::Era,102 transaction_validity::TransactionValidityError,103 DispatchErrorWithPostInfo, SaturatedConversion,104};105106// pub use pallet_timestamp::Call as TimestampCall;107pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;108109// Polkadot imports110use pallet_xcm::XcmPassthrough;111use polkadot_parachain::primitives::Sibling;112use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};113use xcm_builder::{114 AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,115 EnsureXcmOrigin, FixedWeightBounds, LocationInverter, NativeAsset, ParentAsSuperuser,116 RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,117 SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit,118 ParentIsPreset,119};120use xcm_executor::{Config, XcmExecutor, Assets};121use sp_std::{cmp::Ordering, marker::PhantomData};122123use xcm::latest::{124 // Xcm,125 AssetId::{Concrete},126 Fungibility::Fungible as XcmFungible,127 MultiAsset,128 Error as XcmError,129};130use xcm_executor::traits::{MatchesFungible, WeightTrader};131132use unique_runtime_common::{133 impl_common_runtime_apis,134 types::*,135 constants::*,136 dispatch::{CollectionDispatchT, CollectionDispatch},137 sponsoring::UniqueSponsorshipHandler,138 eth_sponsoring::UniqueEthSponsorshipHandler,139 weights::CommonWeights,140};141142pub const RUNTIME_NAME: &str = "quartz";143pub const TOKEN_SYMBOL: &str = "QTZ";144145type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;146147impl RuntimeInstance for Runtime {148 type CrossAccountId = self::CrossAccountId;149150 type TransactionConverter = self::TransactionConverter;151152 fn get_transaction_converter() -> TransactionConverter {153 TransactionConverter154 }155}156157/// The type for looking up accounts. We don't expect more than 4 billion of them, but you158/// never know...159pub type AccountIndex = u32;160161/// Balance of an account.162pub type Balance = u128;163164/// Index of a transaction in the chain.165pub type Index = u32;166167/// A hash of some data used by the chain.168pub type Hash = sp_core::H256;169170/// Digest item type.171pub type DigestItem = generic::DigestItem;172173/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know174/// the specifics of the runtime. They can then be made to be agnostic over specific formats175/// of data like extrinsics, allowing for them to continue syncing the network through upgrades176/// to even the core data structures.177pub mod opaque {178 use sp_std::prelude::*;179 use sp_runtime::impl_opaque_keys;180 use super::Aura;181182 pub use unique_runtime_common::types::*;183184 impl_opaque_keys! {185 pub struct SessionKeys {186 pub aura: Aura,187 }188 }189}190191/// This runtime version.192pub const VERSION: RuntimeVersion = RuntimeVersion {193 spec_name: create_runtime_str!(RUNTIME_NAME),194 impl_name: create_runtime_str!(RUNTIME_NAME),195 authoring_version: 1,196 spec_version: 922000,197 impl_version: 0,198 apis: RUNTIME_API_VERSIONS,199 transaction_version: 1,200 state_version: 0,201};202203#[derive(codec::Encode, codec::Decode)]204pub enum XCMPMessage<XAccountId, XBalance> {205 /// Transfer tokens to the given account from the Parachain account.206 TransferToken(XAccountId, XBalance),207}208209/// The version information used to identify this runtime when compiled natively.210#[cfg(feature = "std")]211pub fn native_version() -> NativeVersion {212 NativeVersion {213 runtime_version: VERSION,214 can_author_with: Default::default(),215 }216}217218type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;219220pub struct DealWithFees;221impl OnUnbalanced<NegativeImbalance> for DealWithFees {222 fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item = NegativeImbalance>) {223 if let Some(fees) = fees_then_tips.next() {224 // for fees, 100% to treasury225 let mut split = fees.ration(100, 0);226 if let Some(tips) = fees_then_tips.next() {227 // for tips, if any, 100% to treasury228 tips.ration_merge_into(100, 0, &mut split);229 }230 Treasury::on_unbalanced(split.0);231 // Author::on_unbalanced(split.1);232 }233 }234}235236parameter_types! {237 pub const BlockHashCount: BlockNumber = 2400;238 pub RuntimeBlockLength: BlockLength =239 BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);240 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);241 pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;242 pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()243 .base_block(BlockExecutionWeight::get())244 .for_class(DispatchClass::all(), |weights| {245 weights.base_extrinsic = ExtrinsicBaseWeight::get();246 })247 .for_class(DispatchClass::Normal, |weights| {248 weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);249 })250 .for_class(DispatchClass::Operational, |weights| {251 weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);252 // Operational transactions have some extra reserved space, so that they253 // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.254 weights.reserved = Some(255 MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT256 );257 })258 .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)259 .build_or_panic();260 pub const Version: RuntimeVersion = VERSION;261 pub const SS58Prefix: u8 = 255;262}263264parameter_types! {265 pub const ChainId: u64 = 8881;266}267268pub struct FixedFee;269impl FeeCalculator for FixedFee {270 fn min_gas_price() -> (U256, u64) {271 (MIN_GAS_PRICE.into(), 0)272 }273}274275// Assuming slowest ethereum opcode is SSTORE, with gas price of 20000 as our worst case276// (contract, which only writes a lot of data),277// approximating on top of our real store write weight278parameter_types! {279 pub const WritesPerSecond: u64 = WEIGHT_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().write;280 pub const GasPerSecond: u64 = WritesPerSecond::get() * 20000;281 pub const WeightPerGas: u64 = WEIGHT_PER_SECOND / GasPerSecond::get();282}283284/// Limiting EVM execution to 50% of block for substrate users and management tasks285/// EVM transaction consumes more weight than substrate's, so we can't rely on them being286/// scheduled fairly287const EVM_DISPATCH_RATIO: Perbill = Perbill::from_percent(50);288parameter_types! {289 pub BlockGasLimit: U256 = U256::from(NORMAL_DISPATCH_RATIO * EVM_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT / WeightPerGas::get());290}291292pub enum FixedGasWeightMapping {}293impl GasWeightMapping for FixedGasWeightMapping {294 fn gas_to_weight(gas: u64) -> Weight {295 gas.saturating_mul(WeightPerGas::get())296 }297 fn weight_to_gas(weight: Weight) -> u64 {298 weight / WeightPerGas::get()299 }300}301302impl pallet_evm::account::Config for Runtime {303 type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Self>;304 type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;305 type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated;306}307308impl pallet_evm::Config for Runtime {309 type BlockGasLimit = BlockGasLimit;310 type FeeCalculator = FixedFee;311 type GasWeightMapping = FixedGasWeightMapping;312 type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;313 type CallOrigin = EnsureAddressTruncated<Self>;314 type WithdrawOrigin = EnsureAddressTruncated<Self>;315 type AddressMapping = HashedAddressMapping<Self::Hashing>;316 type PrecompilesType = ();317 type PrecompilesValue = ();318 type Currency = Balances;319 type Event = Event;320 type OnMethodCall = (321 pallet_evm_migration::OnMethodCall<Self>,322 pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,323 CollectionDispatchT<Self>,324 pallet_unique::eth::CollectionHelpersOnMethodCall<Self>,325 );326 type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;327 type ChainId = ChainId;328 type Runner = pallet_evm::runner::stack::Runner<Self>;329 type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter<Balances, DealWithFees>;330 type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;331 type FindAuthor = EthereumFindAuthor<Aura>;332}333334impl pallet_evm_migration::Config for Runtime {335 type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;336}337338pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);339impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {340 fn find_author<'a, I>(digests: I) -> Option<H160>341 where342 I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,343 {344 if let Some(author_index) = F::find_author(digests) {345 let authority_id = Aura::authorities()[author_index as usize].clone();346 return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));347 }348 None349 }350}351352impl pallet_ethereum::Config for Runtime {353 type Event = Event;354 type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;355}356357impl pallet_randomness_collective_flip::Config for Runtime {}358359impl frame_system::Config for Runtime {360 /// The data to be stored in an account.361 type AccountData = pallet_balances::AccountData<Balance>;362 /// The identifier used to distinguish between accounts.363 type AccountId = AccountId;364 /// The basic call filter to use in dispatchable.365 type BaseCallFilter = Everything;366 /// Maximum number of block number to block hash mappings to keep (oldest pruned first).367 type BlockHashCount = BlockHashCount;368 /// The maximum length of a block (in bytes).369 type BlockLength = RuntimeBlockLength;370 /// The index type for blocks.371 type BlockNumber = BlockNumber;372 /// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.373 type BlockWeights = RuntimeBlockWeights;374 /// The aggregated dispatch type that is available for extrinsics.375 type Call = Call;376 /// The weight of database operations that the runtime can invoke.377 type DbWeight = RocksDbWeight;378 /// The ubiquitous event type.379 type Event = Event;380 /// The type for hashing blocks and tries.381 type Hash = Hash;382 /// The hashing algorithm used.383 type Hashing = BlakeTwo256;384 /// The header type.385 type Header = generic::Header<BlockNumber, BlakeTwo256>;386 /// The index type for storing how many extrinsics an account has signed.387 type Index = Index;388 /// The lookup mechanism to get account ID from whatever is passed in dispatchers.389 type Lookup = AccountIdLookup<AccountId, ()>;390 /// What to do if an account is fully reaped from the system.391 type OnKilledAccount = ();392 /// What to do if a new account is created.393 type OnNewAccount = ();394 type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;395 /// The ubiquitous origin type.396 type Origin = Origin;397 /// This type is being generated by `construct_runtime!`.398 type PalletInfo = PalletInfo;399 /// This is used as an identifier of the chain. 42 is the generic substrate prefix.400 type SS58Prefix = SS58Prefix;401 /// Weight information for the extrinsics of this pallet.402 type SystemWeightInfo = frame_system::weights::SubstrateWeight<Self>;403 /// Version of the runtime.404 type Version = Version;405 type MaxConsumers = ConstU32<16>;406}407408parameter_types! {409 pub const MinimumPeriod: u64 = SLOT_DURATION / 2;410}411412impl pallet_timestamp::Config for Runtime {413 /// A timestamp: milliseconds since the unix epoch.414 type Moment = u64;415 type OnTimestampSet = ();416 type MinimumPeriod = MinimumPeriod;417 type WeightInfo = ();418}419420parameter_types! {421 // pub const ExistentialDeposit: u128 = 500;422 pub const ExistentialDeposit: u128 = 0;423 pub const MaxLocks: u32 = 50;424 pub const MaxReserves: u32 = 50;425}426427impl pallet_balances::Config for Runtime {428 type MaxLocks = MaxLocks;429 type MaxReserves = MaxReserves;430 type ReserveIdentifier = [u8; 16];431 /// The type for recording an account's balance.432 type Balance = Balance;433 /// The ubiquitous event type.434 type Event = Event;435 type DustRemoval = Treasury;436 type ExistentialDeposit = ExistentialDeposit;437 type AccountStore = System;438 type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;439}440441pub const fn deposit(items: u32, bytes: u32) -> Balance {442 items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE443}444445/*446parameter_types! {447 pub TombstoneDeposit: Balance = deposit(448 1,449 sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,450 );451 pub DepositPerContract: Balance = TombstoneDeposit::get();452 pub const DepositPerStorageByte: Balance = deposit(0, 1);453 pub const DepositPerStorageItem: Balance = deposit(1, 0);454 pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);455 pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;456 pub const SignedClaimHandicap: u32 = 2;457 pub const MaxDepth: u32 = 32;458 pub const MaxValueSize: u32 = 16 * 1024;459 pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb460 // The lazy deletion runs inside on_initialize.461 pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *462 RuntimeBlockWeights::get().max_block;463 // The weight needed for decoding the queue should be less or equal than a fifth464 // of the overall weight dedicated to the lazy deletion.465 pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (466 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -467 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)468 )) / 5) as u32;469 pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();470}471472impl pallet_contracts::Config for Runtime {473 type Time = Timestamp;474 type Randomness = RandomnessCollectiveFlip;475 type Currency = Balances;476 type Event = Event;477 type RentPayment = ();478 type SignedClaimHandicap = SignedClaimHandicap;479 type TombstoneDeposit = TombstoneDeposit;480 type DepositPerContract = DepositPerContract;481 type DepositPerStorageByte = DepositPerStorageByte;482 type DepositPerStorageItem = DepositPerStorageItem;483 type RentFraction = RentFraction;484 type SurchargeReward = SurchargeReward;485 type WeightPrice = pallet_transaction_payment::Pallet<Self>;486 type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;487 type ChainExtension = NFTExtension;488 type DeletionQueueDepth = DeletionQueueDepth;489 type DeletionWeightLimit = DeletionWeightLimit;490 type Schedule = Schedule;491 type CallStack = [pallet_contracts::Frame<Self>; 31];492}493*/494495parameter_types! {496 /// This value increases the priority of `Operational` transactions by adding497 /// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.498 pub const OperationalFeeMultiplier: u8 = 5;499}500501/// Linear implementor of `WeightToFeePolynomial`502pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);503504impl<T> WeightToFeePolynomial for LinearFee<T>505where506 T: BaseArithmetic + From<u32> + Copy + Unsigned,507{508 type Balance = T;509510 fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {511 smallvec!(WeightToFeeCoefficient {512 // Targeting 0.1 Unique per NFT transfer513 coeff_integer: WEIGHT_TO_FEE_COEFF.into(),514 coeff_frac: Perbill::zero(),515 negative: false,516 degree: 1,517 })518 }519}520521impl pallet_transaction_payment::Config for Runtime {522 type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;523 type LengthToFee = ConstantMultiplier<Balance, TransactionByteFee>;524 type OperationalFeeMultiplier = OperationalFeeMultiplier;525 type WeightToFee = LinearFee<Balance>;526 type FeeMultiplierUpdate = ();527}528529parameter_types! {530 pub const ProposalBond: Permill = Permill::from_percent(5);531 pub const ProposalBondMinimum: Balance = 1 * UNIQUE;532 pub const ProposalBondMaximum: Balance = 1000 * UNIQUE;533 pub const SpendPeriod: BlockNumber = 5 * MINUTES;534 pub const Burn: Permill = Permill::from_percent(0);535 pub const TipCountdown: BlockNumber = 1 * DAYS;536 pub const TipFindersFee: Percent = Percent::from_percent(20);537 pub const TipReportDepositBase: Balance = 1 * UNIQUE;538 pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;539 pub const BountyDepositBase: Balance = 1 * UNIQUE;540 pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;541 pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");542 pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;543 pub const MaximumReasonLength: u32 = 16384;544 pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);545 pub const BountyValueMinimum: Balance = 5 * UNIQUE;546 pub const MaxApprovals: u32 = 100;547}548549impl pallet_treasury::Config for Runtime {550 type PalletId = TreasuryModuleId;551 type Currency = Balances;552 type ApproveOrigin = EnsureRoot<AccountId>;553 type RejectOrigin = EnsureRoot<AccountId>;554 type Event = Event;555 type OnSlash = ();556 type ProposalBond = ProposalBond;557 type ProposalBondMinimum = ProposalBondMinimum;558 type ProposalBondMaximum = ProposalBondMaximum;559 type SpendPeriod = SpendPeriod;560 type Burn = Burn;561 type BurnDestination = ();562 type SpendFunds = ();563 type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;564 type MaxApprovals = MaxApprovals;565}566567impl pallet_sudo::Config for Runtime {568 type Event = Event;569 type Call = Call;570}571572pub struct RelayChainBlockNumberProvider<T>(sp_std::marker::PhantomData<T>);573574impl<T: cumulus_pallet_parachain_system::Config> BlockNumberProvider575 for RelayChainBlockNumberProvider<T>576{577 type BlockNumber = BlockNumber;578579 fn current_block_number() -> Self::BlockNumber {580 cumulus_pallet_parachain_system::Pallet::<T>::validation_data()581 .map(|d| d.relay_parent_number)582 .unwrap_or_default()583 }584}585586parameter_types! {587 pub const MinVestedTransfer: Balance = 10 * UNIQUE;588 pub const MaxVestingSchedules: u32 = 28;589}590591impl orml_vesting::Config for Runtime {592 type Event = Event;593 type Currency = pallet_balances::Pallet<Runtime>;594 type MinVestedTransfer = MinVestedTransfer;595 type VestedTransferOrigin = EnsureSigned<AccountId>;596 type WeightInfo = ();597 type MaxVestingSchedules = MaxVestingSchedules;598 type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;599}600601parameter_types! {602 pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;603 pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;604}605606impl cumulus_pallet_parachain_system::Config for Runtime {607 type Event = Event;608 type SelfParaId = parachain_info::Pallet<Self>;609 type OnSystemEvent = ();610 // type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<611 // MaxDownwardMessageWeight,612 // XcmExecutor<XcmConfig>,613 // Call,614 // >;615 type OutboundXcmpMessageSource = XcmpQueue;616 type DmpMessageHandler = DmpQueue;617 type ReservedDmpWeight = ReservedDmpWeight;618 type ReservedXcmpWeight = ReservedXcmpWeight;619 type XcmpMessageHandler = XcmpQueue;620}621622impl parachain_info::Config for Runtime {}623624impl cumulus_pallet_aura_ext::Config for Runtime {}625626parameter_types! {627 pub const RelayLocation: MultiLocation = MultiLocation::parent();628 pub const RelayNetwork: NetworkId = NetworkId::Polkadot;629 pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();630 pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();631}632633/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used634/// when determining ownership of accounts for asset transacting and when attempting to use XCM635/// `Transact` in order to determine the dispatch Origin.636pub type LocationToAccountId = (637 // The parent (Relay-chain) origin converts to the default `AccountId`.638 ParentIsPreset<AccountId>,639 // Sibling parachain origins convert to AccountId via the `ParaId::into`.640 SiblingParachainConvertsVia<Sibling, AccountId>,641 // Straight up local `AccountId32` origins just alias directly to `AccountId`.642 AccountId32Aliases<RelayNetwork, AccountId>,643);644645pub struct OnlySelfCurrency;646impl<B: TryFrom<u128>> MatchesFungible<B> for OnlySelfCurrency {647 fn matches_fungible(a: &MultiAsset) -> Option<B> {648 match (&a.id, &a.fun) {649 (Concrete(_), XcmFungible(ref amount)) => CheckedConversion::checked_from(*amount),650 _ => None,651 }652 }653}654655/// Means for transacting assets on this chain.656pub type LocalAssetTransactor = CurrencyAdapter<657 // Use this currency:658 Balances,659 // Use this currency when it is a fungible asset matching the given location or name:660 OnlySelfCurrency,661 // Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:662 LocationToAccountId,663 // Our chain's account ID type (we can't get away without mentioning it explicitly):664 AccountId,665 // We don't track any teleports.666 (),667>;668669/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance,670/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can671/// biases the kind of local `Origin` it will become.672pub type XcmOriginToTransactDispatchOrigin = (673 // Sovereign account converter; this attempts to derive an `AccountId` from the origin location674 // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for675 // foreign chains who want to have a local sovereign account on this chain which they control.676 SovereignSignedViaLocation<LocationToAccountId, Origin>,677 // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when678 // recognised.679 RelayChainAsNative<RelayOrigin, Origin>,680 // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when681 // recognised.682 SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,683 // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a684 // transaction from the Root origin.685 ParentAsSuperuser<Origin>,686 // Native signed account converter; this just converts an `AccountId32` origin into a normal687 // `Origin::Signed` origin of the same 32-byte value.688 SignedAccountId32AsNative<RelayNetwork, Origin>,689 // Xcm origins can be represented natively under the Xcm pallet's Xcm origin.690 XcmPassthrough<Origin>,691);692693parameter_types! {694 // One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.695 pub UnitWeightCost: Weight = 1_000_000;696 // 1200 UNIQUEs buy 1 second of weight.697 pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), 1_200 * UNIQUE);698 pub const MaxInstructions: u32 = 100;699 pub const MaxAuthorities: u32 = 100_000;700}701702match_types! {703 pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {704 MultiLocation { parents: 1, interior: Here } |705 MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Unit, .. }) }706 };707}708709pub type Barrier = (710 TakeWeightCredit,711 AllowTopLevelPaidExecutionFrom<Everything>,712 AllowUnpaidExecutionFrom<ParentOrParentsUnitPlurality>,713 // ^^^ Parent & its unit plurality gets free execution714);715716pub struct UsingOnlySelfCurrencyComponents<717 WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,718 AssetId: Get<MultiLocation>,719 AccountId,720 Currency: CurrencyT<AccountId>,721 OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,722>(723 Weight,724 Currency::Balance,725 PhantomData<(WeightToFee, AssetId, AccountId, Currency, OnUnbalanced)>,726);727impl<728 WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,729 AssetId: Get<MultiLocation>,730 AccountId,731 Currency: CurrencyT<AccountId>,732 OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,733 > WeightTrader734 for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>735{736 fn new() -> Self {737 Self(0, Zero::zero(), PhantomData)738 }739740 fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError> {741 let amount = WeightToFee::weight_to_fee(&weight);742 let u128_amount: u128 = amount.try_into().map_err(|_| XcmError::Overflow)?;743744 // location to this parachain through relay chain745 let option1: xcm::v1::AssetId = Concrete(MultiLocation {746 parents: 1,747 interior: X1(Parachain(ParachainInfo::parachain_id().into())),748 });749 // direct location750 let option2: xcm::v1::AssetId = Concrete(MultiLocation {751 parents: 0,752 interior: Here,753 });754755 let required = if payment.fungible.contains_key(&option1) {756 (option1, u128_amount).into()757 } else if payment.fungible.contains_key(&option2) {758 (option2, u128_amount).into()759 } else {760 (Concrete(MultiLocation::default()), u128_amount).into()761 };762763 let unused = payment764 .checked_sub(required)765 .map_err(|_| XcmError::TooExpensive)?;766 self.0 = self.0.saturating_add(weight);767 self.1 = self.1.saturating_add(amount);768 Ok(unused)769 }770771 fn refund_weight(&mut self, weight: Weight) -> Option<MultiAsset> {772 let weight = weight.min(self.0);773 let amount = WeightToFee::weight_to_fee(&weight);774 self.0 -= weight;775 self.1 = self.1.saturating_sub(amount);776 let amount: u128 = amount.saturated_into();777 if amount > 0 {778 Some((AssetId::get(), amount).into())779 } else {780 None781 }782 }783}784impl<785 WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,786 AssetId: Get<MultiLocation>,787 AccountId,788 Currency: CurrencyT<AccountId>,789 OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,790 > Drop791 for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>792{793 fn drop(&mut self) {794 OnUnbalanced::on_unbalanced(Currency::issue(self.1));795 }796}797798pub struct XcmConfig;799impl Config for XcmConfig {800 type Call = Call;801 type XcmSender = XcmRouter;802 // How to withdraw and deposit an asset.803 type AssetTransactor = LocalAssetTransactor;804 type OriginConverter = XcmOriginToTransactDispatchOrigin;805 type IsReserve = NativeAsset;806 type IsTeleporter = (); // Teleportation is disabled807 type LocationInverter = LocationInverter<Ancestry>;808 type Barrier = Barrier;809 type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;810 type Trader = UsingOnlySelfCurrencyComponents<811 LinearFee<Balance>,812 RelayLocation,813 AccountId,814 Balances,815 (),816 >;817 type ResponseHandler = (); // Don't handle responses for now.818 type SubscriptionService = PolkadotXcm;819820 type AssetTrap = PolkadotXcm;821 type AssetClaims = PolkadotXcm;822}823824// parameter_types! {825// pub const MaxDownwardMessageWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 10;826// }827828/// No local origins on this chain are allowed to dispatch XCM sends/executions.829pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);830831/// The means for routing XCM messages which are not for local execution into the right message832/// queues.833pub type XcmRouter = (834 // Two routers - use UMP to communicate with the relay chain:835 cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,836 // ..and XCMP to communicate with the sibling chains.837 XcmpQueue,838);839840impl pallet_evm_coder_substrate::Config for Runtime {}841842impl pallet_xcm::Config for Runtime {843 type Event = Event;844 type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;845 type XcmRouter = XcmRouter;846 type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;847 type XcmExecuteFilter = Everything;848 type XcmExecutor = XcmExecutor<XcmConfig>;849 type XcmTeleportFilter = Everything;850 type XcmReserveTransferFilter = Everything;851 type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;852 type LocationInverter = LocationInverter<Ancestry>;853 type Origin = Origin;854 type Call = Call;855 const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;856 type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;857}858859impl cumulus_pallet_xcm::Config for Runtime {860 type Event = Event;861 type XcmExecutor = XcmExecutor<XcmConfig>;862}863864impl cumulus_pallet_xcmp_queue::Config for Runtime {865 type WeightInfo = ();866 type Event = Event;867 type XcmExecutor = XcmExecutor<XcmConfig>;868 type ChannelInfo = ParachainSystem;869 type VersionWrapper = ();870 type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;871 type ControllerOrigin = EnsureRoot<AccountId>;872 type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin;873}874875impl cumulus_pallet_dmp_queue::Config for Runtime {876 type Event = Event;877 type XcmExecutor = XcmExecutor<XcmConfig>;878 type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;879}880881impl pallet_aura::Config for Runtime {882 type AuthorityId = AuraId;883 type DisabledValidators = ();884 type MaxAuthorities = MaxAuthorities;885}886887parameter_types! {888 pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account_truncating();889 pub const CollectionCreationPrice: Balance = 2 * UNIQUE;890}891892impl pallet_common::Config for Runtime {893 type WeightInfo = pallet_common::weights::SubstrateWeight<Self>;894 type Event = Event;895 type Currency = Balances;896 type CollectionCreationPrice = CollectionCreationPrice;897 type TreasuryAccountId = TreasuryAccountId;898 type CollectionDispatch = CollectionDispatchT<Self>;899900 type EvmTokenAddressMapping = EvmTokenAddressMapping;901 type CrossTokenAddressMapping = CrossTokenAddressMapping<Self::AccountId>;902 type ContractAddress = EvmCollectionHelpersAddress;903}904905impl pallet_structure::Config for Runtime {906 type Event = Event;907 type Call = Call;908 type WeightInfo = pallet_structure::weights::SubstrateWeight<Self>;909}910911impl pallet_fungible::Config for Runtime {912 type WeightInfo = pallet_fungible::weights::SubstrateWeight<Self>;913}914impl pallet_refungible::Config for Runtime {915 type WeightInfo = pallet_refungible::weights::SubstrateWeight<Self>;916}917impl pallet_nonfungible::Config for Runtime {918 type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;919}920921impl pallet_proxy_rmrk_core::Config for Runtime {922 type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight<Self>;923 type Event = Event;924}925926impl pallet_proxy_rmrk_equip::Config for Runtime {927 type Event = Event;928}929930impl pallet_unique::Config for Runtime {931 type Event = Event;932 type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;933 type CommonWeightInfo = CommonWeights<Self>;934}935936parameter_types! {937 pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied938}939940/// Used for the pallet inflation941impl pallet_inflation::Config for Runtime {942 type Currency = Balances;943 type TreasuryAccountId = TreasuryAccountId;944 type InflationBlockInterval = InflationBlockInterval;945 type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;946}947948parameter_types! {949 pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *950 RuntimeBlockWeights::get().max_block;951 pub const MaxScheduledPerBlock: u32 = 50;952}953954type ChargeTransactionPayment = pallet_charge_transaction::ChargeTransactionPayment<Runtime>;955use frame_support::traits::NamedReservableCurrency;956957fn get_signed_extras(from: <Runtime as frame_system::Config>::AccountId) -> SignedExtraScheduler {958 (959 frame_system::CheckSpecVersion::<Runtime>::new(),960 frame_system::CheckGenesis::<Runtime>::new(),961 frame_system::CheckEra::<Runtime>::from(Era::Immortal),962 frame_system::CheckNonce::<Runtime>::from(frame_system::Pallet::<Runtime>::account_nonce(963 from,964 )),965 frame_system::CheckWeight::<Runtime>::new(),966 // sponsoring transaction logic967 // pallet_charge_transaction::ChargeTransactionPayment::<Runtime>::new(0),968 )969}970971pub struct SchedulerPaymentExecutor;972impl<T: frame_system::Config + pallet_unq_scheduler::Config, SelfContainedSignedInfo>973 DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor974where975 <T as frame_system::Config>::Call: Member976 + Dispatchable<Origin = Origin, Info = DispatchInfo>977 + SelfContainedCall<SignedInfo = SelfContainedSignedInfo>978 + GetDispatchInfo979 + From<frame_system::Call<Runtime>>,980 SelfContainedSignedInfo: Send + Sync + 'static,981 Call: From<<T as frame_system::Config>::Call>982 + From<<T as pallet_unq_scheduler::Config>::Call>983 + SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,984 sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,985{986 fn dispatch_call(987 signer: <T as frame_system::Config>::AccountId,988 call: <T as pallet_unq_scheduler::Config>::Call,989 ) -> Result<990 Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,991 TransactionValidityError,992 > {993 let dispatch_info = call.get_dispatch_info();994 let extrinsic = fp_self_contained::CheckedExtrinsic::<995 AccountId,996 Call,997 SignedExtraScheduler,998 SelfContainedSignedInfo,999 > {1000 signed:1001 CheckedSignature::<AccountId, SignedExtraScheduler, SelfContainedSignedInfo>::Signed(1002 signer.clone().into(),1003 get_signed_extras(signer.into()),1004 ),1005 function: call.into(),1006 };10071008 extrinsic.apply::<Runtime>(&dispatch_info, 0)1009 }10101011 fn reserve_balance(1012 id: [u8; 16],1013 sponsor: <T as frame_system::Config>::AccountId,1014 call: <T as pallet_unq_scheduler::Config>::Call,1015 count: u32,1016 ) -> Result<(), DispatchError> {1017 let dispatch_info = call.get_dispatch_info();1018 let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0)1019 .saturating_mul(count.into());10201021 <Balances as NamedReservableCurrency<AccountId>>::reserve_named(1022 &id,1023 &(sponsor.into()),1024 weight.into(),1025 )1026 }10271028 fn pay_for_call(1029 id: [u8; 16],1030 sponsor: <T as frame_system::Config>::AccountId,1031 call: <T as pallet_unq_scheduler::Config>::Call,1032 ) -> Result<u128, DispatchError> {1033 let dispatch_info = call.get_dispatch_info();1034 let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);1035 Ok(1036 <Balances as NamedReservableCurrency<AccountId>>::unreserve_named(1037 &id,1038 &(sponsor.into()),1039 weight.into(),1040 ),1041 )1042 }10431044 fn cancel_reserve(1045 id: [u8; 16],1046 sponsor: <T as frame_system::Config>::AccountId,1047 ) -> Result<u128, DispatchError> {1048 Ok(1049 <Balances as NamedReservableCurrency<AccountId>>::unreserve_named(1050 &id,1051 &(sponsor.into()),1052 u128::MAX,1053 ),1054 )1055 }1056}10571058parameter_types! {1059 pub const NoPreimagePostponement: Option<u32> = Some(10);1060 pub const Preimage: Option<u32> = Some(10);1061}10621063/// Used the compare the privilege of an origin inside the scheduler.1064pub struct OriginPrivilegeCmp;10651066impl PrivilegeCmp<OriginCaller> for OriginPrivilegeCmp {1067 fn cmp_privilege(_left: &OriginCaller, _right: &OriginCaller) -> Option<Ordering> {1068 Some(Ordering::Equal)1069 }1070}10711072impl pallet_unq_scheduler::Config for Runtime {1073 type Event = Event;1074 type Origin = Origin;1075 type Currency = Balances;1076 type PalletsOrigin = OriginCaller;1077 type Call = Call;1078 type MaximumWeight = MaximumSchedulerWeight;1079 type ScheduleOrigin = EnsureSigned<AccountId>;1080 type MaxScheduledPerBlock = MaxScheduledPerBlock;1081 type WeightInfo = ();1082 type CallExecutor = SchedulerPaymentExecutor;1083 type OriginPrivilegeCmp = OriginPrivilegeCmp;1084 type PreimageProvider = ();1085 type NoPreimagePostponement = NoPreimagePostponement;1086}10871088type EvmSponsorshipHandler = (1089 UniqueEthSponsorshipHandler<Runtime>,1090 pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,1091);1092type SponsorshipHandler = (1093 UniqueSponsorshipHandler<Runtime>,1094 //pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,1095 pallet_evm_transaction_payment::BridgeSponsorshipHandler<Runtime>,1096);10971098impl pallet_evm_transaction_payment::Config for Runtime {1099 type EvmSponsorshipHandler = EvmSponsorshipHandler;1100 type Currency = Balances;1101}11021103impl pallet_charge_transaction::Config for Runtime {1104 type SponsorshipHandler = SponsorshipHandler;1105}11061107// impl pallet_contract_helpers::Config for Runtime {1108// type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;1109// }11101111parameter_types! {1112 // 0x842899ECF380553E8a4de75bF534cdf6fBF640491113 pub const HelpersContractAddress: H160 = H160([1114 0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,1115 ]);11161117 // 0x6c4e9fe1ae37a41e93cee429e8e1881abdcbb54f1118 pub const EvmCollectionHelpersAddress: H160 = H160([1119 0x6c, 0x4e, 0x9f, 0xe1, 0xae, 0x37, 0xa4, 0x1e, 0x93, 0xce, 0xe4, 0x29, 0xe8, 0xe1, 0x88, 0x1a, 0xbd, 0xcb, 0xb5, 0x4f,1120 ]);1121}11221123impl pallet_evm_contract_helpers::Config for Runtime {1124 type ContractAddress = HelpersContractAddress;1125 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;1126}11271128construct_runtime!(1129 pub enum Runtime where1130 Block = Block,1131 NodeBlock = opaque::Block,1132 UncheckedExtrinsic = UncheckedExtrinsic1133 {1134 ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,1135 ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,11361137 Aura: pallet_aura::{Pallet, Config<T>} = 22,1138 AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,11391140 Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,1141 RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,1142 Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,1143 TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,1144 Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,1145 Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,1146 System: frame_system::{Pallet, Call, Storage, Config, Event<T>} = 36,1147 Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,1148 // Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,1149 // Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,11501151 // XCM helpers.1152 XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,1153 PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,1154 CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,1155 DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,11561157 // Unique Pallets1158 Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,1159 Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,1160 Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,1161 // free = 631162 Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,1163 // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,1164 Common: pallet_common::{Pallet, Storage, Event<T>} = 66,1165 Fungible: pallet_fungible::{Pallet, Storage} = 67,1166 Refungible: pallet_refungible::{Pallet, Storage} = 68,1167 Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,1168 Structure: pallet_structure::{Pallet, Call, Storage, Event<T>} = 70,1169 RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event<T>} = 71,1170 RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event<T>} = 72,11711172 // Frontier1173 EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,1174 Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,11751176 EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,1177 EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,1178 EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,1179 EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,1180 }1181);11821183pub struct TransactionConverter;11841185impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {1186 fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {1187 UncheckedExtrinsic::new_unsigned(1188 pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1189 )1190 }1191}11921193impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {1194 fn convert_transaction(1195 &self,1196 transaction: pallet_ethereum::Transaction,1197 ) -> opaque::UncheckedExtrinsic {1198 let extrinsic = UncheckedExtrinsic::new_unsigned(1199 pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1200 );1201 let encoded = extrinsic.encode();1202 opaque::UncheckedExtrinsic::decode(&mut &encoded[..])1203 .expect("Encoded extrinsic is always valid")1204 }1205}12061207/// The address format for describing accounts.1208pub type Address = sp_runtime::MultiAddress<AccountId, ()>;1209/// Block header type as expected by this runtime.1210pub type Header = generic::Header<BlockNumber, BlakeTwo256>;1211/// Block type as expected by this runtime.1212pub type Block = generic::Block<Header, UncheckedExtrinsic>;1213/// A Block signed with a Justification1214pub type SignedBlock = generic::SignedBlock<Block>;1215/// BlockId type as expected by this runtime.1216pub type BlockId = generic::BlockId<Block>;1217/// The SignedExtension to the basic transaction logic.1218pub type SignedExtra = (1219 frame_system::CheckSpecVersion<Runtime>,1220 // system::CheckTxVersion<Runtime>,1221 frame_system::CheckGenesis<Runtime>,1222 frame_system::CheckEra<Runtime>,1223 frame_system::CheckNonce<Runtime>,1224 frame_system::CheckWeight<Runtime>,1225 ChargeTransactionPayment,1226 //pallet_contract_helpers::ContractHelpersExtension<Runtime>,1227 pallet_ethereum::FakeTransactionFinalizer<Runtime>,1228);12291230pub type SignedExtraScheduler = (1231 frame_system::CheckSpecVersion<Runtime>,1232 frame_system::CheckGenesis<Runtime>,1233 frame_system::CheckEra<Runtime>,1234 frame_system::CheckNonce<Runtime>,1235 frame_system::CheckWeight<Runtime>,1236 // pallet_charge_transaction::ChargeTransactionPayment<Runtime>,1237);1238/// Unchecked extrinsic type as expected by this runtime.1239pub type UncheckedExtrinsic =1240 fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;1241/// Extrinsic type that has already been checked.1242pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;1243/// Executive: handles dispatch to the various modules.1244pub type Executive = frame_executive::Executive<1245 Runtime,1246 Block,1247 frame_system::ChainContext<Runtime>,1248 Runtime,1249 AllPalletsReversedWithSystemFirst,1250>;12511252impl_opaque_keys! {1253 pub struct SessionKeys {1254 pub aura: Aura,1255 }1256}12571258impl fp_self_contained::SelfContainedCall for Call {1259 type SignedInfo = H160;12601261 fn is_self_contained(&self) -> bool {1262 match self {1263 Call::Ethereum(call) => call.is_self_contained(),1264 _ => false,1265 }1266 }12671268 fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {1269 match self {1270 Call::Ethereum(call) => call.check_self_contained(),1271 _ => None,1272 }1273 }12741275 fn validate_self_contained(1276 &self,1277 info: &Self::SignedInfo,1278 dispatch_info: &DispatchInfoOf<Call>,1279 len: usize,1280 ) -> Option<TransactionValidity> {1281 match self {1282 Call::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len),1283 _ => None,1284 }1285 }12861287 fn pre_dispatch_self_contained(1288 &self,1289 info: &Self::SignedInfo,1290 ) -> Option<Result<(), TransactionValidityError>> {1291 match self {1292 Call::Ethereum(call) => call.pre_dispatch_self_contained(info),1293 _ => None,1294 }1295 }12961297 fn apply_self_contained(1298 self,1299 info: Self::SignedInfo,1300 ) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {1301 match self {1302 call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(1303 Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),1304 )),1305 _ => None,1306 }1307 }1308}13091310macro_rules! dispatch_unique_runtime {1311 ($collection:ident.$method:ident($($name:ident),*)) => {{1312 let collection = <Runtime as pallet_common::Config>::CollectionDispatch::dispatch(<pallet_common::CollectionHandle<Runtime>>::try_get($collection)?);1313 let dispatch = collection.as_dyn();13141315 Ok::<_, DispatchError>(dispatch.$method($($name),*))1316 }};1317}13181319impl_common_runtime_apis!();13201321struct CheckInherents;13221323impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {1324 fn check_inherents(1325 block: &Block,1326 relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,1327 ) -> sp_inherents::CheckInherentsResult {1328 let relay_chain_slot = relay_state_proof1329 .read_slot()1330 .expect("Could not read the relay chain slot from the proof");13311332 let inherent_data =1333 cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration(1334 relay_chain_slot,1335 sp_std::time::Duration::from_secs(6),1336 )1337 .create_inherent_data()1338 .expect("Could not create the timestamp inherent data");13391340 inherent_data.check_extrinsics(block)1341 }1342}13431344cumulus_pallet_parachain_system::register_validate_block!(1345 Runtime = Runtime,1346 BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,1347 CheckInherents = CheckInherents,1348);1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! The Substrate Node Template runtime. This can be compiled with `#[no_std]`, ready for Wasm.1819#![cfg_attr(not(feature = "std"), no_std)]20// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256.21#![recursion_limit = "1024"]22#![allow(clippy::from_over_into, clippy::identity_op)]23#![allow(clippy::fn_to_numeric_cast_with_truncation)]24// Make the WASM binary available.25#[cfg(feature = "std")]26include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));2728use sp_api::impl_runtime_apis;29use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H256, U256, H160};30use sp_runtime::DispatchError;31use fp_self_contained::*;32// #[cfg(any(feature = "std", test))]33// pub use sp_runtime::BuildStorage;3435use sp_runtime::{36 Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys,37 traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member},38 transaction_validity::{TransactionSource, TransactionValidity},39 ApplyExtrinsicResult, RuntimeAppPublic,40};4142use sp_std::prelude::*;4344#[cfg(feature = "std")]45use sp_version::NativeVersion;46use sp_version::RuntimeVersion;47pub use pallet_transaction_payment::{48 Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo,49};50// A few exports that help ease life for downstream crates.51pub use pallet_balances::Call as BalancesCall;52pub use pallet_evm::{53 EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _,54 OnMethodCall, Account as EVMAccount, FeeCalculator, GasWeightMapping,55};56pub use frame_support::{57 construct_runtime, match_types,58 dispatch::DispatchResult,59 PalletId, parameter_types, StorageValue, ConsensusEngineId,60 traits::{61 tokens::currency::Currency as CurrencyT, OnUnbalanced as OnUnbalancedT, Everything,62 Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem, LockIdentifier,63 OnUnbalanced, Randomness, FindAuthor, ConstU32, Imbalance, PrivilegeCmp,64 },65 weights::{66 constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},67 DispatchClass, DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,68 WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients, ConstantMultiplier,69 WeightToFee,70 },71};72use pallet_unique_scheduler::DispatchCall;73use up_data_structs::{74 CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,75 CollectionStats, RpcCollection,76 mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},77 TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,78 RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkCollectionId, RmrkNftId,79 RmrkNftChild, RmrkPropertyKey, RmrkResourceId, RmrkBaseId,80};8182// use pallet_contracts::weights::WeightInfo;83// #[cfg(any(feature = "std", test))]84use frame_system::{85 self as frame_system, EnsureRoot, EnsureSigned,86 limits::{BlockWeights, BlockLength},87};88use sp_arithmetic::{89 traits::{BaseArithmetic, Unsigned},90};91use smallvec::smallvec;92use codec::{Encode, Decode};93use fp_rpc::TransactionStatus;94use sp_runtime::{95 traits::{96 Applyable, BlockNumberProvider, Dispatchable, PostDispatchInfoOf, DispatchInfoOf,97 Saturating, CheckedConversion,98 },99 generic::Era,100 transaction_validity::TransactionValidityError,101 DispatchErrorWithPostInfo, SaturatedConversion,102};103104// pub use pallet_timestamp::Call as TimestampCall;105pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;106107// Polkadot imports108use pallet_xcm::XcmPassthrough;109use polkadot_parachain::primitives::Sibling;110use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};111use xcm_builder::{112 AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,113 EnsureXcmOrigin, FixedWeightBounds, LocationInverter, NativeAsset, ParentAsSuperuser,114 RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,115 SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit,116 ParentIsPreset,117};118use xcm_executor::{Config, XcmExecutor, Assets};119use sp_std::{cmp::Ordering, marker::PhantomData};120121use xcm::latest::{122 // Xcm,123 AssetId::{Concrete},124 Fungibility::Fungible as XcmFungible,125 MultiAsset,126 Error as XcmError,127};128use xcm_executor::traits::{MatchesFungible, WeightTrader};129130use unique_runtime_common::{131 impl_common_runtime_apis,132 types::*,133 constants::*,134 dispatch::{CollectionDispatchT, CollectionDispatch},135 sponsoring::UniqueSponsorshipHandler,136 eth_sponsoring::UniqueEthSponsorshipHandler,137 weights::CommonWeights,138};139140pub const RUNTIME_NAME: &str = "quartz";141pub const TOKEN_SYMBOL: &str = "QTZ";142143type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;144145impl RuntimeInstance for Runtime {146 type CrossAccountId = self::CrossAccountId;147148 type TransactionConverter = self::TransactionConverter;149150 fn get_transaction_converter() -> TransactionConverter {151 TransactionConverter152 }153}154155/// The type for looking up accounts. We don't expect more than 4 billion of them, but you156/// never know...157pub type AccountIndex = u32;158159/// Balance of an account.160pub type Balance = u128;161162/// Index of a transaction in the chain.163pub type Index = u32;164165/// A hash of some data used by the chain.166pub type Hash = sp_core::H256;167168/// Digest item type.169pub type DigestItem = generic::DigestItem;170171/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know172/// the specifics of the runtime. They can then be made to be agnostic over specific formats173/// of data like extrinsics, allowing for them to continue syncing the network through upgrades174/// to even the core data structures.175pub mod opaque {176 use sp_std::prelude::*;177 use sp_runtime::impl_opaque_keys;178 use super::Aura;179180 pub use unique_runtime_common::types::*;181182 impl_opaque_keys! {183 pub struct SessionKeys {184 pub aura: Aura,185 }186 }187}188189/// This runtime version.190pub const VERSION: RuntimeVersion = RuntimeVersion {191 spec_name: create_runtime_str!(RUNTIME_NAME),192 impl_name: create_runtime_str!(RUNTIME_NAME),193 authoring_version: 1,194 spec_version: 923000,195 impl_version: 0,196 apis: RUNTIME_API_VERSIONS,197 transaction_version: 1,198 state_version: 0,199};200201#[derive(codec::Encode, codec::Decode)]202pub enum XCMPMessage<XAccountId, XBalance> {203 /// Transfer tokens to the given account from the Parachain account.204 TransferToken(XAccountId, XBalance),205}206207/// The version information used to identify this runtime when compiled natively.208#[cfg(feature = "std")]209pub fn native_version() -> NativeVersion {210 NativeVersion {211 runtime_version: VERSION,212 can_author_with: Default::default(),213 }214}215216type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;217218pub struct DealWithFees;219impl OnUnbalanced<NegativeImbalance> for DealWithFees {220 fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item = NegativeImbalance>) {221 if let Some(fees) = fees_then_tips.next() {222 // for fees, 100% to treasury223 let mut split = fees.ration(100, 0);224 if let Some(tips) = fees_then_tips.next() {225 // for tips, if any, 100% to treasury226 tips.ration_merge_into(100, 0, &mut split);227 }228 Treasury::on_unbalanced(split.0);229 // Author::on_unbalanced(split.1);230 }231 }232}233234parameter_types! {235 pub const BlockHashCount: BlockNumber = 2400;236 pub RuntimeBlockLength: BlockLength =237 BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);238 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);239 pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;240 pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()241 .base_block(BlockExecutionWeight::get())242 .for_class(DispatchClass::all(), |weights| {243 weights.base_extrinsic = ExtrinsicBaseWeight::get();244 })245 .for_class(DispatchClass::Normal, |weights| {246 weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);247 })248 .for_class(DispatchClass::Operational, |weights| {249 weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);250 // Operational transactions have some extra reserved space, so that they251 // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.252 weights.reserved = Some(253 MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT254 );255 })256 .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)257 .build_or_panic();258 pub const Version: RuntimeVersion = VERSION;259 pub const SS58Prefix: u8 = 255;260}261262parameter_types! {263 pub const ChainId: u64 = 8881;264}265266pub struct FixedFee;267impl FeeCalculator for FixedFee {268 fn min_gas_price() -> (U256, u64) {269 (MIN_GAS_PRICE.into(), 0)270 }271}272273// Assuming slowest ethereum opcode is SSTORE, with gas price of 20000 as our worst case274// (contract, which only writes a lot of data),275// approximating on top of our real store write weight276parameter_types! {277 pub const WritesPerSecond: u64 = WEIGHT_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().write;278 pub const GasPerSecond: u64 = WritesPerSecond::get() * 20000;279 pub const WeightPerGas: u64 = WEIGHT_PER_SECOND / GasPerSecond::get();280}281282/// Limiting EVM execution to 50% of block for substrate users and management tasks283/// EVM transaction consumes more weight than substrate's, so we can't rely on them being284/// scheduled fairly285const EVM_DISPATCH_RATIO: Perbill = Perbill::from_percent(50);286parameter_types! {287 pub BlockGasLimit: U256 = U256::from(NORMAL_DISPATCH_RATIO * EVM_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT / WeightPerGas::get());288}289290pub enum FixedGasWeightMapping {}291impl GasWeightMapping for FixedGasWeightMapping {292 fn gas_to_weight(gas: u64) -> Weight {293 gas.saturating_mul(WeightPerGas::get())294 }295 fn weight_to_gas(weight: Weight) -> u64 {296 weight / WeightPerGas::get()297 }298}299300impl pallet_evm::account::Config for Runtime {301 type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Self>;302 type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;303 type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated;304}305306impl pallet_evm::Config for Runtime {307 type BlockGasLimit = BlockGasLimit;308 type FeeCalculator = FixedFee;309 type GasWeightMapping = FixedGasWeightMapping;310 type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;311 type CallOrigin = EnsureAddressTruncated<Self>;312 type WithdrawOrigin = EnsureAddressTruncated<Self>;313 type AddressMapping = HashedAddressMapping<Self::Hashing>;314 type PrecompilesType = ();315 type PrecompilesValue = ();316 type Currency = Balances;317 type Event = Event;318 type OnMethodCall = (319 pallet_evm_migration::OnMethodCall<Self>,320 pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,321 CollectionDispatchT<Self>,322 pallet_unique::eth::CollectionHelpersOnMethodCall<Self>,323 );324 type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;325 type ChainId = ChainId;326 type Runner = pallet_evm::runner::stack::Runner<Self>;327 type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter<Balances, DealWithFees>;328 type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;329 type FindAuthor = EthereumFindAuthor<Aura>;330}331332impl pallet_evm_migration::Config for Runtime {333 type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;334}335336pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);337impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {338 fn find_author<'a, I>(digests: I) -> Option<H160>339 where340 I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,341 {342 if let Some(author_index) = F::find_author(digests) {343 let authority_id = Aura::authorities()[author_index as usize].clone();344 return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));345 }346 None347 }348}349350impl pallet_ethereum::Config for Runtime {351 type Event = Event;352 type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;353}354355impl pallet_randomness_collective_flip::Config for Runtime {}356357impl frame_system::Config for Runtime {358 /// The data to be stored in an account.359 type AccountData = pallet_balances::AccountData<Balance>;360 /// The identifier used to distinguish between accounts.361 type AccountId = AccountId;362 /// The basic call filter to use in dispatchable.363 type BaseCallFilter = Everything;364 /// Maximum number of block number to block hash mappings to keep (oldest pruned first).365 type BlockHashCount = BlockHashCount;366 /// The maximum length of a block (in bytes).367 type BlockLength = RuntimeBlockLength;368 /// The index type for blocks.369 type BlockNumber = BlockNumber;370 /// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.371 type BlockWeights = RuntimeBlockWeights;372 /// The aggregated dispatch type that is available for extrinsics.373 type Call = Call;374 /// The weight of database operations that the runtime can invoke.375 type DbWeight = RocksDbWeight;376 /// The ubiquitous event type.377 type Event = Event;378 /// The type for hashing blocks and tries.379 type Hash = Hash;380 /// The hashing algorithm used.381 type Hashing = BlakeTwo256;382 /// The header type.383 type Header = generic::Header<BlockNumber, BlakeTwo256>;384 /// The index type for storing how many extrinsics an account has signed.385 type Index = Index;386 /// The lookup mechanism to get account ID from whatever is passed in dispatchers.387 type Lookup = AccountIdLookup<AccountId, ()>;388 /// What to do if an account is fully reaped from the system.389 type OnKilledAccount = ();390 /// What to do if a new account is created.391 type OnNewAccount = ();392 type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;393 /// The ubiquitous origin type.394 type Origin = Origin;395 /// This type is being generated by `construct_runtime!`.396 type PalletInfo = PalletInfo;397 /// This is used as an identifier of the chain. 42 is the generic substrate prefix.398 type SS58Prefix = SS58Prefix;399 /// Weight information for the extrinsics of this pallet.400 type SystemWeightInfo = frame_system::weights::SubstrateWeight<Self>;401 /// Version of the runtime.402 type Version = Version;403 type MaxConsumers = ConstU32<16>;404}405406parameter_types! {407 pub const MinimumPeriod: u64 = SLOT_DURATION / 2;408}409410impl pallet_timestamp::Config for Runtime {411 /// A timestamp: milliseconds since the unix epoch.412 type Moment = u64;413 type OnTimestampSet = ();414 type MinimumPeriod = MinimumPeriod;415 type WeightInfo = ();416}417418parameter_types! {419 // pub const ExistentialDeposit: u128 = 500;420 pub const ExistentialDeposit: u128 = 0;421 pub const MaxLocks: u32 = 50;422 pub const MaxReserves: u32 = 50;423}424425impl pallet_balances::Config for Runtime {426 type MaxLocks = MaxLocks;427 type MaxReserves = MaxReserves;428 type ReserveIdentifier = [u8; 16];429 /// The type for recording an account's balance.430 type Balance = Balance;431 /// The ubiquitous event type.432 type Event = Event;433 type DustRemoval = Treasury;434 type ExistentialDeposit = ExistentialDeposit;435 type AccountStore = System;436 type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;437}438439pub const fn deposit(items: u32, bytes: u32) -> Balance {440 items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE441}442443/*444parameter_types! {445 pub TombstoneDeposit: Balance = deposit(446 1,447 sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,448 );449 pub DepositPerContract: Balance = TombstoneDeposit::get();450 pub const DepositPerStorageByte: Balance = deposit(0, 1);451 pub const DepositPerStorageItem: Balance = deposit(1, 0);452 pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);453 pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;454 pub const SignedClaimHandicap: u32 = 2;455 pub const MaxDepth: u32 = 32;456 pub const MaxValueSize: u32 = 16 * 1024;457 pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb458 // The lazy deletion runs inside on_initialize.459 pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *460 RuntimeBlockWeights::get().max_block;461 // The weight needed for decoding the queue should be less or equal than a fifth462 // of the overall weight dedicated to the lazy deletion.463 pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (464 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -465 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)466 )) / 5) as u32;467 pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();468}469470impl pallet_contracts::Config for Runtime {471 type Time = Timestamp;472 type Randomness = RandomnessCollectiveFlip;473 type Currency = Balances;474 type Event = Event;475 type RentPayment = ();476 type SignedClaimHandicap = SignedClaimHandicap;477 type TombstoneDeposit = TombstoneDeposit;478 type DepositPerContract = DepositPerContract;479 type DepositPerStorageByte = DepositPerStorageByte;480 type DepositPerStorageItem = DepositPerStorageItem;481 type RentFraction = RentFraction;482 type SurchargeReward = SurchargeReward;483 type WeightPrice = pallet_transaction_payment::Pallet<Self>;484 type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;485 type ChainExtension = NFTExtension;486 type DeletionQueueDepth = DeletionQueueDepth;487 type DeletionWeightLimit = DeletionWeightLimit;488 type Schedule = Schedule;489 type CallStack = [pallet_contracts::Frame<Self>; 31];490}491*/492493parameter_types! {494 /// This value increases the priority of `Operational` transactions by adding495 /// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.496 pub const OperationalFeeMultiplier: u8 = 5;497}498499/// Linear implementor of `WeightToFeePolynomial`500pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);501502impl<T> WeightToFeePolynomial for LinearFee<T>503where504 T: BaseArithmetic + From<u32> + Copy + Unsigned,505{506 type Balance = T;507508 fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {509 smallvec!(WeightToFeeCoefficient {510 // Targeting 0.1 Unique per NFT transfer511 coeff_integer: WEIGHT_TO_FEE_COEFF.into(),512 coeff_frac: Perbill::zero(),513 negative: false,514 degree: 1,515 })516 }517}518519impl pallet_transaction_payment::Config for Runtime {520 type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;521 type LengthToFee = ConstantMultiplier<Balance, TransactionByteFee>;522 type OperationalFeeMultiplier = OperationalFeeMultiplier;523 type WeightToFee = LinearFee<Balance>;524 type FeeMultiplierUpdate = ();525}526527parameter_types! {528 pub const ProposalBond: Permill = Permill::from_percent(5);529 pub const ProposalBondMinimum: Balance = 1 * UNIQUE;530 pub const ProposalBondMaximum: Balance = 1000 * UNIQUE;531 pub const SpendPeriod: BlockNumber = 5 * MINUTES;532 pub const Burn: Permill = Permill::from_percent(0);533 pub const TipCountdown: BlockNumber = 1 * DAYS;534 pub const TipFindersFee: Percent = Percent::from_percent(20);535 pub const TipReportDepositBase: Balance = 1 * UNIQUE;536 pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;537 pub const BountyDepositBase: Balance = 1 * UNIQUE;538 pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;539 pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");540 pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;541 pub const MaximumReasonLength: u32 = 16384;542 pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);543 pub const BountyValueMinimum: Balance = 5 * UNIQUE;544 pub const MaxApprovals: u32 = 100;545}546547impl pallet_treasury::Config for Runtime {548 type PalletId = TreasuryModuleId;549 type Currency = Balances;550 type ApproveOrigin = EnsureRoot<AccountId>;551 type RejectOrigin = EnsureRoot<AccountId>;552 type Event = Event;553 type OnSlash = ();554 type ProposalBond = ProposalBond;555 type ProposalBondMinimum = ProposalBondMinimum;556 type ProposalBondMaximum = ProposalBondMaximum;557 type SpendPeriod = SpendPeriod;558 type Burn = Burn;559 type BurnDestination = ();560 type SpendFunds = ();561 type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;562 type MaxApprovals = MaxApprovals;563}564565impl pallet_sudo::Config for Runtime {566 type Event = Event;567 type Call = Call;568}569570pub struct RelayChainBlockNumberProvider<T>(sp_std::marker::PhantomData<T>);571572impl<T: cumulus_pallet_parachain_system::Config> BlockNumberProvider573 for RelayChainBlockNumberProvider<T>574{575 type BlockNumber = BlockNumber;576577 fn current_block_number() -> Self::BlockNumber {578 cumulus_pallet_parachain_system::Pallet::<T>::validation_data()579 .map(|d| d.relay_parent_number)580 .unwrap_or_default()581 }582}583584parameter_types! {585 pub const MinVestedTransfer: Balance = 10 * UNIQUE;586 pub const MaxVestingSchedules: u32 = 28;587}588589impl orml_vesting::Config for Runtime {590 type Event = Event;591 type Currency = pallet_balances::Pallet<Runtime>;592 type MinVestedTransfer = MinVestedTransfer;593 type VestedTransferOrigin = EnsureSigned<AccountId>;594 type WeightInfo = ();595 type MaxVestingSchedules = MaxVestingSchedules;596 type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;597}598599parameter_types! {600 pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;601 pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;602}603604impl cumulus_pallet_parachain_system::Config for Runtime {605 type Event = Event;606 type SelfParaId = parachain_info::Pallet<Self>;607 type OnSystemEvent = ();608 // type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<609 // MaxDownwardMessageWeight,610 // XcmExecutor<XcmConfig>,611 // Call,612 // >;613 type OutboundXcmpMessageSource = XcmpQueue;614 type DmpMessageHandler = DmpQueue;615 type ReservedDmpWeight = ReservedDmpWeight;616 type ReservedXcmpWeight = ReservedXcmpWeight;617 type XcmpMessageHandler = XcmpQueue;618}619620impl parachain_info::Config for Runtime {}621622impl cumulus_pallet_aura_ext::Config for Runtime {}623624parameter_types! {625 pub const RelayLocation: MultiLocation = MultiLocation::parent();626 pub const RelayNetwork: NetworkId = NetworkId::Polkadot;627 pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();628 pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();629}630631/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used632/// when determining ownership of accounts for asset transacting and when attempting to use XCM633/// `Transact` in order to determine the dispatch Origin.634pub type LocationToAccountId = (635 // The parent (Relay-chain) origin converts to the default `AccountId`.636 ParentIsPreset<AccountId>,637 // Sibling parachain origins convert to AccountId via the `ParaId::into`.638 SiblingParachainConvertsVia<Sibling, AccountId>,639 // Straight up local `AccountId32` origins just alias directly to `AccountId`.640 AccountId32Aliases<RelayNetwork, AccountId>,641);642643pub struct OnlySelfCurrency;644impl<B: TryFrom<u128>> MatchesFungible<B> for OnlySelfCurrency {645 fn matches_fungible(a: &MultiAsset) -> Option<B> {646 match (&a.id, &a.fun) {647 (Concrete(_), XcmFungible(ref amount)) => CheckedConversion::checked_from(*amount),648 _ => None,649 }650 }651}652653/// Means for transacting assets on this chain.654pub type LocalAssetTransactor = CurrencyAdapter<655 // Use this currency:656 Balances,657 // Use this currency when it is a fungible asset matching the given location or name:658 OnlySelfCurrency,659 // Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:660 LocationToAccountId,661 // Our chain's account ID type (we can't get away without mentioning it explicitly):662 AccountId,663 // We don't track any teleports.664 (),665>;666667/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance,668/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can669/// biases the kind of local `Origin` it will become.670pub type XcmOriginToTransactDispatchOrigin = (671 // Sovereign account converter; this attempts to derive an `AccountId` from the origin location672 // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for673 // foreign chains who want to have a local sovereign account on this chain which they control.674 SovereignSignedViaLocation<LocationToAccountId, Origin>,675 // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when676 // recognised.677 RelayChainAsNative<RelayOrigin, Origin>,678 // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when679 // recognised.680 SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,681 // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a682 // transaction from the Root origin.683 ParentAsSuperuser<Origin>,684 // Native signed account converter; this just converts an `AccountId32` origin into a normal685 // `Origin::Signed` origin of the same 32-byte value.686 SignedAccountId32AsNative<RelayNetwork, Origin>,687 // Xcm origins can be represented natively under the Xcm pallet's Xcm origin.688 XcmPassthrough<Origin>,689);690691parameter_types! {692 // One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.693 pub UnitWeightCost: Weight = 1_000_000;694 // 1200 UNIQUEs buy 1 second of weight.695 pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), 1_200 * UNIQUE);696 pub const MaxInstructions: u32 = 100;697 pub const MaxAuthorities: u32 = 100_000;698}699700match_types! {701 pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {702 MultiLocation { parents: 1, interior: Here } |703 MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Unit, .. }) }704 };705}706707pub type Barrier = (708 TakeWeightCredit,709 AllowTopLevelPaidExecutionFrom<Everything>,710 AllowUnpaidExecutionFrom<ParentOrParentsUnitPlurality>,711 // ^^^ Parent & its unit plurality gets free execution712);713714pub struct UsingOnlySelfCurrencyComponents<715 WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,716 AssetId: Get<MultiLocation>,717 AccountId,718 Currency: CurrencyT<AccountId>,719 OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,720>(721 Weight,722 Currency::Balance,723 PhantomData<(WeightToFee, AssetId, AccountId, Currency, OnUnbalanced)>,724);725impl<726 WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,727 AssetId: Get<MultiLocation>,728 AccountId,729 Currency: CurrencyT<AccountId>,730 OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,731 > WeightTrader732 for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>733{734 fn new() -> Self {735 Self(0, Zero::zero(), PhantomData)736 }737738 fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError> {739 let amount = WeightToFee::weight_to_fee(&weight);740 let u128_amount: u128 = amount.try_into().map_err(|_| XcmError::Overflow)?;741742 // location to this parachain through relay chain743 let option1: xcm::v1::AssetId = Concrete(MultiLocation {744 parents: 1,745 interior: X1(Parachain(ParachainInfo::parachain_id().into())),746 });747 // direct location748 let option2: xcm::v1::AssetId = Concrete(MultiLocation {749 parents: 0,750 interior: Here,751 });752753 let required = if payment.fungible.contains_key(&option1) {754 (option1, u128_amount).into()755 } else if payment.fungible.contains_key(&option2) {756 (option2, u128_amount).into()757 } else {758 (Concrete(MultiLocation::default()), u128_amount).into()759 };760761 let unused = payment762 .checked_sub(required)763 .map_err(|_| XcmError::TooExpensive)?;764 self.0 = self.0.saturating_add(weight);765 self.1 = self.1.saturating_add(amount);766 Ok(unused)767 }768769 fn refund_weight(&mut self, weight: Weight) -> Option<MultiAsset> {770 let weight = weight.min(self.0);771 let amount = WeightToFee::weight_to_fee(&weight);772 self.0 -= weight;773 self.1 = self.1.saturating_sub(amount);774 let amount: u128 = amount.saturated_into();775 if amount > 0 {776 Some((AssetId::get(), amount).into())777 } else {778 None779 }780 }781}782impl<783 WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,784 AssetId: Get<MultiLocation>,785 AccountId,786 Currency: CurrencyT<AccountId>,787 OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,788 > Drop789 for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>790{791 fn drop(&mut self) {792 OnUnbalanced::on_unbalanced(Currency::issue(self.1));793 }794}795796pub struct XcmConfig;797impl Config for XcmConfig {798 type Call = Call;799 type XcmSender = XcmRouter;800 // How to withdraw and deposit an asset.801 type AssetTransactor = LocalAssetTransactor;802 type OriginConverter = XcmOriginToTransactDispatchOrigin;803 type IsReserve = NativeAsset;804 type IsTeleporter = (); // Teleportation is disabled805 type LocationInverter = LocationInverter<Ancestry>;806 type Barrier = Barrier;807 type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;808 type Trader = UsingOnlySelfCurrencyComponents<809 LinearFee<Balance>,810 RelayLocation,811 AccountId,812 Balances,813 (),814 >;815 type ResponseHandler = (); // Don't handle responses for now.816 type SubscriptionService = PolkadotXcm;817818 type AssetTrap = PolkadotXcm;819 type AssetClaims = PolkadotXcm;820}821822// parameter_types! {823// pub const MaxDownwardMessageWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 10;824// }825826/// No local origins on this chain are allowed to dispatch XCM sends/executions.827pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);828829/// The means for routing XCM messages which are not for local execution into the right message830/// queues.831pub type XcmRouter = (832 // Two routers - use UMP to communicate with the relay chain:833 cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,834 // ..and XCMP to communicate with the sibling chains.835 XcmpQueue,836);837838impl pallet_evm_coder_substrate::Config for Runtime {}839840impl pallet_xcm::Config for Runtime {841 type Event = Event;842 type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;843 type XcmRouter = XcmRouter;844 type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;845 type XcmExecuteFilter = Everything;846 type XcmExecutor = XcmExecutor<XcmConfig>;847 type XcmTeleportFilter = Everything;848 type XcmReserveTransferFilter = Everything;849 type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;850 type LocationInverter = LocationInverter<Ancestry>;851 type Origin = Origin;852 type Call = Call;853 const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;854 type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;855}856857impl cumulus_pallet_xcm::Config for Runtime {858 type Event = Event;859 type XcmExecutor = XcmExecutor<XcmConfig>;860}861862impl cumulus_pallet_xcmp_queue::Config for Runtime {863 type WeightInfo = ();864 type Event = Event;865 type XcmExecutor = XcmExecutor<XcmConfig>;866 type ChannelInfo = ParachainSystem;867 type VersionWrapper = ();868 type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;869 type ControllerOrigin = EnsureRoot<AccountId>;870 type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin;871}872873impl cumulus_pallet_dmp_queue::Config for Runtime {874 type Event = Event;875 type XcmExecutor = XcmExecutor<XcmConfig>;876 type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;877}878879impl pallet_aura::Config for Runtime {880 type AuthorityId = AuraId;881 type DisabledValidators = ();882 type MaxAuthorities = MaxAuthorities;883}884885parameter_types! {886 pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account_truncating();887 pub const CollectionCreationPrice: Balance = 2 * UNIQUE;888}889890impl pallet_common::Config for Runtime {891 type WeightInfo = pallet_common::weights::SubstrateWeight<Self>;892 type Event = Event;893 type Currency = Balances;894 type CollectionCreationPrice = CollectionCreationPrice;895 type TreasuryAccountId = TreasuryAccountId;896 type CollectionDispatch = CollectionDispatchT<Self>;897898 type EvmTokenAddressMapping = EvmTokenAddressMapping;899 type CrossTokenAddressMapping = CrossTokenAddressMapping<Self::AccountId>;900 type ContractAddress = EvmCollectionHelpersAddress;901}902903impl pallet_structure::Config for Runtime {904 type Event = Event;905 type Call = Call;906 type WeightInfo = pallet_structure::weights::SubstrateWeight<Self>;907}908909impl pallet_fungible::Config for Runtime {910 type WeightInfo = pallet_fungible::weights::SubstrateWeight<Self>;911}912impl pallet_refungible::Config for Runtime {913 type WeightInfo = pallet_refungible::weights::SubstrateWeight<Self>;914}915impl pallet_nonfungible::Config for Runtime {916 type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;917}918919impl pallet_proxy_rmrk_core::Config for Runtime {920 type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight<Self>;921 type Event = Event;922}923924impl pallet_proxy_rmrk_equip::Config for Runtime {925 type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight<Self>;926 type Event = Event;927}928929impl pallet_unique::Config for Runtime {930 type Event = Event;931 type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;932 type CommonWeightInfo = CommonWeights<Self>;933}934935parameter_types! {936 pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied937}938939/// Used for the pallet inflation940impl pallet_inflation::Config for Runtime {941 type Currency = Balances;942 type TreasuryAccountId = TreasuryAccountId;943 type InflationBlockInterval = InflationBlockInterval;944 type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;945}946947parameter_types! {948 pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *949 RuntimeBlockWeights::get().max_block;950 pub const MaxScheduledPerBlock: u32 = 50;951}952953type ChargeTransactionPayment = pallet_charge_transaction::ChargeTransactionPayment<Runtime>;954use frame_support::traits::NamedReservableCurrency;955956fn get_signed_extras(from: <Runtime as frame_system::Config>::AccountId) -> SignedExtraScheduler {957 (958 frame_system::CheckSpecVersion::<Runtime>::new(),959 frame_system::CheckGenesis::<Runtime>::new(),960 frame_system::CheckEra::<Runtime>::from(Era::Immortal),961 frame_system::CheckNonce::<Runtime>::from(frame_system::Pallet::<Runtime>::account_nonce(962 from,963 )),964 frame_system::CheckWeight::<Runtime>::new(),965 // sponsoring transaction logic966 // pallet_charge_transaction::ChargeTransactionPayment::<Runtime>::new(0),967 )968}969970pub struct SchedulerPaymentExecutor;971impl<T: frame_system::Config + pallet_unique_scheduler::Config, SelfContainedSignedInfo>972 DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor973where974 <T as frame_system::Config>::Call: Member975 + Dispatchable<Origin = Origin, Info = DispatchInfo>976 + SelfContainedCall<SignedInfo = SelfContainedSignedInfo>977 + GetDispatchInfo978 + From<frame_system::Call<Runtime>>,979 SelfContainedSignedInfo: Send + Sync + 'static,980 Call: From<<T as frame_system::Config>::Call>981 + From<<T as pallet_unique_scheduler::Config>::Call>982 + SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,983 sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,984{985 fn dispatch_call(986 signer: <T as frame_system::Config>::AccountId,987 call: <T as pallet_unique_scheduler::Config>::Call,988 ) -> Result<989 Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,990 TransactionValidityError,991 > {992 let dispatch_info = call.get_dispatch_info();993 let extrinsic = fp_self_contained::CheckedExtrinsic::<994 AccountId,995 Call,996 SignedExtraScheduler,997 SelfContainedSignedInfo,998 > {999 signed:1000 CheckedSignature::<AccountId, SignedExtraScheduler, SelfContainedSignedInfo>::Signed(1001 signer.clone().into(),1002 get_signed_extras(signer.into()),1003 ),1004 function: call.into(),1005 };10061007 extrinsic.apply::<Runtime>(&dispatch_info, 0)1008 }10091010 fn reserve_balance(1011 id: [u8; 16],1012 sponsor: <T as frame_system::Config>::AccountId,1013 call: <T as pallet_unique_scheduler::Config>::Call,1014 count: u32,1015 ) -> Result<(), DispatchError> {1016 let dispatch_info = call.get_dispatch_info();1017 let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0)1018 .saturating_mul(count.into());10191020 <Balances as NamedReservableCurrency<AccountId>>::reserve_named(1021 &id,1022 &(sponsor.into()),1023 weight.into(),1024 )1025 }10261027 fn pay_for_call(1028 id: [u8; 16],1029 sponsor: <T as frame_system::Config>::AccountId,1030 call: <T as pallet_unique_scheduler::Config>::Call,1031 ) -> Result<u128, DispatchError> {1032 let dispatch_info = call.get_dispatch_info();1033 let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);1034 Ok(1035 <Balances as NamedReservableCurrency<AccountId>>::unreserve_named(1036 &id,1037 &(sponsor.into()),1038 weight.into(),1039 ),1040 )1041 }10421043 fn cancel_reserve(1044 id: [u8; 16],1045 sponsor: <T as frame_system::Config>::AccountId,1046 ) -> Result<u128, DispatchError> {1047 Ok(1048 <Balances as NamedReservableCurrency<AccountId>>::unreserve_named(1049 &id,1050 &(sponsor.into()),1051 u128::MAX,1052 ),1053 )1054 }1055}10561057parameter_types! {1058 pub const NoPreimagePostponement: Option<u32> = Some(10);1059 pub const Preimage: Option<u32> = Some(10);1060}10611062/// Used the compare the privilege of an origin inside the scheduler.1063pub struct OriginPrivilegeCmp;10641065impl PrivilegeCmp<OriginCaller> for OriginPrivilegeCmp {1066 fn cmp_privilege(_left: &OriginCaller, _right: &OriginCaller) -> Option<Ordering> {1067 Some(Ordering::Equal)1068 }1069}10701071impl pallet_unique_scheduler::Config for Runtime {1072 type Event = Event;1073 type Origin = Origin;1074 type Currency = Balances;1075 type PalletsOrigin = OriginCaller;1076 type Call = Call;1077 type MaximumWeight = MaximumSchedulerWeight;1078 type ScheduleOrigin = EnsureSigned<AccountId>;1079 type MaxScheduledPerBlock = MaxScheduledPerBlock;1080 type WeightInfo = ();1081 type CallExecutor = SchedulerPaymentExecutor;1082 type OriginPrivilegeCmp = OriginPrivilegeCmp;1083 type PreimageProvider = ();1084 type NoPreimagePostponement = NoPreimagePostponement;1085}10861087type EvmSponsorshipHandler = (1088 UniqueEthSponsorshipHandler<Runtime>,1089 pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,1090);1091type SponsorshipHandler = (1092 UniqueSponsorshipHandler<Runtime>,1093 //pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,1094 pallet_evm_transaction_payment::BridgeSponsorshipHandler<Runtime>,1095);10961097impl pallet_evm_transaction_payment::Config for Runtime {1098 type EvmSponsorshipHandler = EvmSponsorshipHandler;1099 type Currency = Balances;1100}11011102impl pallet_charge_transaction::Config for Runtime {1103 type SponsorshipHandler = SponsorshipHandler;1104}11051106// impl pallet_contract_helpers::Config for Runtime {1107// type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;1108// }11091110parameter_types! {1111 // 0x842899ECF380553E8a4de75bF534cdf6fBF640491112 pub const HelpersContractAddress: H160 = H160([1113 0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,1114 ]);11151116 // 0x6c4e9fe1ae37a41e93cee429e8e1881abdcbb54f1117 pub const EvmCollectionHelpersAddress: H160 = H160([1118 0x6c, 0x4e, 0x9f, 0xe1, 0xae, 0x37, 0xa4, 0x1e, 0x93, 0xce, 0xe4, 0x29, 0xe8, 0xe1, 0x88, 0x1a, 0xbd, 0xcb, 0xb5, 0x4f,1119 ]);1120}11211122impl pallet_evm_contract_helpers::Config for Runtime {1123 type ContractAddress = HelpersContractAddress;1124 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;1125}11261127construct_runtime!(1128 pub enum Runtime where1129 Block = Block,1130 NodeBlock = opaque::Block,1131 UncheckedExtrinsic = UncheckedExtrinsic1132 {1133 ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,1134 ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,11351136 Aura: pallet_aura::{Pallet, Config<T>} = 22,1137 AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,11381139 Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,1140 RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,1141 Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,1142 TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,1143 Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,1144 Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,1145 System: frame_system::{Pallet, Call, Storage, Config, Event<T>} = 36,1146 Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,1147 // Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,1148 // Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,11491150 // XCM helpers.1151 XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,1152 PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,1153 CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,1154 DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,11551156 // Unique Pallets1157 Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,1158 Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,1159 Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,1160 // free = 631161 Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,1162 // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,1163 Common: pallet_common::{Pallet, Storage, Event<T>} = 66,1164 Fungible: pallet_fungible::{Pallet, Storage} = 67,1165 Refungible: pallet_refungible::{Pallet, Storage} = 68,1166 Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,1167 Structure: pallet_structure::{Pallet, Call, Storage, Event<T>} = 70,1168 RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event<T>} = 71,1169 RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event<T>} = 72,11701171 // Frontier1172 EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,1173 Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,11741175 EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,1176 EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,1177 EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,1178 EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,1179 }1180);11811182pub struct TransactionConverter;11831184impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {1185 fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {1186 UncheckedExtrinsic::new_unsigned(1187 pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1188 )1189 }1190}11911192impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {1193 fn convert_transaction(1194 &self,1195 transaction: pallet_ethereum::Transaction,1196 ) -> opaque::UncheckedExtrinsic {1197 let extrinsic = UncheckedExtrinsic::new_unsigned(1198 pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1199 );1200 let encoded = extrinsic.encode();1201 opaque::UncheckedExtrinsic::decode(&mut &encoded[..])1202 .expect("Encoded extrinsic is always valid")1203 }1204}12051206/// The address format for describing accounts.1207pub type Address = sp_runtime::MultiAddress<AccountId, ()>;1208/// Block header type as expected by this runtime.1209pub type Header = generic::Header<BlockNumber, BlakeTwo256>;1210/// Block type as expected by this runtime.1211pub type Block = generic::Block<Header, UncheckedExtrinsic>;1212/// A Block signed with a Justification1213pub type SignedBlock = generic::SignedBlock<Block>;1214/// BlockId type as expected by this runtime.1215pub type BlockId = generic::BlockId<Block>;1216/// The SignedExtension to the basic transaction logic.1217pub type SignedExtra = (1218 frame_system::CheckSpecVersion<Runtime>,1219 // system::CheckTxVersion<Runtime>,1220 frame_system::CheckGenesis<Runtime>,1221 frame_system::CheckEra<Runtime>,1222 frame_system::CheckNonce<Runtime>,1223 frame_system::CheckWeight<Runtime>,1224 ChargeTransactionPayment,1225 //pallet_contract_helpers::ContractHelpersExtension<Runtime>,1226 pallet_ethereum::FakeTransactionFinalizer<Runtime>,1227);12281229pub type SignedExtraScheduler = (1230 frame_system::CheckSpecVersion<Runtime>,1231 frame_system::CheckGenesis<Runtime>,1232 frame_system::CheckEra<Runtime>,1233 frame_system::CheckNonce<Runtime>,1234 frame_system::CheckWeight<Runtime>,1235 // pallet_charge_transaction::ChargeTransactionPayment<Runtime>,1236);1237/// Unchecked extrinsic type as expected by this runtime.1238pub type UncheckedExtrinsic =1239 fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;1240/// Extrinsic type that has already been checked.1241pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;1242/// Executive: handles dispatch to the various modules.1243pub type Executive = frame_executive::Executive<1244 Runtime,1245 Block,1246 frame_system::ChainContext<Runtime>,1247 Runtime,1248 AllPalletsReversedWithSystemFirst,1249>;12501251impl_opaque_keys! {1252 pub struct SessionKeys {1253 pub aura: Aura,1254 }1255}12561257impl fp_self_contained::SelfContainedCall for Call {1258 type SignedInfo = H160;12591260 fn is_self_contained(&self) -> bool {1261 match self {1262 Call::Ethereum(call) => call.is_self_contained(),1263 _ => false,1264 }1265 }12661267 fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {1268 match self {1269 Call::Ethereum(call) => call.check_self_contained(),1270 _ => None,1271 }1272 }12731274 fn validate_self_contained(1275 &self,1276 info: &Self::SignedInfo,1277 dispatch_info: &DispatchInfoOf<Call>,1278 len: usize,1279 ) -> Option<TransactionValidity> {1280 match self {1281 Call::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len),1282 _ => None,1283 }1284 }12851286 fn pre_dispatch_self_contained(1287 &self,1288 info: &Self::SignedInfo,1289 ) -> Option<Result<(), TransactionValidityError>> {1290 match self {1291 Call::Ethereum(call) => call.pre_dispatch_self_contained(info),1292 _ => None,1293 }1294 }12951296 fn apply_self_contained(1297 self,1298 info: Self::SignedInfo,1299 ) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {1300 match self {1301 call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(1302 Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),1303 )),1304 _ => None,1305 }1306 }1307}13081309macro_rules! dispatch_unique_runtime {1310 ($collection:ident.$method:ident($($name:ident),*)) => {{1311 let collection = <Runtime as pallet_common::Config>::CollectionDispatch::dispatch(<pallet_common::CollectionHandle<Runtime>>::try_get($collection)?);1312 let dispatch = collection.as_dyn();13131314 Ok::<_, DispatchError>(dispatch.$method($($name),*))1315 }};1316}13171318impl_common_runtime_apis! {1319 #![custom_apis]13201321 impl rmrk_rpc::RmrkApi<1322 Block,1323 AccountId,1324 RmrkCollectionInfo<AccountId>,1325 RmrkInstanceInfo<AccountId>,1326 RmrkResourceInfo,1327 RmrkPropertyInfo,1328 RmrkBaseInfo<AccountId>,1329 RmrkPartType,1330 RmrkTheme1331 > for Runtime {1332 fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {1333 pallet_proxy_rmrk_core::rpc::last_collection_idx::<Runtime>()1334 }13351336 fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {1337 pallet_proxy_rmrk_core::rpc::collection_by_id::<Runtime>(collection_id)1338 }13391340 fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {1341 pallet_proxy_rmrk_core::rpc::nft_by_id::<Runtime>(collection_id, nft_by_id)1342 }13431344 fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {1345 pallet_proxy_rmrk_core::rpc::account_tokens::<Runtime>(account_id, collection_id)1346 }13471348 fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {1349 pallet_proxy_rmrk_core::rpc::nft_children::<Runtime>(collection_id, nft_id)1350 }13511352 fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {1353 pallet_proxy_rmrk_core::rpc::collection_properties::<Runtime>(collection_id, filter_keys)1354 }13551356 fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {1357 pallet_proxy_rmrk_core::rpc::nft_properties::<Runtime>(collection_id, nft_id, filter_keys)1358 }13591360 fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {1361 pallet_proxy_rmrk_core::rpc::nft_resources::<Runtime>(collection_id, nft_id)1362 }13631364 fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {1365 pallet_proxy_rmrk_core::rpc::nft_resource_priority::<Runtime>(collection_id, nft_id, resource_id)1366 }13671368 fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {1369 pallet_proxy_rmrk_equip::rpc::base::<Runtime>(base_id)1370 }13711372 fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {1373 pallet_proxy_rmrk_equip::rpc::base_parts::<Runtime>(base_id)1374 }13751376 fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {1377 pallet_proxy_rmrk_equip::rpc::theme_names::<Runtime>(base_id)1378 }13791380 fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {1381 pallet_proxy_rmrk_equip::rpc::theme::<Runtime>(base_id, theme_name, filter_keys)1382 }1383 }1384}13851386struct CheckInherents;13871388impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {1389 fn check_inherents(1390 block: &Block,1391 relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,1392 ) -> sp_inherents::CheckInherentsResult {1393 let relay_chain_slot = relay_state_proof1394 .read_slot()1395 .expect("Could not read the relay chain slot from the proof");13961397 let inherent_data =1398 cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration(1399 relay_chain_slot,1400 sp_std::time::Duration::from_secs(6),1401 )1402 .create_inherent_data()1403 .expect("Could not create the timestamp inherent data");14041405 inherent_data.check_extrinsics(block)1406 }1407}14081409cumulus_pallet_parachain_system::register_validate_block!(1410 Runtime = Runtime,1411 BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,1412 CheckInherents = CheckInherents,1413);runtime/tests/src/tests.rsdiffbeforeafterboth--- a/runtime/tests/src/tests.rs
+++ b/runtime/tests/src/tests.rs
@@ -1264,7 +1264,6 @@
let collection1_id =
create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));
let origin1 = Origin::signed(1);
- let origin2 = Origin::signed(2);
// Add collection admins 2 and 3
assert_ok!(Unique::add_collection_admin(
@@ -1273,7 +1272,7 @@
account(2)
));
assert_ok!(Unique::add_collection_admin(
- origin1,
+ origin1.clone(),
collection1_id,
account(3)
));
@@ -1289,7 +1288,7 @@
// remove admin 3
assert_ok!(Unique::remove_collection_admin(
- origin2,
+ origin1,
CollectionId(1),
account(3)
));
runtime/unique/Cargo.tomldiffbeforeafterboth--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -10,13 +10,13 @@
license = 'GPLv3'
name = 'unique-runtime'
repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.22'
+version = '0.9.23'
[package.metadata.docs.rs]
targets = ['x86_64-unknown-linux-gnu']
[features]
-default = ['std']
+default = ['std', 'unique-runtime']
runtime-benchmarks = [
'hex-literal',
'frame-benchmarking',
@@ -37,6 +37,7 @@
'pallet-proxy-rmrk-equip/runtime-benchmarks',
'pallet-unique/runtime-benchmarks',
'pallet-inflation/runtime-benchmarks',
+ 'pallet-unique-scheduler/runtime-benchmarks',
'pallet-xcm/runtime-benchmarks',
'sp-runtime/runtime-benchmarks',
'xcm-builder/runtime-benchmarks',
@@ -95,7 +96,7 @@
'pallet-proxy-rmrk-core/std',
'pallet-proxy-rmrk-equip/std',
'pallet-unique/std',
- 'pallet-unq-scheduler/std',
+ 'pallet-unique-scheduler/std',
'pallet-charge-transaction/std',
'up-data-structs/std',
'sp-api/std',
@@ -118,6 +119,7 @@
"orml-vesting/std",
]
limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing']
+unique-runtime = []
################################################################################
# Substrate Dependencies
@@ -412,7 +414,7 @@
pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
pallet-proxy-rmrk-core = { default-features = false, path = "../../pallets/proxy-rmrk-core", package = "pallet-rmrk-core" }
pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
-pallet-unq-scheduler = { path = '../../pallets/scheduler', default-features = false }
+pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.23", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
runtime/unique/src/lib.rsdiffbeforeafterboth--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -69,16 +69,14 @@
WeightToFee,
},
};
-use pallet_unq_scheduler::DispatchCall;
+use pallet_unique_scheduler::DispatchCall;
use up_data_structs::{
CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,
CollectionStats, RpcCollection,
mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},
TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,
- RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkThemeProperty, RmrkCollectionId,
- RmrkNftId, RmrkAccountIdOrCollectionNftTuple, RmrkNftChild, RmrkPropertyKey, RmrkResourceTypes,
- RmrkBasicResource, RmrkComposableResource, RmrkSlotResource, RmrkResourceId, RmrkBaseId,
- RmrkFixedPart, RmrkSlotPart, RmrkString,
+ RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkCollectionId, RmrkNftId,
+ RmrkNftChild, RmrkPropertyKey, RmrkResourceId, RmrkBaseId,
};
// use pallet_contracts::weights::WeightInfo;
@@ -192,7 +190,7 @@
spec_name: create_runtime_str!(RUNTIME_NAME),
impl_name: create_runtime_str!(RUNTIME_NAME),
authoring_version: 1,
- spec_version: 922000,
+ spec_version: 923000,
impl_version: 0,
apis: RUNTIME_API_VERSIONS,
transaction_version: 1,
@@ -915,17 +913,8 @@
}
impl pallet_nonfungible::Config for Runtime {
type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;
-}
-
-impl pallet_proxy_rmrk_core::Config for Runtime {
- type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight<Self>;
- type Event = Event;
}
-impl pallet_proxy_rmrk_equip::Config for Runtime {
- type Event = Event;
-}
-
impl pallet_unique::Config for Runtime {
type Event = Event;
type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;
@@ -968,7 +957,7 @@
}
pub struct SchedulerPaymentExecutor;
-impl<T: frame_system::Config + pallet_unq_scheduler::Config, SelfContainedSignedInfo>
+impl<T: frame_system::Config + pallet_unique_scheduler::Config, SelfContainedSignedInfo>
DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor
where
<T as frame_system::Config>::Call: Member
@@ -978,13 +967,13 @@
+ From<frame_system::Call<Runtime>>,
SelfContainedSignedInfo: Send + Sync + 'static,
Call: From<<T as frame_system::Config>::Call>
- + From<<T as pallet_unq_scheduler::Config>::Call>
+ + From<<T as pallet_unique_scheduler::Config>::Call>
+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,
sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,
{
fn dispatch_call(
signer: <T as frame_system::Config>::AccountId,
- call: <T as pallet_unq_scheduler::Config>::Call,
+ call: <T as pallet_unique_scheduler::Config>::Call,
) -> Result<
Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,
TransactionValidityError,
@@ -1010,7 +999,7 @@
fn reserve_balance(
id: [u8; 16],
sponsor: <T as frame_system::Config>::AccountId,
- call: <T as pallet_unq_scheduler::Config>::Call,
+ call: <T as pallet_unique_scheduler::Config>::Call,
count: u32,
) -> Result<(), DispatchError> {
let dispatch_info = call.get_dispatch_info();
@@ -1027,7 +1016,7 @@
fn pay_for_call(
id: [u8; 16],
sponsor: <T as frame_system::Config>::AccountId,
- call: <T as pallet_unq_scheduler::Config>::Call,
+ call: <T as pallet_unique_scheduler::Config>::Call,
) -> Result<u128, DispatchError> {
let dispatch_info = call.get_dispatch_info();
let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);
@@ -1068,7 +1057,7 @@
}
}
-impl pallet_unq_scheduler::Config for Runtime {
+impl pallet_unique_scheduler::Config for Runtime {
type Event = Event;
type Origin = Origin;
type Currency = Balances;
@@ -1156,7 +1145,7 @@
// Unique Pallets
Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,
Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,
- Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
+ Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
// free = 63
Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,
// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
@@ -1165,8 +1154,6 @@
Refungible: pallet_refungible::{Pallet, Storage} = 68,
Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,
Structure: pallet_structure::{Pallet, Call, Storage, Event<T>} = 70,
- RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event<T>} = 71,
- RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event<T>} = 72,
// Frontier
EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,
@@ -1314,7 +1301,73 @@
}};
}
-impl_common_runtime_apis!();
+impl_common_runtime_apis! {
+ #![custom_apis]
+
+ impl rmrk_rpc::RmrkApi<
+ Block,
+ AccountId,
+ RmrkCollectionInfo<AccountId>,
+ RmrkInstanceInfo<AccountId>,
+ RmrkResourceInfo,
+ RmrkPropertyInfo,
+ RmrkBaseInfo<AccountId>,
+ RmrkPartType,
+ RmrkTheme
+ > for Runtime {
+ fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn collection_by_id(_collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn nft_by_id(_collection_id: RmrkCollectionId, _nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn account_tokens(_account_id: AccountId, _collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn nft_children(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn collection_properties(_collection_id: RmrkCollectionId, _filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn nft_properties(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId, _filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn nft_resources(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn nft_resource_priority(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId, _resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn base(_base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn base_parts(_base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn theme_names(_base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
+ Ok(Default::default())
+ }
+
+ fn theme(_base_id: RmrkBaseId, _theme_name: RmrkThemeName, _filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {
+ Ok(Default::default())
+ }
+ }
+}
struct CheckInherents;
tests/package.jsondiffbeforeafterboth--- a/tests/package.json
+++ b/tests/package.json
@@ -28,6 +28,7 @@
"test": "mocha --timeout 9999999 -r ts-node/register './src/**/*.test.ts'",
"testEth": "mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'",
"testEthMarketplace": "mocha --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'",
+ "testEthNesting": "mocha --timeout 9999999 -r ts-node/register './**/eth/nesting/**/*.test.ts'",
"load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'",
"loadTransfer": "ts-node src/transfer.nload.ts",
"testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",
tests/src/approve.test.tsdiffbeforeafterboth--- a/tests/src/approve.test.ts
+++ b/tests/src/approve.test.ts
@@ -28,7 +28,7 @@
setCollectionLimitsExpectSuccess,
transferExpectSuccess,
addCollectionAdminExpectSuccess,
- adminApproveFromExpectSuccess,
+ adminApproveFromExpectFail,
getCreatedCollectionCount,
transferFromExpectSuccess,
transferFromExpectFail,
@@ -84,11 +84,11 @@
await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, alice, bob.address, 0);
});
- it('can be called by collection owner on non-owned item when OwnerCanTransfer == true', async () => {
+ it('can`t be called by collection owner on non-owned item when OwnerCanTransfer == false', async () => {
const collectionId = await createCollectionExpectSuccess();
const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);
- await adminApproveFromExpectSuccess(collectionId, itemId, alice, bob.address, charlie.address);
+ await adminApproveFromExpectFail(collectionId, itemId, alice, bob.address, charlie.address);
});
});
@@ -292,7 +292,7 @@
});
});
-describe('Administrator and collection owner do not need approval in order to execute TransferFrom:', () => {
+describe('Administrator and collection owner do not need approval in order to execute TransferFrom (with owner_can_transfer_flag = true):', () => {
let alice: IKeyringPair;
let bob: IKeyringPair;
let charlie: IKeyringPair;
@@ -309,6 +309,7 @@
it('NFT', async () => {
const collectionId = await createCollectionExpectSuccess();
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', charlie.address);
await transferFromExpectSuccess(collectionId, itemId, alice, charlie, dave, 1, 'NFT');
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -317,6 +318,7 @@
it('Fungible up to an approved amount', async () => {
const collectionId = await createCollectionExpectSuccess({mode:{type: 'Fungible', decimalPoints: 0}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
const itemId = await createItemExpectSuccess(alice, collectionId, 'Fungible', charlie.address);
await transferFromExpectSuccess(collectionId, itemId, alice, charlie, dave, 1, 'Fungible');
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -325,6 +327,7 @@
it('ReFungible up to an approved amount', async () => {
const collectionId = await createCollectionExpectSuccess({mode:{type: 'ReFungible'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
const itemId = await createItemExpectSuccess(alice, collectionId, 'ReFungible', charlie.address);
await transferFromExpectSuccess(collectionId, itemId, alice, charlie, dave, 1, 'ReFungible');
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -402,7 +405,7 @@
const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
- await adminApproveFromExpectSuccess(collectionId, itemId, bob, alice.address, charlie.address);
+ await adminApproveFromExpectFail(collectionId, itemId, bob, alice.address, charlie.address);
});
});
tests/src/burnItem.test.tsdiffbeforeafterboth--- a/tests/src/burnItem.test.ts
+++ b/tests/src/burnItem.test.ts
@@ -23,6 +23,7 @@
normalizeAccountId,
addCollectionAdminExpectSuccess,
getBalance,
+ setCollectionLimitsExpectSuccess,
isTokenExists,
} from './util/helpers';
@@ -149,6 +150,7 @@
it('Burn item in NFT collection', async () => {
const createMode = 'NFT';
const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -167,6 +169,7 @@
it('Burn item in Fungible collection', async () => {
const createMode = 'Fungible';
const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode); // Helper creates 10 fungible tokens
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -189,6 +192,7 @@
it('Burn item in ReFungible collection', async () => {
const createMode = 'ReFungible';
const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
tests/src/createMultipleItems.test.tsdiffbeforeafterboth--- a/tests/src/createMultipleItems.test.ts
+++ b/tests/src/createMultipleItems.test.ts
@@ -48,7 +48,7 @@
const alice = privateKeyWrapper('//Alice');
await submitTransactionAsync(
alice,
- api.tx.unique.setPropertyPermissions(collectionId, [{key: 'data', permission: {tokenOwner: true}}]),
+ api.tx.unique.setTokenPropertyPermissions(collectionId, [{key: 'data', permission: {tokenOwner: true}}]),
);
const args = [
@@ -470,7 +470,7 @@
const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- const tx1 = api.tx.unique.setPropertyPermissions(collectionId, propPerms);
+ const tx1 = api.tx.unique.setTokenPropertyPermissions(collectionId, propPerms);
await expect(executeTransaction(api, alice, tx1)).to.be.rejectedWith(/common\.PropertyLimitReached/);
const itemsListIndexBefore = await getLastTokenId(api, collectionId);
tests/src/createMultipleItemsEx.test.tsdiffbeforeafterboth--- a/tests/src/createMultipleItemsEx.test.ts
+++ b/tests/src/createMultipleItemsEx.test.ts
@@ -222,7 +222,7 @@
const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await usingApi(async (api, privateKeyWrapper) => {
const alice = privateKeyWrapper('//Alice');
- await expect(executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, propPerms))).to.be.rejectedWith(/common\.PropertyLimitReached/);
+ await expect(executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, propPerms))).to.be.rejectedWith(/common\.PropertyLimitReached/);
});
});
tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -174,7 +174,24 @@
function finishMinting() external returns (bool);
}
-// Selector: 6aea9834
+// Selector: 780e9d63
+interface ERC721Enumerable is Dummy, ERC165 {
+ // Selector: tokenByIndex(uint256) 4f6ccce7
+ function tokenByIndex(uint256 index) external view returns (uint256);
+
+ // Not implemented
+ //
+ // Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59
+ function tokenOfOwnerByIndex(address owner, uint256 index)
+ external
+ view
+ returns (uint256);
+
+ // Selector: totalSupply() 18160ddd
+ function totalSupply() external view returns (uint256);
+}
+
+// Selector: 7d9262e6
interface Collection is Dummy, ERC165 {
// Selector: setCollectionProperty(string,bytes) 2f073f66
function setCollectionProperty(string memory key, bytes memory value)
@@ -206,6 +223,12 @@
// Selector: contractAddress() f6b4dfb4
function contractAddress() external view returns (address);
+ // Selector: addCollectionAdminSubstrate(uint256) 5730062b
+ function addCollectionAdminSubstrate(uint256 newAdmin) external view;
+
+ // Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
+ function removeCollectionAdminSubstrate(uint256 newAdmin) external view;
+
// Selector: addCollectionAdmin(address) 92e462c7
function addCollectionAdmin(address newAdmin) external view;
@@ -230,23 +253,6 @@
// Selector: setCollectionMintMode(bool) 00018e84
function setCollectionMintMode(bool mode) external;
-}
-
-// Selector: 780e9d63
-interface ERC721Enumerable is Dummy, ERC165 {
- // Selector: tokenByIndex(uint256) 4f6ccce7
- function tokenByIndex(uint256 index) external view returns (uint256);
-
- // Not implemented
- //
- // Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59
- function tokenOfOwnerByIndex(address owner, uint256 index)
- external
- view
- returns (uint256);
-
- // Selector: totalSupply() 18160ddd
- function totalSupply() external view returns (uint256);
}
// Selector: d74d154f
tests/src/eth/collectionAdmin.test.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/eth/collectionAdmin.test.ts
@@ -0,0 +1,296 @@
+// 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 <http://www.gnu.org/licenses/>.
+
+import {expect} from 'chai';
+import privateKey from '../substrate/privateKey';
+import {
+ createEthAccount,
+ createEthAccountWithBalance,
+ evmCollection,
+ evmCollectionHelpers,
+ getCollectionAddressFromResult,
+ itWeb3,
+} from './util/helpers';
+
+describe('Add collection admins', () => {
+ itWeb3('Add admin by owner', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const newAdmin = await createEthAccount(web3);
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ await collectionEvm.methods.addCollectionAdmin(newAdmin).send();
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+ .to.be.eq(newAdmin.toLocaleLowerCase());
+ });
+
+ itWeb3('Add substrate admin by owner', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const newAdmin = privateKeyWrapper('//Alice');
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ await collectionEvm.methods.addCollectionAdminSubstrate(newAdmin.addressRaw).send();
+
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList[0].asSubstrate.toString().toLocaleLowerCase())
+ .to.be.eq(newAdmin.address.toLocaleLowerCase());
+ });
+
+ itWeb3('(!negative tests!) Add admin by ADMIN is not allowed', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const admin = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ await collectionEvm.methods.addCollectionAdmin(admin).send();
+
+ const user = await createEthAccount(web3);
+ await expect(collectionEvm.methods.addCollectionAdmin(user).call({from: admin}))
+ .to.be.rejectedWith('NoPermission');
+
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(1);
+ expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+ .to.be.eq(admin.toLocaleLowerCase());
+ });
+
+ itWeb3('(!negative tests!) Add admin by USER is not allowed', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const notAdmin = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+
+ const user = await createEthAccount(web3);
+ await expect(collectionEvm.methods.addCollectionAdmin(user).call({from: notAdmin}))
+ .to.be.rejectedWith('NoPermission');
+
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(0);
+ });
+
+ itWeb3('(!negative tests!) Add substrate admin by ADMIN is not allowed', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const admin = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ await collectionEvm.methods.addCollectionAdmin(admin).send();
+
+ const notAdmin = privateKey('//Alice');
+ await expect(collectionEvm.methods.addCollectionAdminSubstrate(notAdmin.addressRaw).call({from: admin}))
+ .to.be.rejectedWith('NoPermission');
+
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(1);
+ expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+ .to.be.eq(admin.toLocaleLowerCase());
+ });
+
+ itWeb3('(!negative tests!) Add substrate admin by USER is not allowed', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const notAdmin0 = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ const notAdmin1 = privateKey('//Alice');
+ await expect(collectionEvm.methods.addCollectionAdminSubstrate(notAdmin1.addressRaw).call({from: notAdmin0}))
+ .to.be.rejectedWith('NoPermission');
+
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(0);
+ });
+});
+
+describe('Remove collection admins', () => {
+ itWeb3('Remove admin by owner', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const newAdmin = await createEthAccount(web3);
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ await collectionEvm.methods.addCollectionAdmin(newAdmin).send();
+ {
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(1);
+ expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+ .to.be.eq(newAdmin.toLocaleLowerCase());
+ }
+
+ await collectionEvm.methods.removeCollectionAdmin(newAdmin).send();
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(0);
+ });
+
+ itWeb3('Remove substrate admin by owner', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const newAdmin = privateKeyWrapper('//Alice');
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ await collectionEvm.methods.addCollectionAdminSubstrate(newAdmin.addressRaw).send();
+ {
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList[0].asSubstrate.toString().toLocaleLowerCase())
+ .to.be.eq(newAdmin.address.toLocaleLowerCase());
+ }
+
+ await collectionEvm.methods.removeCollectionAdminSubstrate(newAdmin.addressRaw).send();
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(0);
+ });
+
+ itWeb3('(!negative tests!) Remove admin by ADMIN is not allowed', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+
+ const admin0 = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ await collectionEvm.methods.addCollectionAdmin(admin0).send();
+ const admin1 = await createEthAccount(web3);
+ await collectionEvm.methods.addCollectionAdmin(admin1).send();
+
+ await expect(collectionEvm.methods.removeCollectionAdmin(admin1).call({from: admin0}))
+ .to.be.rejectedWith('NoPermission');
+ {
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(2);
+ expect(adminList.toString().toLocaleLowerCase())
+ .to.be.deep.contains(admin0.toLocaleLowerCase())
+ .to.be.deep.contains(admin1.toLocaleLowerCase());
+ }
+ });
+
+ itWeb3('(!negative tests!) Remove admin by USER is not allowed', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+
+ const admin = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ await collectionEvm.methods.addCollectionAdmin(admin).send();
+ const notAdmin = await createEthAccount(web3);
+
+ await expect(collectionEvm.methods.removeCollectionAdmin(admin).call({from: notAdmin}))
+ .to.be.rejectedWith('NoPermission');
+ {
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+ .to.be.eq(admin.toLocaleLowerCase());
+ expect(adminList.length).to.be.eq(1);
+ }
+ });
+
+ itWeb3('(!negative tests!) Remove substrate admin by ADMIN is not allowed', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const adminSub = privateKeyWrapper('//Alice');
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ await collectionEvm.methods.addCollectionAdminSubstrate(adminSub.addressRaw).send();
+ const adminEth = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ await collectionEvm.methods.addCollectionAdmin(adminEth).send();
+
+ await expect(collectionEvm.methods.removeCollectionAdminSubstrate(adminSub.addressRaw).call({from: adminEth}))
+ .to.be.rejectedWith('NoPermission');
+
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(2);
+ expect(adminList.toString().toLocaleLowerCase())
+ .to.be.deep.contains(adminSub.address.toLocaleLowerCase())
+ .to.be.deep.contains(adminEth.toLocaleLowerCase());
+ });
+
+ itWeb3('(!negative tests!) Remove substrate admin by USER is not allowed', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const adminSub = privateKeyWrapper('//Alice');
+ const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+ await collectionEvm.methods.addCollectionAdminSubstrate(adminSub.addressRaw).send();
+ const notAdminEth = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+ await expect(collectionEvm.methods.removeCollectionAdminSubstrate(adminSub.addressRaw).call({from: notAdminEth}))
+ .to.be.rejectedWith('NoPermission');
+
+ const adminList = await api.rpc.unique.adminlist(collectionId);
+ expect(adminList.length).to.be.eq(1);
+ expect(adminList[0].asSubstrate.toString().toLocaleLowerCase())
+ .to.be.eq(adminSub.address.toLocaleLowerCase());
+ });
+});
\ No newline at end of file
tests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth--- a/tests/src/eth/contractSponsoring.test.ts
+++ b/tests/src/eth/contractSponsoring.test.ts
@@ -233,7 +233,7 @@
const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;
expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
- await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('Caller is not set as sponsor');
+ await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');
await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});
collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
@@ -241,14 +241,13 @@
expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
const user = createEthAccount(web3);
- let nextTokenId = await collectionEvm.methods.nextTokenId().call();
+ const nextTokenId = await collectionEvm.methods.nextTokenId().call();
expect(nextTokenId).to.be.equal('1');
const oldPermissions = (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();
expect(oldPermissions.mintMode).to.be.false;
expect(oldPermissions.access).to.be.equal('Normal');
- //TODO: change value, when enum generated
await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});
await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});
await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});
@@ -260,34 +259,35 @@
const ownerBalanceBefore = await ethBalanceViaSub(api, owner);
const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
- nextTokenId = await collectionEvm.methods.nextTokenId().call({from: user});
- expect(nextTokenId).to.be.equal('1');
- result = await collectionEvm.methods.mintWithTokenURI(
- user,
- nextTokenId,
- 'Test URI',
- ).send({from: user});
- const events = normalizeEvents(result.events);
- events[0].address = events[0].address.toLocaleLowerCase();
+ {
+ const nextTokenId = await collectionEvm.methods.nextTokenId().call();
+ expect(nextTokenId).to.be.equal('1');
+ const result = await collectionEvm.methods.mintWithTokenURI(
+ user,
+ nextTokenId,
+ 'Test URI',
+ ).send({from: user});
+ const events = normalizeEvents(result.events);
- expect(events).to.be.deep.equal([
- {
- address: collectionIdAddress.toLocaleLowerCase(),
- event: 'Transfer',
- args: {
- from: '0x0000000000000000000000000000000000000000',
- to: user,
- tokenId: nextTokenId,
+ expect(events).to.be.deep.equal([
+ {
+ address: collectionIdAddress,
+ event: 'Transfer',
+ args: {
+ from: '0x0000000000000000000000000000000000000000',
+ to: user,
+ tokenId: nextTokenId,
+ },
},
- },
- ]);
+ ]);
- expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
+ const ownerBalanceAfter = await ethBalanceViaSub(api, owner);
+ const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
- const ownerBalanceAfter = await ethBalanceViaSub(api, owner);
- expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);
- const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
- expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
+ expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
+ expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);
+ expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;
+ }
});
itWeb3('Check that transaction via EVM spend money from sponsor address', async ({api, web3, privateKeyWrapper}) => {
@@ -302,7 +302,7 @@
const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;
expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
- await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('Caller is not set as sponsor');
+ await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');
const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);
await sponsorCollection.methods.confirmCollectionSponsorship().send();
collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
@@ -314,6 +314,7 @@
const ownerBalanceBefore = await ethBalanceViaSub(api, owner);
const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
+
const userCollectionEvm = evmCollection(web3, user, collectionIdAddress);
const nextTokenId = await userCollectionEvm.methods.nextTokenId().call();
tests/src/eth/createCollection.test.tsdiffbeforeafterboth--- a/tests/src/eth/createCollection.test.ts
+++ b/tests/src/eth/createCollection.test.ts
@@ -80,7 +80,7 @@
expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;
const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
- await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('Caller is not set as sponsor');
+ await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');
const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);
await sponsorCollection.methods.confirmCollectionSponsorship().send();
collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
@@ -208,7 +208,7 @@
const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);
await expect(sponsorCollection.methods
.confirmCollectionSponsorship()
- .call()).to.be.rejectedWith('Caller is not set as sponsor');
+ .call()).to.be.rejectedWith('caller is not set as sponsor');
}
{
await expect(contractEvmFromNotOwner.methods
@@ -225,6 +225,6 @@
const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
await expect(collectionEvm.methods
.setCollectionLimit('badLimit', 'true')
- .call()).to.be.rejectedWith('Unknown boolean limit "badLimit"');
+ .call()).to.be.rejectedWith('unknown boolean limit "badLimit"');
});
});
\ No newline at end of file
tests/src/eth/crossTransfer.test.tsdiffbeforeafterboth--- a/tests/src/eth/crossTransfer.test.ts
+++ b/tests/src/eth/crossTransfer.test.ts
@@ -18,6 +18,7 @@
createFungibleItemExpectSuccess,
transferExpectSuccess,
transferFromExpectSuccess,
+ setCollectionLimitsExpectSuccess,
createItemExpectSuccess} from '../util/helpers';
import {collectionIdToAddress,
createEthAccountWithBalance,
@@ -35,6 +36,7 @@
const alice = privateKeyWrapper('//Alice');
const bob = privateKeyWrapper('//Bob');
const charlie = privateKeyWrapper('//Charlie');
+ await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Substrate: alice.address});
await transferExpectSuccess(collection, 0, alice, {Ethereum: subToEth(charlie.address)} , 200, 'Fungible');
await transferFromExpectSuccess(collection, 0, alice, {Ethereum: subToEth(charlie.address)}, charlie, 50, 'Fungible');
@@ -48,6 +50,7 @@
});
const alice = privateKeyWrapper('//Alice');
const bob = privateKeyWrapper('//Bob');
+ await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
const bobProxy = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const aliceProxy = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
@@ -71,6 +74,7 @@
const alice = privateKeyWrapper('//Alice');
const bob = privateKeyWrapper('//Bob');
const charlie = privateKeyWrapper('//Charlie');
+ await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
await transferExpectSuccess(collection, tokenId, alice, {Ethereum: subToEth(charlie.address)}, 1, 'NFT');
await transferFromExpectSuccess(collection, tokenId, alice, {Ethereum: subToEth(charlie.address)}, charlie, 1, 'NFT');
@@ -85,6 +89,7 @@
const alice = privateKeyWrapper('//Alice');
const bob = privateKeyWrapper('//Bob');
const charlie = privateKeyWrapper('//Charlie');
+ await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
const bobProxy = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const aliceProxy = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
tests/src/eth/nesting/nest.test.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/eth/nesting/nest.test.ts
@@ -0,0 +1,217 @@
+import {ApiPromise} from '@polkadot/api';
+import {Contract} from 'web3-eth-contract';
+import {expect} from 'chai';
+import Web3 from 'web3';
+import {createEthAccountWithBalance, evmCollectionHelpers, GAS_ARGS, getCollectionAddressFromResult, itWeb3, tokenIdToAddress} from '../../eth/util/helpers';
+import nonFungibleAbi from '../nonFungibleAbi.json';
+
+const createNestingCollection = async (
+ api: ApiPromise,
+ web3: Web3,
+ owner: string,
+): Promise<{ collectionId: number, collectionAddress: string, contract: Contract }> => {
+ const collectionHelper = evmCollectionHelpers(web3, owner);
+
+ const result = await collectionHelper.methods
+ .createNonfungibleCollection('A', 'B', 'C')
+ .send();
+ const {collectionIdAddress: collectionAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, collectionAddress, {from: owner, ...GAS_ARGS});
+ await contract.methods.setCollectionNesting(true).send({from: owner});
+
+ return {collectionId, collectionAddress, contract};
+};
+
+describe('Integration Test: EVM Nesting', () => {
+ itWeb3('NFT: allows an Owner to nest/unnest their token', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const {collectionId, contract} = await createNestingCollection(api, web3, owner);
+
+ // Create a token to be nested
+ const targetNFTTokenId = await contract.methods.nextTokenId().call();
+ await contract.methods.mint(
+ owner,
+ targetNFTTokenId,
+ ).send({from: owner});
+
+ const targetNftTokenAddress = tokenIdToAddress(collectionId, targetNFTTokenId);
+
+ // Create a nested token
+ const firstTokenId = await contract.methods.nextTokenId().call();
+ await contract.methods.mint(
+ targetNftTokenAddress,
+ firstTokenId,
+ ).send({from: owner});
+
+ expect(await contract.methods.ownerOf(firstTokenId).call()).to.be.equal(targetNftTokenAddress);
+
+ // Create a token to be nested and nest
+ const secondTokenId = await contract.methods.nextTokenId().call();
+ await contract.methods.mint(
+ owner,
+ secondTokenId,
+ ).send({from: owner});
+
+ await contract.methods.transfer(targetNftTokenAddress, secondTokenId).send({from: owner});
+
+ expect(await contract.methods.ownerOf(secondTokenId).call()).to.be.equal(targetNftTokenAddress);
+
+ // Unnest token back
+ await contract.methods.transferFrom(targetNftTokenAddress, owner, secondTokenId).send({from: owner});
+ expect(await contract.methods.ownerOf(secondTokenId).call()).to.be.equal(owner);
+ });
+
+ itWeb3('NFT: allows an Owner to nest/unnest their token (Restricted nesting)', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+ const {collectionId: collectionIdA, collectionAddress: collectionAddressA, contract: contractA} = await createNestingCollection(api, web3, owner);
+ const {collectionAddress: collectionAddressB, contract: contractB} = await createNestingCollection(api, web3, owner);
+ await contractA.methods.setCollectionNesting(true, [collectionAddressA, collectionAddressB]).send({from: owner});
+
+ // Create a token to nest into
+ const targetNftTokenId = await contractA.methods.nextTokenId().call();
+ await contractA.methods.mint(
+ owner,
+ targetNftTokenId,
+ ).send({from: owner});
+ const nftTokenAddressA1 = tokenIdToAddress(collectionIdA, targetNftTokenId);
+
+ // Create a token for nesting in the same collection as the target
+ const nftTokenIdA = await contractA.methods.nextTokenId().call();
+ await contractA.methods.mint(
+ owner,
+ nftTokenIdA,
+ ).send({from: owner});
+
+ // Create a token for nesting in a different collection
+ const nftTokenIdB = await contractB.methods.nextTokenId().call();
+ await contractB.methods.mint(
+ owner,
+ nftTokenIdB,
+ ).send({from: owner});
+
+ // Nest
+ await contractA.methods.transfer(nftTokenAddressA1, nftTokenIdA).send({from: owner});
+ expect(await contractA.methods.ownerOf(nftTokenIdA).call()).to.be.equal(nftTokenAddressA1);
+
+ await contractB.methods.transfer(nftTokenAddressA1, nftTokenIdB).send({from: owner});
+ expect(await contractB.methods.ownerOf(nftTokenIdB).call()).to.be.equal(nftTokenAddressA1);
+ });
+});
+
+describe('Negative Test: EVM Nesting', async() => {
+ itWeb3('NFT: disallows to nest token if nesting is disabled', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+ const {collectionId, contract} = await createNestingCollection(api, web3, owner);
+ await contract.methods.setCollectionNesting(false).send({from: owner});
+
+ // Create a token to nest into
+ const targetNftTokenId = await contract.methods.nextTokenId().call();
+ await contract.methods.mint(
+ owner,
+ targetNftTokenId,
+ ).send({from: owner});
+
+ const targetNftTokenAddress = tokenIdToAddress(collectionId, targetNftTokenId);
+
+ // Create a token to nest
+ const nftTokenId = await contract.methods.nextTokenId().call();
+ await contract.methods.mint(
+ owner,
+ nftTokenId,
+ ).send({from: owner});
+
+ // Try to nest
+ await expect(contract.methods
+ .transfer(targetNftTokenAddress, nftTokenId)
+ .call({from: owner})).to.be.rejectedWith('UserIsNotAllowedToNest');
+ });
+
+ itWeb3('NFT: disallows a non-Owner to nest someone else\'s token', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const malignant = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+ const {collectionId, contract} = await createNestingCollection(api, web3, owner);
+
+ // Mint a token
+ const targetTokenId = await contract.methods.nextTokenId().call();
+ await contract.methods.mint(
+ owner,
+ targetTokenId,
+ ).send({from: owner});
+ const targetTokenAddress = tokenIdToAddress(collectionId, targetTokenId);
+
+ // Mint a token belonging to a different account
+ const tokenId = await contract.methods.nextTokenId().call();
+ await contract.methods.mint(
+ malignant,
+ tokenId,
+ ).send({from: owner});
+
+ // Try to nest one token in another as a non-owner account
+ await expect(contract.methods
+ .transfer(targetTokenAddress, tokenId)
+ .call({from: malignant})).to.be.rejectedWith('UserIsNotAllowedToNest');
+ });
+
+ itWeb3('NFT: disallows a non-Owner to nest someone else\'s token (Restricted nesting)', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const malignant = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+ const {collectionId: collectionIdA, collectionAddress: collectionAddressA, contract: contractA} = await createNestingCollection(api, web3, owner);
+ const {collectionAddress: collectionAddressB, contract: contractB} = await createNestingCollection(api, web3, owner);
+
+ await contractA.methods.setCollectionNesting(true, [collectionAddressA, collectionAddressB]).send({from: owner});
+
+ // Create a token in one collection
+ const nftTokenIdA = await contractA.methods.nextTokenId().call();
+ await contractA.methods.mint(
+ owner,
+ nftTokenIdA,
+ ).send({from: owner});
+ const nftTokenAddressA = tokenIdToAddress(collectionIdA, nftTokenIdA);
+
+ // Create a token in another collection belonging to someone else
+ const nftTokenIdB = await contractB.methods.nextTokenId().call();
+ await contractB.methods.mint(
+ malignant,
+ nftTokenIdB,
+ ).send({from: owner});
+
+ // Try to drag someone else's token into the other collection and nest
+ await expect(contractB.methods
+ .transfer(nftTokenAddressA, nftTokenIdB)
+ .call({from: malignant})).to.be.rejectedWith('UserIsNotAllowedToNest');
+ });
+
+ itWeb3('NFT: disallows to nest token in an unlisted collection', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+ const {collectionId: collectionIdA, collectionAddress: collectionAddressA, contract: contractA} = await createNestingCollection(api, web3, owner);
+ const {contract: contractB} = await createNestingCollection(api, web3, owner);
+
+ await contractA.methods.setCollectionNesting(true, [collectionAddressA]).send({from: owner});
+
+ // Create a token in one collection
+ const nftTokenIdA = await contractA.methods.nextTokenId().call();
+ await contractA.methods.mint(
+ owner,
+ nftTokenIdA,
+ ).send({from: owner});
+ const nftTokenAddressA = tokenIdToAddress(collectionIdA, nftTokenIdA);
+
+ // Create a token in another collection
+ const nftTokenIdB = await contractB.methods.nextTokenId().call();
+ await contractB.methods.mint(
+ owner,
+ nftTokenIdB,
+ ).send({from: owner});
+
+ // Try to nest into a token in the other collection, disallowed in the first
+ await expect(contractB.methods
+ .transfer(nftTokenAddressA, nftTokenIdB)
+ .call()).to.be.rejectedWith('SourceCollectionIsNotAllowedToNest');
+ });
+});
tests/src/eth/nonFungibleAbi.jsondiffbeforeafterboth--- a/tests/src/eth/nonFungibleAbi.json
+++ b/tests/src/eth/nonFungibleAbi.json
@@ -91,6 +91,15 @@
},
{
"inputs": [
+ { "internalType": "uint256", "name": "newAdmin", "type": "uint256" }
+ ],
+ "name": "addCollectionAdminSubstrate",
+ "outputs": [],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
{ "internalType": "address", "name": "user", "type": "address" }
],
"name": "addToCollectionAllowList",
@@ -300,6 +309,15 @@
},
{
"inputs": [
+ { "internalType": "uint256", "name": "newAdmin", "type": "uint256" }
+ ],
+ "name": "removeCollectionAdminSubstrate",
+ "outputs": [],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
{ "internalType": "address", "name": "user", "type": "address" }
],
"name": "removeFromCollectionAllowList",
tests/src/eth/tokenProperties.test.tsdiffbeforeafterboth--- a/tests/src/eth/tokenProperties.test.ts
+++ b/tests/src/eth/tokenProperties.test.ts
@@ -29,7 +29,7 @@
const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
const token = await createItemExpectSuccess(alice, collection, 'NFT');
- await executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, [{
+ await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
key: 'testKey',
permission: {
collectionAdmin: true,
@@ -52,7 +52,7 @@
const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
const token = await createItemExpectSuccess(alice, collection, 'NFT');
- await executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, [{
+ await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
key: 'testKey',
permission: {
mutable: true,
@@ -77,7 +77,7 @@
const collection = await createCollectionExpectSuccess({mode: {type:'NFT'}});
const token = await createItemExpectSuccess(alice, collection, 'NFT');
- await executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, [{
+ await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
key: 'testKey',
permission: {
collectionAdmin: true,
tests/src/interfaces/augment-api-errors.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-errors.ts
+++ b/tests/src/interfaces/augment-api-errors.ts
@@ -458,6 +458,7 @@
ResourceNotPending: AugmentedError<ApiType>;
RmrkPropertyKeyIsTooLong: AugmentedError<ApiType>;
RmrkPropertyValueIsTooLong: AugmentedError<ApiType>;
+ UnableToDecodeRmrkData: AugmentedError<ApiType>;
/**
* Generic error
**/
tests/src/interfaces/augment-api-query.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-query.ts
+++ b/tests/src/interfaces/augment-api-query.ts
@@ -5,7 +5,7 @@
import type { BTreeMap, Bytes, Option, U256, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec';
import type { AnyNumber, ITuple } from '@polkadot/types-codec/types';
import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime';
-import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletUnqSchedulerScheduledV3, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsTokenChild } from '@polkadot/types/lookup';
+import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletUniqueSchedulerScheduledV3, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsTokenChild } from '@polkadot/types/lookup';
import type { Observable } from '@polkadot/types/types';
declare module '@polkadot/api-base/types/storage' {
@@ -417,7 +417,6 @@
};
rmrkCore: {
collectionIndex: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
- rmrkInernalCollectionId: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
uniqueCollectionId: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
/**
* Generic query
@@ -436,7 +435,7 @@
/**
* Items to be executed, indexed by the block number that they should be executed on.
**/
- agenda: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Vec<Option<PalletUnqSchedulerScheduledV3>>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ agenda: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Vec<Option<PalletUniqueSchedulerScheduledV3>>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
/**
* Lookup from identity to the block number and index of the task.
**/
tests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -5,7 +5,7 @@
import type { Bytes, Compact, Option, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types';
import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';
-import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, FrameSupportScheduleMaybeHashed, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
+import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, FrameSupportScheduleMaybeHashed, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
declare module '@polkadot/api-base/types/submittable' {
export interface AugmentedSubmittables<ApiType extends ApiTypes> {
@@ -373,7 +373,7 @@
/**
* Create composable resource
**/
- addComposableResource: AugmentedSubmittable<(rmrkCollectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resourceId: Bytes | string | Uint8Array, resource: RmrkTraitsResourceComposableResource | { parts?: any; base?: any; src?: any; metadata?: any; license?: any; thumb?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, Bytes, RmrkTraitsResourceComposableResource]>;
+ addComposableResource: AugmentedSubmittable<(rmrkCollectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resource: RmrkTraitsResourceComposableResource | { parts?: any; base?: any; src?: any; metadata?: any; license?: any; thumb?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, RmrkTraitsResourceComposableResource]>;
/**
* Create slot resource
**/
@@ -381,7 +381,7 @@
/**
* burn nft
**/
- burnNft: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32]>;
+ burnNft: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, maxBurns: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, u32]>;
/**
* Change the issuer of a collection
*
@@ -415,7 +415,7 @@
* - `metadata`: Arbitrary data about an nft, e.g. IPFS hash
* - `transferable`: Ability to transfer this NFT
**/
- mintNft: AugmentedSubmittable<(owner: AccountId32 | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, recipient: Option<AccountId32> | null | object | string | Uint8Array, royaltyAmount: Option<Permill> | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32, Option<AccountId32>, Option<Permill>, Bytes, bool]>;
+ mintNft: AugmentedSubmittable<(owner: AccountId32 | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, recipient: Option<AccountId32> | null | object | string | Uint8Array, royaltyAmount: Option<Permill> | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array, resources: Option<Vec<RmrkTraitsResourceResourceTypes>> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32, Option<AccountId32>, Option<Permill>, Bytes, bool, Option<Vec<RmrkTraitsResourceResourceTypes>>]>;
/**
* Rejects an NFT sent from another account to self or owned NFT
*
@@ -974,8 +974,8 @@
* * new_sponsor.
**/
setCollectionSponsor: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newSponsor: AccountId32 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, AccountId32]>;
- setPropertyPermissions: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, propertyPermissions: Vec<UpDataStructsPropertyKeyPermission> | (UpDataStructsPropertyKeyPermission | { key?: any; permission?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, Vec<UpDataStructsPropertyKeyPermission>]>;
setTokenProperties: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, properties: Vec<UpDataStructsProperty> | (UpDataStructsProperty | { key?: any; value?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, u32, Vec<UpDataStructsProperty>]>;
+ setTokenPropertyPermissions: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, propertyPermissions: Vec<UpDataStructsPropertyKeyPermission> | (UpDataStructsPropertyKeyPermission | { key?: any; permission?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, Vec<UpDataStructsPropertyKeyPermission>]>;
/**
* Set transfers_enabled value for particular collection
*
tests/src/interfaces/augment-types.tsdiffbeforeafterboth--- 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, FrameSupportWeightsWeightToFeeCoefficient, 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, PalletUnqSchedulerCall, PalletUnqSchedulerError, PalletUnqSchedulerEvent, PalletUnqSchedulerScheduledV3, 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, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, 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, FrameSupportWeightsWeightToFeeCoefficient, 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, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, 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';
@@ -819,10 +819,10 @@
PalletUniqueCall: PalletUniqueCall;
PalletUniqueError: PalletUniqueError;
PalletUniqueRawEvent: PalletUniqueRawEvent;
- PalletUnqSchedulerCall: PalletUnqSchedulerCall;
- PalletUnqSchedulerError: PalletUnqSchedulerError;
- PalletUnqSchedulerEvent: PalletUnqSchedulerEvent;
- PalletUnqSchedulerScheduledV3: PalletUnqSchedulerScheduledV3;
+ PalletUniqueSchedulerCall: PalletUniqueSchedulerCall;
+ PalletUniqueSchedulerError: PalletUniqueSchedulerError;
+ PalletUniqueSchedulerEvent: PalletUniqueSchedulerEvent;
+ PalletUniqueSchedulerScheduledV3: PalletUniqueSchedulerScheduledV3;
PalletVersion: PalletVersion;
PalletXcmCall: PalletXcmCall;
PalletXcmError: PalletXcmError;
tests/src/interfaces/default/types.tsdiffbeforeafterboth--- a/tests/src/interfaces/default/types.ts
+++ b/tests/src/interfaces/default/types.ts
@@ -1214,11 +1214,13 @@
readonly royaltyAmount: Option<Permill>;
readonly metadata: Bytes;
readonly transferable: bool;
+ readonly resources: Option<Vec<RmrkTraitsResourceResourceTypes>>;
} & Struct;
readonly isBurnNft: boolean;
readonly asBurnNft: {
readonly collectionId: u32;
readonly nftId: u32;
+ readonly maxBurns: u32;
} & Struct;
readonly isSend: boolean;
readonly asSend: {
@@ -1272,7 +1274,6 @@
readonly asAddComposableResource: {
readonly rmrkCollectionId: u32;
readonly nftId: u32;
- readonly resourceId: Bytes;
readonly resource: RmrkTraitsResourceComposableResource;
} & Struct;
readonly isAddSlotResource: boolean;
@@ -1296,6 +1297,7 @@
readonly isNftTypeEncodeError: boolean;
readonly isRmrkPropertyKeyIsTooLong: boolean;
readonly isRmrkPropertyValueIsTooLong: boolean;
+ readonly isUnableToDecodeRmrkData: boolean;
readonly isCollectionNotEmpty: boolean;
readonly isNoAvailableCollectionId: boolean;
readonly isNoAvailableNftId: boolean;
@@ -1308,7 +1310,7 @@
readonly isCannotAcceptNonOwnedNft: boolean;
readonly isCannotRejectNonOwnedNft: boolean;
readonly isResourceNotPending: boolean;
- readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';
+ readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';
}
/** @name PalletRmrkCoreEvent */
@@ -1688,8 +1690,8 @@
readonly tokenId: u32;
readonly propertyKeys: Vec<Bytes>;
} & Struct;
- readonly isSetPropertyPermissions: boolean;
- readonly asSetPropertyPermissions: {
+ readonly isSetTokenPropertyPermissions: boolean;
+ readonly asSetTokenPropertyPermissions: {
readonly collectionId: u32;
readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;
} & Struct;
@@ -1748,7 +1750,7 @@
readonly collectionId: u32;
readonly newLimit: UpDataStructsCollectionPermissions;
} & Struct;
- readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';
+ readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';
}
/** @name PalletUniqueError */
@@ -1784,8 +1786,8 @@
readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet';
}
-/** @name PalletUnqSchedulerCall */
-export interface PalletUnqSchedulerCall extends Enum {
+/** @name PalletUniqueSchedulerCall */
+export interface PalletUniqueSchedulerCall extends Enum {
readonly isScheduleNamed: boolean;
readonly asScheduleNamed: {
readonly id: U8aFixed;
@@ -1809,8 +1811,8 @@
readonly type: 'ScheduleNamed' | 'CancelNamed' | 'ScheduleNamedAfter';
}
-/** @name PalletUnqSchedulerError */
-export interface PalletUnqSchedulerError extends Enum {
+/** @name PalletUniqueSchedulerError */
+export interface PalletUniqueSchedulerError extends Enum {
readonly isFailedToSchedule: boolean;
readonly isNotFound: boolean;
readonly isTargetBlockNumberInPast: boolean;
@@ -1818,8 +1820,8 @@
readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange';
}
-/** @name PalletUnqSchedulerEvent */
-export interface PalletUnqSchedulerEvent extends Enum {
+/** @name PalletUniqueSchedulerEvent */
+export interface PalletUniqueSchedulerEvent extends Enum {
readonly isScheduled: boolean;
readonly asScheduled: {
readonly when: u32;
@@ -1845,8 +1847,8 @@
readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed';
}
-/** @name PalletUnqSchedulerScheduledV3 */
-export interface PalletUnqSchedulerScheduledV3 extends Struct {
+/** @name PalletUniqueSchedulerScheduledV3 */
+export interface PalletUniqueSchedulerScheduledV3 extends Struct {
readonly maybeId: Option<U8aFixed>;
readonly priority: u8;
readonly call: FrameSupportScheduleMaybeHashed;
@@ -2427,7 +2429,7 @@
/** @name UpDataStructsNestingPermissions */
export interface UpDataStructsNestingPermissions extends Struct {
readonly tokenOwner: bool;
- readonly admin: bool;
+ readonly collectionAdmin: bool;
readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;
readonly permissive: bool;
}
tests/src/interfaces/lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -1313,7 +1313,7 @@
tokenId: 'u32',
propertyKeys: 'Vec<Bytes>',
},
- set_property_permissions: {
+ set_token_property_permissions: {
collectionId: 'u32',
propertyPermissions: 'Vec<UpDataStructsPropertyKeyPermission>',
},
@@ -1432,7 +1432,7 @@
**/
UpDataStructsNestingPermissions: {
tokenOwner: 'bool',
- admin: 'bool',
+ collectionAdmin: 'bool',
restricted: 'Option<UpDataStructsOwnerRestrictedSet>',
permissive: 'bool'
},
@@ -1526,9 +1526,9 @@
users: 'BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>'
},
/**
- * Lookup206: pallet_unq_scheduler::pallet::Call<T>
+ * Lookup206: pallet_unique_scheduler::pallet::Call<T>
**/
- PalletUnqSchedulerCall: {
+ PalletUniqueSchedulerCall: {
_enum: {
schedule_named: {
id: '[u8;16]',
@@ -1593,10 +1593,12 @@
royaltyAmount: 'Option<Permill>',
metadata: 'Bytes',
transferable: 'bool',
+ resources: 'Option<Vec<RmrkTraitsResourceResourceTypes>>',
},
burn_nft: {
collectionId: 'u32',
nftId: 'u32',
+ maxBurns: 'u32',
},
send: {
rmrkCollectionId: 'u32',
@@ -1641,7 +1643,6 @@
add_composable_resource: {
rmrkCollectionId: 'u32',
nftId: 'u32',
- resourceId: 'Bytes',
resource: 'RmrkTraitsResourceComposableResource',
},
add_slot_resource: {
@@ -1657,12 +1658,13 @@
}
},
/**
- * Lookup215: rmrk_traits::nft::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
+ * Lookup217: rmrk_traits::resource::ResourceTypes<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
- RmrkTraitsNftAccountIdOrCollectionNftTuple: {
+ RmrkTraitsResourceResourceTypes: {
_enum: {
- AccountId: 'AccountId32',
- CollectionAndNftTuple: '(u32,u32)'
+ Basic: 'RmrkTraitsResourceBasicResource',
+ Composable: 'RmrkTraitsResourceComposableResource',
+ Slot: 'RmrkTraitsResourceSlotResource'
}
},
/**
@@ -1675,7 +1677,7 @@
thumb: 'Option<Bytes>'
},
/**
- * Lookup222: rmrk_traits::resource::ComposableResource<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup221: rmrk_traits::resource::ComposableResource<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsResourceComposableResource: {
parts: 'Vec<u32>',
@@ -1686,7 +1688,7 @@
thumb: 'Option<Bytes>'
},
/**
- * Lookup224: rmrk_traits::resource::SlotResource<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup222: rmrk_traits::resource::SlotResource<frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsResourceSlotResource: {
base: 'u32',
@@ -1697,7 +1699,16 @@
thumb: 'Option<Bytes>'
},
/**
- * Lookup225: pallet_rmrk_equip::pallet::Call<T>
+ * Lookup224: rmrk_traits::nft::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
+ **/
+ RmrkTraitsNftAccountIdOrCollectionNftTuple: {
+ _enum: {
+ AccountId: 'AccountId32',
+ CollectionAndNftTuple: '(u32,u32)'
+ }
+ },
+ /**
+ * Lookup228: pallet_rmrk_equip::pallet::Call<T>
**/
PalletRmrkEquipCall: {
_enum: {
@@ -1713,7 +1724,7 @@
}
},
/**
- * Lookup227: rmrk_traits::part::PartType<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup230: rmrk_traits::part::PartType<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPartPartType: {
_enum: {
@@ -1722,7 +1733,7 @@
}
},
/**
- * Lookup229: rmrk_traits::part::FixedPart<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup232: rmrk_traits::part::FixedPart<frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPartFixedPart: {
id: 'u32',
@@ -1730,7 +1741,7 @@
src: 'Bytes'
},
/**
- * Lookup230: rmrk_traits::part::SlotPart<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup233: rmrk_traits::part::SlotPart<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPartSlotPart: {
id: 'u32',
@@ -1739,7 +1750,7 @@
z: 'u32'
},
/**
- * Lookup231: rmrk_traits::part::EquippableList<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup234: rmrk_traits::part::EquippableList<frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPartEquippableList: {
_enum: {
@@ -1749,7 +1760,7 @@
}
},
/**
- * Lookup233: rmrk_traits::theme::Theme<frame_support::storage::bounded_vec::BoundedVec<T, S>, PropertyList>
+ * Lookup236: rmrk_traits::theme::Theme<frame_support::storage::bounded_vec::BoundedVec<T, S>, PropertyList>
**/
RmrkTraitsTheme: {
name: 'Bytes',
@@ -1757,14 +1768,14 @@
inherit: 'bool'
},
/**
- * Lookup235: rmrk_traits::theme::ThemeProperty<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup238: rmrk_traits::theme::ThemeProperty<frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsThemeThemeProperty: {
key: 'Bytes',
value: 'Bytes'
},
/**
- * Lookup236: pallet_evm::pallet::Call<T>
+ * Lookup239: pallet_evm::pallet::Call<T>
**/
PalletEvmCall: {
_enum: {
@@ -1807,7 +1818,7 @@
}
},
/**
- * Lookup242: pallet_ethereum::pallet::Call<T>
+ * Lookup245: pallet_ethereum::pallet::Call<T>
**/
PalletEthereumCall: {
_enum: {
@@ -1817,7 +1828,7 @@
}
},
/**
- * Lookup243: ethereum::transaction::TransactionV2
+ * Lookup246: ethereum::transaction::TransactionV2
**/
EthereumTransactionTransactionV2: {
_enum: {
@@ -1827,7 +1838,7 @@
}
},
/**
- * Lookup244: ethereum::transaction::LegacyTransaction
+ * Lookup247: ethereum::transaction::LegacyTransaction
**/
EthereumTransactionLegacyTransaction: {
nonce: 'U256',
@@ -1839,7 +1850,7 @@
signature: 'EthereumTransactionTransactionSignature'
},
/**
- * Lookup245: ethereum::transaction::TransactionAction
+ * Lookup248: ethereum::transaction::TransactionAction
**/
EthereumTransactionTransactionAction: {
_enum: {
@@ -1848,7 +1859,7 @@
}
},
/**
- * Lookup246: ethereum::transaction::TransactionSignature
+ * Lookup249: ethereum::transaction::TransactionSignature
**/
EthereumTransactionTransactionSignature: {
v: 'u64',
@@ -1856,7 +1867,7 @@
s: 'H256'
},
/**
- * Lookup248: ethereum::transaction::EIP2930Transaction
+ * Lookup251: ethereum::transaction::EIP2930Transaction
**/
EthereumTransactionEip2930Transaction: {
chainId: 'u64',
@@ -1872,14 +1883,14 @@
s: 'H256'
},
/**
- * Lookup250: ethereum::transaction::AccessListItem
+ * Lookup253: ethereum::transaction::AccessListItem
**/
EthereumTransactionAccessListItem: {
address: 'H160',
storageKeys: 'Vec<H256>'
},
/**
- * Lookup251: ethereum::transaction::EIP1559Transaction
+ * Lookup254: ethereum::transaction::EIP1559Transaction
**/
EthereumTransactionEip1559Transaction: {
chainId: 'u64',
@@ -1896,7 +1907,7 @@
s: 'H256'
},
/**
- * Lookup252: pallet_evm_migration::pallet::Call<T>
+ * Lookup255: pallet_evm_migration::pallet::Call<T>
**/
PalletEvmMigrationCall: {
_enum: {
@@ -1914,7 +1925,7 @@
}
},
/**
- * Lookup255: pallet_sudo::pallet::Event<T>
+ * Lookup258: pallet_sudo::pallet::Event<T>
**/
PalletSudoEvent: {
_enum: {
@@ -1930,7 +1941,7 @@
}
},
/**
- * Lookup257: sp_runtime::DispatchError
+ * Lookup260: sp_runtime::DispatchError
**/
SpRuntimeDispatchError: {
_enum: {
@@ -1947,38 +1958,38 @@
}
},
/**
- * Lookup258: sp_runtime::ModuleError
+ * Lookup261: sp_runtime::ModuleError
**/
SpRuntimeModuleError: {
index: 'u8',
error: '[u8;4]'
},
/**
- * Lookup259: sp_runtime::TokenError
+ * Lookup262: sp_runtime::TokenError
**/
SpRuntimeTokenError: {
_enum: ['NoFunds', 'WouldDie', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported']
},
/**
- * Lookup260: sp_runtime::ArithmeticError
+ * Lookup263: sp_runtime::ArithmeticError
**/
SpRuntimeArithmeticError: {
_enum: ['Underflow', 'Overflow', 'DivisionByZero']
},
/**
- * Lookup261: sp_runtime::TransactionalError
+ * Lookup264: sp_runtime::TransactionalError
**/
SpRuntimeTransactionalError: {
_enum: ['LimitReached', 'NoLayer']
},
/**
- * Lookup262: pallet_sudo::pallet::Error<T>
+ * Lookup265: pallet_sudo::pallet::Error<T>
**/
PalletSudoError: {
_enum: ['RequireSudo']
},
/**
- * Lookup263: frame_system::AccountInfo<Index, pallet_balances::AccountData<Balance>>
+ * Lookup266: frame_system::AccountInfo<Index, pallet_balances::AccountData<Balance>>
**/
FrameSystemAccountInfo: {
nonce: 'u32',
@@ -1988,7 +1999,7 @@
data: 'PalletBalancesAccountData'
},
/**
- * Lookup264: frame_support::weights::PerDispatchClass<T>
+ * Lookup267: frame_support::weights::PerDispatchClass<T>
**/
FrameSupportWeightsPerDispatchClassU64: {
normal: 'u64',
@@ -1996,13 +2007,13 @@
mandatory: 'u64'
},
/**
- * Lookup265: sp_runtime::generic::digest::Digest
+ * Lookup268: sp_runtime::generic::digest::Digest
**/
SpRuntimeDigest: {
logs: 'Vec<SpRuntimeDigestDigestItem>'
},
/**
- * Lookup267: sp_runtime::generic::digest::DigestItem
+ * Lookup270: sp_runtime::generic::digest::DigestItem
**/
SpRuntimeDigestDigestItem: {
_enum: {
@@ -2018,7 +2029,7 @@
}
},
/**
- * Lookup269: frame_system::EventRecord<opal_runtime::Event, primitive_types::H256>
+ * Lookup272: frame_system::EventRecord<opal_runtime::Event, primitive_types::H256>
**/
FrameSystemEventRecord: {
phase: 'FrameSystemPhase',
@@ -2026,7 +2037,7 @@
topics: 'Vec<H256>'
},
/**
- * Lookup271: frame_system::pallet::Event<T>
+ * Lookup274: frame_system::pallet::Event<T>
**/
FrameSystemEvent: {
_enum: {
@@ -2054,7 +2065,7 @@
}
},
/**
- * Lookup272: frame_support::weights::DispatchInfo
+ * Lookup275: frame_support::weights::DispatchInfo
**/
FrameSupportWeightsDispatchInfo: {
weight: 'u64',
@@ -2062,19 +2073,19 @@
paysFee: 'FrameSupportWeightsPays'
},
/**
- * Lookup273: frame_support::weights::DispatchClass
+ * Lookup276: frame_support::weights::DispatchClass
**/
FrameSupportWeightsDispatchClass: {
_enum: ['Normal', 'Operational', 'Mandatory']
},
/**
- * Lookup274: frame_support::weights::Pays
+ * Lookup277: frame_support::weights::Pays
**/
FrameSupportWeightsPays: {
_enum: ['Yes', 'No']
},
/**
- * Lookup275: orml_vesting::module::Event<T>
+ * Lookup278: orml_vesting::module::Event<T>
**/
OrmlVestingModuleEvent: {
_enum: {
@@ -2093,7 +2104,7 @@
}
},
/**
- * Lookup276: cumulus_pallet_xcmp_queue::pallet::Event<T>
+ * Lookup279: cumulus_pallet_xcmp_queue::pallet::Event<T>
**/
CumulusPalletXcmpQueueEvent: {
_enum: {
@@ -2108,7 +2119,7 @@
}
},
/**
- * Lookup277: pallet_xcm::pallet::Event<T>
+ * Lookup280: pallet_xcm::pallet::Event<T>
**/
PalletXcmEvent: {
_enum: {
@@ -2131,7 +2142,7 @@
}
},
/**
- * Lookup278: xcm::v2::traits::Outcome
+ * Lookup281: xcm::v2::traits::Outcome
**/
XcmV2TraitsOutcome: {
_enum: {
@@ -2141,7 +2152,7 @@
}
},
/**
- * Lookup280: cumulus_pallet_xcm::pallet::Event<T>
+ * Lookup283: cumulus_pallet_xcm::pallet::Event<T>
**/
CumulusPalletXcmEvent: {
_enum: {
@@ -2151,7 +2162,7 @@
}
},
/**
- * Lookup281: cumulus_pallet_dmp_queue::pallet::Event<T>
+ * Lookup284: cumulus_pallet_dmp_queue::pallet::Event<T>
**/
CumulusPalletDmpQueueEvent: {
_enum: {
@@ -2164,7 +2175,7 @@
}
},
/**
- * Lookup282: pallet_unique::RawEvent<sp_core::crypto::AccountId32, pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup285: pallet_unique::RawEvent<sp_core::crypto::AccountId32, pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
PalletUniqueRawEvent: {
_enum: {
@@ -2181,9 +2192,9 @@
}
},
/**
- * Lookup283: pallet_unq_scheduler::pallet::Event<T>
+ * Lookup286: pallet_unique_scheduler::pallet::Event<T>
**/
- PalletUnqSchedulerEvent: {
+ PalletUniqueSchedulerEvent: {
_enum: {
Scheduled: {
when: 'u32',
@@ -2206,13 +2217,13 @@
}
},
/**
- * Lookup285: frame_support::traits::schedule::LookupError
+ * Lookup288: frame_support::traits::schedule::LookupError
**/
FrameSupportScheduleLookupError: {
_enum: ['Unknown', 'BadFormat']
},
/**
- * Lookup286: pallet_common::pallet::Event<T>
+ * Lookup289: pallet_common::pallet::Event<T>
**/
PalletCommonEvent: {
_enum: {
@@ -2230,7 +2241,7 @@
}
},
/**
- * Lookup287: pallet_structure::pallet::Event<T>
+ * Lookup290: pallet_structure::pallet::Event<T>
**/
PalletStructureEvent: {
_enum: {
@@ -2238,7 +2249,7 @@
}
},
/**
- * Lookup288: pallet_rmrk_core::pallet::Event<T>
+ * Lookup291: pallet_rmrk_core::pallet::Event<T>
**/
PalletRmrkCoreEvent: {
_enum: {
@@ -2315,7 +2326,7 @@
}
},
/**
- * Lookup289: pallet_rmrk_equip::pallet::Event<T>
+ * Lookup292: pallet_rmrk_equip::pallet::Event<T>
**/
PalletRmrkEquipEvent: {
_enum: {
@@ -2326,7 +2337,7 @@
}
},
/**
- * Lookup290: pallet_evm::pallet::Event<T>
+ * Lookup293: pallet_evm::pallet::Event<T>
**/
PalletEvmEvent: {
_enum: {
@@ -2340,7 +2351,7 @@
}
},
/**
- * Lookup291: ethereum::log::Log
+ * Lookup294: ethereum::log::Log
**/
EthereumLog: {
address: 'H160',
@@ -2348,7 +2359,7 @@
data: 'Bytes'
},
/**
- * Lookup292: pallet_ethereum::pallet::Event
+ * Lookup295: pallet_ethereum::pallet::Event
**/
PalletEthereumEvent: {
_enum: {
@@ -2356,7 +2367,7 @@
}
},
/**
- * Lookup293: evm_core::error::ExitReason
+ * Lookup296: evm_core::error::ExitReason
**/
EvmCoreErrorExitReason: {
_enum: {
@@ -2367,13 +2378,13 @@
}
},
/**
- * Lookup294: evm_core::error::ExitSucceed
+ * Lookup297: evm_core::error::ExitSucceed
**/
EvmCoreErrorExitSucceed: {
_enum: ['Stopped', 'Returned', 'Suicided']
},
/**
- * Lookup295: evm_core::error::ExitError
+ * Lookup298: evm_core::error::ExitError
**/
EvmCoreErrorExitError: {
_enum: {
@@ -2395,13 +2406,13 @@
}
},
/**
- * Lookup298: evm_core::error::ExitRevert
+ * Lookup301: evm_core::error::ExitRevert
**/
EvmCoreErrorExitRevert: {
_enum: ['Reverted']
},
/**
- * Lookup299: evm_core::error::ExitFatal
+ * Lookup302: evm_core::error::ExitFatal
**/
EvmCoreErrorExitFatal: {
_enum: {
@@ -2412,7 +2423,7 @@
}
},
/**
- * Lookup300: frame_system::Phase
+ * Lookup303: frame_system::Phase
**/
FrameSystemPhase: {
_enum: {
@@ -2422,14 +2433,14 @@
}
},
/**
- * Lookup302: frame_system::LastRuntimeUpgradeInfo
+ * Lookup305: frame_system::LastRuntimeUpgradeInfo
**/
FrameSystemLastRuntimeUpgradeInfo: {
specVersion: 'Compact<u32>',
specName: 'Text'
},
/**
- * Lookup303: frame_system::limits::BlockWeights
+ * Lookup306: frame_system::limits::BlockWeights
**/
FrameSystemLimitsBlockWeights: {
baseBlock: 'u64',
@@ -2437,7 +2448,7 @@
perClass: 'FrameSupportWeightsPerDispatchClassWeightsPerClass'
},
/**
- * Lookup304: frame_support::weights::PerDispatchClass<frame_system::limits::WeightsPerClass>
+ * Lookup307: frame_support::weights::PerDispatchClass<frame_system::limits::WeightsPerClass>
**/
FrameSupportWeightsPerDispatchClassWeightsPerClass: {
normal: 'FrameSystemLimitsWeightsPerClass',
@@ -2445,7 +2456,7 @@
mandatory: 'FrameSystemLimitsWeightsPerClass'
},
/**
- * Lookup305: frame_system::limits::WeightsPerClass
+ * Lookup308: frame_system::limits::WeightsPerClass
**/
FrameSystemLimitsWeightsPerClass: {
baseExtrinsic: 'u64',
@@ -2454,13 +2465,13 @@
reserved: 'Option<u64>'
},
/**
- * Lookup307: frame_system::limits::BlockLength
+ * Lookup310: frame_system::limits::BlockLength
**/
FrameSystemLimitsBlockLength: {
max: 'FrameSupportWeightsPerDispatchClassU32'
},
/**
- * Lookup308: frame_support::weights::PerDispatchClass<T>
+ * Lookup311: frame_support::weights::PerDispatchClass<T>
**/
FrameSupportWeightsPerDispatchClassU32: {
normal: 'u32',
@@ -2468,14 +2479,14 @@
mandatory: 'u32'
},
/**
- * Lookup309: frame_support::weights::RuntimeDbWeight
+ * Lookup312: frame_support::weights::RuntimeDbWeight
**/
FrameSupportWeightsRuntimeDbWeight: {
read: 'u64',
write: 'u64'
},
/**
- * Lookup310: sp_version::RuntimeVersion
+ * Lookup313: sp_version::RuntimeVersion
**/
SpVersionRuntimeVersion: {
specName: 'Text',
@@ -2488,19 +2499,19 @@
stateVersion: 'u8'
},
/**
- * Lookup314: frame_system::pallet::Error<T>
+ * Lookup317: frame_system::pallet::Error<T>
**/
FrameSystemError: {
_enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered']
},
/**
- * Lookup316: orml_vesting::module::Error<T>
+ * Lookup319: orml_vesting::module::Error<T>
**/
OrmlVestingModuleError: {
_enum: ['ZeroVestingPeriod', 'ZeroVestingPeriodCount', 'InsufficientBalanceToLock', 'TooManyVestingSchedules', 'AmountLow', 'MaxVestingSchedulesExceeded']
},
/**
- * Lookup318: cumulus_pallet_xcmp_queue::InboundChannelDetails
+ * Lookup321: cumulus_pallet_xcmp_queue::InboundChannelDetails
**/
CumulusPalletXcmpQueueInboundChannelDetails: {
sender: 'u32',
@@ -2508,19 +2519,19 @@
messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>'
},
/**
- * Lookup319: cumulus_pallet_xcmp_queue::InboundState
+ * Lookup322: cumulus_pallet_xcmp_queue::InboundState
**/
CumulusPalletXcmpQueueInboundState: {
_enum: ['Ok', 'Suspended']
},
/**
- * Lookup322: polkadot_parachain::primitives::XcmpMessageFormat
+ * Lookup325: polkadot_parachain::primitives::XcmpMessageFormat
**/
PolkadotParachainPrimitivesXcmpMessageFormat: {
_enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals']
},
/**
- * Lookup325: cumulus_pallet_xcmp_queue::OutboundChannelDetails
+ * Lookup328: cumulus_pallet_xcmp_queue::OutboundChannelDetails
**/
CumulusPalletXcmpQueueOutboundChannelDetails: {
recipient: 'u32',
@@ -2530,13 +2541,13 @@
lastIndex: 'u16'
},
/**
- * Lookup326: cumulus_pallet_xcmp_queue::OutboundState
+ * Lookup329: cumulus_pallet_xcmp_queue::OutboundState
**/
CumulusPalletXcmpQueueOutboundState: {
_enum: ['Ok', 'Suspended']
},
/**
- * Lookup328: cumulus_pallet_xcmp_queue::QueueConfigData
+ * Lookup331: cumulus_pallet_xcmp_queue::QueueConfigData
**/
CumulusPalletXcmpQueueQueueConfigData: {
suspendThreshold: 'u32',
@@ -2547,29 +2558,29 @@
xcmpMaxIndividualWeight: 'u64'
},
/**
- * Lookup330: cumulus_pallet_xcmp_queue::pallet::Error<T>
+ * Lookup333: cumulus_pallet_xcmp_queue::pallet::Error<T>
**/
CumulusPalletXcmpQueueError: {
_enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit']
},
/**
- * Lookup331: pallet_xcm::pallet::Error<T>
+ * Lookup334: pallet_xcm::pallet::Error<T>
**/
PalletXcmError: {
_enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed']
},
/**
- * Lookup332: cumulus_pallet_xcm::pallet::Error<T>
+ * Lookup335: cumulus_pallet_xcm::pallet::Error<T>
**/
CumulusPalletXcmError: 'Null',
/**
- * Lookup333: cumulus_pallet_dmp_queue::ConfigData
+ * Lookup336: cumulus_pallet_dmp_queue::ConfigData
**/
CumulusPalletDmpQueueConfigData: {
maxIndividual: 'u64'
},
/**
- * Lookup334: cumulus_pallet_dmp_queue::PageIndexData
+ * Lookup337: cumulus_pallet_dmp_queue::PageIndexData
**/
CumulusPalletDmpQueuePageIndexData: {
beginUsed: 'u32',
@@ -2577,21 +2588,21 @@
overweightCount: 'u64'
},
/**
- * Lookup337: cumulus_pallet_dmp_queue::pallet::Error<T>
+ * Lookup340: cumulus_pallet_dmp_queue::pallet::Error<T>
**/
CumulusPalletDmpQueueError: {
_enum: ['Unknown', 'OverLimit']
},
/**
- * Lookup341: pallet_unique::Error<T>
+ * Lookup344: pallet_unique::Error<T>
**/
PalletUniqueError: {
_enum: ['CollectionDecimalPointLimitExceeded', 'ConfirmUnsetSponsorFail', 'EmptyArgument']
},
/**
- * Lookup344: pallet_unq_scheduler::ScheduledV3<frame_support::traits::schedule::MaybeHashed<opal_runtime::Call, primitive_types::H256>, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32>
+ * Lookup347: pallet_unique_scheduler::ScheduledV3<frame_support::traits::schedule::MaybeHashed<opal_runtime::Call, primitive_types::H256>, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32>
**/
- PalletUnqSchedulerScheduledV3: {
+ PalletUniqueSchedulerScheduledV3: {
maybeId: 'Option<[u8;16]>',
priority: 'u8',
call: 'FrameSupportScheduleMaybeHashed',
@@ -2599,7 +2610,7 @@
origin: 'OpalRuntimeOriginCaller'
},
/**
- * Lookup345: opal_runtime::OriginCaller
+ * Lookup348: opal_runtime::OriginCaller
**/
OpalRuntimeOriginCaller: {
_enum: {
@@ -2708,7 +2719,7 @@
}
},
/**
- * Lookup346: frame_support::dispatch::RawOrigin<sp_core::crypto::AccountId32>
+ * Lookup349: frame_support::dispatch::RawOrigin<sp_core::crypto::AccountId32>
**/
FrameSupportDispatchRawOrigin: {
_enum: {
@@ -2718,7 +2729,7 @@
}
},
/**
- * Lookup347: pallet_xcm::pallet::Origin
+ * Lookup350: pallet_xcm::pallet::Origin
**/
PalletXcmOrigin: {
_enum: {
@@ -2727,7 +2738,7 @@
}
},
/**
- * Lookup348: cumulus_pallet_xcm::pallet::Origin
+ * Lookup351: cumulus_pallet_xcm::pallet::Origin
**/
CumulusPalletXcmOrigin: {
_enum: {
@@ -2736,7 +2747,7 @@
}
},
/**
- * Lookup349: pallet_ethereum::RawOrigin
+ * Lookup352: pallet_ethereum::RawOrigin
**/
PalletEthereumRawOrigin: {
_enum: {
@@ -2744,17 +2755,17 @@
}
},
/**
- * Lookup350: sp_core::Void
+ * Lookup353: sp_core::Void
**/
SpCoreVoid: 'Null',
/**
- * Lookup351: pallet_unq_scheduler::pallet::Error<T>
+ * Lookup354: pallet_unique_scheduler::pallet::Error<T>
**/
- PalletUnqSchedulerError: {
+ PalletUniqueSchedulerError: {
_enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange']
},
/**
- * Lookup352: up_data_structs::Collection<sp_core::crypto::AccountId32>
+ * Lookup355: up_data_structs::Collection<sp_core::crypto::AccountId32>
**/
UpDataStructsCollection: {
owner: 'AccountId32',
@@ -2768,7 +2779,7 @@
externalCollection: 'bool'
},
/**
- * Lookup353: up_data_structs::SponsorshipState<sp_core::crypto::AccountId32>
+ * Lookup356: up_data_structs::SponsorshipState<sp_core::crypto::AccountId32>
**/
UpDataStructsSponsorshipState: {
_enum: {
@@ -2778,7 +2789,7 @@
}
},
/**
- * Lookup354: up_data_structs::Properties
+ * Lookup357: up_data_structs::Properties
**/
UpDataStructsProperties: {
map: 'UpDataStructsPropertiesMapBoundedVec',
@@ -2786,15 +2797,15 @@
spaceLimit: 'u32'
},
/**
- * Lookup355: up_data_structs::PropertiesMap<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup358: up_data_structs::PropertiesMap<frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
UpDataStructsPropertiesMapBoundedVec: 'BTreeMap<Bytes, Bytes>',
/**
- * Lookup360: up_data_structs::PropertiesMap<up_data_structs::PropertyPermission>
+ * Lookup363: up_data_structs::PropertiesMap<up_data_structs::PropertyPermission>
**/
UpDataStructsPropertiesMapPropertyPermission: 'BTreeMap<Bytes, UpDataStructsPropertyPermission>',
/**
- * Lookup367: up_data_structs::CollectionStats
+ * Lookup370: up_data_structs::CollectionStats
**/
UpDataStructsCollectionStats: {
created: 'u32',
@@ -2802,25 +2813,25 @@
alive: 'u32'
},
/**
- * Lookup368: up_data_structs::TokenChild
+ * Lookup371: up_data_structs::TokenChild
**/
UpDataStructsTokenChild: {
token: 'u32',
collection: 'u32'
},
/**
- * Lookup369: PhantomType::up_data_structs<T>
+ * Lookup372: PhantomType::up_data_structs<T>
**/
PhantomTypeUpDataStructs: '[(UpDataStructsTokenData,UpDataStructsRpcCollection,RmrkTraitsCollectionCollectionInfo,RmrkTraitsNftNftInfo,RmrkTraitsResourceResourceInfo,RmrkTraitsPropertyPropertyInfo,RmrkTraitsBaseBaseInfo,RmrkTraitsPartPartType,RmrkTraitsTheme,RmrkTraitsNftNftChild);0]',
/**
- * Lookup371: up_data_structs::TokenData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup374: up_data_structs::TokenData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
UpDataStructsTokenData: {
properties: 'Vec<UpDataStructsProperty>',
owner: 'Option<PalletEvmAccountBasicCrossAccountIdRepr>'
},
/**
- * Lookup373: up_data_structs::RpcCollection<sp_core::crypto::AccountId32>
+ * Lookup376: up_data_structs::RpcCollection<sp_core::crypto::AccountId32>
**/
UpDataStructsRpcCollection: {
owner: 'AccountId32',
@@ -2836,7 +2847,7 @@
readOnly: 'bool'
},
/**
- * Lookup374: rmrk_traits::collection::CollectionInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>, sp_core::crypto::AccountId32>
+ * Lookup377: rmrk_traits::collection::CollectionInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>, sp_core::crypto::AccountId32>
**/
RmrkTraitsCollectionCollectionInfo: {
issuer: 'AccountId32',
@@ -2846,7 +2857,7 @@
nftsCount: 'u32'
},
/**
- * Lookup375: rmrk_traits::nft::NftInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup378: rmrk_traits::nft::NftInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill, frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsNftNftInfo: {
owner: 'RmrkTraitsNftAccountIdOrCollectionNftTuple',
@@ -2856,14 +2867,14 @@
pending: 'bool'
},
/**
- * Lookup377: rmrk_traits::nft::RoyaltyInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill>
+ * Lookup380: rmrk_traits::nft::RoyaltyInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill>
**/
RmrkTraitsNftRoyaltyInfo: {
recipient: 'AccountId32',
amount: 'Permill'
},
/**
- * Lookup378: rmrk_traits::resource::ResourceInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup381: rmrk_traits::resource::ResourceInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsResourceResourceInfo: {
id: 'u32',
@@ -2872,24 +2883,14 @@
pendingRemoval: 'bool'
},
/**
- * Lookup379: rmrk_traits::resource::ResourceTypes<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
- **/
- RmrkTraitsResourceResourceTypes: {
- _enum: {
- Basic: 'RmrkTraitsResourceBasicResource',
- Composable: 'RmrkTraitsResourceComposableResource',
- Slot: 'RmrkTraitsResourceSlotResource'
- }
- },
- /**
- * Lookup380: rmrk_traits::property::PropertyInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup382: rmrk_traits::property::PropertyInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPropertyPropertyInfo: {
key: 'Bytes',
value: 'Bytes'
},
/**
- * Lookup381: rmrk_traits::base::BaseInfo<sp_core::crypto::AccountId32, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ * Lookup383: rmrk_traits::base::BaseInfo<sp_core::crypto::AccountId32, frame_support::storage::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsBaseBaseInfo: {
issuer: 'AccountId32',
@@ -2897,74 +2898,74 @@
symbol: 'Bytes'
},
/**
- * Lookup382: rmrk_traits::nft::NftChild
+ * Lookup384: rmrk_traits::nft::NftChild
**/
RmrkTraitsNftNftChild: {
collectionId: 'u32',
nftId: 'u32'
},
/**
- * Lookup384: pallet_common::pallet::Error<T>
+ * Lookup386: pallet_common::pallet::Error<T>
**/
PalletCommonError: {
_enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'CantDestroyNotEmptyCollection', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsZero', 'UnsupportedOperation', 'NotSufficientFounds', 'UserIsNotAllowedToNest', 'SourceCollectionIsNotAllowedToNest', 'CollectionFieldSizeExceeded', 'NoSpaceForProperty', 'PropertyLimitReached', 'PropertyKeyIsTooLong', 'InvalidCharacterInPropertyKey', 'EmptyPropertyKey', 'CollectionIsExternal', 'CollectionIsInternal']
},
/**
- * Lookup386: pallet_fungible::pallet::Error<T>
+ * Lookup388: pallet_fungible::pallet::Error<T>
**/
PalletFungibleError: {
_enum: ['NotFungibleDataUsedToMintFungibleCollectionToken', 'FungibleItemsHaveNoId', 'FungibleItemsDontHaveData', 'FungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
},
/**
- * Lookup387: pallet_refungible::ItemData
+ * Lookup389: pallet_refungible::ItemData
**/
PalletRefungibleItemData: {
constData: 'Bytes'
},
/**
- * Lookup391: pallet_refungible::pallet::Error<T>
+ * Lookup393: pallet_refungible::pallet::Error<T>
**/
PalletRefungibleError: {
_enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces', 'RefungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
},
/**
- * Lookup392: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup394: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
PalletNonfungibleItemData: {
owner: 'PalletEvmAccountBasicCrossAccountIdRepr'
},
/**
- * Lookup394: pallet_nonfungible::pallet::Error<T>
+ * Lookup396: pallet_nonfungible::pallet::Error<T>
**/
PalletNonfungibleError: {
_enum: ['NotNonfungibleDataUsedToMintFungibleCollectionToken', 'NonfungibleItemsHaveNoAmount', 'CantBurnNftWithChildren']
},
/**
- * Lookup395: pallet_structure::pallet::Error<T>
+ * Lookup397: pallet_structure::pallet::Error<T>
**/
PalletStructureError: {
_enum: ['OuroborosDetected', 'DepthLimit', 'BreadthLimit', 'TokenNotFound']
},
/**
- * Lookup396: pallet_rmrk_core::pallet::Error<T>
+ * Lookup398: pallet_rmrk_core::pallet::Error<T>
**/
PalletRmrkCoreError: {
- _enum: ['CorruptedCollectionType', 'NftTypeEncodeError', 'RmrkPropertyKeyIsTooLong', 'RmrkPropertyValueIsTooLong', 'CollectionNotEmpty', 'NoAvailableCollectionId', 'NoAvailableNftId', 'CollectionUnknown', 'NoPermission', 'NonTransferable', 'CollectionFullOrLocked', 'ResourceDoesntExist', 'CannotSendToDescendentOrSelf', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'ResourceNotPending']
+ _enum: ['CorruptedCollectionType', 'NftTypeEncodeError', 'RmrkPropertyKeyIsTooLong', 'RmrkPropertyValueIsTooLong', 'UnableToDecodeRmrkData', 'CollectionNotEmpty', 'NoAvailableCollectionId', 'NoAvailableNftId', 'CollectionUnknown', 'NoPermission', 'NonTransferable', 'CollectionFullOrLocked', 'ResourceDoesntExist', 'CannotSendToDescendentOrSelf', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'ResourceNotPending']
},
/**
- * Lookup398: pallet_rmrk_equip::pallet::Error<T>
+ * Lookup400: pallet_rmrk_equip::pallet::Error<T>
**/
PalletRmrkEquipError: {
_enum: ['PermissionError', 'NoAvailableBaseId', 'NoAvailablePartId', 'BaseDoesntExist', 'NeedsDefaultThemeFirst']
},
/**
- * Lookup401: pallet_evm::pallet::Error<T>
+ * Lookup403: pallet_evm::pallet::Error<T>
**/
PalletEvmError: {
_enum: ['BalanceLow', 'FeeOverflow', 'PaymentOverflow', 'WithdrawFailed', 'GasPriceTooLow', 'InvalidNonce']
},
/**
- * Lookup404: fp_rpc::TransactionStatus
+ * Lookup406: fp_rpc::TransactionStatus
**/
FpRpcTransactionStatus: {
transactionHash: 'H256',
@@ -2976,11 +2977,11 @@
logsBloom: 'EthbloomBloom'
},
/**
- * Lookup406: ethbloom::Bloom
+ * Lookup408: ethbloom::Bloom
**/
EthbloomBloom: '[u8;256]',
/**
- * Lookup408: ethereum::receipt::ReceiptV3
+ * Lookup410: ethereum::receipt::ReceiptV3
**/
EthereumReceiptReceiptV3: {
_enum: {
@@ -2990,7 +2991,7 @@
}
},
/**
- * Lookup409: ethereum::receipt::EIP658ReceiptData
+ * Lookup411: ethereum::receipt::EIP658ReceiptData
**/
EthereumReceiptEip658ReceiptData: {
statusCode: 'u8',
@@ -2999,7 +3000,7 @@
logs: 'Vec<EthereumLog>'
},
/**
- * Lookup410: ethereum::block::Block<ethereum::transaction::TransactionV2>
+ * Lookup412: ethereum::block::Block<ethereum::transaction::TransactionV2>
**/
EthereumBlock: {
header: 'EthereumHeader',
@@ -3007,7 +3008,7 @@
ommers: 'Vec<EthereumHeader>'
},
/**
- * Lookup411: ethereum::header::Header
+ * Lookup413: ethereum::header::Header
**/
EthereumHeader: {
parentHash: 'H256',
@@ -3027,41 +3028,41 @@
nonce: 'EthereumTypesHashH64'
},
/**
- * Lookup412: ethereum_types::hash::H64
+ * Lookup414: ethereum_types::hash::H64
**/
EthereumTypesHashH64: '[u8;8]',
/**
- * Lookup417: pallet_ethereum::pallet::Error<T>
+ * Lookup419: pallet_ethereum::pallet::Error<T>
**/
PalletEthereumError: {
_enum: ['InvalidSignature', 'PreLogExists']
},
/**
- * Lookup418: pallet_evm_coder_substrate::pallet::Error<T>
+ * Lookup420: pallet_evm_coder_substrate::pallet::Error<T>
**/
PalletEvmCoderSubstrateError: {
_enum: ['OutOfGas', 'OutOfFund']
},
/**
- * Lookup419: pallet_evm_contract_helpers::SponsoringModeT
+ * Lookup421: pallet_evm_contract_helpers::SponsoringModeT
**/
PalletEvmContractHelpersSponsoringModeT: {
_enum: ['Disabled', 'Allowlisted', 'Generous']
},
/**
- * Lookup421: pallet_evm_contract_helpers::pallet::Error<T>
+ * Lookup423: pallet_evm_contract_helpers::pallet::Error<T>
**/
PalletEvmContractHelpersError: {
_enum: ['NoPermission']
},
/**
- * Lookup422: pallet_evm_migration::pallet::Error<T>
+ * Lookup424: pallet_evm_migration::pallet::Error<T>
**/
PalletEvmMigrationError: {
_enum: ['AccountNotEmpty', 'AccountIsNotMigrating']
},
/**
- * Lookup424: sp_runtime::MultiSignature
+ * Lookup426: sp_runtime::MultiSignature
**/
SpRuntimeMultiSignature: {
_enum: {
@@ -3071,43 +3072,43 @@
}
},
/**
- * Lookup425: sp_core::ed25519::Signature
+ * Lookup427: sp_core::ed25519::Signature
**/
SpCoreEd25519Signature: '[u8;64]',
/**
- * Lookup427: sp_core::sr25519::Signature
+ * Lookup429: sp_core::sr25519::Signature
**/
SpCoreSr25519Signature: '[u8;64]',
/**
- * Lookup428: sp_core::ecdsa::Signature
+ * Lookup430: sp_core::ecdsa::Signature
**/
SpCoreEcdsaSignature: '[u8;65]',
/**
- * Lookup431: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
+ * Lookup433: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
**/
FrameSystemExtensionsCheckSpecVersion: 'Null',
/**
- * Lookup432: frame_system::extensions::check_genesis::CheckGenesis<T>
+ * Lookup434: frame_system::extensions::check_genesis::CheckGenesis<T>
**/
FrameSystemExtensionsCheckGenesis: 'Null',
/**
- * Lookup435: frame_system::extensions::check_nonce::CheckNonce<T>
+ * Lookup437: frame_system::extensions::check_nonce::CheckNonce<T>
**/
FrameSystemExtensionsCheckNonce: 'Compact<u32>',
/**
- * Lookup436: frame_system::extensions::check_weight::CheckWeight<T>
+ * Lookup438: frame_system::extensions::check_weight::CheckWeight<T>
**/
FrameSystemExtensionsCheckWeight: 'Null',
/**
- * Lookup437: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
+ * Lookup439: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
**/
PalletTemplateTransactionPaymentChargeTransactionPayment: 'Compact<u128>',
/**
- * Lookup438: opal_runtime::Runtime
+ * Lookup440: opal_runtime::Runtime
**/
OpalRuntimeRuntime: 'Null',
/**
- * Lookup439: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
+ * Lookup441: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
**/
PalletEthereumFakeTransactionFinalizer: 'Null'
};
tests/src/interfaces/registry.tsdiffbeforeafterboth--- a/tests/src/interfaces/registry.ts
+++ b/tests/src/interfaces/registry.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, FrameSupportWeightsWeightToFeeCoefficient, 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, PalletUnqSchedulerCall, PalletUnqSchedulerError, PalletUnqSchedulerEvent, PalletUnqSchedulerScheduledV3, 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, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, 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 '@polkadot/types/lookup';
+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, FrameSupportWeightsWeightToFeeCoefficient, 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, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, 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 '@polkadot/types/lookup';
declare module '@polkadot/types/types/registry' {
export interface InterfaceTypes {
@@ -133,10 +133,10 @@
PalletUniqueCall: PalletUniqueCall;
PalletUniqueError: PalletUniqueError;
PalletUniqueRawEvent: PalletUniqueRawEvent;
- PalletUnqSchedulerCall: PalletUnqSchedulerCall;
- PalletUnqSchedulerError: PalletUnqSchedulerError;
- PalletUnqSchedulerEvent: PalletUnqSchedulerEvent;
- PalletUnqSchedulerScheduledV3: PalletUnqSchedulerScheduledV3;
+ PalletUniqueSchedulerCall: PalletUniqueSchedulerCall;
+ PalletUniqueSchedulerError: PalletUniqueSchedulerError;
+ PalletUniqueSchedulerEvent: PalletUniqueSchedulerEvent;
+ PalletUniqueSchedulerScheduledV3: PalletUniqueSchedulerScheduledV3;
PalletXcmCall: PalletXcmCall;
PalletXcmError: PalletXcmError;
PalletXcmEvent: PalletXcmEvent;
tests/src/interfaces/types-lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/types-lookup.ts
+++ b/tests/src/interfaces/types-lookup.ts
@@ -1438,8 +1438,8 @@
readonly tokenId: u32;
readonly propertyKeys: Vec<Bytes>;
} & Struct;
- readonly isSetPropertyPermissions: boolean;
- readonly asSetPropertyPermissions: {
+ readonly isSetTokenPropertyPermissions: boolean;
+ readonly asSetTokenPropertyPermissions: {
readonly collectionId: u32;
readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;
} & Struct;
@@ -1498,7 +1498,7 @@
readonly collectionId: u32;
readonly newLimit: UpDataStructsCollectionPermissions;
} & Struct;
- readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';
+ readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';
}
/** @name UpDataStructsCollectionMode (156) */
@@ -1562,7 +1562,7 @@
/** @name UpDataStructsNestingPermissions (169) */
export interface UpDataStructsNestingPermissions extends Struct {
readonly tokenOwner: bool;
- readonly admin: bool;
+ readonly collectionAdmin: bool;
readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;
readonly permissive: bool;
}
@@ -1650,8 +1650,8 @@
readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;
}
- /** @name PalletUnqSchedulerCall (206) */
- export interface PalletUnqSchedulerCall extends Enum {
+ /** @name PalletUniqueSchedulerCall (206) */
+ export interface PalletUniqueSchedulerCall extends Enum {
readonly isScheduleNamed: boolean;
readonly asScheduleNamed: {
readonly id: U8aFixed;
@@ -1719,11 +1719,13 @@
readonly royaltyAmount: Option<Permill>;
readonly metadata: Bytes;
readonly transferable: bool;
+ readonly resources: Option<Vec<RmrkTraitsResourceResourceTypes>>;
} & Struct;
readonly isBurnNft: boolean;
readonly asBurnNft: {
readonly collectionId: u32;
readonly nftId: u32;
+ readonly maxBurns: u32;
} & Struct;
readonly isSend: boolean;
readonly asSend: {
@@ -1777,7 +1779,6 @@
readonly asAddComposableResource: {
readonly rmrkCollectionId: u32;
readonly nftId: u32;
- readonly resourceId: Bytes;
readonly resource: RmrkTraitsResourceComposableResource;
} & Struct;
readonly isAddSlotResource: boolean;
@@ -1795,13 +1796,15 @@
readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';
}
- /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (215) */
- export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {
- readonly isAccountId: boolean;
- readonly asAccountId: AccountId32;
- readonly isCollectionAndNftTuple: boolean;
- readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;
- readonly type: 'AccountId' | 'CollectionAndNftTuple';
+ /** @name RmrkTraitsResourceResourceTypes (217) */
+ export interface RmrkTraitsResourceResourceTypes extends Enum {
+ readonly isBasic: boolean;
+ readonly asBasic: RmrkTraitsResourceBasicResource;
+ readonly isComposable: boolean;
+ readonly asComposable: RmrkTraitsResourceComposableResource;
+ readonly isSlot: boolean;
+ readonly asSlot: RmrkTraitsResourceSlotResource;
+ readonly type: 'Basic' | 'Composable' | 'Slot';
}
/** @name RmrkTraitsResourceBasicResource (219) */
@@ -1812,7 +1815,7 @@
readonly thumb: Option<Bytes>;
}
- /** @name RmrkTraitsResourceComposableResource (222) */
+ /** @name RmrkTraitsResourceComposableResource (221) */
export interface RmrkTraitsResourceComposableResource extends Struct {
readonly parts: Vec<u32>;
readonly base: u32;
@@ -1822,7 +1825,7 @@
readonly thumb: Option<Bytes>;
}
- /** @name RmrkTraitsResourceSlotResource (224) */
+ /** @name RmrkTraitsResourceSlotResource (222) */
export interface RmrkTraitsResourceSlotResource extends Struct {
readonly base: u32;
readonly src: Option<Bytes>;
@@ -1832,7 +1835,16 @@
readonly thumb: Option<Bytes>;
}
- /** @name PalletRmrkEquipCall (225) */
+ /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (224) */
+ export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {
+ readonly isAccountId: boolean;
+ readonly asAccountId: AccountId32;
+ readonly isCollectionAndNftTuple: boolean;
+ readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;
+ readonly type: 'AccountId' | 'CollectionAndNftTuple';
+ }
+
+ /** @name PalletRmrkEquipCall (228) */
export interface PalletRmrkEquipCall extends Enum {
readonly isCreateBase: boolean;
readonly asCreateBase: {
@@ -1848,7 +1860,7 @@
readonly type: 'CreateBase' | 'ThemeAdd';
}
- /** @name RmrkTraitsPartPartType (227) */
+ /** @name RmrkTraitsPartPartType (230) */
export interface RmrkTraitsPartPartType extends Enum {
readonly isFixedPart: boolean;
readonly asFixedPart: RmrkTraitsPartFixedPart;
@@ -1857,14 +1869,14 @@
readonly type: 'FixedPart' | 'SlotPart';
}
- /** @name RmrkTraitsPartFixedPart (229) */
+ /** @name RmrkTraitsPartFixedPart (232) */
export interface RmrkTraitsPartFixedPart extends Struct {
readonly id: u32;
readonly z: u32;
readonly src: Bytes;
}
- /** @name RmrkTraitsPartSlotPart (230) */
+ /** @name RmrkTraitsPartSlotPart (233) */
export interface RmrkTraitsPartSlotPart extends Struct {
readonly id: u32;
readonly equippable: RmrkTraitsPartEquippableList;
@@ -1872,7 +1884,7 @@
readonly z: u32;
}
- /** @name RmrkTraitsPartEquippableList (231) */
+ /** @name RmrkTraitsPartEquippableList (234) */
export interface RmrkTraitsPartEquippableList extends Enum {
readonly isAll: boolean;
readonly isEmpty: boolean;
@@ -1881,20 +1893,20 @@
readonly type: 'All' | 'Empty' | 'Custom';
}
- /** @name RmrkTraitsTheme (233) */
+ /** @name RmrkTraitsTheme (236) */
export interface RmrkTraitsTheme extends Struct {
readonly name: Bytes;
readonly properties: Vec<RmrkTraitsThemeThemeProperty>;
readonly inherit: bool;
}
- /** @name RmrkTraitsThemeThemeProperty (235) */
+ /** @name RmrkTraitsThemeThemeProperty (238) */
export interface RmrkTraitsThemeThemeProperty extends Struct {
readonly key: Bytes;
readonly value: Bytes;
}
- /** @name PalletEvmCall (236) */
+ /** @name PalletEvmCall (239) */
export interface PalletEvmCall extends Enum {
readonly isWithdraw: boolean;
readonly asWithdraw: {
@@ -1939,7 +1951,7 @@
readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';
}
- /** @name PalletEthereumCall (242) */
+ /** @name PalletEthereumCall (245) */
export interface PalletEthereumCall extends Enum {
readonly isTransact: boolean;
readonly asTransact: {
@@ -1948,7 +1960,7 @@
readonly type: 'Transact';
}
- /** @name EthereumTransactionTransactionV2 (243) */
+ /** @name EthereumTransactionTransactionV2 (246) */
export interface EthereumTransactionTransactionV2 extends Enum {
readonly isLegacy: boolean;
readonly asLegacy: EthereumTransactionLegacyTransaction;
@@ -1959,7 +1971,7 @@
readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
}
- /** @name EthereumTransactionLegacyTransaction (244) */
+ /** @name EthereumTransactionLegacyTransaction (247) */
export interface EthereumTransactionLegacyTransaction extends Struct {
readonly nonce: U256;
readonly gasPrice: U256;
@@ -1970,7 +1982,7 @@
readonly signature: EthereumTransactionTransactionSignature;
}
- /** @name EthereumTransactionTransactionAction (245) */
+ /** @name EthereumTransactionTransactionAction (248) */
export interface EthereumTransactionTransactionAction extends Enum {
readonly isCall: boolean;
readonly asCall: H160;
@@ -1978,14 +1990,14 @@
readonly type: 'Call' | 'Create';
}
- /** @name EthereumTransactionTransactionSignature (246) */
+ /** @name EthereumTransactionTransactionSignature (249) */
export interface EthereumTransactionTransactionSignature extends Struct {
readonly v: u64;
readonly r: H256;
readonly s: H256;
}
- /** @name EthereumTransactionEip2930Transaction (248) */
+ /** @name EthereumTransactionEip2930Transaction (251) */
export interface EthereumTransactionEip2930Transaction extends Struct {
readonly chainId: u64;
readonly nonce: U256;
@@ -2000,13 +2012,13 @@
readonly s: H256;
}
- /** @name EthereumTransactionAccessListItem (250) */
+ /** @name EthereumTransactionAccessListItem (253) */
export interface EthereumTransactionAccessListItem extends Struct {
readonly address: H160;
readonly storageKeys: Vec<H256>;
}
- /** @name EthereumTransactionEip1559Transaction (251) */
+ /** @name EthereumTransactionEip1559Transaction (254) */
export interface EthereumTransactionEip1559Transaction extends Struct {
readonly chainId: u64;
readonly nonce: U256;
@@ -2022,7 +2034,7 @@
readonly s: H256;
}
- /** @name PalletEvmMigrationCall (252) */
+ /** @name PalletEvmMigrationCall (255) */
export interface PalletEvmMigrationCall extends Enum {
readonly isBegin: boolean;
readonly asBegin: {
@@ -2041,7 +2053,7 @@
readonly type: 'Begin' | 'SetData' | 'Finish';
}
- /** @name PalletSudoEvent (255) */
+ /** @name PalletSudoEvent (258) */
export interface PalletSudoEvent extends Enum {
readonly isSudid: boolean;
readonly asSudid: {
@@ -2058,7 +2070,7 @@
readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';
}
- /** @name SpRuntimeDispatchError (257) */
+ /** @name SpRuntimeDispatchError (260) */
export interface SpRuntimeDispatchError extends Enum {
readonly isOther: boolean;
readonly isCannotLookup: boolean;
@@ -2077,13 +2089,13 @@
readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional';
}
- /** @name SpRuntimeModuleError (258) */
+ /** @name SpRuntimeModuleError (261) */
export interface SpRuntimeModuleError extends Struct {
readonly index: u8;
readonly error: U8aFixed;
}
- /** @name SpRuntimeTokenError (259) */
+ /** @name SpRuntimeTokenError (262) */
export interface SpRuntimeTokenError extends Enum {
readonly isNoFunds: boolean;
readonly isWouldDie: boolean;
@@ -2095,7 +2107,7 @@
readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported';
}
- /** @name SpRuntimeArithmeticError (260) */
+ /** @name SpRuntimeArithmeticError (263) */
export interface SpRuntimeArithmeticError extends Enum {
readonly isUnderflow: boolean;
readonly isOverflow: boolean;
@@ -2103,20 +2115,20 @@
readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';
}
- /** @name SpRuntimeTransactionalError (261) */
+ /** @name SpRuntimeTransactionalError (264) */
export interface SpRuntimeTransactionalError extends Enum {
readonly isLimitReached: boolean;
readonly isNoLayer: boolean;
readonly type: 'LimitReached' | 'NoLayer';
}
- /** @name PalletSudoError (262) */
+ /** @name PalletSudoError (265) */
export interface PalletSudoError extends Enum {
readonly isRequireSudo: boolean;
readonly type: 'RequireSudo';
}
- /** @name FrameSystemAccountInfo (263) */
+ /** @name FrameSystemAccountInfo (266) */
export interface FrameSystemAccountInfo extends Struct {
readonly nonce: u32;
readonly consumers: u32;
@@ -2125,19 +2137,19 @@
readonly data: PalletBalancesAccountData;
}
- /** @name FrameSupportWeightsPerDispatchClassU64 (264) */
+ /** @name FrameSupportWeightsPerDispatchClassU64 (267) */
export interface FrameSupportWeightsPerDispatchClassU64 extends Struct {
readonly normal: u64;
readonly operational: u64;
readonly mandatory: u64;
}
- /** @name SpRuntimeDigest (265) */
+ /** @name SpRuntimeDigest (268) */
export interface SpRuntimeDigest extends Struct {
readonly logs: Vec<SpRuntimeDigestDigestItem>;
}
- /** @name SpRuntimeDigestDigestItem (267) */
+ /** @name SpRuntimeDigestDigestItem (270) */
export interface SpRuntimeDigestDigestItem extends Enum {
readonly isOther: boolean;
readonly asOther: Bytes;
@@ -2151,14 +2163,14 @@
readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated';
}
- /** @name FrameSystemEventRecord (269) */
+ /** @name FrameSystemEventRecord (272) */
export interface FrameSystemEventRecord extends Struct {
readonly phase: FrameSystemPhase;
readonly event: Event;
readonly topics: Vec<H256>;
}
- /** @name FrameSystemEvent (271) */
+ /** @name FrameSystemEvent (274) */
export interface FrameSystemEvent extends Enum {
readonly isExtrinsicSuccess: boolean;
readonly asExtrinsicSuccess: {
@@ -2186,14 +2198,14 @@
readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked';
}
- /** @name FrameSupportWeightsDispatchInfo (272) */
+ /** @name FrameSupportWeightsDispatchInfo (275) */
export interface FrameSupportWeightsDispatchInfo extends Struct {
readonly weight: u64;
readonly class: FrameSupportWeightsDispatchClass;
readonly paysFee: FrameSupportWeightsPays;
}
- /** @name FrameSupportWeightsDispatchClass (273) */
+ /** @name FrameSupportWeightsDispatchClass (276) */
export interface FrameSupportWeightsDispatchClass extends Enum {
readonly isNormal: boolean;
readonly isOperational: boolean;
@@ -2201,14 +2213,14 @@
readonly type: 'Normal' | 'Operational' | 'Mandatory';
}
- /** @name FrameSupportWeightsPays (274) */
+ /** @name FrameSupportWeightsPays (277) */
export interface FrameSupportWeightsPays extends Enum {
readonly isYes: boolean;
readonly isNo: boolean;
readonly type: 'Yes' | 'No';
}
- /** @name OrmlVestingModuleEvent (275) */
+ /** @name OrmlVestingModuleEvent (278) */
export interface OrmlVestingModuleEvent extends Enum {
readonly isVestingScheduleAdded: boolean;
readonly asVestingScheduleAdded: {
@@ -2228,7 +2240,7 @@
readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';
}
- /** @name CumulusPalletXcmpQueueEvent (276) */
+ /** @name CumulusPalletXcmpQueueEvent (279) */
export interface CumulusPalletXcmpQueueEvent extends Enum {
readonly isSuccess: boolean;
readonly asSuccess: Option<H256>;
@@ -2249,7 +2261,7 @@
readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';
}
- /** @name PalletXcmEvent (277) */
+ /** @name PalletXcmEvent (280) */
export interface PalletXcmEvent extends Enum {
readonly isAttempted: boolean;
readonly asAttempted: XcmV2TraitsOutcome;
@@ -2286,7 +2298,7 @@
readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail';
}
- /** @name XcmV2TraitsOutcome (278) */
+ /** @name XcmV2TraitsOutcome (281) */
export interface XcmV2TraitsOutcome extends Enum {
readonly isComplete: boolean;
readonly asComplete: u64;
@@ -2297,7 +2309,7 @@
readonly type: 'Complete' | 'Incomplete' | 'Error';
}
- /** @name CumulusPalletXcmEvent (280) */
+ /** @name CumulusPalletXcmEvent (283) */
export interface CumulusPalletXcmEvent extends Enum {
readonly isInvalidFormat: boolean;
readonly asInvalidFormat: U8aFixed;
@@ -2308,7 +2320,7 @@
readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';
}
- /** @name CumulusPalletDmpQueueEvent (281) */
+ /** @name CumulusPalletDmpQueueEvent (284) */
export interface CumulusPalletDmpQueueEvent extends Enum {
readonly isInvalidFormat: boolean;
readonly asInvalidFormat: U8aFixed;
@@ -2325,7 +2337,7 @@
readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';
}
- /** @name PalletUniqueRawEvent (282) */
+ /** @name PalletUniqueRawEvent (285) */
export interface PalletUniqueRawEvent extends Enum {
readonly isCollectionSponsorRemoved: boolean;
readonly asCollectionSponsorRemoved: u32;
@@ -2350,8 +2362,8 @@
readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet';
}
- /** @name PalletUnqSchedulerEvent (283) */
- export interface PalletUnqSchedulerEvent extends Enum {
+ /** @name PalletUniqueSchedulerEvent (286) */
+ export interface PalletUniqueSchedulerEvent extends Enum {
readonly isScheduled: boolean;
readonly asScheduled: {
readonly when: u32;
@@ -2377,14 +2389,14 @@
readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed';
}
- /** @name FrameSupportScheduleLookupError (285) */
+ /** @name FrameSupportScheduleLookupError (288) */
export interface FrameSupportScheduleLookupError extends Enum {
readonly isUnknown: boolean;
readonly isBadFormat: boolean;
readonly type: 'Unknown' | 'BadFormat';
}
- /** @name PalletCommonEvent (286) */
+ /** @name PalletCommonEvent (289) */
export interface PalletCommonEvent extends Enum {
readonly isCollectionCreated: boolean;
readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;
@@ -2411,14 +2423,14 @@
readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet';
}
- /** @name PalletStructureEvent (287) */
+ /** @name PalletStructureEvent (290) */
export interface PalletStructureEvent extends Enum {
readonly isExecuted: boolean;
readonly asExecuted: Result<Null, SpRuntimeDispatchError>;
readonly type: 'Executed';
}
- /** @name PalletRmrkCoreEvent (288) */
+ /** @name PalletRmrkCoreEvent (291) */
export interface PalletRmrkCoreEvent extends Enum {
readonly isCollectionCreated: boolean;
readonly asCollectionCreated: {
@@ -2508,7 +2520,7 @@
readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet';
}
- /** @name PalletRmrkEquipEvent (289) */
+ /** @name PalletRmrkEquipEvent (292) */
export interface PalletRmrkEquipEvent extends Enum {
readonly isBaseCreated: boolean;
readonly asBaseCreated: {
@@ -2518,7 +2530,7 @@
readonly type: 'BaseCreated';
}
- /** @name PalletEvmEvent (290) */
+ /** @name PalletEvmEvent (293) */
export interface PalletEvmEvent extends Enum {
readonly isLog: boolean;
readonly asLog: EthereumLog;
@@ -2537,21 +2549,21 @@
readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed' | 'BalanceDeposit' | 'BalanceWithdraw';
}
- /** @name EthereumLog (291) */
+ /** @name EthereumLog (294) */
export interface EthereumLog extends Struct {
readonly address: H160;
readonly topics: Vec<H256>;
readonly data: Bytes;
}
- /** @name PalletEthereumEvent (292) */
+ /** @name PalletEthereumEvent (295) */
export interface PalletEthereumEvent extends Enum {
readonly isExecuted: boolean;
readonly asExecuted: ITuple<[H160, H160, H256, EvmCoreErrorExitReason]>;
readonly type: 'Executed';
}
- /** @name EvmCoreErrorExitReason (293) */
+ /** @name EvmCoreErrorExitReason (296) */
export interface EvmCoreErrorExitReason extends Enum {
readonly isSucceed: boolean;
readonly asSucceed: EvmCoreErrorExitSucceed;
@@ -2564,7 +2576,7 @@
readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';
}
- /** @name EvmCoreErrorExitSucceed (294) */
+ /** @name EvmCoreErrorExitSucceed (297) */
export interface EvmCoreErrorExitSucceed extends Enum {
readonly isStopped: boolean;
readonly isReturned: boolean;
@@ -2572,7 +2584,7 @@
readonly type: 'Stopped' | 'Returned' | 'Suicided';
}
- /** @name EvmCoreErrorExitError (295) */
+ /** @name EvmCoreErrorExitError (298) */
export interface EvmCoreErrorExitError extends Enum {
readonly isStackUnderflow: boolean;
readonly isStackOverflow: boolean;
@@ -2593,13 +2605,13 @@
readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';
}
- /** @name EvmCoreErrorExitRevert (298) */
+ /** @name EvmCoreErrorExitRevert (301) */
export interface EvmCoreErrorExitRevert extends Enum {
readonly isReverted: boolean;
readonly type: 'Reverted';
}
- /** @name EvmCoreErrorExitFatal (299) */
+ /** @name EvmCoreErrorExitFatal (302) */
export interface EvmCoreErrorExitFatal extends Enum {
readonly isNotSupported: boolean;
readonly isUnhandledInterrupt: boolean;
@@ -2610,7 +2622,7 @@
readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';
}
- /** @name FrameSystemPhase (300) */
+ /** @name FrameSystemPhase (303) */
export interface FrameSystemPhase extends Enum {
readonly isApplyExtrinsic: boolean;
readonly asApplyExtrinsic: u32;
@@ -2619,27 +2631,27 @@
readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';
}
- /** @name FrameSystemLastRuntimeUpgradeInfo (302) */
+ /** @name FrameSystemLastRuntimeUpgradeInfo (305) */
export interface FrameSystemLastRuntimeUpgradeInfo extends Struct {
readonly specVersion: Compact<u32>;
readonly specName: Text;
}
- /** @name FrameSystemLimitsBlockWeights (303) */
+ /** @name FrameSystemLimitsBlockWeights (306) */
export interface FrameSystemLimitsBlockWeights extends Struct {
readonly baseBlock: u64;
readonly maxBlock: u64;
readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;
}
- /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (304) */
+ /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (307) */
export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct {
readonly normal: FrameSystemLimitsWeightsPerClass;
readonly operational: FrameSystemLimitsWeightsPerClass;
readonly mandatory: FrameSystemLimitsWeightsPerClass;
}
- /** @name FrameSystemLimitsWeightsPerClass (305) */
+ /** @name FrameSystemLimitsWeightsPerClass (308) */
export interface FrameSystemLimitsWeightsPerClass extends Struct {
readonly baseExtrinsic: u64;
readonly maxExtrinsic: Option<u64>;
@@ -2647,25 +2659,25 @@
readonly reserved: Option<u64>;
}
- /** @name FrameSystemLimitsBlockLength (307) */
+ /** @name FrameSystemLimitsBlockLength (310) */
export interface FrameSystemLimitsBlockLength extends Struct {
readonly max: FrameSupportWeightsPerDispatchClassU32;
}
- /** @name FrameSupportWeightsPerDispatchClassU32 (308) */
+ /** @name FrameSupportWeightsPerDispatchClassU32 (311) */
export interface FrameSupportWeightsPerDispatchClassU32 extends Struct {
readonly normal: u32;
readonly operational: u32;
readonly mandatory: u32;
}
- /** @name FrameSupportWeightsRuntimeDbWeight (309) */
+ /** @name FrameSupportWeightsRuntimeDbWeight (312) */
export interface FrameSupportWeightsRuntimeDbWeight extends Struct {
readonly read: u64;
readonly write: u64;
}
- /** @name SpVersionRuntimeVersion (310) */
+ /** @name SpVersionRuntimeVersion (313) */
export interface SpVersionRuntimeVersion extends Struct {
readonly specName: Text;
readonly implName: Text;
@@ -2677,7 +2689,7 @@
readonly stateVersion: u8;
}
- /** @name FrameSystemError (314) */
+ /** @name FrameSystemError (317) */
export interface FrameSystemError extends Enum {
readonly isInvalidSpecName: boolean;
readonly isSpecVersionNeedsToIncrease: boolean;
@@ -2688,7 +2700,7 @@
readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';
}
- /** @name OrmlVestingModuleError (316) */
+ /** @name OrmlVestingModuleError (319) */
export interface OrmlVestingModuleError extends Enum {
readonly isZeroVestingPeriod: boolean;
readonly isZeroVestingPeriodCount: boolean;
@@ -2699,21 +2711,21 @@
readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';
}
- /** @name CumulusPalletXcmpQueueInboundChannelDetails (318) */
+ /** @name CumulusPalletXcmpQueueInboundChannelDetails (321) */
export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {
readonly sender: u32;
readonly state: CumulusPalletXcmpQueueInboundState;
readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;
}
- /** @name CumulusPalletXcmpQueueInboundState (319) */
+ /** @name CumulusPalletXcmpQueueInboundState (322) */
export interface CumulusPalletXcmpQueueInboundState extends Enum {
readonly isOk: boolean;
readonly isSuspended: boolean;
readonly type: 'Ok' | 'Suspended';
}
- /** @name PolkadotParachainPrimitivesXcmpMessageFormat (322) */
+ /** @name PolkadotParachainPrimitivesXcmpMessageFormat (325) */
export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {
readonly isConcatenatedVersionedXcm: boolean;
readonly isConcatenatedEncodedBlob: boolean;
@@ -2721,7 +2733,7 @@
readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';
}
- /** @name CumulusPalletXcmpQueueOutboundChannelDetails (325) */
+ /** @name CumulusPalletXcmpQueueOutboundChannelDetails (328) */
export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {
readonly recipient: u32;
readonly state: CumulusPalletXcmpQueueOutboundState;
@@ -2730,14 +2742,14 @@
readonly lastIndex: u16;
}
- /** @name CumulusPalletXcmpQueueOutboundState (326) */
+ /** @name CumulusPalletXcmpQueueOutboundState (329) */
export interface CumulusPalletXcmpQueueOutboundState extends Enum {
readonly isOk: boolean;
readonly isSuspended: boolean;
readonly type: 'Ok' | 'Suspended';
}
- /** @name CumulusPalletXcmpQueueQueueConfigData (328) */
+ /** @name CumulusPalletXcmpQueueQueueConfigData (331) */
export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {
readonly suspendThreshold: u32;
readonly dropThreshold: u32;
@@ -2747,7 +2759,7 @@
readonly xcmpMaxIndividualWeight: u64;
}
- /** @name CumulusPalletXcmpQueueError (330) */
+ /** @name CumulusPalletXcmpQueueError (333) */
export interface CumulusPalletXcmpQueueError extends Enum {
readonly isFailedToSend: boolean;
readonly isBadXcmOrigin: boolean;
@@ -2757,7 +2769,7 @@
readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';
}
- /** @name PalletXcmError (331) */
+ /** @name PalletXcmError (334) */
export interface PalletXcmError extends Enum {
readonly isUnreachable: boolean;
readonly isSendFailure: boolean;
@@ -2775,29 +2787,29 @@
readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';
}
- /** @name CumulusPalletXcmError (332) */
+ /** @name CumulusPalletXcmError (335) */
export type CumulusPalletXcmError = Null;
- /** @name CumulusPalletDmpQueueConfigData (333) */
+ /** @name CumulusPalletDmpQueueConfigData (336) */
export interface CumulusPalletDmpQueueConfigData extends Struct {
readonly maxIndividual: u64;
}
- /** @name CumulusPalletDmpQueuePageIndexData (334) */
+ /** @name CumulusPalletDmpQueuePageIndexData (337) */
export interface CumulusPalletDmpQueuePageIndexData extends Struct {
readonly beginUsed: u32;
readonly endUsed: u32;
readonly overweightCount: u64;
}
- /** @name CumulusPalletDmpQueueError (337) */
+ /** @name CumulusPalletDmpQueueError (340) */
export interface CumulusPalletDmpQueueError extends Enum {
readonly isUnknown: boolean;
readonly isOverLimit: boolean;
readonly type: 'Unknown' | 'OverLimit';
}
- /** @name PalletUniqueError (341) */
+ /** @name PalletUniqueError (344) */
export interface PalletUniqueError extends Enum {
readonly isCollectionDecimalPointLimitExceeded: boolean;
readonly isConfirmUnsetSponsorFail: boolean;
@@ -2805,8 +2817,8 @@
readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument';
}
- /** @name PalletUnqSchedulerScheduledV3 (344) */
- export interface PalletUnqSchedulerScheduledV3 extends Struct {
+ /** @name PalletUniqueSchedulerScheduledV3 (347) */
+ export interface PalletUniqueSchedulerScheduledV3 extends Struct {
readonly maybeId: Option<U8aFixed>;
readonly priority: u8;
readonly call: FrameSupportScheduleMaybeHashed;
@@ -2814,7 +2826,7 @@
readonly origin: OpalRuntimeOriginCaller;
}
- /** @name OpalRuntimeOriginCaller (345) */
+ /** @name OpalRuntimeOriginCaller (348) */
export interface OpalRuntimeOriginCaller extends Enum {
readonly isVoid: boolean;
readonly isSystem: boolean;
@@ -2828,7 +2840,7 @@
readonly type: 'Void' | 'System' | 'PolkadotXcm' | 'CumulusXcm' | 'Ethereum';
}
- /** @name FrameSupportDispatchRawOrigin (346) */
+ /** @name FrameSupportDispatchRawOrigin (349) */
export interface FrameSupportDispatchRawOrigin extends Enum {
readonly isRoot: boolean;
readonly isSigned: boolean;
@@ -2837,7 +2849,7 @@
readonly type: 'Root' | 'Signed' | 'None';
}
- /** @name PalletXcmOrigin (347) */
+ /** @name PalletXcmOrigin (350) */
export interface PalletXcmOrigin extends Enum {
readonly isXcm: boolean;
readonly asXcm: XcmV1MultiLocation;
@@ -2846,7 +2858,7 @@
readonly type: 'Xcm' | 'Response';
}
- /** @name CumulusPalletXcmOrigin (348) */
+ /** @name CumulusPalletXcmOrigin (351) */
export interface CumulusPalletXcmOrigin extends Enum {
readonly isRelay: boolean;
readonly isSiblingParachain: boolean;
@@ -2854,18 +2866,18 @@
readonly type: 'Relay' | 'SiblingParachain';
}
- /** @name PalletEthereumRawOrigin (349) */
+ /** @name PalletEthereumRawOrigin (352) */
export interface PalletEthereumRawOrigin extends Enum {
readonly isEthereumTransaction: boolean;
readonly asEthereumTransaction: H160;
readonly type: 'EthereumTransaction';
}
- /** @name SpCoreVoid (350) */
+ /** @name SpCoreVoid (353) */
export type SpCoreVoid = Null;
- /** @name PalletUnqSchedulerError (351) */
- export interface PalletUnqSchedulerError extends Enum {
+ /** @name PalletUniqueSchedulerError (354) */
+ export interface PalletUniqueSchedulerError extends Enum {
readonly isFailedToSchedule: boolean;
readonly isNotFound: boolean;
readonly isTargetBlockNumberInPast: boolean;
@@ -2873,7 +2885,7 @@
readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange';
}
- /** @name UpDataStructsCollection (352) */
+ /** @name UpDataStructsCollection (355) */
export interface UpDataStructsCollection extends Struct {
readonly owner: AccountId32;
readonly mode: UpDataStructsCollectionMode;
@@ -2886,7 +2898,7 @@
readonly externalCollection: bool;
}
- /** @name UpDataStructsSponsorshipState (353) */
+ /** @name UpDataStructsSponsorshipState (356) */
export interface UpDataStructsSponsorshipState extends Enum {
readonly isDisabled: boolean;
readonly isUnconfirmed: boolean;
@@ -2896,42 +2908,42 @@
readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';
}
- /** @name UpDataStructsProperties (354) */
+ /** @name UpDataStructsProperties (357) */
export interface UpDataStructsProperties extends Struct {
readonly map: UpDataStructsPropertiesMapBoundedVec;
readonly consumedSpace: u32;
readonly spaceLimit: u32;
}
- /** @name UpDataStructsPropertiesMapBoundedVec (355) */
+ /** @name UpDataStructsPropertiesMapBoundedVec (358) */
export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}
- /** @name UpDataStructsPropertiesMapPropertyPermission (360) */
+ /** @name UpDataStructsPropertiesMapPropertyPermission (363) */
export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}
- /** @name UpDataStructsCollectionStats (367) */
+ /** @name UpDataStructsCollectionStats (370) */
export interface UpDataStructsCollectionStats extends Struct {
readonly created: u32;
readonly destroyed: u32;
readonly alive: u32;
}
- /** @name UpDataStructsTokenChild (368) */
+ /** @name UpDataStructsTokenChild (371) */
export interface UpDataStructsTokenChild extends Struct {
readonly token: u32;
readonly collection: u32;
}
- /** @name PhantomTypeUpDataStructs (369) */
+ /** @name PhantomTypeUpDataStructs (372) */
export interface PhantomTypeUpDataStructs extends Vec<ITuple<[UpDataStructsTokenData, UpDataStructsRpcCollection, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftNftInfo, RmrkTraitsResourceResourceInfo, RmrkTraitsPropertyPropertyInfo, RmrkTraitsBaseBaseInfo, RmrkTraitsPartPartType, RmrkTraitsTheme, RmrkTraitsNftNftChild]>> {}
- /** @name UpDataStructsTokenData (371) */
+ /** @name UpDataStructsTokenData (374) */
export interface UpDataStructsTokenData extends Struct {
readonly properties: Vec<UpDataStructsProperty>;
readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;
}
- /** @name UpDataStructsRpcCollection (373) */
+ /** @name UpDataStructsRpcCollection (376) */
export interface UpDataStructsRpcCollection extends Struct {
readonly owner: AccountId32;
readonly mode: UpDataStructsCollectionMode;
@@ -2946,7 +2958,7 @@
readonly readOnly: bool;
}
- /** @name RmrkTraitsCollectionCollectionInfo (374) */
+ /** @name RmrkTraitsCollectionCollectionInfo (377) */
export interface RmrkTraitsCollectionCollectionInfo extends Struct {
readonly issuer: AccountId32;
readonly metadata: Bytes;
@@ -2955,7 +2967,7 @@
readonly nftsCount: u32;
}
- /** @name RmrkTraitsNftNftInfo (375) */
+ /** @name RmrkTraitsNftNftInfo (378) */
export interface RmrkTraitsNftNftInfo extends Struct {
readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple;
readonly royalty: Option<RmrkTraitsNftRoyaltyInfo>;
@@ -2964,13 +2976,13 @@
readonly pending: bool;
}
- /** @name RmrkTraitsNftRoyaltyInfo (377) */
+ /** @name RmrkTraitsNftRoyaltyInfo (380) */
export interface RmrkTraitsNftRoyaltyInfo extends Struct {
readonly recipient: AccountId32;
readonly amount: Permill;
}
- /** @name RmrkTraitsResourceResourceInfo (378) */
+ /** @name RmrkTraitsResourceResourceInfo (381) */
export interface RmrkTraitsResourceResourceInfo extends Struct {
readonly id: u32;
readonly resource: RmrkTraitsResourceResourceTypes;
@@ -2978,37 +2990,26 @@
readonly pendingRemoval: bool;
}
- /** @name RmrkTraitsResourceResourceTypes (379) */
- export interface RmrkTraitsResourceResourceTypes extends Enum {
- readonly isBasic: boolean;
- readonly asBasic: RmrkTraitsResourceBasicResource;
- readonly isComposable: boolean;
- readonly asComposable: RmrkTraitsResourceComposableResource;
- readonly isSlot: boolean;
- readonly asSlot: RmrkTraitsResourceSlotResource;
- readonly type: 'Basic' | 'Composable' | 'Slot';
- }
-
- /** @name RmrkTraitsPropertyPropertyInfo (380) */
+ /** @name RmrkTraitsPropertyPropertyInfo (382) */
export interface RmrkTraitsPropertyPropertyInfo extends Struct {
readonly key: Bytes;
readonly value: Bytes;
}
- /** @name RmrkTraitsBaseBaseInfo (381) */
+ /** @name RmrkTraitsBaseBaseInfo (383) */
export interface RmrkTraitsBaseBaseInfo extends Struct {
readonly issuer: AccountId32;
readonly baseType: Bytes;
readonly symbol: Bytes;
}
- /** @name RmrkTraitsNftNftChild (382) */
+ /** @name RmrkTraitsNftNftChild (384) */
export interface RmrkTraitsNftNftChild extends Struct {
readonly collectionId: u32;
readonly nftId: u32;
}
- /** @name PalletCommonError (384) */
+ /** @name PalletCommonError (386) */
export interface PalletCommonError extends Enum {
readonly isCollectionNotFound: boolean;
readonly isMustBeTokenOwner: boolean;
@@ -3047,7 +3048,7 @@
readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal';
}
- /** @name PalletFungibleError (386) */
+ /** @name PalletFungibleError (388) */
export interface PalletFungibleError extends Enum {
readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isFungibleItemsHaveNoId: boolean;
@@ -3057,12 +3058,12 @@
readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
}
- /** @name PalletRefungibleItemData (387) */
+ /** @name PalletRefungibleItemData (389) */
export interface PalletRefungibleItemData extends Struct {
readonly constData: Bytes;
}
- /** @name PalletRefungibleError (391) */
+ /** @name PalletRefungibleError (393) */
export interface PalletRefungibleError extends Enum {
readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isWrongRefungiblePieces: boolean;
@@ -3071,12 +3072,12 @@
readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
}
- /** @name PalletNonfungibleItemData (392) */
+ /** @name PalletNonfungibleItemData (394) */
export interface PalletNonfungibleItemData extends Struct {
readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
}
- /** @name PalletNonfungibleError (394) */
+ /** @name PalletNonfungibleError (396) */
export interface PalletNonfungibleError extends Enum {
readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isNonfungibleItemsHaveNoAmount: boolean;
@@ -3084,7 +3085,7 @@
readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';
}
- /** @name PalletStructureError (395) */
+ /** @name PalletStructureError (397) */
export interface PalletStructureError extends Enum {
readonly isOuroborosDetected: boolean;
readonly isDepthLimit: boolean;
@@ -3093,12 +3094,13 @@
readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';
}
- /** @name PalletRmrkCoreError (396) */
+ /** @name PalletRmrkCoreError (398) */
export interface PalletRmrkCoreError extends Enum {
readonly isCorruptedCollectionType: boolean;
readonly isNftTypeEncodeError: boolean;
readonly isRmrkPropertyKeyIsTooLong: boolean;
readonly isRmrkPropertyValueIsTooLong: boolean;
+ readonly isUnableToDecodeRmrkData: boolean;
readonly isCollectionNotEmpty: boolean;
readonly isNoAvailableCollectionId: boolean;
readonly isNoAvailableNftId: boolean;
@@ -3111,10 +3113,10 @@
readonly isCannotAcceptNonOwnedNft: boolean;
readonly isCannotRejectNonOwnedNft: boolean;
readonly isResourceNotPending: boolean;
- readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';
+ readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';
}
- /** @name PalletRmrkEquipError (398) */
+ /** @name PalletRmrkEquipError (400) */
export interface PalletRmrkEquipError extends Enum {
readonly isPermissionError: boolean;
readonly isNoAvailableBaseId: boolean;
@@ -3124,7 +3126,7 @@
readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst';
}
- /** @name PalletEvmError (401) */
+ /** @name PalletEvmError (403) */
export interface PalletEvmError extends Enum {
readonly isBalanceLow: boolean;
readonly isFeeOverflow: boolean;
@@ -3135,7 +3137,7 @@
readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';
}
- /** @name FpRpcTransactionStatus (404) */
+ /** @name FpRpcTransactionStatus (406) */
export interface FpRpcTransactionStatus extends Struct {
readonly transactionHash: H256;
readonly transactionIndex: u32;
@@ -3146,10 +3148,10 @@
readonly logsBloom: EthbloomBloom;
}
- /** @name EthbloomBloom (406) */
+ /** @name EthbloomBloom (408) */
export interface EthbloomBloom extends U8aFixed {}
- /** @name EthereumReceiptReceiptV3 (408) */
+ /** @name EthereumReceiptReceiptV3 (410) */
export interface EthereumReceiptReceiptV3 extends Enum {
readonly isLegacy: boolean;
readonly asLegacy: EthereumReceiptEip658ReceiptData;
@@ -3160,7 +3162,7 @@
readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
}
- /** @name EthereumReceiptEip658ReceiptData (409) */
+ /** @name EthereumReceiptEip658ReceiptData (411) */
export interface EthereumReceiptEip658ReceiptData extends Struct {
readonly statusCode: u8;
readonly usedGas: U256;
@@ -3168,14 +3170,14 @@
readonly logs: Vec<EthereumLog>;
}
- /** @name EthereumBlock (410) */
+ /** @name EthereumBlock (412) */
export interface EthereumBlock extends Struct {
readonly header: EthereumHeader;
readonly transactions: Vec<EthereumTransactionTransactionV2>;
readonly ommers: Vec<EthereumHeader>;
}
- /** @name EthereumHeader (411) */
+ /** @name EthereumHeader (413) */
export interface EthereumHeader extends Struct {
readonly parentHash: H256;
readonly ommersHash: H256;
@@ -3194,24 +3196,24 @@
readonly nonce: EthereumTypesHashH64;
}
- /** @name EthereumTypesHashH64 (412) */
+ /** @name EthereumTypesHashH64 (414) */
export interface EthereumTypesHashH64 extends U8aFixed {}
- /** @name PalletEthereumError (417) */
+ /** @name PalletEthereumError (419) */
export interface PalletEthereumError extends Enum {
readonly isInvalidSignature: boolean;
readonly isPreLogExists: boolean;
readonly type: 'InvalidSignature' | 'PreLogExists';
}
- /** @name PalletEvmCoderSubstrateError (418) */
+ /** @name PalletEvmCoderSubstrateError (420) */
export interface PalletEvmCoderSubstrateError extends Enum {
readonly isOutOfGas: boolean;
readonly isOutOfFund: boolean;
readonly type: 'OutOfGas' | 'OutOfFund';
}
- /** @name PalletEvmContractHelpersSponsoringModeT (419) */
+ /** @name PalletEvmContractHelpersSponsoringModeT (421) */
export interface PalletEvmContractHelpersSponsoringModeT extends Enum {
readonly isDisabled: boolean;
readonly isAllowlisted: boolean;
@@ -3219,20 +3221,20 @@
readonly type: 'Disabled' | 'Allowlisted' | 'Generous';
}
- /** @name PalletEvmContractHelpersError (421) */
+ /** @name PalletEvmContractHelpersError (423) */
export interface PalletEvmContractHelpersError extends Enum {
readonly isNoPermission: boolean;
readonly type: 'NoPermission';
}
- /** @name PalletEvmMigrationError (422) */
+ /** @name PalletEvmMigrationError (424) */
export interface PalletEvmMigrationError extends Enum {
readonly isAccountNotEmpty: boolean;
readonly isAccountIsNotMigrating: boolean;
readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';
}
- /** @name SpRuntimeMultiSignature (424) */
+ /** @name SpRuntimeMultiSignature (426) */
export interface SpRuntimeMultiSignature extends Enum {
readonly isEd25519: boolean;
readonly asEd25519: SpCoreEd25519Signature;
@@ -3243,34 +3245,34 @@
readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';
}
- /** @name SpCoreEd25519Signature (425) */
+ /** @name SpCoreEd25519Signature (427) */
export interface SpCoreEd25519Signature extends U8aFixed {}
- /** @name SpCoreSr25519Signature (427) */
+ /** @name SpCoreSr25519Signature (429) */
export interface SpCoreSr25519Signature extends U8aFixed {}
- /** @name SpCoreEcdsaSignature (428) */
+ /** @name SpCoreEcdsaSignature (430) */
export interface SpCoreEcdsaSignature extends U8aFixed {}
- /** @name FrameSystemExtensionsCheckSpecVersion (431) */
+ /** @name FrameSystemExtensionsCheckSpecVersion (433) */
export type FrameSystemExtensionsCheckSpecVersion = Null;
- /** @name FrameSystemExtensionsCheckGenesis (432) */
+ /** @name FrameSystemExtensionsCheckGenesis (434) */
export type FrameSystemExtensionsCheckGenesis = Null;
- /** @name FrameSystemExtensionsCheckNonce (435) */
+ /** @name FrameSystemExtensionsCheckNonce (437) */
export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}
- /** @name FrameSystemExtensionsCheckWeight (436) */
+ /** @name FrameSystemExtensionsCheckWeight (438) */
export type FrameSystemExtensionsCheckWeight = Null;
- /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (437) */
+ /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (439) */
export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}
- /** @name OpalRuntimeRuntime (438) */
+ /** @name OpalRuntimeRuntime (440) */
export type OpalRuntimeRuntime = Null;
- /** @name PalletEthereumFakeTransactionFinalizer (439) */
+ /** @name PalletEthereumFakeTransactionFinalizer (441) */
export type PalletEthereumFakeTransactionFinalizer = Null;
} // declare module
tests/src/limits.test.tsdiffbeforeafterboth--- a/tests/src/limits.test.ts
+++ b/tests/src/limits.test.ts
@@ -406,6 +406,7 @@
it('Effective collection limits', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
{ // Check that limits is undefined
const collection = await api.rpc.unique.collectionById(collectionId);
@@ -419,7 +420,7 @@
expect(limits.tokenLimit.toHuman()).to.be.null;
expect(limits.sponsorTransferTimeout.toHuman()).to.be.null;
expect(limits.sponsorApproveTimeout.toHuman()).to.be.null;
- expect(limits.ownerCanTransfer.toHuman()).to.be.null;
+ expect(limits.ownerCanTransfer.toHuman()).to.be.true;
expect(limits.ownerCanDestroy.toHuman()).to.be.null;
expect(limits.transfersEnabled.toHuman()).to.be.null;
}
tests/src/nesting/graphs.test.tsdiffbeforeafterboth--- a/tests/src/nesting/graphs.test.ts
+++ b/tests/src/nesting/graphs.test.ts
@@ -3,7 +3,7 @@
import {expect} from 'chai';
import {tokenIdToCross} from '../eth/util/helpers';
import usingApi, {executeTransaction} from '../substrate/substrate-api';
-import {getCreateCollectionResult, transferExpectSuccess} from '../util/helpers';
+import {getCreateCollectionResult, transferExpectSuccess, setCollectionLimitsExpectSuccess} from '../util/helpers';
/**
* ```dot
@@ -13,7 +13,7 @@
* ```
*/
async function buildComplexObjectGraph(api: ApiPromise, sender: IKeyringPair): Promise<number> {
- const events = await executeTransaction(api, sender, api.tx.unique.createCollectionEx({mode: 'NFT', permissions: {nesting: 'Owner'}}));
+ const events = await executeTransaction(api, sender, api.tx.unique.createCollectionEx({mode: 'NFT', permissions: {nesting: {tokenOwner: true}}}));
const {collectionId} = getCreateCollectionResult(events);
await executeTransaction(api, sender, api.tx.unique.createMultipleItemsEx(collectionId, {NFT: Array(8).fill({owner: {Substrate: sender.address}})}));
@@ -36,6 +36,7 @@
await usingApi(async (api, privateKeyWrapper) => {
const alice = privateKeyWrapper('//Alice');
const collection = await buildComplexObjectGraph(api, alice);
+ await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
// to self
await expect(
tests/src/nesting/nest.test.tsdiffbeforeafterboth--- a/tests/src/nesting/nest.test.ts
+++ b/tests/src/nesting/nest.test.ts
@@ -2,6 +2,7 @@
import {tokenIdToAddress} from '../eth/util/helpers';
import usingApi, {executeTransaction} from '../substrate/substrate-api';
import {
+ addCollectionAdminExpectSuccess,
addToAllowListExpectSuccess,
createCollectionExpectSuccess,
createItemExpectSuccess,
@@ -15,15 +16,17 @@
transferExpectFailure,
transferExpectSuccess,
transferFromExpectSuccess,
+ setCollectionLimitsExpectSuccess,
} from '../util/helpers';
import {IKeyringPair} from '@polkadot/types/types';
let alice: IKeyringPair;
let bob: IKeyringPair;
+let charlie: IKeyringPair;
-describe('Integration Test: Nesting', () => {
+describe('Integration Test: Composite nesting tests', () => {
before(async () => {
- await usingApi(async (api, privateKeyWrapper) => {
+ await usingApi(async (_, privateKeyWrapper) => {
alice = privateKeyWrapper('//Alice');
bob = privateKeyWrapper('//Bob');
});
@@ -92,6 +95,7 @@
it('Checks token children', async () => {
await usingApi(async api => {
const collectionA = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionA, {ownerCanTransfer: true});
await setCollectionPermissionsExpectSuccess(alice, collectionA, {nesting: {tokenOwner: true}});
const collectionB = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
@@ -145,7 +149,79 @@
], 'Children contents check at deeper nesting');
});
});
+});
+
+describe('Integration Test: Various token type nesting', async () => {
+ before(async () => {
+ await usingApi(async (_, privateKeyWrapper) => {
+ alice = privateKeyWrapper('//Alice');
+ bob = privateKeyWrapper('//Bob');
+ charlie = privateKeyWrapper('//Charlie');
+ });
+ });
+
+ it('Admin (NFT): allows an Admin to nest a token', async () => {
+ await usingApi(async api => {
+ const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {collectionAdmin: true}});
+ await addCollectionAdminExpectSuccess(alice, collection, bob.address);
+ const targetToken = await createItemExpectSuccess(alice, collection, 'NFT', charlie.address);
+
+ // Create a nested token
+ const nestedToken = await createItemExpectSuccess(bob, collection, 'NFT', {Ethereum: tokenIdToAddress(collection, targetToken)});
+ expect(await getTopmostTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Substrate: charlie.address});
+ expect(await getTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collection, targetToken).toLowerCase()});
+
+ // Create a token to be nested and nest
+ const newToken = await createItemExpectSuccess(bob, collection, 'NFT');
+ await transferExpectSuccess(collection, newToken, bob, {Ethereum: tokenIdToAddress(collection, targetToken)});
+ expect(await getTopmostTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: charlie.address});
+ expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collection, targetToken).toLowerCase()});
+ });
+ });
+ it('Admin (NFT): Admin and Token Owner can operate together', async () => {
+ await usingApi(async api => {
+ const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {tokenOwner: true, collectionAdmin: true}});
+ await addCollectionAdminExpectSuccess(alice, collection, bob.address);
+ const targetToken = await createItemExpectSuccess(alice, collection, 'NFT', charlie.address);
+
+ // Create a nested token by an administrator
+ const nestedToken = await createItemExpectSuccess(bob, collection, 'NFT', {Ethereum: tokenIdToAddress(collection, targetToken)});
+ expect(await getTopmostTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Substrate: charlie.address});
+ expect(await getTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collection, targetToken).toLowerCase()});
+
+ // Create a token and allow the owner to nest too
+ const newToken = await createItemExpectSuccess(alice, collection, 'NFT', charlie.address);
+ await transferExpectSuccess(collection, newToken, charlie, {Ethereum: tokenIdToAddress(collection, nestedToken)});
+ expect(await getTopmostTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: charlie.address});
+ expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collection, nestedToken).toLowerCase()});
+ });
+ });
+
+ it('Admin (NFT): allows an Admin to nest a token (Restricted nesting)', async () => {
+ await usingApi(async api => {
+ const collectionA = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await addCollectionAdminExpectSuccess(alice, collectionA, bob.address);
+ const collectionB = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await addCollectionAdminExpectSuccess(alice, collectionB, bob.address);
+ await setCollectionPermissionsExpectSuccess(alice, collectionA, {nesting: {collectionAdmin: true, restricted:[collectionA, collectionB]}});
+ const targetToken = await createItemExpectSuccess(alice, collectionA, 'NFT', charlie.address);
+
+ // Create a nested token
+ const nestedToken = await createItemExpectSuccess(bob, collectionB, 'NFT', {Ethereum: tokenIdToAddress(collectionA, targetToken)});
+ expect(await getTopmostTokenOwner(api, collectionB, nestedToken)).to.be.deep.equal({Substrate: charlie.address});
+ expect(await getTokenOwner(api, collectionB, nestedToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collectionA, targetToken).toLowerCase()});
+
+ // Create a token to be nested and nest
+ const newToken = await createItemExpectSuccess(bob, collectionB, 'NFT');
+ await transferExpectSuccess(collectionB, newToken, bob, {Ethereum: tokenIdToAddress(collectionA, targetToken)});
+ expect(await getTopmostTokenOwner(api, collectionB, newToken)).to.be.deep.equal({Substrate: charlie.address});
+ expect(await getTokenOwner(api, collectionB, newToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collectionA, targetToken).toLowerCase()});
+ });
+ });
+
// ---------- Non-Fungible ----------
it('NFT: allows an Owner to nest/unnest their token', async () => {
@@ -248,7 +324,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collectionRFT,
targetAddress,
- {ReFungible: {const_data: [], pieces: 100}},
+ {ReFungible: {pieces: 100}},
))).to.not.be.rejected;
// Nest a new token
@@ -271,7 +347,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collectionRFT,
targetAddress,
- {ReFungible: {const_data: [], pieces: 100}},
+ {ReFungible: {pieces: 100}},
))).to.not.be.rejected;
// Nest a new token
@@ -283,7 +359,7 @@
describe('Negative Test: Nesting', async() => {
before(async () => {
- await usingApi(async (api, privateKeyWrapper) => {
+ await usingApi(async (_, privateKeyWrapper) => {
alice = privateKeyWrapper('//Alice');
bob = privateKeyWrapper('//Bob');
});
@@ -314,13 +390,122 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collection,
{Ethereum: tokenIdToAddress(collection, prevToken)},
- {nft: {const_data: [], variable_data: []}} as any,
+ {nft: {}} as any,
)), 'while creating nested token').to.be.rejectedWith(/^structure\.DepthLimit$/);
expect(await getTopmostTokenOwner(api, collection, prevToken)).to.be.deep.equal({Substrate: alice.address});
});
});
+ // ---------- Admin ------------
+
+ it('Admin (NFT): disallows an Admin to operate nesting when only TokenOwner is allowed', async () => {
+ await usingApi(async api => {
+ const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {tokenOwner: true}});
+ await addCollectionAdminExpectSuccess(alice, collection, bob.address);
+ const targetToken = await createItemExpectSuccess(alice, collection, 'NFT');
+
+ // Try to create a nested token as collection admin when it's disallowed
+ await expect(executeTransaction(api, bob, api.tx.unique.createItem(
+ collection,
+ {Ethereum: tokenIdToAddress(collection, targetToken)},
+ {nft: {}} as any,
+ )), 'while creating nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
+
+ // Try to create and nest a token in the wrong collection
+ const newToken = await createItemExpectSuccess(bob, collection, 'NFT');
+ await expect(executeTransaction(
+ api,
+ bob,
+ api.tx.unique.transfer({Ethereum: tokenIdToAddress(collection, targetToken)}, collection, newToken, 1),
+ ), 'while nesting new token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
+ expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: bob.address});
+ });
+ });
+
+ it('Admin (NFT): disallows a Token Owner to operate nesting when only Admin is allowed', async () => {
+ await usingApi(async api => {
+ const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {collectionAdmin: true}});
+ await addToAllowListExpectSuccess(alice, collection, bob.address);
+ await enableAllowListExpectSuccess(alice, collection);
+ await enablePublicMintingExpectSuccess(alice, collection);
+ const targetToken = await createItemExpectSuccess(alice, collection, 'NFT');
+
+ // Try to create a nested token as collection admin when it's disallowed
+ await expect(executeTransaction(api, bob, api.tx.unique.createItem(
+ collection,
+ {Ethereum: tokenIdToAddress(collection, targetToken)},
+ {nft: {}} as any,
+ )), 'while creating nested token').to.be.rejectedWith(/common\.AddressNotInAllowlist/);
+
+ // Try to create and nest a token in the wrong collection
+ const newToken = await createItemExpectSuccess(bob, collection, 'NFT');
+ await expect(executeTransaction(
+ api,
+ bob,
+ api.tx.unique.transfer({Ethereum: tokenIdToAddress(collection, targetToken)}, collection, newToken, 1),
+ ), 'while nesting new token').to.be.rejectedWith(/common\.AddressNotInAllowlist/);
+ expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: bob.address});
+ });
+ });
+
+ it('Admin (NFT): disallows an Admin to nest and unnest someone else\'s token', async () => {
+ await usingApi(async api => {
+ const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
+ await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {collectionAdmin: true}});
+
+ await addToAllowListExpectSuccess(alice, collection, bob.address);
+ await enableAllowListExpectSuccess(alice, collection);
+ await enablePublicMintingExpectSuccess(alice, collection);
+
+ // Create a token to attempt to be nested into
+ const targetToken = await createItemExpectSuccess(bob, collection, 'NFT');
+ const targetAddress = {Ethereum: tokenIdToAddress(collection, targetToken).toLowerCase()};
+
+ // Try to nest somebody else's token
+ const newToken = await createItemExpectSuccess(bob, collection, 'NFT');
+ await expect(executeTransaction(
+ api,
+ alice,
+ api.tx.unique.transfer(targetAddress, collection, newToken, 1),
+ ), 'while nesting another\'s token token').to.be.rejectedWith(/common\.AddressNotInAllowlist/);
+ expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: bob.address});
+
+ // Nest a token as admin and try to unnest it, now belonging to someone else
+ const nestedToken = await createItemExpectSuccess(alice, collection, 'NFT', targetAddress);
+ await expect(executeTransaction(
+ api,
+ alice,
+ api.tx.unique.transferFrom(targetAddress, normalizeAccountId(alice), collection, nestedToken, 1),
+ ), 'while unnesting another\'s token').to.be.rejectedWith(/common\.AddressNotInAllowlist/);
+ expect(await getTokenOwner(api, collection, nestedToken)).to.be.deep.equal(targetAddress);
+ expect(await getTopmostTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Substrate: bob.address});
+ });
+ });
+
+ it('Admin (NFT): disallows an Admin to nest a token from an unlisted collection (Restricted nesting)', async () => {
+ await usingApi(async api => {
+ const collectionA = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ const collectionB = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionPermissionsExpectSuccess(alice, collectionA, {nesting: {collectionAdmin: true, restricted:[collectionA]}});
+
+ // Create a token to attempt to be nested into
+ const targetToken = await createItemExpectSuccess(alice, collectionA, 'NFT');
+
+ // Try to create and nest a token in the wrong collection
+ const newToken = await createItemExpectSuccess(alice, collectionB, 'NFT');
+ await expect(executeTransaction(
+ api,
+ alice,
+ api.tx.unique.transfer({Ethereum: tokenIdToAddress(collectionA, targetToken)}, collectionB, newToken, 1),
+ ), 'while nesting a foreign token').to.be.rejectedWith(/common\.SourceCollectionIsNotAllowedToNest/);
+ expect(await getTokenOwner(api, collectionB, newToken)).to.be.deep.equal({Substrate: alice.address});
+ });
+ });
+
// ---------- Non-Fungible ----------
it('NFT: disallows to nest token if nesting is disabled', async () => {
@@ -333,7 +518,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collection,
{Ethereum: tokenIdToAddress(collection, targetToken)},
- {nft: {const_data: [], variable_data: []}} as any,
+ {nft: {}} as any,
)), 'while creating nested token').to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
// Create a token to be nested
@@ -361,7 +546,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collection,
{Ethereum: tokenIdToAddress(collection, targetToken)},
- {nft: {const_data: [], variable_data: []}} as any,
+ {nft: {}} as any,
)), 'while creating nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
// Try to create and nest a token in the wrong collection
@@ -387,7 +572,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collection,
{Ethereum: tokenIdToAddress(collection, targetToken)},
- {nft: {const_data: [], variable_data: []}} as any,
+ {nft: {}} as any,
)), 'while creating nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
// Try to create and nest a token in the wrong collection
@@ -409,7 +594,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collection,
{Ethereum: tokenIdToAddress(collection, targetToken)},
- {nft: {const_data: [], variable_data: []}} as any,
+ {nft: {}} as any,
)), 'while creating nested token').to.be.rejectedWith(/common\.SourceCollectionIsNotAllowedToNest/);
// Try to create and nest a token in the wrong collection
@@ -543,7 +728,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collectionRFT,
targetAddress,
- {ReFungible: {const_data: [], pieces: 100}},
+ {ReFungible: {pieces: 100}},
)), 'while creating a nested token').to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
// Create a token to be nested
@@ -579,7 +764,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collectionRFT,
targetAddress,
- {ReFungible: {const_data: [], pieces: 100}},
+ {ReFungible: {pieces: 100}},
)), 'while creating a nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
// Try to create and nest a token in the wrong collection
@@ -606,7 +791,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collectionRFT,
targetAddress,
- {ReFungible: {const_data: [], pieces: 100}},
+ {ReFungible: {pieces: 100}},
)), 'while creating a nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
// Try to create and nest a token in the wrong collection
@@ -630,7 +815,7 @@
await expect(executeTransaction(api, alice, api.tx.unique.createItem(
collectionRFT,
targetAddress,
- {ReFungible: {const_data: [], pieces: 100}},
+ {ReFungible: {pieces: 100}},
)), 'while creating a nested token').to.be.rejectedWith(/common\.SourceCollectionIsNotAllowedToNest/);
// Try to create and nest a token in the wrong collection
tests/src/nesting/properties.test.tsdiffbeforeafterboth--- a/tests/src/nesting/properties.test.ts
+++ b/tests/src/nesting/properties.test.ts
@@ -38,7 +38,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collectionId, propertyPermissions),
+ api.tx.unique.setTokenPropertyPermissions(collectionId, propertyPermissions),
)).to.not.be.rejected;
const collectionProperties = [
@@ -106,6 +106,58 @@
});
});
+ it('Check valid names for collection properties keys', async () => {
+ await usingApi(async api => {
+ const events = await executeTransaction(api, bob, api.tx.unique.createCollectionEx({mode: 'NFT'}));
+ const {collectionId} = getCreateCollectionResult(events);
+
+ // alpha symbols
+ await expect(executeTransaction(
+ api,
+ bob,
+ api.tx.unique.setCollectionProperties(collectionId, [{key: 'alpha'}]),
+ )).to.not.be.rejected;
+
+ // numeric symbols
+ await expect(executeTransaction(
+ api,
+ bob,
+ api.tx.unique.setCollectionProperties(collectionId, [{key: '123'}]),
+ )).to.not.be.rejected;
+
+ // underscore symbol
+ await expect(executeTransaction(
+ api,
+ bob,
+ api.tx.unique.setCollectionProperties(collectionId, [{key: 'black_hole'}]),
+ )).to.not.be.rejected;
+
+ // dash symbol
+ await expect(executeTransaction(
+ api,
+ bob,
+ api.tx.unique.setCollectionProperties(collectionId, [{key: 'semi-automatic'}]),
+ )).to.not.be.rejected;
+
+ // underscore symbol
+ await expect(executeTransaction(
+ api,
+ bob,
+ api.tx.unique.setCollectionProperties(collectionId, [{key: 'build.rs'}]),
+ )).to.not.be.rejected;
+
+ const propertyKeys = ['alpha', '123', 'black_hole', 'semi-automatic', 'build.rs'];
+ const properties = (await api.rpc.unique.collectionProperties(collectionId, propertyKeys)).toHuman();
+ expect(properties).to.be.deep.equal([
+ {key: 'alpha', value: ''},
+ {key: '123', value: ''},
+ {key: 'black_hole', value: ''},
+ {key: 'semi-automatic', value: ''},
+ {key: 'build.rs', value: ''},
+ ]);
+ });
+ });
+
it('Changes properties of a collection', async () => {
await usingApi(async api => {
const collection = await createCollectionExpectSuccess();
@@ -241,7 +293,7 @@
const invalidProperties = [
[{key: 'electron', value: 'negative'}, {key: 'string theory', value: 'understandable'}],
- [{key: 'Mr.Sandman', value: 'Bring me a gene'}],
+ [{key: 'Mr/Sandman', value: 'Bring me a gene'}],
[{key: 'déjà vu', value: 'hmm...'}],
];
@@ -310,7 +362,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true}}]),
)).to.not.be.rejected;
await addCollectionAdminExpectSuccess(alice, collection, bob.address);
@@ -318,7 +370,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: 'mindgame', permission: {collectionAdmin: true, tokenOwner: false}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'mindgame', permission: {collectionAdmin: true, tokenOwner: false}}]),
)).to.not.be.rejected;
const propertyRights = (await api.rpc.unique.propertyPermissions(collection, ['skullduggery', 'mindgame'])).toHuman();
@@ -336,13 +388,13 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true, collectionAdmin: true}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true, collectionAdmin: true}}]),
)).to.not.be.rejected;
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]),
)).to.not.be.rejected;
const propertyRights = (await api.rpc.unique.propertyPermissions(collection, ['skullduggery'])).toHuman();
@@ -368,7 +420,7 @@
await expect(executeTransaction(
api,
bob,
- api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true, tokenOwner: true}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true, tokenOwner: true}}]),
)).to.be.rejectedWith(/common\.NoPermission/);
const propertyRights = (await api.rpc.unique.propertyPermissions(collection, ['skullduggery'])).toJSON();
@@ -391,7 +443,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, constitution),
+ api.tx.unique.setTokenPropertyPermissions(collection, constitution),
)).to.be.rejectedWith(/common\.PropertyLimitReached/);
const propertyRights = (await api.query.common.collectionPropertyPermissions(collection)).toJSON();
@@ -406,13 +458,13 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]),
)).to.not.be.rejected;
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {}}]),
)).to.be.rejectedWith(/common\.NoPermission/);
const propertyRights = (await api.rpc.unique.propertyPermissions(collection, ['skullduggery'])).toHuman();
@@ -436,21 +488,21 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, invalidProperties[i]),
+ api.tx.unique.setTokenPropertyPermissions(collection, invalidProperties[i]),
), `on setting the new badly-named property #${i}`).to.be.rejectedWith(/common\.InvalidCharacterInPropertyKey/);
}
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: '', permission: {}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: '', permission: {}}]),
), 'on rejecting an unnamed property').to.be.rejectedWith(/common\.EmptyPropertyKey/);
const correctKey = '--0x03116e387820CA05'; // PolkadotJS would parse this as an already encoded hex-string
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [
+ api.tx.unique.setTokenPropertyPermissions(collection, [
{key: correctKey, permission: {collectionAdmin: true}},
]),
), 'on setting the correctly-but-still-badly-named property').to.not.be.rejected;
@@ -524,7 +576,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: key, permission: permission.permission}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]),
), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
await expect(executeTransaction(
@@ -560,7 +612,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: key, permission: permission.permission}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]),
), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
await expect(executeTransaction(
@@ -603,7 +655,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: key, permission: permission.permission}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]),
), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
await expect(executeTransaction(
@@ -669,7 +721,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: `${i}`, permission: passage.permission}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: `${i}`, permission: passage.permission}]),
), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
await expect(executeTransaction(
@@ -746,7 +798,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [{key: 'now-existent', permission: {}}]),
+ api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'now-existent', permission: {}}]),
), 'on setting a new non-permitted property').to.not.be.rejected;
await expect(executeTransaction(
@@ -766,7 +818,7 @@
await expect(executeTransaction(
api,
alice,
- api.tx.unique.setPropertyPermissions(collection, [
+ api.tx.unique.setTokenPropertyPermissions(collection, [
{key: 'a_holy_book', permission: {collectionAdmin: true, tokenOwner: true}},
{key: 'young_years', permission: {collectionAdmin: true, tokenOwner: true}},
]),
tests/src/nesting/rules-smoke.test.tsdiffbeforeafterboth--- a/tests/src/nesting/rules-smoke.test.ts
+++ b/tests/src/nesting/rules-smoke.test.ts
@@ -27,11 +27,11 @@
await usingApi(async api => {
const collection = await createCollectionExpectSuccess({mode: {type: 'Fungible',decimalPoints:0}});
await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {Fungible: {Value: 1}})))
- .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+ .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
await createFungibleItemExpectSuccess(alice, collection, {Value:1n}, {Substrate: alice.address});
await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, 0, 1n)))
- .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+ .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
});
});
@@ -39,11 +39,11 @@
await usingApi(async api => {
const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {NFT: {properties: []}})))
- .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+ .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
const token = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, token, 1n)))
- .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+ .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
});
});
@@ -51,11 +51,11 @@
await usingApi(async api => {
const collection = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {ReFungible: {}})))
- .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+ .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
const token = await createItemExpectSuccess(alice, collection, 'ReFungible', {Substrate: alice.address});
await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, token, 1n)))
- .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+ .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
});
});
});
tests/src/pallet-presence.test.tsdiffbeforeafterboth--- a/tests/src/pallet-presence.test.ts
+++ b/tests/src/pallet-presence.test.ts
@@ -50,8 +50,6 @@
'unique',
'nonfungible',
'refungible',
- 'rmrkcore',
- 'rmrkequip',
'scheduler',
'charging',
];
@@ -64,6 +62,16 @@
];
describe('Pallet presence', () => {
+ before(async () => {
+ await usingApi(async api => {
+ const chain = await api.rpc.system.chain();
+
+ if (!chain.eq('UNIQUE')) {
+ requiredPallets.push(...['rmrkcore', 'rmrkequip']);
+ }
+ });
+ });
+
it('Required pallets are present', async () => {
await usingApi(async api => {
for (let i=0; i<requiredPallets.length; i++) {
tests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth--- a/tests/src/removeCollectionAdmin.test.ts
+++ b/tests/src/removeCollectionAdmin.test.ts
@@ -118,11 +118,17 @@
const bob = privateKeyWrapper('//Bob');
const charlie = privateKeyWrapper('//Charlie');
+ const addBobAdminTx = api.tx.unique.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await submitTransactionAsync(alice, addBobAdminTx);
+ const addCharlieAdminTx = api.tx.unique.addCollectionAdmin(collectionId, normalizeAccountId(charlie.address));
+ await submitTransactionAsync(alice, addCharlieAdminTx);
+
const adminListAfterAddAdmin = await getAdminList(api, collectionId);
expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
+ expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(charlie.address));
const removeAdminTx = api.tx.unique.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));
- await expect(submitTransactionAsync(charlie, removeAdminTx)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(charlie, removeAdminTx)).to.be.rejected;
const adminListAfterRemoveAdmin = await getAdminList(api, collectionId);
expect(adminListAfterRemoveAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
tests/src/rmrk/rmrk.test.tsdiffbeforeafterboth--- a/tests/src/rmrk/rmrk.test.ts
+++ b/tests/src/rmrk/rmrk.test.ts
@@ -11,6 +11,7 @@
} from '../util/helpers';
import {IKeyringPair} from '@polkadot/types/types';
import {ApiPromise} from '@polkadot/api';
+import {it} from 'mocha';
let alice: IKeyringPair;
let bob: IKeyringPair;
@@ -38,6 +39,7 @@
null,
'nft-metadata',
true,
+ null,
);
const events = await executeTransaction(api, sender, tx);
const result = getGenericResult(events, 'rmrkCore', 'NftMinted', (data) => {
@@ -47,14 +49,26 @@
return result.data!;
}
-describe('RMRK External Integration Test', () => {
+async function isUnique(): Promise<boolean> {
+ return usingApi(async api => {
+ const chain = await api.rpc.system.chain();
+
+ return chain.eq('UNIQUE');
+ });
+}
+
+describe('RMRK External Integration Test', async () => {
+ const it_rmrk = (await isUnique() ? it : it.skip);
+
before(async () => {
await usingApi(async (api, privateKeyWrapper) => {
alice = privateKeyWrapper('//Alice');
+
+
});
});
- it('Creates a new RMRK collection that is mapped to a different ID and is tagged as external', async () => {
+ it_rmrk('Creates a new RMRK collection that is mapped to a different ID and is tagged as external', async () => {
await usingApi(async api => {
// throwaway collection to bump last Unique collection ID to test ID mapping
await createCollectionExpectSuccess();
@@ -69,11 +83,13 @@
});
});
-describe('Negative Integration Test: External Collections, Internal Ops', () => {
+describe('Negative Integration Test: External Collections, Internal Ops', async () => {
let uniqueCollectionId: number;
let rmrkCollectionId: number;
let rmrkNftId: number;
+ const it_rmrk = (await isUnique() ? it : it.skip);
+
before(async () => {
await usingApi(async (api, privateKeyWrapper) => {
alice = privateKeyWrapper('//Alice');
@@ -87,7 +103,7 @@
});
});
- it('[Negative] Forbids Unique operations with an external collection, handled by dispatch_call', async () => {
+ it_rmrk('[Negative] Forbids Unique operations with an external collection, handled by dispatch_call', async () => {
await usingApi(async api => {
// Collection item creation
@@ -113,8 +129,8 @@
await expect(executeTransaction(api, alice, txDeleteCollectionProperties), 'deleting collection properties')
.to.be.rejectedWith(/common\.CollectionIsExternal/);
- const txSetPropertyPermissions = api.tx.unique.setPropertyPermissions(uniqueCollectionId, [{key: 'a', permission: {mutable: true}}]);
- await expect(executeTransaction(api, alice, txSetPropertyPermissions), 'setting property permissions')
+ const txsetTokenPropertyPermissions = api.tx.unique.setTokenPropertyPermissions(uniqueCollectionId, [{key: 'a', permission: {mutable: true}}]);
+ await expect(executeTransaction(api, alice, txsetTokenPropertyPermissions), 'setting property permissions')
.to.be.rejectedWith(/common\.CollectionIsExternal/);
// NFT
@@ -146,7 +162,7 @@
});
});
- it('[Negative] Forbids Unique collection operations with an external collection', async () => {
+ it_rmrk('[Negative] Forbids Unique collection operations with an external collection', async () => {
await usingApi(async api => {
const txDestroyCollection = api.tx.unique.destroyCollection(uniqueCollectionId);
await expect(executeTransaction(api, alice, txDestroyCollection), 'destroying collection')
@@ -205,10 +221,12 @@
});
});
-describe('Negative Integration Test: Internal Collections, External Ops', () => {
+describe('Negative Integration Test: Internal Collections, External Ops', async () => {
let collectionId: number;
let nftId: number;
+ const it_rmrk = (await isUnique() ? it : it.skip);
+
before(async () => {
await usingApi(async (api, privateKeyWrapper) => {
alice = privateKeyWrapper('//Alice');
@@ -219,14 +237,15 @@
});
});
- it('[Negative] Forbids RMRK operations with the internal collection and NFT (due to the lack of mapping)', async () => {
+ it_rmrk('[Negative] Forbids RMRK operations with the internal collection and NFT (due to the lack of mapping)', async () => {
await usingApi(async api => {
const txChangeOwner = api.tx.rmrkCore.changeCollectionIssuer(collectionId, bob.address);
await expect(executeTransaction(api, alice, txChangeOwner), 'changing collection issuer')
.to.be.rejectedWith(/rmrkCore\.CollectionUnknown/);
- const txBurnItem = api.tx.rmrkCore.burnNft(collectionId, nftId);
+ const maxBurns = 10;
+ const txBurnItem = api.tx.rmrkCore.burnNft(collectionId, nftId, maxBurns);
await expect(executeTransaction(api, alice, txBurnItem), 'burning NFT').to.be.rejectedWith(/rmrkCore\.CollectionUnknown/);
});
});
-});
\ No newline at end of file
+});
tests/src/setCollectionLimits.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionLimits.test.ts
+++ b/tests/src/setCollectionLimits.test.ts
@@ -46,6 +46,7 @@
before(async () => {
await usingApi(async (api, privateKeyWrapper) => {
alice = privateKeyWrapper('//Alice');
+ bob = privateKeyWrapper('//Bob');
collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});
});
});
@@ -115,6 +116,21 @@
});
});
+ it('execute setCollectionLimits from admin collection', async () => {
+ await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob.address);
+ await usingApi(async (api: ApiPromise) => {
+ tx = api.tx.unique.setCollectionLimits(
+ collectionIdForTesting,
+ {
+ accountTokenOwnershipLimit,
+ sponsoredDataSize,
+ // sponsoredMintSize,
+ tokenLimit,
+ },
+ );
+ await expect(submitTransactionAsync(bob, tx)).to.be.not.rejected;
+ });
+ });
});
describe('setCollectionLimits negative', () => {
@@ -143,21 +159,6 @@
});
});
it('execute setCollectionLimits from user who is not owner of this collection', async () => {
- await usingApi(async (api: ApiPromise) => {
- tx = api.tx.unique.setCollectionLimits(
- collectionIdForTesting,
- {
- accountTokenOwnershipLimit,
- sponsoredDataSize,
- // sponsoredMintSize,
- tokenLimit,
- },
- );
- await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
- });
- });
- it('execute setCollectionLimits from admin collection', async () => {
- await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob.address);
await usingApi(async (api: ApiPromise) => {
tx = api.tx.unique.setCollectionLimits(
collectionIdForTesting,
tests/src/setCollectionSponsor.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionSponsor.test.ts
+++ b/tests/src/setCollectionSponsor.test.ts
@@ -65,6 +65,11 @@
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
await setCollectionSponsorExpectSuccess(collectionId, charlie.address);
});
+ it('Collection admin add sponsor', async () => {
+ const collectionId = await createCollectionExpectSuccess();
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await setCollectionSponsorExpectSuccess(collectionId, charlie.address, '//Bob');
+ });
});
describe('(!negative test!) integration test: ext. setCollectionSponsor():', () => {
@@ -93,10 +98,5 @@
const collectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(collectionId);
await setCollectionSponsorExpectFailure(collectionId, bob.address);
- });
- it('(!negative test!) Collection admin add sponsor', async () => {
- const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
- await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Bob');
});
});
tests/src/setMintPermission.test.tsdiffbeforeafterboth--- a/tests/src/setMintPermission.test.ts
+++ b/tests/src/setMintPermission.test.ts
@@ -67,6 +67,14 @@
await setMintPermissionExpectSuccess(alice, collectionId, false);
});
});
+
+ it('Collection admin success on set', async () => {
+ await usingApi(async () => {
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await setMintPermissionExpectSuccess(bob, collectionId, true);
+ });
+ });
});
describe('Negative Integration Test setMintPermission', () => {
@@ -100,14 +108,6 @@
const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableAllowListExpectSuccess(alice, collectionId);
await setMintPermissionExpectFailure(bob, collectionId, true);
- });
-
- it('Collection admin fails on set', async () => {
- await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
- await setMintPermissionExpectFailure(bob, collectionId, true);
- });
});
it('ensure non-allow-listed non-privileged address can\'t mint tokens', async () => {
tests/src/setPublicAccessMode.test.tsdiffbeforeafterboth--- a/tests/src/setPublicAccessMode.test.ts
+++ b/tests/src/setPublicAccessMode.test.ts
@@ -103,22 +103,23 @@
await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
});
});
-});
-describe('Negative Integration Test ext. collection admin setPublicAccessMode(): ', () => {
- before(async () => {
- await usingApi(async (api, privateKeyWrapper) => {
- alice = privateKeyWrapper('//Alice');
- bob = privateKeyWrapper('//Bob');
- });
- });
it('setPublicAccessMode by collection admin', async () => {
await usingApi(async (api: ApiPromise) => {
// tslint:disable-next-line: no-bitwise
const collectionId = await createCollectionExpectSuccess();
await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
const tx = api.tx.unique.setCollectionPermissions(collectionId, {access: 'AllowList'});
- await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.not.rejected;
+ });
+ });
+});
+
+describe('Negative Integration Test ext. collection admin setPublicAccessMode(): ', () => {
+ before(async () => {
+ await usingApi(async (api, privateKeyWrapper) => {
+ alice = privateKeyWrapper('//Alice');
+ bob = privateKeyWrapper('//Bob');
});
});
});
tests/src/transferFrom.test.tsdiffbeforeafterboth--- a/tests/src/transferFrom.test.ts
+++ b/tests/src/transferFrom.test.ts
@@ -99,6 +99,7 @@
it('can be called by collection owner on non-owned item when OwnerCanTransfer == true', async () => {
const collectionId = await createCollectionExpectSuccess();
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);
await transferFromExpectSuccess(collectionId, itemId, alice, bob, charlie);
@@ -257,6 +258,7 @@
await usingApi(async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
+ await setCollectionLimitsExpectSuccess(alice, nftCollectionId, {ownerCanTransfer: true});
const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
await burnItemExpectSuccess(alice, nftCollectionId, newNftTokenId, 1);
await approveExpectFail(nftCollectionId, newNftTokenId, alice, bob);
@@ -266,6 +268,7 @@
it('transferFrom burnt token before approve Fungible', async () => {
await usingApi(async () => {
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+ await setCollectionLimitsExpectSuccess(alice, fungibleCollectionId, {ownerCanTransfer: true});
const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
await burnItemExpectSuccess(alice, fungibleCollectionId, newFungibleTokenId, 10);
await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address);
@@ -276,6 +279,7 @@
it('transferFrom burnt token before approve ReFungible', async () => {
await usingApi(async () => {
const reFungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+ await setCollectionLimitsExpectSuccess(alice, reFungibleCollectionId, {ownerCanTransfer: true});
const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
await burnItemExpectSuccess(alice, reFungibleCollectionId, newReFungibleTokenId, 100);
await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, alice, bob);
tests/src/util/helpers.tsdiffbeforeafterboth--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -921,6 +921,18 @@
});
}
+export async function adminApproveFromExpectFail(
+ collectionId: number,
+ tokenId: number, admin: IKeyringPair, owner: CrossAccountId | string, approved: CrossAccountId | string, amount: number | bigint = 1,
+) {
+ await usingApi(async (api: ApiPromise) => {
+ const approveUniqueTx = api.tx.unique.approve(normalizeAccountId(approved), collectionId, tokenId, amount);
+ const events = await expect(submitTransactionAsync(admin, approveUniqueTx)).to.be.rejected;
+ const result = getGenericResult(events);
+ expect(result.success).to.be.false;
+ });
+}
+
export async function
getFreeBalance(account: IKeyringPair): Promise<bigint> {
let balance = 0n;
tests/update_types.shdiffbeforeafterboth--- a/tests/update_types.sh
+++ b/tests/update_types.sh
@@ -7,7 +7,7 @@
fi
rsync -ar --exclude .gitignore src/interfaces/ unique-types-js
-for file in unique-types-js/augment-* unique-types-js/**/types.ts unique-types-js/**/registry.ts; do
+for file in unique-types-js/augment-* unique-types-js/**/types.ts unique-types-js/registry.ts; do
sed -i '1s;^;//@ts-nocheck\n;' $file
done