difftreelog
createItem* fixes
in: master
43 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -396,7 +396,7 @@
"instant",
"pin-project-lite 0.2.9",
"rand 0.8.5",
- "tokio 1.18.1",
+ "tokio 1.18.2",
]
[[package]]
@@ -410,7 +410,7 @@
"cfg-if 1.0.0",
"libc",
"miniz_oxide",
- "object 0.28.3",
+ "object 0.28.4",
"rustc-demangle",
]
@@ -464,7 +464,7 @@
"futures-timer",
"hex",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sc-chain-spec",
"sc-client-api",
@@ -500,7 +500,7 @@
"jsonrpc-derive",
"jsonrpc-pubsub",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sc-rpc",
"sc-utils",
@@ -520,7 +520,7 @@
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-api",
"sp-application-crypto",
@@ -571,14 +571,26 @@
[[package]]
name = "bitvec"
+version = "0.20.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848"
+dependencies = [
+ "funty 1.1.0",
+ "radium 0.6.2",
+ "tap",
+ "wyz 0.2.0",
+]
+
+[[package]]
+name = "bitvec"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1489fcb93a5bb47da0462ca93ad252ad6af2145cce58d10d46a83931ba9f016b"
dependencies = [
- "funty",
- "radium",
+ "funty 2.0.0",
+ "radium 0.7.0",
"tap",
- "wyz",
+ "wyz 0.5.0",
]
[[package]]
@@ -739,7 +751,7 @@
"bp-runtime",
"finality-grandpa",
"frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -755,7 +767,7 @@
dependencies = [
"bp-runtime",
"frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-std",
]
@@ -765,12 +777,12 @@
version = "0.1.0"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "bitvec",
+ "bitvec 1.0.0",
"bp-runtime",
"frame-support",
"frame-system",
"impl-trait-for-tuples",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -786,7 +798,7 @@
"bp-runtime",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-api",
"sp-core",
@@ -804,7 +816,7 @@
"bp-polkadot-core",
"bp-runtime",
"frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"smallvec",
"sp-api",
"sp-runtime",
@@ -820,7 +832,7 @@
"frame-support",
"hash-db",
"num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -838,7 +850,7 @@
"bp-header-chain",
"ed25519-dalek",
"finality-grandpa",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-application-crypto",
"sp-finality-grandpa",
"sp-runtime",
@@ -854,7 +866,7 @@
"bp-polkadot-core",
"bp-rococo",
"bp-runtime",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-api",
"sp-runtime",
"sp-std",
@@ -875,7 +887,7 @@
"pallet-bridge-grandpa",
"pallet-bridge-messages",
"pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-api",
"sp-core",
@@ -977,9 +989,9 @@
[[package]]
name = "camino"
-version = "1.0.7"
+version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23"
+checksum = "07fd178c5af4d59e83498ef15cf3f154e1a6f9d091270cb86283c65ef44e9ef0"
dependencies = [
"serde",
]
@@ -1111,9 +1123,9 @@
[[package]]
name = "clang-sys"
-version = "1.3.1"
+version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cc00842eed744b858222c4c9faf7243aafc6d33f92f96935263ef4d8a41ce21"
+checksum = "bf6b561dcf059c85bbe388e0a7b0a1469acb3934cc0cfa148613a830629e3049"
dependencies = [
"glob",
"libc",
@@ -1122,9 +1134,9 @@
[[package]]
name = "clap"
-version = "3.1.16"
+version = "3.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f52d4f8e4a1419219935762e32913b4430f37cb0c0200ad17a89ee18c0188a9f"
+checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
dependencies = [
"atty",
"bitflags",
@@ -1139,9 +1151,9 @@
[[package]]
name = "clap_derive"
-version = "3.1.7"
+version = "3.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1"
+checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"
dependencies = [
"heck 0.4.0",
"proc-macro-error",
@@ -1524,7 +1536,7 @@
"cumulus-primitives-core",
"cumulus-relay-chain-interface",
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -1547,7 +1559,7 @@
"cumulus-client-consensus-common",
"cumulus-primitives-core",
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sc-consensus",
"sc-consensus-aura",
@@ -1576,7 +1588,7 @@
"cumulus-relay-chain-interface",
"dyn-clone",
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"sc-client-api",
"sc-consensus",
@@ -1598,7 +1610,7 @@
"derive_more",
"futures 0.3.21",
"futures-timer",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"polkadot-node-primitives",
"polkadot-parachain",
@@ -1622,7 +1634,7 @@
"cumulus-relay-chain-interface",
"futures 0.3.21",
"futures-timer",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-node-primitives",
"polkadot-node-subsystem",
"polkadot-overseer",
@@ -1648,7 +1660,7 @@
"cumulus-client-pov-recovery",
"cumulus-primitives-core",
"cumulus-relay-chain-interface",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"polkadot-overseer",
"polkadot-primitives",
@@ -1676,7 +1688,7 @@
"frame-support",
"frame-system",
"pallet-aura",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-application-crypto",
@@ -1694,7 +1706,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-io",
"sp-runtime",
@@ -1717,7 +1729,7 @@
"impl-trait-for-tuples",
"log",
"pallet-balances",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
"scale-info",
"serde",
@@ -1752,7 +1764,7 @@
"cumulus-primitives-core",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-io",
@@ -1770,7 +1782,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"rand_chacha 0.3.1",
"scale-info",
"sp-runtime",
@@ -1785,7 +1797,7 @@
source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.21#4ce5950ac3efbdbbf6c88c90e2a9ad4c7cb8d334"
dependencies = [
"frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-core-primitives",
"polkadot-parachain",
"polkadot-primitives",
@@ -1804,7 +1816,7 @@
"cumulus-primitives-core",
"cumulus-relay-chain-interface",
"cumulus-test-relay-sproof-builder",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"scale-info",
"sp-api",
@@ -1825,7 +1837,7 @@
dependencies = [
"cumulus-primitives-core",
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-inherents",
"sp-std",
"sp-timestamp",
@@ -1838,7 +1850,7 @@
dependencies = [
"cumulus-primitives-core",
"frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-core-primitives",
"polkadot-parachain",
"polkadot-primitives",
@@ -1886,7 +1898,7 @@
"derive_more",
"futures 0.3.21",
"jsonrpsee-core",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"polkadot-overseer",
"polkadot-service",
@@ -1912,7 +1924,7 @@
"futures 0.3.21",
"futures-timer",
"jsonrpsee",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"polkadot-service",
"sc-client-api",
@@ -1932,7 +1944,7 @@
source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.21#4ce5950ac3efbdbbf6c88c90e2a9ad4c7cb8d334"
dependencies = [
"cumulus-primitives-core",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"sp-runtime",
"sp-state-machine",
@@ -2147,7 +2159,7 @@
checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea"
dependencies = [
"byteorder",
- "quick-error 1.2.3",
+ "quick-error",
]
[[package]]
@@ -2202,9 +2214,9 @@
[[package]]
name = "ed25519"
-version = "1.4.1"
+version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d5c4b5e5959dc2c2b89918d8e2cc40fcdd623cef026ed09d2f0ee05199dc8e4"
+checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369"
dependencies = [
"signature",
]
@@ -2361,7 +2373,7 @@
"ethereum-types",
"hash-db",
"hash256-std-hasher",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"rlp",
"rlp-derive",
"scale-info",
@@ -2404,7 +2416,7 @@
"evm-gasometer",
"evm-runtime",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"primitive-types",
"rlp",
"scale-info",
@@ -2443,7 +2455,7 @@
version = "0.35.0"
source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.19#1b170dc649f5e16a33134710a9fe2610e580661e"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"primitive-types",
"scale-info",
"serde",
@@ -2578,7 +2590,7 @@
dependencies = [
"fp-storage",
"kvdb-rocksdb",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sp-core",
"sp-database",
@@ -2622,7 +2634,7 @@
"libsecp256k1",
"log",
"lru 0.6.6",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"rand 0.8.5",
"rlp",
"sc-client-api",
@@ -2638,7 +2650,7 @@
"sp-io",
"sp-runtime",
"sp-storage",
- "tokio 1.18.1",
+ "tokio 1.18.2",
]
[[package]]
@@ -2698,7 +2710,7 @@
"futures-timer",
"log",
"num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.11.2",
"scale-info",
]
@@ -2761,7 +2773,7 @@
version = "3.0.0"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
]
[[package]]
@@ -2780,7 +2792,7 @@
source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"ethereum",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-core",
"sp-runtime",
"sp-std",
@@ -2793,7 +2805,7 @@
dependencies = [
"evm",
"impl-trait-for-tuples",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"serde",
"sp-core",
"sp-std",
@@ -2816,7 +2828,7 @@
"ethereum",
"ethereum-types",
"fp-evm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-api",
"sp-core",
@@ -2832,7 +2844,7 @@
dependencies = [
"ethereum",
"frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"scale-info",
"serde",
@@ -2846,7 +2858,7 @@
version = "2.0.0"
source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
]
[[package]]
@@ -2858,7 +2870,7 @@
"frame-system",
"linregress",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"paste",
"scale-info",
"serde",
@@ -2890,7 +2902,7 @@
"linked-hash-map",
"log",
"memory-db",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"prettytable-rs",
"rand 0.8.5",
"rand_pcg 0.3.1",
@@ -2938,7 +2950,7 @@
"frame-election-provider-solution-type",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-arithmetic",
"sp-npos-elections",
@@ -2953,7 +2965,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -2969,7 +2981,7 @@
checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d"
dependencies = [
"cfg-if 1.0.0",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
]
@@ -2985,7 +2997,7 @@
"impl-trait-for-tuples",
"log",
"once_cell",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"paste",
"scale-info",
"serde",
@@ -3044,7 +3056,7 @@
dependencies = [
"frame-support",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -3062,7 +3074,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-runtime",
@@ -3074,7 +3086,7 @@
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-api",
]
@@ -3141,6 +3153,12 @@
[[package]]
name = "funty"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"
+
+[[package]]
+name = "funty"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
@@ -3394,23 +3412,23 @@
"http",
"indexmap",
"slab",
- "tokio 1.18.1",
- "tokio-util 0.7.1",
+ "tokio 1.18.2",
+ "tokio-util 0.7.2",
"tracing",
]
[[package]]
name = "handlebars"
-version = "4.2.2"
+version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99d6a30320f094710245150395bc763ad23128d6a1ebbad7594dc4164b62c56b"
+checksum = "d113a9853e5accd30f43003560b5563ffbb007e3f325e8b103fa0d0029c6e6df"
dependencies = [
"log",
"pest",
"pest_derive",
- "quick-error 2.0.1",
"serde",
"serde_json",
+ "thiserror",
]
[[package]]
@@ -3538,7 +3556,7 @@
dependencies = [
"bytes 1.1.0",
"fnv",
- "itoa 1.0.1",
+ "itoa 1.0.2",
]
[[package]]
@@ -3585,10 +3603,10 @@
"http-body",
"httparse",
"httpdate",
- "itoa 1.0.1",
+ "itoa 1.0.2",
"pin-project-lite 0.2.9",
"socket2 0.4.4",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tower-service",
"tracing",
"want",
@@ -3606,7 +3624,7 @@
"log",
"rustls 0.19.1",
"rustls-native-certs 0.5.0",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tokio-rustls 0.22.0",
"webpki 0.21.4",
]
@@ -3620,9 +3638,9 @@
"http",
"hyper",
"log",
- "rustls 0.20.4",
+ "rustls 0.20.6",
"rustls-native-certs 0.6.2",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tokio-rustls 0.23.4",
"webpki-roots 0.22.3",
]
@@ -3698,7 +3716,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
]
[[package]]
@@ -3821,9 +3839,9 @@
[[package]]
name = "itoa"
-version = "1.0.1"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
[[package]]
name = "jobserver"
@@ -3954,9 +3972,9 @@
"jsonrpc-core",
"lazy_static",
"log",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tokio-stream",
- "tokio-util 0.6.9",
+ "tokio-util 0.6.10",
"unicase",
]
@@ -4002,9 +4020,9 @@
"rustls-native-certs 0.6.2",
"soketto",
"thiserror",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tokio-rustls 0.23.4",
- "tokio-util 0.7.1",
+ "tokio-util 0.7.2",
"tracing",
"webpki-roots 0.22.3",
]
@@ -4028,7 +4046,7 @@
"serde_json",
"soketto",
"thiserror",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tracing",
]
@@ -4047,7 +4065,7 @@
"serde",
"serde_json",
"thiserror",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tracing",
]
@@ -4122,7 +4140,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"beefy-primitives",
- "bitvec",
+ "bitvec 1.0.0",
"frame-benchmarking",
"frame-election-provider-support",
"frame-executive",
@@ -4174,7 +4192,7 @@
"pallet-vesting",
"pallet-xcm",
"pallet-xcm-benchmarks",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"polkadot-runtime-common",
"polkadot-runtime-parachains",
@@ -4281,9 +4299,9 @@
[[package]]
name = "libc"
-version = "0.2.125"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
[[package]]
name = "libloading"
@@ -5126,7 +5144,7 @@
"kernel32-sys",
"libc",
"log",
- "miow 0.2.2",
+ "miow",
"net2",
"slab",
"winapi 0.2.8",
@@ -5134,16 +5152,14 @@
[[package]]
name = "mio"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9"
+checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
dependencies = [
"libc",
"log",
- "miow 0.3.7",
- "ntapi",
"wasi 0.11.0+wasi-snapshot-preview1",
- "winapi 0.3.9",
+ "windows-sys",
]
[[package]]
@@ -5168,15 +5184,6 @@
"net2",
"winapi 0.2.8",
"ws2_32-sys",
-]
-
-[[package]]
-name = "miow"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
-dependencies = [
- "winapi 0.3.9",
]
[[package]]
@@ -5353,15 +5360,6 @@
dependencies = [
"memchr",
"minimal-lexical",
-]
-
-[[package]]
-name = "ntapi"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
-dependencies = [
- "winapi 0.3.9",
]
[[package]]
@@ -5460,9 +5458,9 @@
[[package]]
name = "object"
-version = "0.28.3"
+version = "0.28.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40bec70ba014595f99f7aa110b84331ffe1ee9aece7fe6f387cc7e3ecda4d456"
+checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424"
dependencies = [
"memchr",
]
@@ -5525,8 +5523,9 @@
"pallet-unq-scheduler",
"pallet-xcm",
"parachain-info",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
+ "rmrk-rpc",
"scale-info",
"serde",
"smallvec",
@@ -5609,7 +5608,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-io",
@@ -5619,9 +5618,9 @@
[[package]]
name = "os_str_bytes"
-version = "6.0.0"
+version = "6.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
+checksum = "029d8d0b2f198229de29dca79676f2738ff952edf3fde542eb8bf94d8c21b435"
[[package]]
name = "owning_ref"
@@ -5640,7 +5639,7 @@
"frame-support",
"frame-system",
"pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-application-crypto",
"sp-consensus-aura",
@@ -5656,7 +5655,7 @@
"frame-support",
"frame-system",
"pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-application-crypto",
"sp-authority-discovery",
@@ -5672,7 +5671,7 @@
"frame-support",
"frame-system",
"impl-trait-for-tuples",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-authorship",
"sp-runtime",
@@ -5691,7 +5690,7 @@
"pallet-authorship",
"pallet-session",
"pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-application-crypto",
"sp-consensus-babe",
@@ -5714,7 +5713,7 @@
"frame-system",
"log",
"pallet-balances",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -5732,7 +5731,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-runtime",
"sp-std",
@@ -5746,7 +5745,7 @@
"fp-evm",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -5762,7 +5761,7 @@
"frame-support",
"frame-system",
"pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-runtime",
@@ -5784,7 +5783,7 @@
"pallet-beefy",
"pallet-mmr",
"pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -5803,7 +5802,7 @@
"frame-system",
"log",
"pallet-treasury",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -5821,7 +5820,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-runtime",
@@ -5841,7 +5840,7 @@
"frame-system",
"log",
"num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-finality-grandpa",
@@ -5855,7 +5854,7 @@
version = "0.1.0"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "bitvec",
+ "bitvec 1.0.0",
"bp-message-dispatch",
"bp-messages",
"bp-runtime",
@@ -5863,7 +5862,7 @@
"frame-system",
"log",
"num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -5882,7 +5881,7 @@
"log",
"pallet-bounties",
"pallet-treasury",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -5899,7 +5898,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -5917,7 +5916,8 @@
"frame-system",
"pallet-evm",
"pallet-evm-coder-substrate",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
+ "rmrk-types",
"scale-info",
"serde",
"sp-core",
@@ -5934,7 +5934,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-io",
@@ -5952,7 +5952,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"rand 0.7.3",
"scale-info",
"sp-arithmetic",
@@ -5973,7 +5973,7 @@
"frame-benchmarking",
"frame-election-provider-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-npos-elections",
"sp-runtime",
]
@@ -5987,7 +5987,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6016,7 +6016,7 @@
"pallet-balances",
"pallet-evm",
"pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"rlp",
"scale-info",
"serde",
@@ -6042,7 +6042,7 @@
"log",
"pallet-balances",
"pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"primitive-types",
"rlp",
"scale-info",
@@ -6065,7 +6065,7 @@
"frame-system",
"pallet-ethereum",
"pallet-evm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-std",
@@ -6083,7 +6083,7 @@
"log",
"pallet-evm",
"pallet-evm-coder-substrate",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-runtime",
@@ -6100,7 +6100,7 @@
"frame-support",
"frame-system",
"pallet-evm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6118,7 +6118,7 @@
"frame-system",
"pallet-ethereum",
"pallet-evm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6140,7 +6140,7 @@
"pallet-evm",
"pallet-evm-coder-substrate",
"pallet-structure",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-runtime",
@@ -6156,7 +6156,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-arithmetic",
"sp-runtime",
@@ -6174,7 +6174,7 @@
"log",
"pallet-authorship",
"pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-application-crypto",
"sp-core",
@@ -6195,7 +6195,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6212,7 +6212,7 @@
"frame-system",
"log",
"pallet-authorship",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-application-crypto",
"sp-core",
@@ -6230,7 +6230,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6249,7 +6249,7 @@
"pallet-balances",
"pallet-randomness-collective-flip",
"pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -6267,7 +6267,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6284,7 +6284,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6301,7 +6301,7 @@
"jsonrpc-core",
"jsonrpc-core-client",
"jsonrpc-derive",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"serde",
"sp-api",
"sp-blockchain",
@@ -6318,7 +6318,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6332,7 +6332,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6346,7 +6346,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-runtime",
@@ -6366,7 +6366,7 @@
"pallet-bags-list",
"pallet-nomination-pools",
"pallet-staking",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-runtime",
"sp-staking",
@@ -6386,11 +6386,12 @@
"pallet-evm",
"pallet-evm-coder-substrate",
"pallet-structure",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-runtime",
"sp-std",
+ "struct-versioning",
"up-data-structs",
]
@@ -6403,7 +6404,7 @@
"frame-system",
"log",
"pallet-balances",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-runtime",
@@ -6427,7 +6428,7 @@
"pallet-offences",
"pallet-session",
"pallet-staking",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-runtime",
"sp-staking",
@@ -6442,7 +6443,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6458,7 +6459,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6472,7 +6473,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"safe-mix",
"scale-info",
"sp-runtime",
@@ -6486,7 +6487,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6503,11 +6504,12 @@
"pallet-common",
"pallet-evm",
"pallet-structure",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-runtime",
"sp-std",
+ "struct-versioning",
"up-data-structs",
]
@@ -6520,7 +6522,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6537,7 +6539,7 @@
"impl-trait-for-tuples",
"log",
"pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6571,7 +6573,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"rand_chacha 0.2.2",
"scale-info",
"sp-runtime",
@@ -6590,7 +6592,7 @@
"log",
"pallet-authorship",
"pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"rand_chacha 0.2.2",
"scale-info",
"serde",
@@ -6629,7 +6631,7 @@
"frame-support",
"frame-system",
"pallet-common",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-std",
"up-data-structs",
@@ -6642,7 +6644,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-io",
"sp-runtime",
@@ -6659,7 +6661,7 @@
"frame-system",
"pallet-balances",
"pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -6678,7 +6680,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-inherents",
"sp-io",
@@ -6697,7 +6699,7 @@
"frame-system",
"log",
"pallet-treasury",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -6713,7 +6715,7 @@
dependencies = [
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"smallvec",
@@ -6732,7 +6734,7 @@
"jsonrpc-core-client",
"jsonrpc-derive",
"pallet-transaction-payment-rpc-runtime-api",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-api",
"sp-blockchain",
"sp-core",
@@ -6746,7 +6748,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-api",
"sp-runtime",
]
@@ -6761,7 +6763,7 @@
"frame-system",
"impl-trait-for-tuples",
"pallet-balances",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-runtime",
@@ -6777,7 +6779,7 @@
"frame-system",
"pallet-common",
"pallet-evm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6794,7 +6796,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -6813,7 +6815,7 @@
"frame-benchmarking",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -6830,7 +6832,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-runtime",
"sp-std",
@@ -6844,7 +6846,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -6863,7 +6865,7 @@
"frame-support",
"frame-system",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-runtime",
"sp-std",
@@ -6879,16 +6881,16 @@
"cumulus-primitives-core",
"frame-support",
"frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
]
[[package]]
name = "parity-db"
-version = "0.3.12"
+version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e73cd0b0a78045276b19eaae8eaaa20e44a1da9a0217ff934a810d9492ae701"
+checksum = "55a7901b85874402471e131de3332dde0e51f38432c69a3853627c8e25433048"
dependencies = [
"blake2-rfc",
"crc32fast",
@@ -6905,20 +6907,46 @@
[[package]]
name = "parity-scale-codec"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909"
+dependencies = [
+ "arrayvec 0.7.2",
+ "bitvec 0.20.4",
+ "byte-slice-cast",
+ "impl-trait-for-tuples",
+ "parity-scale-codec-derive 2.3.1",
+ "serde",
+]
+
+[[package]]
+name = "parity-scale-codec"
version = "3.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8b44461635bbb1a0300f100a841e571e7d919c81c73075ef5d152ffdb521066"
dependencies = [
"arrayvec 0.7.2",
- "bitvec",
+ "bitvec 1.0.0",
"byte-slice-cast",
"impl-trait-for-tuples",
- "parity-scale-codec-derive",
+ "parity-scale-codec-derive 3.1.2",
"serde",
]
[[package]]
name = "parity-scale-codec-derive"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27"
+dependencies = [
+ "proc-macro-crate 1.1.3",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "parity-scale-codec-derive"
version = "3.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c45ed1f39709f5a89338fab50e59816b2e8815f5bb58276e7ddf9afd495f73f8"
@@ -6945,7 +6973,7 @@
"libc",
"log",
"rand 0.7.3",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"winapi 0.3.9",
]
@@ -7278,7 +7306,7 @@
"fatality",
"futures 0.3.21",
"lru 0.7.5",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-erasure-coding",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
@@ -7300,7 +7328,7 @@
"fatality",
"futures 0.3.21",
"lru 0.7.5",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-erasure-coding",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
@@ -7403,7 +7431,7 @@
version = "0.9.21"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"scale-info",
"sp-core",
@@ -7420,7 +7448,7 @@
"fatality",
"futures 0.3.21",
"lru 0.7.5",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-erasure-coding",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
@@ -7439,7 +7467,7 @@
version = "0.9.21"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-node-primitives",
"polkadot-primitives",
"reed-solomon-novelpoly",
@@ -7475,7 +7503,7 @@
dependencies = [
"async-trait",
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"polkadot-node-network-protocol",
"polkadot-node-subsystem",
@@ -7493,7 +7521,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-erasure-coding",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -7510,14 +7538,14 @@
version = "0.9.21"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "bitvec",
+ "bitvec 1.0.0",
"derive_more",
"futures 0.3.21",
"futures-timer",
"kvdb",
"lru 0.7.5",
"merlin",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-node-jaeger",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -7539,11 +7567,11 @@
version = "0.9.21"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "bitvec",
+ "bitvec 1.0.0",
"futures 0.3.21",
"futures-timer",
"kvdb",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-erasure-coding",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -7559,7 +7587,7 @@
version = "0.9.21"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "bitvec",
+ "bitvec 1.0.0",
"futures 0.3.21",
"polkadot-erasure-coding",
"polkadot-node-primitives",
@@ -7594,7 +7622,7 @@
dependencies = [
"async-trait",
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-node-core-pvf",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -7628,7 +7656,7 @@
"futures 0.3.21",
"futures-timer",
"kvdb",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-node-primitives",
"polkadot-node-subsystem",
"polkadot-node-subsystem-util",
@@ -7646,7 +7674,7 @@
"futures 0.3.21",
"kvdb",
"lru 0.7.5",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-node-primitives",
"polkadot-node-subsystem",
"polkadot-node-subsystem-util",
@@ -7678,7 +7706,7 @@
version = "0.9.21"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "bitvec",
+ "bitvec 1.0.0",
"futures 0.3.21",
"futures-timer",
"polkadot-node-primitives",
@@ -7701,7 +7729,7 @@
"async-std",
"futures 0.3.21",
"futures-timer",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"pin-project 1.0.10",
"polkadot-core-primitives",
"polkadot-node-subsystem-util",
@@ -7763,7 +7791,7 @@
"lazy_static",
"log",
"mick-jaeger",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"polkadot-node-primitives",
"polkadot-primitives",
@@ -7782,7 +7810,7 @@
"futures-timer",
"log",
"metered-channel",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"sc-cli",
"sc-service",
@@ -7799,7 +7827,7 @@
"async-trait",
"fatality",
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-node-jaeger",
"polkadot-node-primitives",
"polkadot-primitives",
@@ -7816,7 +7844,7 @@
dependencies = [
"bounded-vec",
"futures 0.3.21",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
"polkadot-primitives",
"schnorrkel",
@@ -7874,7 +7902,7 @@
"lru 0.7.5",
"metered-channel",
"parity-db",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"parking_lot 0.11.2",
"pin-project 1.0.10",
@@ -7950,7 +7978,7 @@
dependencies = [
"derive_more",
"frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"polkadot-core-primitives",
"scale-info",
@@ -7980,10 +8008,10 @@
version = "0.9.21"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "bitvec",
+ "bitvec 1.0.0",
"frame-system",
"hex-literal",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"polkadot-core-primitives",
"polkadot-parachain",
@@ -8043,7 +8071,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"beefy-primitives",
- "bitvec",
+ "bitvec 1.0.0",
"frame-benchmarking",
"frame-election-provider-support",
"frame-executive",
@@ -8090,7 +8118,7 @@
"pallet-utility",
"pallet-vesting",
"pallet-xcm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"polkadot-runtime-common",
"polkadot-runtime-constants",
@@ -8129,7 +8157,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"beefy-primitives",
- "bitvec",
+ "bitvec 1.0.0",
"frame-benchmarking",
"frame-election-provider-support",
"frame-support",
@@ -8149,7 +8177,7 @@
"pallet-transaction-payment",
"pallet-treasury",
"pallet-vesting",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"polkadot-runtime-parachains",
"rustc-hex",
@@ -8188,7 +8216,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"bs58",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"sp-std",
"sp-tracing",
@@ -8200,7 +8228,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"bitflags",
- "bitvec",
+ "bitvec 1.0.0",
"derive_more",
"frame-benchmarking",
"frame-support",
@@ -8214,7 +8242,7 @@
"pallet-staking",
"pallet-timestamp",
"pallet-vesting",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"polkadot-runtime-metrics",
"rand 0.8.5",
@@ -8346,7 +8374,7 @@
"fatality",
"futures 0.3.21",
"indexmap",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
"polkadot-node-subsystem",
@@ -8363,7 +8391,7 @@
version = "0.9.21"
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-primitives",
"sp-core",
]
@@ -8374,7 +8402,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"beefy-primitives",
- "bitvec",
+ "bitvec 1.0.0",
"frame-election-provider-support",
"frame-executive",
"frame-support",
@@ -8398,7 +8426,7 @@
"pallet-transaction-payment-rpc-runtime-api",
"pallet-vesting",
"pallet-xcm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
"polkadot-primitives",
"polkadot-runtime-common",
@@ -8480,7 +8508,7 @@
"substrate-test-client",
"tempfile",
"test-runtime-constants",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tracing-gum",
]
@@ -8599,24 +8627,24 @@
[[package]]
name = "proc-macro2"
-version = "1.0.38"
+version = "1.0.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa"
+checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
dependencies = [
- "unicode-xid",
+ "unicode-ident",
]
[[package]]
name = "prometheus"
-version = "0.13.0"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7f64969ffd5dd8f39bd57a68ac53c163a095ed9d0fb707146da1b27025a3504"
+checksum = "cface98dfa6d645ea4c789839f176e4b072265d085bfcc48eaa8d137f58d3c39"
dependencies = [
"cfg-if 1.0.0",
"fnv",
"lazy_static",
"memchr",
- "parking_lot 0.11.2",
+ "parking_lot 0.12.0",
"thiserror",
]
@@ -8731,8 +8759,9 @@
"pallet-unq-scheduler",
"pallet-xcm",
"parachain-info",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
+ "rmrk-rpc",
"scale-info",
"serde",
"smallvec",
@@ -8763,12 +8792,6 @@
version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
-[[package]]
-name = "quick-error"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
[[package]]
name = "quicksink"
@@ -8792,6 +8815,12 @@
[[package]]
name = "radium"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb"
+
+[[package]]
+name = "radium"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
@@ -8904,9 +8933,9 @@
[[package]]
name = "rayon"
-version = "1.5.2"
+version = "1.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221"
+checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
dependencies = [
"autocfg",
"crossbeam-deque",
@@ -8916,9 +8945,9 @@
[[package]]
name = "rayon-core"
-version = "1.9.2"
+version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4"
+checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
dependencies = [
"crossbeam-channel",
"crossbeam-deque",
@@ -9053,7 +9082,7 @@
"env_logger",
"jsonrpsee",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"serde",
"serde_json",
"sp-core",
@@ -9078,7 +9107,7 @@
checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
dependencies = [
"hostname",
- "quick-error 1.2.3",
+ "quick-error",
]
[[package]]
@@ -9124,6 +9153,30 @@
]
[[package]]
+name = "rmrk-rpc"
+version = "0.0.1"
+source = "git+https://github.com/UniqueNetwork/rmrk-substrate.git?branch=feature/separate-types-and-traits#01c2995b64c34063a1c9fc4d856635022cea4f78"
+dependencies = [
+ "parity-scale-codec 2.3.1",
+ "rmrk-types",
+ "serde",
+ "sp-api",
+ "sp-core",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
+name = "rmrk-types"
+version = "0.0.1"
+source = "git+https://github.com/UniqueNetwork/rmrk-substrate.git?branch=feature/separate-types-and-traits#01c2995b64c34063a1c9fc4d856635022cea4f78"
+dependencies = [
+ "parity-scale-codec 3.1.2",
+ "scale-info",
+ "serde",
+]
+
+[[package]]
name = "rocksdb"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -9179,7 +9232,7 @@
"pallet-transaction-payment-rpc-runtime-api",
"pallet-utility",
"pallet-xcm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
"polkadot-primitives",
"polkadot-runtime-common",
@@ -9318,9 +9371,9 @@
[[package]]
name = "rustls"
-version = "0.20.4"
+version = "0.20.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921"
+checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
dependencies = [
"log",
"ring",
@@ -9380,9 +9433,9 @@
[[package]]
name = "ryu"
-version = "1.0.9"
+version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
[[package]]
name = "safe-mix"
@@ -9433,7 +9486,7 @@
"ip_network",
"libp2p",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"prost",
"prost-build",
"rand 0.7.3",
@@ -9457,7 +9510,7 @@
"futures 0.3.21",
"futures-timer",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-block-builder",
"sc-client-api",
"sc-proposer-metrics",
@@ -9477,7 +9530,7 @@
version = "0.10.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sp-api",
"sp-block-builder",
@@ -9495,7 +9548,7 @@
dependencies = [
"impl-trait-for-tuples",
"memmap2 0.5.3",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-chain-spec-derive",
"sc-network",
"sc-telemetry",
@@ -9529,7 +9582,7 @@
"libp2p",
"log",
"names",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"rand 0.7.3",
"regex",
"rpassword",
@@ -9551,7 +9604,7 @@
"sp-version",
"thiserror",
"tiny-bip39",
- "tokio 1.18.1",
+ "tokio 1.18.2",
]
[[package]]
@@ -9563,7 +9616,7 @@
"futures 0.3.21",
"hash-db",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sc-executor",
"sc-transaction-pool-api",
@@ -9594,7 +9647,7 @@
"linked-hash-map",
"log",
"parity-db",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sc-client-api",
"sc-state-db",
@@ -9639,7 +9692,7 @@
"async-trait",
"futures 0.3.21",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-block-builder",
"sc-client-api",
"sc-consensus",
@@ -9673,7 +9726,7 @@
"num-bigint",
"num-rational 0.2.4",
"num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"rand 0.7.3",
"retain_mut",
@@ -9733,7 +9786,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"fork-tree",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sc-consensus",
"sp-blockchain",
@@ -9752,7 +9805,7 @@
"jsonrpc-core-client",
"jsonrpc-derive",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sc-consensus",
"sc-consensus-aura",
@@ -9785,7 +9838,7 @@
"futures 0.3.21",
"futures-timer",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sc-consensus",
"sc-telemetry",
@@ -9819,7 +9872,7 @@
dependencies = [
"lazy_static",
"lru 0.7.5",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sc-executor-common",
"sc-executor-wasmi",
@@ -9845,7 +9898,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"environmental",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-allocator",
"sp-core",
"sp-maybe-compressed-blob",
@@ -9862,7 +9915,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-allocator",
"sc-executor-common",
"scoped-tls",
@@ -9880,7 +9933,7 @@
"cfg-if 1.0.0",
"libc",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-wasm 0.42.2",
"sc-allocator",
"sc-executor-common",
@@ -9904,7 +9957,7 @@
"futures-timer",
"hex",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"rand 0.8.5",
"sc-block-builder",
@@ -9942,7 +9995,7 @@
"jsonrpc-derive",
"jsonrpc-pubsub",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sc-finality-grandpa",
"sc-rpc",
@@ -10008,7 +10061,7 @@
"linked_hash_set",
"log",
"lru 0.7.5",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"pin-project 1.0.10",
"prost",
@@ -10066,7 +10119,7 @@
"hyper-rustls 0.22.1",
"num_cpus",
"once_cell",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"rand 0.7.3",
"sc-client-api",
@@ -10112,7 +10165,7 @@
"jsonrpc-core",
"jsonrpc-pubsub",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sc-block-builder",
"sc-chain-spec",
@@ -10144,7 +10197,7 @@
"jsonrpc-derive",
"jsonrpc-pubsub",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sc-chain-spec",
"sc-transaction-pool-api",
@@ -10173,7 +10226,7 @@
"log",
"serde_json",
"substrate-prometheus-endpoint",
- "tokio 1.18.1",
+ "tokio 1.18.2",
]
[[package]]
@@ -10190,7 +10243,7 @@
"jsonrpc-core",
"jsonrpc-pubsub",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"parking_lot 0.12.0",
"pin-project 1.0.10",
@@ -10236,7 +10289,7 @@
"substrate-prometheus-endpoint",
"tempfile",
"thiserror",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tracing",
"tracing-futures",
]
@@ -10247,7 +10300,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"parity-util-mem-derive",
"parking_lot 0.12.0",
@@ -10263,7 +10316,7 @@
"jsonrpc-core",
"jsonrpc-core-client",
"jsonrpc-derive",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-chain-spec",
"sc-client-api",
"sc-consensus-babe",
@@ -10364,7 +10417,7 @@
"futures-timer",
"linked-hash-map",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"parking_lot 0.12.0",
"retain_mut",
@@ -10410,23 +10463,23 @@
[[package]]
name = "scale-info"
-version = "2.1.1"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8980cafbe98a7ee7a9cc16b32ebce542c77883f512d83fbf2ddc8f6a85ea74c9"
+checksum = "c46be926081c9f4dd5dd9b6f1d3e3229f2360bc6502dd8836f84a93b7c75e99a"
dependencies = [
- "bitvec",
+ "bitvec 1.0.0",
"cfg-if 1.0.0",
"derive_more",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info-derive",
"serde",
]
[[package]]
name = "scale-info-derive"
-version = "2.1.1"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4260c630e8a8a33429d1688eff2f163f24c65a4e1b1578ef6b565061336e4b6f"
+checksum = "50e334bb10a245e28e5fd755cabcafd96cfcd167c99ae63a46924ca8d8703a3c"
dependencies = [
"proc-macro-crate 1.1.3",
"proc-macro2",
@@ -10436,12 +10489,12 @@
[[package]]
name = "schannel"
-version = "0.1.19"
+version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
dependencies = [
"lazy_static",
- "winapi 0.3.9",
+ "windows-sys",
]
[[package]]
@@ -10634,7 +10687,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
dependencies = [
- "itoa 1.0.1",
+ "itoa 1.0.2",
"ryu",
"serde",
]
@@ -10748,9 +10801,9 @@
[[package]]
name = "signal-hook"
-version = "0.3.13"
+version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d"
+checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
dependencies = [
"libc",
"signal-hook-registry",
@@ -10798,7 +10851,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"enumn",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"paste",
"sp-runtime",
"sp-std",
@@ -10887,7 +10940,7 @@
dependencies = [
"hash-db",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-api-proc-macro",
"sp-core",
"sp-runtime",
@@ -10914,7 +10967,7 @@
version = "6.0.0"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-core",
@@ -10929,7 +10982,7 @@
dependencies = [
"integer-sqrt",
"num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-debug-derive",
@@ -10942,7 +10995,7 @@
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-api",
"sp-application-crypto",
@@ -10956,7 +11009,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"async-trait",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-inherents",
"sp-runtime",
"sp-std",
@@ -10967,7 +11020,7 @@
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-api",
"sp-inherents",
"sp-runtime",
@@ -10982,7 +11035,7 @@
"futures 0.3.21",
"log",
"lru 0.7.5",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"sp-api",
"sp-consensus",
@@ -11001,7 +11054,7 @@
"futures 0.3.21",
"futures-timer",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-core",
"sp-inherents",
"sp-runtime",
@@ -11017,7 +11070,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"async-trait",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-api",
"sp-application-crypto",
@@ -11036,7 +11089,7 @@
dependencies = [
"async-trait",
"merlin",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-api",
@@ -11057,7 +11110,7 @@
version = "0.10.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-arithmetic",
@@ -11071,7 +11124,7 @@
version = "0.10.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"schnorrkel",
"sp-core",
"sp-runtime",
@@ -11099,7 +11152,7 @@
"log",
"merlin",
"num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"parking_lot 0.12.0",
"primitive-types",
@@ -11174,7 +11227,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"environmental",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-std",
"sp-storage",
]
@@ -11186,7 +11239,7 @@
dependencies = [
"finality-grandpa",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-api",
@@ -11204,7 +11257,7 @@
dependencies = [
"async-trait",
"impl-trait-for-tuples",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-core",
"sp-runtime",
"sp-std",
@@ -11220,7 +11273,7 @@
"hash-db",
"libsecp256k1",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"secp256k1",
"sp-core",
@@ -11255,7 +11308,7 @@
"async-trait",
"futures 0.3.21",
"merlin",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"schnorrkel",
"serde",
@@ -11279,7 +11332,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"serde",
"sp-api",
"sp-core",
@@ -11293,7 +11346,7 @@
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"serde",
"sp-arithmetic",
@@ -11341,7 +11394,7 @@
"hash256-std-hasher",
"impl-trait-for-tuples",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-util-mem",
"paste",
"rand 0.7.3",
@@ -11360,7 +11413,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"impl-trait-for-tuples",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"primitive-types",
"sp-externalities",
"sp-runtime-interface-proc-macro",
@@ -11397,7 +11450,7 @@
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-api",
"sp-core",
@@ -11411,7 +11464,7 @@
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-runtime",
"sp-std",
@@ -11425,7 +11478,7 @@
"hash-db",
"log",
"num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.12.0",
"rand 0.7.3",
"smallvec",
@@ -11450,7 +11503,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"impl-serde",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"ref-cast",
"serde",
"sp-debug-derive",
@@ -11478,7 +11531,7 @@
"async-trait",
"futures-timer",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-api",
"sp-inherents",
"sp-runtime",
@@ -11491,7 +11544,7 @@
version = "5.0.0"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-std",
"tracing",
"tracing-core",
@@ -11514,7 +11567,7 @@
dependencies = [
"async-trait",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-inherents",
@@ -11530,7 +11583,7 @@
dependencies = [
"hash-db",
"memory-db",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-std",
@@ -11545,7 +11598,7 @@
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
"impl-serde",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parity-wasm 0.42.2",
"scale-info",
"serde",
@@ -11561,7 +11614,7 @@
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.21#563f4820d8f36d256ada7ea3fef46b2e94c4cd5a"
dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"proc-macro2",
"quote",
"syn",
@@ -11574,7 +11627,7 @@
dependencies = [
"impl-trait-for-tuples",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-std",
"wasmi",
"wasmtime",
@@ -11598,9 +11651,9 @@
[[package]]
name = "ss58-registry"
-version = "1.17.0"
+version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b84a70894df7a73666e0694f44b41a9571625e9546fb58a0818a565d2c7e084"
+checksum = "ceb8b72a924ccfe7882d0e26144c114503760a4d1248bb5cd06c8ab2d55404cc"
dependencies = [
"Inflector",
"num-format",
@@ -11751,7 +11804,7 @@
"jsonrpc-core-client",
"jsonrpc-derive",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sc-rpc-api",
"sc-transaction-pool-api",
@@ -11772,7 +11825,7 @@
"log",
"prometheus",
"thiserror",
- "tokio 1.18.1",
+ "tokio 1.18.2",
]
[[package]]
@@ -11784,7 +11837,7 @@
"jsonrpc-core-client",
"jsonrpc-derive",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sc-rpc-api",
"scale-info",
@@ -11806,7 +11859,7 @@
"async-trait",
"futures 0.3.21",
"hex",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sc-client-api",
"sc-client-db",
"sc-consensus",
@@ -11831,7 +11884,7 @@
dependencies = [
"futures 0.3.21",
"substrate-test-utils-derive",
- "tokio 1.18.1",
+ "tokio 1.18.2",
]
[[package]]
@@ -11869,13 +11922,13 @@
[[package]]
name = "syn"
-version = "1.0.92"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52"
+checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942"
dependencies = [
"proc-macro2",
"quote",
- "unicode-xid",
+ "unicode-ident",
]
[[package]]
@@ -11967,7 +12020,7 @@
"pallet-timestamp",
"pallet-transaction-payment",
"pallet-unique",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"sp-core",
"sp-io",
@@ -12119,14 +12172,14 @@
[[package]]
name = "tokio"
-version = "1.18.1"
+version = "1.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dce653fb475565de9f6fb0614b28bca8df2c430c0cf84bcd9c843f15de5414cc"
+checksum = "4903bf0427cf68dddd5aa6a93220756f8be0c34fcfa9f5e6191e103e15a31395"
dependencies = [
"bytes 1.1.0",
"libc",
"memchr",
- "mio 0.8.2",
+ "mio 0.8.3",
"num_cpus",
"once_cell",
"parking_lot 0.12.0",
@@ -12166,7 +12219,7 @@
checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
dependencies = [
"rustls 0.19.1",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"webpki 0.21.4",
]
@@ -12176,8 +12229,8 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
dependencies = [
- "rustls 0.20.4",
- "tokio 1.18.1",
+ "rustls 0.20.6",
+ "tokio 1.18.2",
"webpki 0.22.0",
]
@@ -12189,35 +12242,35 @@
dependencies = [
"futures-core",
"pin-project-lite 0.2.9",
- "tokio 1.18.1",
+ "tokio 1.18.2",
]
[[package]]
name = "tokio-util"
-version = "0.6.9"
+version = "0.6.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
dependencies = [
"bytes 1.1.0",
"futures-core",
"futures-sink",
"log",
"pin-project-lite 0.2.9",
- "tokio 1.18.1",
+ "tokio 1.18.2",
]
[[package]]
name = "tokio-util"
-version = "0.7.1"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764"
+checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c"
dependencies = [
"bytes 1.1.0",
"futures-core",
"futures-io",
"futures-sink",
"pin-project-lite 0.2.9",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"tracing",
]
@@ -12435,7 +12488,7 @@
"clap",
"jsonrpsee",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"remote-externalities",
"sc-chain-spec",
"sc-cli",
@@ -12485,12 +12538,15 @@
"jsonrpc-derive",
"pallet-common",
"pallet-evm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
+ "rmrk-rpc",
+ "rmrk-types",
"sp-api",
"sp-blockchain",
"sp-core",
"sp-rpc",
"sp-runtime",
+ "unique-runtime-common",
"up-data-structs",
"up-rpc",
]
@@ -12529,6 +12585,12 @@
checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
[[package]]
+name = "unicode-ident"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+
+[[package]]
name = "unicode-normalization"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -12588,7 +12650,7 @@
"pallet-ethereum",
"pallet-transaction-payment-rpc",
"pallet-transaction-payment-rpc-runtime-api",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"parking_lot 0.11.2",
"polkadot-cli",
"polkadot-parachain",
@@ -12596,6 +12658,7 @@
"polkadot-service",
"polkadot-test-service",
"quartz-runtime",
+ "rmrk-rpc",
"sc-basic-authorship",
"sc-chain-spec",
"sc-cli",
@@ -12633,7 +12696,7 @@
"substrate-build-script-utils",
"substrate-frame-rpc-system",
"substrate-prometheus-endpoint",
- "tokio 1.18.1",
+ "tokio 1.18.2",
"try-runtime-cli",
"unique-rpc",
"unique-runtime",
@@ -12660,6 +12723,7 @@
"pallet-transaction-payment-rpc",
"pallet-transaction-payment-rpc-runtime-api",
"pallet-unique",
+ "rmrk-rpc",
"sc-client-api",
"sc-consensus-aura",
"sc-consensus-epochs",
@@ -12687,6 +12751,7 @@
"tokio 0.2.25",
"uc-rpc",
"unique-runtime-common",
+ "up-data-structs",
"up-rpc",
]
@@ -12742,8 +12807,9 @@
"pallet-unq-scheduler",
"pallet-xcm",
"parachain-info",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
+ "rmrk-rpc",
"scale-info",
"serde",
"smallvec",
@@ -12783,7 +12849,9 @@
"pallet-nonfungible",
"pallet-refungible",
"pallet-unique",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
+ "rmrk-rpc",
+ "rmrk-types",
"scale-info",
"sp-consensus-aura",
"sp-core",
@@ -12847,7 +12915,8 @@
"frame-support",
"frame-system",
"pallet-evm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
+ "rmrk-types",
"scale-info",
"serde",
"sp-core",
@@ -12862,7 +12931,7 @@
dependencies = [
"pallet-common",
"pallet-evm",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-api",
"sp-core",
"sp-runtime",
@@ -13341,7 +13410,7 @@
source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.21#56cbe45f6c9397b06a99a2d80f4752578ed3637f"
dependencies = [
"beefy-primitives",
- "bitvec",
+ "bitvec 1.0.0",
"frame-benchmarking",
"frame-election-provider-support",
"frame-executive",
@@ -13391,7 +13460,7 @@
"pallet-vesting",
"pallet-xcm",
"pallet-xcm-benchmarks",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
"polkadot-primitives",
"polkadot-runtime-common",
@@ -13560,6 +13629,12 @@
[[package]]
name = "wyz"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214"
+
+[[package]]
+name = "wyz"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e"
@@ -13586,7 +13661,7 @@
"derivative",
"impl-trait-for-tuples",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"scale-info",
"xcm-procedural",
]
@@ -13600,7 +13675,7 @@
"frame-system",
"log",
"pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"polkadot-parachain",
"scale-info",
"sp-arithmetic",
@@ -13620,7 +13695,7 @@
"frame-support",
"impl-trait-for-tuples",
"log",
- "parity-scale-codec",
+ "parity-scale-codec 3.1.2",
"sp-arithmetic",
"sp-core",
"sp-io",
@@ -13683,18 +13758,18 @@
[[package]]
name = "zstd"
-version = "0.10.0+zstd.1.5.2"
+version = "0.10.2+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b1365becbe415f3f0fcd024e2f7b45bacfb5bdd055f0dc113571394114e7bdd"
+checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847"
dependencies = [
"zstd-safe",
]
[[package]]
name = "zstd-safe"
-version = "4.1.4+zstd.1.5.2"
+version = "4.1.6+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f7cd17c9af1a4d6c24beb1cc54b17e2ef7b593dc92f19e9d9acad8b182bbaee"
+checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb"
dependencies = [
"libc",
"zstd-sys",
client/rpc/Cargo.tomldiffbeforeafterboth--- a/client/rpc/Cargo.toml
+++ b/client/rpc/Cargo.toml
@@ -5,6 +5,7 @@
edition = "2021"
[dependencies]
+unique-runtime-common = { default-features = false, path = "../../runtime/common" }
pallet-common = { default-features = false, path = '../../pallets/common' }
up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
up-rpc = { path = "../../primitives/rpc" }
@@ -19,3 +20,8 @@
sp-rpc = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+
+# RMRK
+# todo git
+rmrk-rpc = { git = "https://github.com/UniqueNetwork/rmrk-substrate.git", branch = "feature/separate-types-and-traits" }
+rmrk-types = { git = "https://github.com/UniqueNetwork/rmrk-substrate.git", branch = "feature/separate-types-and-traits" }
client/rpc/src/lib.rsdiffbeforeafterboth--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -16,7 +16,7 @@
use std::sync::Arc;
-use codec::Decode;
+use codec::{Decode, Encode};
use jsonrpc_core::{Error as RpcError, ErrorCode, Result};
use jsonrpc_derive::rpc;
use up_data_structs::{
@@ -27,6 +27,15 @@
use sp_blockchain::HeaderBackend;
use up_rpc::UniqueApi as UniqueRuntimeApi;
+// RMRK
+use rmrk_rpc::RmrkApi as RmrkRuntimeApi;
+use up_data_structs::{
+ RmrkCollectionId, RmrkNftId, RmrkBaseId, RmrkNftChild, RmrkThemeName, RmrkPropertyKey,
+ RmrkResourceId,
+};
+
+pub use rmrk_unique_rpc::RmrkApi;
+
#[rpc]
pub trait UniqueApi<BlockHash, CrossAccountId, AccountId> {
#[rpc(name = "unique_accountTokens")]
@@ -179,6 +188,124 @@
) -> Result<Option<CollectionLimits>>;
}
+mod rmrk_unique_rpc {
+ use super::*;
+
+ #[rpc(server)]
+ pub trait RmrkApi<
+ BlockHash,
+ AccountId,
+ CollectionInfo,
+ NftInfo,
+ ResourceInfo,
+ PropertyInfo,
+ BaseInfo,
+ PartType,
+ Theme,
+ >
+ {
+ #[rpc(name = "rmrk_lastCollectionIdx")]
+ /// Get the latest created collection id
+ fn last_collection_idx(&self, at: Option<BlockHash>) -> Result<RmrkCollectionId>;
+
+ #[rpc(name = "rmrk_collectionById")]
+ /// Get collection by id
+ fn collection_by_id(
+ &self,
+ id: RmrkCollectionId,
+ at: Option<BlockHash>,
+ ) -> Result<Option<CollectionInfo>>;
+
+ #[rpc(name = "rmrk_nftById")]
+ /// Get NFT by collection id and NFT id
+ fn nft_by_id(
+ &self,
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+ at: Option<BlockHash>,
+ ) -> Result<Option<NftInfo>>;
+
+ #[rpc(name = "rmrk_accountTokens")]
+ /// Get tokens owned by an account in a collection
+ fn account_tokens(
+ &self,
+ account_id: AccountId,
+ collection_id: RmrkCollectionId,
+ at: Option<BlockHash>,
+ ) -> Result<Vec<RmrkNftId>>;
+
+ #[rpc(name = "rmrk_nftChildren")]
+ /// Get NFT children
+ fn nft_children(
+ &self,
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+ at: Option<BlockHash>,
+ ) -> Result<Vec<RmrkNftChild>>;
+
+ #[rpc(name = "rmrk_collectionProperties")]
+ /// Get collection properties
+ fn collection_properties(
+ &self,
+ collection_id: RmrkCollectionId,
+ filter_keys: Option<Vec<RmrkPropertyKey>>, //String
+ at: Option<BlockHash>,
+ ) -> Result<Vec<PropertyInfo>>;
+
+ #[rpc(name = "rmrk_nftProperties")]
+ /// Get NFT properties
+ fn nft_properties(
+ &self,
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+ filter_keys: Option<Vec<RmrkPropertyKey>>,
+ at: Option<BlockHash>,
+ ) -> Result<Vec<PropertyInfo>>;
+
+ #[rpc(name = "rmrk_nftResources")]
+ /// Get NFT resources
+ fn nft_resources(
+ &self,
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+ at: Option<BlockHash>,
+ ) -> Result<Vec<ResourceInfo>>;
+
+ #[rpc(name = "rmrk_nftResourcePriorities")]
+ /// Get NFT resource priorities
+ fn nft_resource_priorities(
+ &self,
+ collection_id: RmrkCollectionId,
+ nft_id: RmrkNftId,
+ at: Option<BlockHash>,
+ ) -> Result<Vec<RmrkResourceId>>;
+
+ #[rpc(name = "rmrk_base")]
+ /// Get base info
+ fn base(&self, base_id: RmrkBaseId, at: Option<BlockHash>) -> Result<Option<BaseInfo>>;
+
+ #[rpc(name = "rmrk_baseParts")]
+ /// Get all Base's parts
+ fn base_parts(&self, base_id: RmrkBaseId, at: Option<BlockHash>) -> Result<Vec<PartType>>;
+
+ #[rpc(name = "rmrk_themeNames")]
+ fn theme_names(
+ &self,
+ base_id: RmrkBaseId,
+ at: Option<BlockHash>,
+ ) -> Result<Vec<RmrkThemeName>>;
+
+ #[rpc(name = "rmrk_themes")]
+ fn theme(
+ &self,
+ base_id: RmrkBaseId,
+ theme_name: RmrkThemeName, // String
+ filter_keys: Option<Vec<RmrkPropertyKey>>,
+ at: Option<BlockHash>,
+ ) -> Result<Option<Theme>>;
+ }
+}
+
pub struct Unique<C, P> {
client: Arc<C>,
_marker: std::marker::PhantomData<P>,
@@ -209,7 +336,9 @@
(
$method_name:ident(
$($(#[map(|$map_arg:ident| $map:expr)])? $name:ident: $ty:ty),* $(,)?
- ) -> $result:ty $(=> $mapper:expr)?
+ ) -> $result:ty $(=> $mapper:expr)?,
+ //$runtime_name:ident $(<$($lt: tt),+>)*
+ $runtime_api_macro:ident
$(; changed_in $ver:expr, $changed_method_name:ident ($($changed_name:expr), * $(,)?) => $fixer:expr)*
) => {
fn $method_name(
@@ -222,7 +351,7 @@
let api = self.client.runtime_api();
let at = BlockId::hash(at.unwrap_or_else(|| self.client.info().best_hash));
let _api_version = if let Ok(Some(api_version)) =
- api.api_version::<dyn UniqueRuntimeApi<Block, CrossAccountId, AccountId>>(&at)
+ api.api_version::<$runtime_api_macro!()>(&at)
{
api_version
} else {
@@ -253,6 +382,18 @@
};
}
+macro_rules! unique_api {
+ () => {
+ dyn UniqueRuntimeApi<Block, CrossAccountId, AccountId>
+ };
+}
+
+macro_rules! rmrk_api {
+ () => {
+ dyn RmrkRuntimeApi<Block, AccountId, CollectionInfo, NftInfo, ResourceInfo, PropertyInfo, BaseInfo, PartType, Theme>
+ };
+}
+
#[allow(deprecated)]
impl<C, Block, CrossAccountId, AccountId>
UniqueApi<<Block as BlockT>::Hash, CrossAccountId, AccountId> for Unique<C, Block>
@@ -263,22 +404,38 @@
C::Api: UniqueRuntimeApi<Block, CrossAccountId, AccountId>,
CrossAccountId: pallet_evm::account::CrossAccountId<AccountId>,
{
- pass_method!(account_tokens(collection: CollectionId, account: CrossAccountId) -> Vec<TokenId>);
- pass_method!(collection_tokens(collection: CollectionId) -> Vec<TokenId>);
- pass_method!(token_exists(collection: CollectionId, token: TokenId) -> bool);
pass_method!(
- token_owner(collection: CollectionId, token: TokenId) -> Option<CrossAccountId>;
- changed_in 2, token_owner_before_version_2(collection, token) => |u| Some(u)
+ account_tokens(collection: CollectionId, account: CrossAccountId) -> Vec<TokenId>, unique_api
);
- pass_method!(topmost_token_owner(collection: CollectionId, token: TokenId) -> Option<CrossAccountId>);
- pass_method!(const_metadata(collection: CollectionId, token: TokenId) -> Vec<u8>);
+ pass_method!(
+ collection_tokens(collection: CollectionId) -> Vec<TokenId>, unique_api
+ );
+ pass_method!(
+ token_exists(collection: CollectionId, token: TokenId) -> bool, unique_api
+ );
+ pass_method!(
+ token_owner(collection: CollectionId, token: TokenId) -> Option<CrossAccountId>, unique_api
+ );
+ pass_method!(
+ topmost_token_owner(collection: CollectionId, token: TokenId) -> Option<CrossAccountId>, unique_api
+ );
+ pass_method!(
+ const_metadata(collection: CollectionId, token: TokenId) -> Vec<u8>, unique_api
+ );
+ pass_method!(total_supply(collection: CollectionId) -> u32, unique_api);
+ pass_method!(account_balance(collection: CollectionId, account: CrossAccountId) -> u32, unique_api);
+ pass_method!(balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> String => |v| v.to_string(), unique_api);
+ pass_method!(
+ allowance(collection: CollectionId, sender: CrossAccountId, spender: CrossAccountId, token: TokenId) -> String => |v| v.to_string(),
+ unique_api
+ );
pass_method!(collection_properties(
collection: CollectionId,
#[map(|keys| string_keys_to_bytes_keys(keys))]
keys: Option<Vec<String>>
- ) -> Vec<Property>);
+ ) -> Vec<Property>, unique_api);
pass_method!(token_properties(
collection: CollectionId,
@@ -286,14 +443,14 @@
#[map(|keys| string_keys_to_bytes_keys(keys))]
keys: Option<Vec<String>>
- ) -> Vec<Property>);
+ ) -> Vec<Property>, unique_api);
pass_method!(property_permissions(
collection: CollectionId,
#[map(|keys| string_keys_to_bytes_keys(keys))]
keys: Option<Vec<String>>
- ) -> Vec<PropertyKeyPermission>);
+ ) -> Vec<PropertyKeyPermission>, unique_api);
pass_method!(token_data(
collection: CollectionId,
@@ -301,25 +458,86 @@
#[map(|keys| string_keys_to_bytes_keys(keys))]
keys: Option<Vec<String>>,
- ) -> TokenData<CrossAccountId>);
+ ) -> TokenData<CrossAccountId>, unique_api);
- pass_method!(total_supply(collection: CollectionId) -> u32);
- pass_method!(account_balance(collection: CollectionId, account: CrossAccountId) -> u32);
- pass_method!(balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> String => |v| v.to_string());
- pass_method!(allowance(collection: CollectionId, sender: CrossAccountId, spender: CrossAccountId, token: TokenId) -> String => |v| v.to_string());
+ pass_method!(adminlist(collection: CollectionId) -> Vec<CrossAccountId>, unique_api);
+ pass_method!(allowlist(collection: CollectionId) -> Vec<CrossAccountId>, unique_api);
+ pass_method!(allowed(collection: CollectionId, user: CrossAccountId) -> bool, unique_api);
+ pass_method!(last_token_id(collection: CollectionId) -> TokenId, unique_api);
+ pass_method!(collection_by_id(collection: CollectionId) -> Option<RpcCollection<AccountId>>, unique_api);
+ pass_method!(collection_stats() -> CollectionStats, unique_api);
+ pass_method!(next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Option<u64>, unique_api);
+ pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option<CollectionLimits>, unique_api);
+}
- pass_method!(adminlist(collection: CollectionId) -> Vec<CrossAccountId>);
- pass_method!(allowlist(collection: CollectionId) -> Vec<CrossAccountId>);
- pass_method!(allowed(collection: CollectionId, user: CrossAccountId) -> bool);
- pass_method!(last_token_id(collection: CollectionId) -> TokenId);
- pass_method!(collection_by_id(collection: CollectionId) -> Option<RpcCollection<AccountId>>);
- pass_method!(collection_stats() -> CollectionStats);
- pass_method!(next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Option<u64>);
- pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option<CollectionLimits>);
+#[allow(deprecated)]
+impl<
+ C,
+ Block,
+ AccountId,
+ CollectionInfo,
+ NftInfo,
+ ResourceInfo,
+ PropertyInfo,
+ BaseInfo,
+ PartType,
+ Theme,
+ >
+ rmrk_unique_rpc::RmrkApi<
+ <Block as BlockT>::Hash,
+ AccountId,
+ CollectionInfo,
+ NftInfo,
+ ResourceInfo,
+ PropertyInfo,
+ BaseInfo,
+ PartType,
+ Theme,
+ > for Unique<C, Block>
+where
+ C: Send + Sync + 'static + ProvideRuntimeApi<Block> + HeaderBackend<Block>,
+ C::Api: RmrkRuntimeApi<
+ Block,
+ AccountId,
+ CollectionInfo,
+ NftInfo,
+ ResourceInfo,
+ PropertyInfo,
+ BaseInfo,
+ PartType,
+ Theme,
+ >,
+ AccountId: Decode + Encode,
+ CollectionInfo: Decode,
+ NftInfo: Decode,
+ ResourceInfo: Decode,
+ PropertyInfo: Decode,
+ BaseInfo: Decode,
+ PartType: Decode,
+ Theme: Decode,
+ Block: BlockT,
+{
+ pass_method!(last_collection_idx() -> RmrkCollectionId, rmrk_api);
+ pass_method!(collection_by_id(id: RmrkCollectionId) -> Option<CollectionInfo>, rmrk_api);
+ pass_method!(nft_by_id(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Option<NftInfo>, rmrk_api);
+ pass_method!(account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Vec<RmrkNftId>, rmrk_api);
+ pass_method!(nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Vec<RmrkNftChild>, rmrk_api);
+ pass_method!(
+ collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Vec<PropertyInfo>,
+ rmrk_api
+ );
+ pass_method!(
+ nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Vec<PropertyInfo>,
+ rmrk_api
+ );
+ pass_method!(nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Vec<ResourceInfo>, rmrk_api);
+ pass_method!(nft_resource_priorities(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Vec<RmrkResourceId>, rmrk_api);
+ pass_method!(base(base_id: RmrkBaseId) -> Option<BaseInfo>, rmrk_api);
+ pass_method!(base_parts(base_id: RmrkBaseId) -> Vec<PartType>, rmrk_api);
+ pass_method!(theme_names(base_id: RmrkBaseId) -> Vec<RmrkThemeName>, rmrk_api);
+ pass_method!(theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Option<Theme>, rmrk_api);
}
fn string_keys_to_bytes_keys(keys: Option<Vec<String>>) -> Option<Vec<Vec<u8>>> {
- keys.map(|keys| {
- keys.into_iter().map(|key| key.into_bytes()).collect()
- })
+ keys.map(|keys| keys.into_iter().map(|key| key.into_bytes()).collect())
}
node/cli/Cargo.tomldiffbeforeafterboth--- a/node/cli/Cargo.toml
+++ b/node/cli/Cargo.toml
@@ -276,6 +276,14 @@
branch = "polkadot-v0.9.21"
################################################################################
+# RMRK dependencies
+
+# todo git
+[dependencies.rmrk-rpc]
+git = "https://github.com/UniqueNetwork/rmrk-substrate.git"
+branch = "feature/separate-types-and-traits"
+
+################################################################################
# Package
[package]
node/cli/src/service.rsdiffbeforeafterboth--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -67,6 +67,12 @@
use unique_runtime_common::types::{AuraId, RuntimeInstance, AccountId, Balance, Index, Hash, Block};
+// RMRK
+use up_data_structs::{
+ RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo, RmrkBaseInfo,
+ RmrkPartType, RmrkTheme,
+};
+
/// Unique native executor instance.
#[cfg(feature = "unique-runtime")]
pub struct UniqueRuntimeExecutor;
@@ -347,7 +353,17 @@
+ pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance>
+ sp_api::ApiExt<Block, StateBackend = sc_client_api::StateBackendFor<FullBackend, Block>>
+ up_rpc::UniqueApi<Block, Runtime::CrossAccountId, AccountId>
- + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>
+ + rmrk_rpc::RmrkApi<
+ Block,
+ AccountId,
+ RmrkCollectionInfo<AccountId>,
+ RmrkInstanceInfo<AccountId>,
+ RmrkResourceInfo,
+ RmrkPropertyInfo,
+ RmrkBaseInfo<AccountId>,
+ RmrkPartType,
+ RmrkTheme,
+ > + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>
+ sp_api::Metadata<Block>
+ sp_offchain::OffchainWorkerApi<Block>
+ cumulus_primitives_core::CollectCollationInfo<Block>,
@@ -628,7 +644,17 @@
+ pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance>
+ sp_api::ApiExt<Block, StateBackend = sc_client_api::StateBackendFor<FullBackend, Block>>
+ up_rpc::UniqueApi<Block, Runtime::CrossAccountId, AccountId>
- + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>
+ + rmrk_rpc::RmrkApi<
+ Block,
+ AccountId,
+ RmrkCollectionInfo<AccountId>,
+ RmrkInstanceInfo<AccountId>,
+ RmrkResourceInfo,
+ RmrkPropertyInfo,
+ RmrkBaseInfo<AccountId>,
+ RmrkPartType,
+ RmrkTheme,
+ > + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>
+ sp_api::Metadata<Block>
+ sp_offchain::OffchainWorkerApi<Block>
+ cumulus_primitives_core::CollectCollationInfo<Block>
@@ -761,7 +787,17 @@
+ pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance>
+ sp_api::ApiExt<Block, StateBackend = sc_client_api::StateBackendFor<FullBackend, Block>>
+ up_rpc::UniqueApi<Block, Runtime::CrossAccountId, AccountId>
- + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>
+ + rmrk_rpc::RmrkApi<
+ Block,
+ AccountId,
+ RmrkCollectionInfo<AccountId>,
+ RmrkInstanceInfo<AccountId>,
+ RmrkResourceInfo,
+ RmrkPropertyInfo,
+ RmrkBaseInfo<AccountId>,
+ RmrkPartType,
+ RmrkTheme,
+ > + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>
+ sp_api::Metadata<Block>
+ sp_offchain::OffchainWorkerApi<Block>
+ cumulus_primitives_core::CollectCollationInfo<Block>
node/rpc/Cargo.tomldiffbeforeafterboth--- a/node/rpc/Cargo.toml
+++ b/node/rpc/Cargo.toml
@@ -49,11 +49,16 @@
fc-db = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
fc-mapping-sync = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+# RMRK
+# todo git
+rmrk-rpc = { git = "https://github.com/UniqueNetwork/rmrk-substrate.git", branch = "feature/separate-types-and-traits" }
+
pallet-common = { default-features = false, path = "../../pallets/common" }
unique-runtime-common = { default-features = false, path = "../../runtime/common" }
pallet-unique = { path = "../../pallets/unique" }
uc-rpc = { path = "../../client/rpc" }
up-rpc = { path = "../../primitives/rpc" }
+up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
[dependencies.serde]
features = ['derive']
node/rpc/src/lib.rsdiffbeforeafterboth--- a/node/rpc/src/lib.rs
+++ b/node/rpc/src/lib.rs
@@ -43,6 +43,11 @@
use unique_runtime_common::types::{
Hash, AccountId, RuntimeInstance, Index, Block, BlockNumber, Balance,
};
+// RMRK
+use up_data_structs::{
+ RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo, RmrkBaseInfo,
+ RmrkPartType, RmrkTheme,
+};
/// Public io handler for exporting into other modules
pub type IoHandler = jsonrpc_core::IoHandler<sc_rpc::Metadata>;
@@ -144,6 +149,17 @@
C::Api: fp_rpc::EthereumRuntimeRPCApi<Block>,
C::Api: fp_rpc::ConvertTransactionRuntimeApi<Block>,
C::Api: up_rpc::UniqueApi<Block, <R as RuntimeInstance>::CrossAccountId, AccountId>,
+ C::Api: rmrk_rpc::RmrkApi<
+ Block,
+ AccountId,
+ RmrkCollectionInfo<AccountId>,
+ RmrkInstanceInfo<AccountId>,
+ RmrkResourceInfo,
+ RmrkPropertyInfo,
+ RmrkBaseInfo<AccountId>,
+ RmrkPartType,
+ RmrkTheme,
+ >,
B: sc_client_api::Backend<Block> + Send + Sync + 'static,
B::State: sc_client_api::backend::StateBackend<sp_runtime::traits::HashFor<Block>>,
P: TransactionPool<Block = Block> + 'static,
@@ -157,7 +173,7 @@
EthPubSubApiServer, EthSigner, HexEncodedIdProvider, NetApi, NetApiServer, Web3Api,
Web3ApiServer,
};
- use uc_rpc::{UniqueApi, Unique};
+ use uc_rpc::{UniqueApi, RmrkApi, Unique};
// use pallet_contracts_rpc::{Contracts, ContractsApi};
use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi};
use substrate_frame_rpc_system::{FullSystem, SystemApi};
@@ -213,7 +229,11 @@
fee_history_limit,
fee_history_cache,
)));
+
+ // todo look into
+ //let unique = Unique::new(client.clone());
io.extend_with(UniqueApi::to_delegate(Unique::new(client.clone())));
+ io.extend_with(RmrkApi::to_delegate(Unique::new(client.clone())));
if let Some(filter_pool) = filter_pool {
io.extend_with(EthFilterApiServer::to_delegate(EthFilterApi::new(
pallets/common/Cargo.tomldiffbeforeafterboth--- a/pallets/common/Cargo.toml
+++ b/pallets/common/Cargo.toml
@@ -26,6 +26,10 @@
"derive",
] }
+# RMRK
+# todo git
+rmrk-types = { default-features = false, git = "https://github.com/UniqueNetwork/rmrk-substrate.git", branch = "feature/separate-types-and-traits" }
+
[features]
default = ["std"]
std = [
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -30,15 +30,52 @@
};
use pallet_evm::GasWeightMapping;
use up_data_structs::{
- COLLECTION_NUMBER_LIMIT, Collection, RpcCollection, CollectionId, CreateItemData,
- MAX_TOKEN_PREFIX_LENGTH, COLLECTION_ADMINS_LIMIT, TokenId, CollectionStats,
- MAX_TOKEN_OWNERSHIP, CollectionMode, NFT_SPONSOR_TRANSFER_TIMEOUT,
- FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, MAX_SPONSOR_TIMEOUT,
- CUSTOM_DATA_LIMIT, CollectionLimits, CreateCollectionData, SponsorshipState, CreateItemExData,
- SponsoringRateLimit, budget::Budget, COLLECTION_FIELD_LIMIT, CollectionField, PhantomType,
- Property, Properties, PropertiesPermissionMap, PropertyKey, PropertyPermission,
- PropertiesError, PropertyKeyPermission, TokenData, TrySetProperty,
+ COLLECTION_NUMBER_LIMIT,
+ Collection,
+ RpcCollection,
+ CollectionId,
+ CreateItemData,
+ MAX_TOKEN_PREFIX_LENGTH,
+ COLLECTION_ADMINS_LIMIT,
+ TokenId,
+ CollectionStats,
+ MAX_TOKEN_OWNERSHIP,
+ CollectionMode,
+ NFT_SPONSOR_TRANSFER_TIMEOUT,
+ FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
+ REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
+ MAX_SPONSOR_TIMEOUT,
+ CUSTOM_DATA_LIMIT,
+ CollectionLimits,
+ CreateCollectionData,
+ SponsorshipState,
+ CreateItemExData,
+ SponsoringRateLimit,
+ budget::Budget,
+ COLLECTION_FIELD_LIMIT,
+ CollectionField,
+ PhantomType,
+ Property,
+ Properties,
+ PropertiesPermissionMap,
+ PropertyKey,
+ PropertyPermission,
+ PropertiesError,
+ PropertyKeyPermission,
+ TokenData,
+ TrySetProperty,
+ PropertyScope,
+ // RMRK
+ RmrkCollectionInfo,
+ RmrkInstanceInfo,
+ RmrkResourceInfo,
+ RmrkPropertyInfo,
+ RmrkBaseInfo,
+ RmrkPartType,
+ RmrkTheme,
+ RmrkNftChild,
};
+
pub use pallet::*;
use sp_core::H160;
use sp_runtime::{ArithmeticError, DispatchError, DispatchResult};
@@ -441,6 +478,15 @@
TokenId,
PhantomType<TokenData<T::CrossAccountId>>,
PhantomType<RpcCollection<T::AccountId>>,
+ // RMRK
+ PhantomType<RmrkCollectionInfo<T::AccountId>>,
+ PhantomType<RmrkInstanceInfo<T::AccountId>>,
+ PhantomType<RmrkResourceInfo>,
+ PhantomType<RmrkPropertyInfo>,
+ PhantomType<RmrkBaseInfo<T::AccountId>>,
+ PhantomType<RmrkPartType>,
+ PhantomType<RmrkTheme>,
+ PhantomType<RmrkNftChild>,
),
QueryKind = OptionQuery,
>;
@@ -644,18 +690,14 @@
let mut collection_properties = up_data_structs::CollectionProperties::get();
collection_properties
- .try_set_from_iter(data.properties.into_iter().map(|p| (p.key, p.value)))
+ .try_set_from_iter(data.properties.into_iter())
.map_err(<Error<T>>::from)?;
CollectionProperties::<T>::insert(id, collection_properties);
let mut token_props_permissions = PropertiesPermissionMap::new();
token_props_permissions
- .try_set_from_iter(
- data.token_property_permissions
- .into_iter()
- .map(|property| (property.key, property.permission)),
- )
+ .try_set_from_iter(data.token_property_permissions.into_iter())
.map_err(<Error<T>>::from)?;
CollectionPropertyPermissions::<T>::insert(id, token_props_permissions);
@@ -720,6 +762,7 @@
<AdminAmount<T>>::remove(collection.id);
<IsAdmin<T>>::remove_prefix((collection.id,), None);
<Allowlist<T>>::remove_prefix((collection.id,), None);
+ <CollectionProperties<T>>::remove(collection.id);
<Pallet<T>>::deposit_event(Event::CollectionDestroyed(collection.id));
Ok(())
@@ -743,7 +786,34 @@
Ok(())
}
+ pub fn set_scoped_collection_property(
+ collection: &CollectionHandle<T>,
+ scope: PropertyScope,
+ property: Property,
+ ) -> DispatchResult {
+ CollectionProperties::<T>::try_mutate(collection.id, |properties| {
+ properties.try_scoped_set(scope, property.key, property.value)
+ })
+ .map_err(<Error<T>>::from)?;
+
+ Ok(())
+ }
+
#[transactional]
+ pub fn set_scoped_collection_properties(
+ collection: &CollectionHandle<T>,
+ scope: PropertyScope,
+ properties: impl Iterator<Item=Property>,
+ ) -> DispatchResult {
+ CollectionProperties::<T>::try_mutate(collection.id, |stored_properties| {
+ stored_properties.try_scoped_set_from_iter(scope, properties)
+ })
+ .map_err(<Error<T>>::from)?;
+
+ Ok(())
+ }
+
+ #[transactional]
pub fn set_collection_properties(
collection: &CollectionHandle<T>,
sender: &T::CrossAccountId,
@@ -849,23 +919,26 @@
) -> Result<Vec<Property>, DispatchError> {
let properties = Self::collection_properties(collection_id);
- let properties = keys.map(|keys| {
- keys.into_iter()
- .filter_map(|key| {
- properties.get(&key).map(|value| Property {
- key,
- value: value.clone(),
- })
+ let properties = keys
+ .map(|keys| {
+ keys.into_iter()
+ .filter_map(|key| {
+ properties.get(&key).map(|value| Property {
+ key,
+ value: value.clone(),
+ })
+ })
+ .collect()
})
- .collect()
- }).unwrap_or(
- properties.iter()
- .map(|(key, value)| Property {
- key: key.clone(),
- value: value.clone(),
- })
- .collect()
- );
+ .unwrap_or_else(|| {
+ properties
+ .iter()
+ .map(|(key, value)| Property {
+ key: key.clone(),
+ value: value.clone(),
+ })
+ .collect()
+ });
Ok(properties)
}
@@ -876,25 +949,28 @@
) -> Result<Vec<PropertyKeyPermission>, DispatchError> {
let permissions = Self::property_permissions(collection_id);
- let key_permissions = keys.map(|keys| {
- keys.into_iter()
- .filter_map(|key| {
+ let key_permissions = keys
+ .map(|keys| {
+ keys.into_iter()
+ .filter_map(|key| {
+ permissions
+ .get(&key)
+ .map(|permission| PropertyKeyPermission {
+ key,
+ permission: permission.clone(),
+ })
+ })
+ .collect()
+ })
+ .unwrap_or_else(|| {
permissions
- .get(&key)
- .map(|permission| PropertyKeyPermission {
- key,
+ .iter()
+ .map(|(key, permission)| PropertyKeyPermission {
+ key: key.clone(),
permission: permission.clone(),
})
- })
- .collect()
- }).unwrap_or(
- permissions.iter()
- .map(|(key, permission)| PropertyKeyPermission {
- key: key.clone(),
- permission: permission.clone(),
- })
- .collect()
- );
+ .collect()
+ });
Ok(key_permissions)
}
pallets/fungible/src/common.rsdiffbeforeafterboth--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -319,7 +319,11 @@
Vec::new()
}
- fn token_properties(&self, _token_id: TokenId, _keys: Option<Vec<PropertyKey>>) -> Vec<Property> {
+ fn token_properties(
+ &self,
+ _token_id: TokenId,
+ _keys: Option<Vec<PropertyKey>>,
+ ) -> Vec<Property> {
Vec::new()
}
pallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/benchmarking.rs
+++ b/pallets/nonfungible/src/benchmarking.rs
@@ -28,10 +28,7 @@
fn create_max_item_data<T: Config>(owner: T::CrossAccountId) -> CreateItemData<T> {
let const_data = create_data::<CUSTOM_DATA_LIMIT>();
- CreateItemData::<T> {
- const_data,
- owner,
- }
+ CreateItemData::<T> { const_data, owner }
}
fn create_max_item<T: Config>(
collection: &NonfungibleHandle<T>,
pallets/nonfungible/src/common.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -18,8 +18,8 @@
use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight};
use up_data_structs::{
- TokenId, CreateItemExData, CollectionId, budget::Budget, Property,
- PropertyKey, PropertyKeyPermission,
+ TokenId, CreateItemExData, CollectionId, budget::Budget, Property, PropertyKey,
+ PropertyKeyPermission,
};
use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};
use sp_runtime::DispatchError;
@@ -179,7 +179,7 @@
let weight = <CommonWeights<T>>::delete_collection_properties(property_keys.len() as u32);
with_weight(
- <Pallet<T>>::delete_collection_properties(self, &sender, property_keys),
+ <Pallet<T>>::delete_collection_properties(self, sender, property_keys),
weight,
)
}
@@ -367,20 +367,23 @@
keys.map(|keys| {
keys.into_iter()
- .filter_map(|key| {
- properties.get(&key).map(|value| Property {
- key,
+ .filter_map(|key| {
+ properties.get(&key).map(|value| Property {
+ key,
+ value: value.clone(),
+ })
+ })
+ .collect()
+ })
+ .unwrap_or_else(|| {
+ properties
+ .iter()
+ .map(|(key, value)| Property {
+ key: key.clone(),
value: value.clone(),
})
- })
- .collect()
- }).unwrap_or(
- properties.iter().map(|(key, value)| Property {
- key: key.clone(),
- value: value.clone(),
- })
- .collect()
- )
+ .collect()
+ })
}
fn total_supply(&self) -> u32 {
pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -257,6 +257,7 @@
<Owned<T>>::remove((collection.id, &token_data.owner, token));
<TokensBurnt<T>>::insert(collection.id, burnt);
<TokenData<T>>::remove((collection.id, token));
+ <TokenProperties<T>>::remove((collection.id, token));
let old_spender = <Allowance<T>>::take((collection.id, token));
if let Some(old_spender) = old_spender {
@@ -353,8 +354,8 @@
) -> DispatchResult {
let permission = <PalletCommon<T>>::property_permissions(collection.id)
.get(property_key)
- .map(|p| p.clone())
- .unwrap_or(PropertyPermission::none());
+ .cloned()
+ .unwrap_or_else(PropertyPermission::none);
let token_data = <TokenData<T>>::get((collection.id, token_id))
.ok_or(<CommonError<T>>::TokenNotFound)?;
pallets/refungible/src/common.rsdiffbeforeafterboth--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -19,8 +19,8 @@
use sp_std::collections::btree_map::BTreeMap;
use frame_support::{dispatch::DispatchResultWithPostInfo, fail, weights::Weight};
use up_data_structs::{
- CollectionId, TokenId, CreateItemExData, CreateRefungibleExData,
- budget::Budget, Property, PropertyKey, PropertyKeyPermission,
+ CollectionId, TokenId, CreateItemExData, CreateRefungibleExData, budget::Budget, Property,
+ PropertyKey, PropertyKeyPermission,
};
use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};
use sp_runtime::DispatchError;
@@ -340,7 +340,11 @@
.into_inner()
}
- fn token_properties(&self, _token_id: TokenId, _keys: Option<Vec<PropertyKey>>) -> Vec<Property> {
+ fn token_properties(
+ &self,
+ _token_id: TokenId,
+ _keys: Option<Vec<PropertyKey>>,
+ ) -> Vec<Property> {
Vec::new()
}
pallets/refungible/src/lib.rsdiffbeforeafterboth--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -53,7 +53,10 @@
#[frame_support::pallet]
pub mod pallet {
use super::*;
- use frame_support::{Blake2_128, Blake2_128Concat, Twox64Concat, pallet_prelude::*, storage::Key, traits::StorageVersion};
+ use frame_support::{
+ Blake2_128, Blake2_128Concat, Twox64Concat, pallet_prelude::*, storage::Key,
+ traits::StorageVersion,
+ };
use frame_system::pallet_prelude::*;
use up_data_structs::{CollectionId, TokenId};
use super::weights::WeightInfo;
pallets/rmrk-proxy/Cargo.tomldiffbeforeafterboth--- /dev/null
+++ b/pallets/rmrk-proxy/Cargo.toml
@@ -0,0 +1,49 @@
+[package]
+name = "pallet-rmrk-proxy"
+version = "0.1.0"
+license = "GPLv3"
+edition = "2021"
+
+[dependencies.codec]
+default-features = false
+features = ['derive']
+package = 'parity-scale-codec'
+version = '3.1.2'
+
+[dependencies]
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
+pallet-common = { default-features = false, path = '../common' }
+pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
+# pallet-structure = { default-features = false, path = '../structure' }
+up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
+# evm-coder = { default-features = false, path = '../../crates/evm-coder' }
+# pallet-evm-coder-substrate = { default-features = false, path = '../evm-coder-substrate' }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
+scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+
+[features]
+default = ["std"]
+std = [
+ "frame-support/std",
+ "frame-system/std",
+ "sp-runtime/std",
+ "sp-std/std",
+ "up-data-structs/std",
+ "pallet-common/std",
+ "pallet-nonfungible/std",
+ "pallet-evm/std",
+ # "pallet-structure/std",
+ # "evm-coder/std",
+ # "pallet-evm-coder-substrate/std",
+ 'frame-benchmarking/std',
+]
+runtime-benchmarks = [
+ 'frame-benchmarking',
+ 'frame-support/runtime-benchmarks',
+ 'frame-system/runtime-benchmarks',
+]
pallets/rmrk-proxy/src/lib.rsdiffbeforeafterboth--- /dev/null
+++ b/pallets/rmrk-proxy/src/lib.rs
@@ -0,0 +1,232 @@
+// 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/>.
+
+#![cfg_attr(not(feature = "std"), no_std)]
+
+use frame_support::{pallet_prelude::*, transactional, BoundedVec, traits::ConstU32, dispatch::DispatchResult};
+use frame_system::{pallet_prelude::*, ensure_signed};
+use sp_runtime::DispatchError;
+use up_data_structs::*;
+use pallet_common::{Pallet as PalletCommon, Error as CommonError, CollectionHandle, CommonCollectionOperations};
+use pallet_nonfungible::{Pallet as PalletNft, NonfungibleHandle};
+use pallet_evm::account::CrossAccountId;
+
+pub use pallet::*;
+
+pub mod misc;
+
+use misc::*;
+
+#[frame_support::pallet]
+pub mod pallet {
+ use super::*;
+ use pallet_evm::account;
+
+ #[pallet::config]
+ pub trait Config: frame_system::Config
+ + pallet_common::Config
+ + pallet_nonfungible::Config
+ + account::Config {
+ type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
+ }
+
+ #[pallet::pallet]
+ #[pallet::generate_store(pub(super) trait Store)]
+ pub struct Pallet<T>(_);
+
+ #[pallet::event]
+ #[pallet::generate_deposit(pub(super) fn deposit_event)]
+ pub enum Event<T: Config> {
+ CollectionCreated {
+ issuer: T::AccountId,
+ collection_id: CollectionId,
+ },
+ CollectionDestroyed {
+ issuer: T::AccountId,
+ collection_id: CollectionId,
+ },
+ CollectionLocked {
+ issuer: T::AccountId,
+ collection_id: CollectionId,
+ },
+ }
+
+ #[pallet::error]
+ pub enum Error<T> {
+ /* Unique-specific events */
+ CorruptedCollectionType,
+ NotRmrkCollection,
+
+ /* RMRK compatible events */
+ CollectionNotEmpty,
+ NoAvailableCollectionId,
+ CollectionUnknown,
+ }
+
+ #[pallet::call]
+ impl<T: Config> Pallet<T> {
+ #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
+ #[transactional]
+ pub fn create_collection(
+ origin: OriginFor<T>,
+ metadata: PropertyValue,
+ max: Option<u32>,
+ symbol: BoundedVec<u8, ConstU32<MAX_TOKEN_PREFIX_LENGTH>>,
+ ) -> DispatchResult {
+ let sender = ensure_signed(origin)?;
+
+ let limits = max.map(|max| CollectionLimits {
+ token_limit: Some(max),
+ ..Default::default()
+ });
+
+ let data = CreateCollectionData {
+ limits,
+ token_prefix: symbol,
+ ..Default::default()
+ };
+
+ let collection_id_res = <PalletNft<T>>::init_collection(sender.clone(), data);
+
+ if let Err(DispatchError::Arithmetic(_)) = &collection_id_res {
+ return Err(<Error<T>>::NoAvailableCollectionId.into());
+ }
+
+ let collection_id = collection_id_res?;
+
+ let collection = Self::get_nft_collection(collection_id)?.into_inner();
+
+ <PalletCommon<T>>::set_scoped_collection_properties(
+ &collection,
+ PropertyScope::Rmrk,
+ [
+ rmrk_property!(Metadata, metadata),
+ rmrk_property!(CollectionType, CollectionType::Regular),
+ ].into_iter()
+ )?;
+
+ Self::deposit_event(Event::CollectionCreated { issuer: sender, collection_id });
+
+ Ok(())
+ }
+
+ #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
+ #[transactional]
+ pub fn destroy_collection(
+ origin: OriginFor<T>,
+ collection_id: CollectionId,
+ ) -> DispatchResult {
+ let sender = ensure_signed(origin)?;
+ let cross_sender = T::CrossAccountId::from_sub(sender.clone());
+
+ let collection = Self::get_nft_collection(collection_id)?;
+
+ Self::check_collection_type(collection_id, CollectionType::Regular)?;
+
+ ensure!(collection.total_supply() == 0, <Error<T>>::CollectionNotEmpty);
+
+ <PalletNft<T>>::destroy_collection(collection, &cross_sender)?;
+
+ Self::deposit_event(Event::CollectionDestroyed { issuer: sender, collection_id });
+
+ Ok(())
+ }
+
+ #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
+ #[transactional]
+ pub fn change_collection_issuer(
+ origin: OriginFor<T>,
+ collection_id: CollectionId,
+ new_issuer: T::AccountId,
+ ) -> DispatchResult {
+ let sender = ensure_signed(origin)?;
+
+ Self::change_collection_owner(
+ collection_id,
+ CollectionType::Regular,
+ sender,
+ new_issuer
+ )?;
+
+ Ok(())
+ }
+
+ #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
+ #[transactional]
+ pub fn lock_collection(
+ origin: OriginFor<T>,
+ collection_id: CollectionId,
+ ) -> DispatchResult {
+ let sender = ensure_signed(origin)?;
+ let cross_sender = T::CrossAccountId::from_sub(sender.clone());
+
+ let collection = Self::get_nft_collection(collection_id)?;
+ collection.check_is_owner(&cross_sender)?;
+
+ let token_count = collection.total_supply();
+
+ let mut collection = collection.into_inner();
+ collection.limits.token_limit = Some(token_count);
+ collection.save()?;
+
+ Self::deposit_event(Event::CollectionLocked { issuer: sender, collection_id });
+
+ Ok(())
+ }
+ }
+}
+
+impl<T: Config> Pallet<T> {
+ fn change_collection_owner(
+ collection_id: CollectionId,
+ collection_type: CollectionType,
+ sender: T::AccountId,
+ new_owner: T::AccountId,
+ ) -> DispatchResult {
+ let mut collection = Self::get_nft_collection(collection_id)?.into_inner();
+ collection.check_is_owner(&T::CrossAccountId::from_sub(sender))?;
+
+ Self::check_collection_type(collection_id, collection_type)?;
+
+ collection.owner = new_owner;
+ collection.save()
+ }
+
+ fn get_nft_collection(collection_id: CollectionId) -> Result<NonfungibleHandle<T>, DispatchError> {
+ let collection = <CollectionHandle<T>>::try_get(collection_id)
+ .map_err(|_| <Error<T>>::CollectionUnknown)?
+ .into_nft_collection()?;
+
+ Ok(collection)
+ }
+
+ fn get_collection_type(collection_id: CollectionId) -> Result<CollectionType, DispatchError> {
+ let collection_type: CollectionType = <PalletCommon<T>>::collection_properties(collection_id)
+ .get(&rmrk_property!(CollectionType))
+ .ok_or(<Error<T>>::NotRmrkCollection)?
+ .try_into()
+ .map_err(<Error<T>>::from)?;
+
+ Ok(collection_type)
+ }
+
+ fn check_collection_type(collection_id: CollectionId, collection_type: CollectionType) -> DispatchResult {
+ let actual_type = Self::get_collection_type(collection_id)?;
+ ensure!(actual_type == collection_type, <CommonError<T>>::NoPermission);
+
+ Ok(())
+ }
+}
pallets/rmrk-proxy/src/misc.rsdiffbeforeafterboth--- /dev/null
+++ b/pallets/rmrk-proxy/src/misc.rs
@@ -0,0 +1,98 @@
+use super::*;
+use codec::{Encode, Decode};
+use frame_support::dispatch::Vec;
+use pallet_nonfungible::NonfungibleHandle;
+
+#[macro_export]
+macro_rules! rmrk_property {
+ ($key:ident, $value:expr) => {
+ Property {
+ key: rmrk_property!(@raw $key),
+ value: $value.into()
+ }
+ };
+
+ (@raw $key:ident) => {
+ RmrkProperty::$key.to_key()
+ };
+
+ ($key:ident) => {
+ PropertyScope::Rmrk.apply(rmrk_property!(@raw $key)).unwrap()
+ };
+}
+
+macro_rules! impl_rmrk_value {
+ ($enum_name:path, decode_error: $error:ident) => {
+ impl Into<PropertyValue> for $enum_name {
+ fn into(self) -> PropertyValue {
+ self.encode().try_into().unwrap()
+ }
+ }
+
+ impl TryFrom<&PropertyValue> for $enum_name {
+ type Error = MiscError;
+
+ fn try_from(value: &PropertyValue) -> Result<Self, Self::Error> {
+ let mut value = value.as_slice();
+
+ <$enum_name>::decode(&mut value)
+ .map_err(|_| MiscError::$error)
+ }
+ }
+
+ };
+}
+
+pub enum MiscError {
+ CorruptedCollectionType,
+}
+
+impl<T: Config> From<MiscError> for Error<T> {
+ fn from(error: MiscError) -> Self {
+ match error {
+ MiscError::CorruptedCollectionType => Self::CorruptedCollectionType,
+ }
+ }
+}
+
+pub trait IntoNftCollection<T: Config> {
+ fn into_nft_collection(self) -> Result<NonfungibleHandle<T>, Error<T>>;
+}
+
+impl<T: Config> IntoNftCollection<T> for CollectionHandle<T> {
+ fn into_nft_collection(self) -> Result<NonfungibleHandle<T>, Error<T>> {
+ match self.mode {
+ CollectionMode::NFT => Ok(NonfungibleHandle::cast(self)),
+ _ => Err(<Error<T>>::NotRmrkCollection)
+ }
+ }
+}
+
+pub enum RmrkProperty {
+ Metadata,
+ CollectionType,
+}
+
+impl RmrkProperty {
+ pub fn to_key(self) -> PropertyKey {
+ let key = |str_key: &str| {
+ PropertyKey::try_from(
+ str_key.bytes().collect::<Vec<_>>()
+ ).unwrap()
+ };
+
+ match self {
+ Self::Metadata => key("metadata"),
+ Self::CollectionType => key("collection-type"),
+ }
+ }
+}
+
+#[derive(Encode, Decode, PartialEq, Eq)]
+pub enum CollectionType {
+ Regular,
+ Resource,
+ Base,
+}
+
+impl_rmrk_value!(CollectionType, decode_error: CorruptedCollectionType);
pallets/unique/src/lib.rsdiffbeforeafterboth--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -35,16 +35,16 @@
use frame_system::{self as system, ensure_signed};
use sp_runtime::{sp_std::prelude::Vec};
use up_data_structs::{
- CONST_ON_CHAIN_SCHEMA_LIMIT, OFFCHAIN_SCHEMA_LIMIT,
- MAX_COLLECTION_NAME_LENGTH, MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_TOKEN_PREFIX_LENGTH,
- AccessMode, CreateItemData, CollectionLimits, CollectionId, CollectionMode, TokenId,
- SchemaVersion, SponsorshipState, CreateCollectionData,
- CreateItemExData, budget, CollectionField, Property, PropertyKey, PropertyKeyPermission,
+ CONST_ON_CHAIN_SCHEMA_LIMIT, OFFCHAIN_SCHEMA_LIMIT, MAX_COLLECTION_NAME_LENGTH,
+ MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_TOKEN_PREFIX_LENGTH, AccessMode, CreateItemData,
+ CollectionLimits, CollectionId, CollectionMode, TokenId, SchemaVersion, SponsorshipState,
+ CreateCollectionData, CreateItemExData, budget, CollectionField, Property, PropertyKey,
+ PropertyKeyPermission,
};
use pallet_evm::account::CrossAccountId;
use pallet_common::{
- CollectionHandle, Pallet as PalletCommon, CommonWeightInfo,
- dispatch::dispatch_call, dispatch::CollectionDispatch,
+ CollectionHandle, Pallet as PalletCommon, CommonWeightInfo, dispatch::dispatch_call,
+ dispatch::CollectionDispatch,
};
#[cfg(feature = "runtime-benchmarks")]
primitives/data-structs/Cargo.tomldiffbeforeafterboth--- a/primitives/data-structs/Cargo.toml
+++ b/primitives/data-structs/Cargo.toml
@@ -27,6 +27,10 @@
struct-versioning = { path = "../../crates/struct-versioning" }
pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+# RMRK
+# todo git
+rmrk-types = { default-features = false, git = "https://github.com/UniqueNetwork/rmrk-substrate.git", branch = "feature/separate-types-and-traits" }
+
[features]
default = ["std"]
std = [
primitives/data-structs/src/lib.rsdiffbeforeafterboth--- a/primitives/data-structs/src/lib.rs
+++ b/primitives/data-structs/src/lib.rs
@@ -23,18 +23,31 @@
use frame_support::{
storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet},
traits::Get,
+ parameter_types,
};
#[cfg(feature = "serde")]
use serde::{Serialize, Deserialize};
use sp_core::U256;
-use sp_runtime::{ArithmeticError, sp_std::prelude::Vec};
+use sp_runtime::{ArithmeticError, sp_std::prelude::Vec, Permill};
use codec::{Decode, Encode, EncodeLike, MaxEncodedLen};
use frame_support::{BoundedVec, traits::ConstU32};
use derivative::Derivative;
use scale_info::TypeInfo;
+// RMRK
+use rmrk_types::{
+ CollectionInfo, NftInfo, ResourceInfo, PropertyInfo, BaseInfo, PartType, Theme, ThemeProperty,
+};
+pub use rmrk_types::{
+ primitives::{
+ CollectionId as RmrkCollectionId, NftId as RmrkNftId, BaseId as RmrkBaseId,
+ PartId as RmrkPartId, ResourceId as RmrkResourceId,
+ },
+ NftChild as RmrkNftChild, AccountIdOrCollectionNftTuple as RmrkAccountIdOrCollectionNftTuple,
+};
+
mod bounded;
pub mod budget;
pub mod mapping;
@@ -96,6 +109,13 @@
pub const MAX_COLLECTION_PROPERTIES_ENCODE_LEN: u32 =
MAX_PROPERTIES_PER_ITEM * MAX_PROPERTY_KEY_LENGTH + MAX_COLLECTION_PROPERTIES_SIZE;
+// 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;
+
pub struct MaxPropertiesPermissionsEncodeLen;
impl Get<u32> for MaxPropertiesPermissionsEncodeLen {
@@ -581,7 +601,8 @@
pub alive: u32,
}
-#[derive(Encode, Decode, PartialEq, Clone, Debug)]
+#[derive(Encode, Decode, Clone, Debug)]
+#[cfg_attr(feature = "std", derive(PartialEq))]
pub struct PhantomType<T>(core::marker::PhantomData<T>);
impl<T: TypeInfo + 'static> TypeInfo for PhantomType<T> {
@@ -636,6 +657,12 @@
pub value: PropertyValue,
}
+impl Into<(PropertyKey, PropertyValue)> for Property {
+ fn into(self) -> (PropertyKey, PropertyValue) {
+ (self.key, self.value)
+ }
+}
+
#[derive(Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone)]
#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
pub struct PropertyKeyPermission {
@@ -645,6 +672,13 @@
pub permission: PropertyPermission,
}
+impl Into<(PropertyKey, PropertyPermission)> for PropertyKeyPermission {
+ fn into(self) -> (PropertyKey, PropertyPermission) {
+ (self.key, self.permission)
+ }
+}
+
+#[derive(Debug)]
pub enum PropertiesError {
NoSpaceForProperty,
PropertyLimitReached,
@@ -660,7 +694,7 @@
}
impl PropertyScope {
- fn apply(self, key: PropertyKey) -> Result<PropertyKey, PropertiesError> {
+ pub fn apply(self, key: PropertyKey) -> Result<PropertyKey, PropertiesError> {
let scope_str: &[u8] = match self {
Self::None => return Ok(key),
Self::Rmrk => b"rmrk",
@@ -680,18 +714,20 @@
&mut self,
scope: PropertyScope,
key: PropertyKey,
- value: Self::Value
+ value: Self::Value,
) -> Result<(), PropertiesError>;
- fn try_scoped_set_from_iter<I>(
+ fn try_scoped_set_from_iter<I, KV>(
&mut self,
scope: PropertyScope,
- iter: I
+ iter: I,
) -> Result<(), PropertiesError>
where
- I: Iterator<Item=(PropertyKey, Self::Value)>
+ I: Iterator<Item=KV>,
+ KV: Into<(PropertyKey, Self::Value)>
{
- for (key, value) in iter {
+ for kv in iter {
+ let (key, value) = kv.into();
self.try_scoped_set(scope, key, value)?;
}
@@ -702,9 +738,10 @@
self.try_scoped_set(PropertyScope::None, key, value)
}
- fn try_set_from_iter<I>(&mut self, iter: I) -> Result<(), PropertiesError>
+ fn try_set_from_iter<I, KV>(&mut self, iter: I) -> Result<(), PropertiesError>
where
- I: Iterator<Item = (PropertyKey, Self::Value)>,
+ I: Iterator<Item=KV>,
+ KV: Into<(PropertyKey, Self::Value)>
{
self.try_scoped_set_from_iter(PropertyScope::None, iter)
}
@@ -743,10 +780,8 @@
for byte in key.as_slice().iter() {
let byte = *byte;
- if !byte.is_ascii_alphanumeric()
- && byte != b'_'
- && byte != b'-' {
- return Err(PropertiesError::InvalidCharacterInPropertyKey)
+ if !byte.is_ascii_alphanumeric() && byte != b'_' && byte != b'-' {
+ return Err(PropertiesError::InvalidCharacterInPropertyKey);
}
}
@@ -761,7 +796,7 @@
&mut self,
scope: PropertyScope,
key: PropertyKey,
- value: Self::Value
+ value: Self::Value,
) -> Result<(), PropertiesError> {
Self::check_property_key(&key)?;
@@ -819,7 +854,7 @@
&mut self,
scope: PropertyScope,
key: PropertyKey,
- value: Self::Value
+ value: Self::Value,
) -> Result<(), PropertiesError> {
let value_len = value.len();
@@ -850,3 +885,43 @@
Properties::new(MAX_TOKEN_PROPERTIES_SIZE)
}
}
+
+// RMRK
+// todo document?
+parameter_types! {
+ #[derive(PartialEq, TypeInfo)]
+ pub const RmrkStringLimit: u32 = 128;
+ #[derive(PartialEq)]
+ pub const RmrkCollectionSymbolLimit: u32 = 100;
+ #[derive(PartialEq)]
+ pub const RmrkResourceSymbolLimit: u32 = 10;
+ #[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 type RmrkCollectionInfo<AccountId> =
+ CollectionInfo<RmrkString, BoundedVec<u8, RmrkCollectionSymbolLimit>, AccountId>;
+pub type RmrkInstanceInfo<AccountId> = NftInfo<AccountId, Permill, RmrkString>;
+pub type RmrkResourceInfo = ResourceInfo<
+ BoundedVec<u8, RmrkResourceSymbolLimit>,
+ RmrkString,
+ BoundedVec<RmrkPartId, RmrkPartsLimit>,
+>;
+pub type RmrkPropertyInfo =
+ PropertyInfo<BoundedVec<u8, RmrkKeyLimit>, BoundedVec<u8, RmrkValueLimit>>;
+pub type RmrkBaseInfo<AccountId> = BaseInfo<AccountId, RmrkString>;
+pub type RmrkPartType =
+ PartType<RmrkString, BoundedVec<RmrkCollectionId, RmrkMaxCollectionsEquippablePerPart>>;
+pub type RmrkTheme = Theme<RmrkString, Vec<ThemeProperty<RmrkString>>>;
+
+pub type RmrkRpcString = Vec<u8>;
+pub type RmrkThemeName = RmrkRpcString;
+pub type RmrkPropertyKey = RmrkRpcString;
+
+type RmrkString = BoundedVec<u8, RmrkStringLimit>;
runtime/common/Cargo.tomldiffbeforeafterboth--- a/runtime/common/Cargo.toml
+++ b/runtime/common/Cargo.toml
@@ -106,4 +106,9 @@
[dependencies]
pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = 'polkadot-v0.9.21' }
+up-sponsorship = { default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring", branch = 'polkadot-v0.9.21' }
+
+# RMRK
+# todo git
+rmrk-rpc = { default-features = false, git = "https://github.com/UniqueNetwork/rmrk-substrate.git", branch = "feature/separate-types-and-traits" }
+rmrk-types = { default-features = false, git = "https://github.com/UniqueNetwork/rmrk-substrate.git", branch = "feature/separate-types-and-traits" }
runtime/common/src/runtime_apis.rsdiffbeforeafterboth--- a/runtime/common/src/runtime_apis.rs
+++ b/runtime/common/src/runtime_apis.rs
@@ -130,6 +130,200 @@
}
}
+ 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(<pallet_common::CreatedCollectionCount<Runtime>>::get().0)
+ }
+ fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {
+ // TODO decide on displacement to palettes -- does RMRK belong there, spread across common and nonfungible?
+ use frame_support::BoundedVec;
+
+ let collection_id = CollectionId(collection_id);
+ let collection = match <pallet_common::CollectionById<Runtime>>::get(collection_id) {
+ Some(c) => c,
+ None => return Ok(None)
+ };
+ let nfts_count: Result<u32, DispatchError> = dispatch_unique_runtime!(collection_id.total_supply());
+ Ok(Some(RmrkCollectionInfo {
+ issuer: collection.owner,
+ metadata: BoundedVec::default(), // todo property - namespace:metadata
+ max: Some(collection.limits.token_limit()), // must have some effective limits
+ symbol: BoundedVec::try_from(collection.token_prefix.into_inner()).unwrap_or_default() /*{ // todo map_err
+ Ok(s) => s,
+ Err(_) => return Err(pallet_common::Error::<Runtime>::CollectionTokenPrefixLimitExceeded)
+ }*/,
+ nfts_count: nfts_count? // todo? <Runtime>::total_supply(collection_id)
+ }))
+ }
+ fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {
+ use frame_support::BoundedVec;
+ use up_data_structs::mapping::TokenAddressMapping;
+
+ let collection_id = CollectionId(collection_id);
+ let nft_id = TokenId(nft_by_id);
+
+ let owner = match (dispatch_unique_runtime!(collection_id.token_owner(nft_id)) as Result<Option<CrossAccountId>, DispatchError>)? {
+ Some(owner) => match <Runtime as pallet_common::Config>::CrossTokenAddressMapping::address_to_token(&owner) {
+ Some((col, tok)) => RmrkAccountIdOrCollectionNftTuple::CollectionAndNftTuple(col.0, tok.0),
+ None => RmrkAccountIdOrCollectionNftTuple::AccountId(owner.as_sub().clone())
+ },
+ None => return Ok(None)
+ };
+
+ Ok(Some(RmrkInstanceInfo {
+ owner: owner,
+ //recipient: , // prop
+ royalty: None,//Permill::from_percent(0), // prop
+ metadata: BoundedVec::default(), // prop
+ equipped: false, // prop
+ pending: false, // prop
+ }))
+ }
+ fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {
+ let cross_account_id = CrossAccountId::from_sub(account_id);
+ let collection_id = CollectionId(collection_id);
+ Ok(
+ (dispatch_unique_runtime!(collection_id.account_tokens(cross_account_id)) as Result<Vec<TokenId>, DispatchError>)?
+ //<Runtime as up_rpc::UniqueApi<Block, CrossAccountId, AccountId>>::account_tokens(collection_id, cross_account_id)?
+ .into_iter()
+ .map(|token| token.0)
+ .collect::<Vec<_>>()
+ )
+ }
+ fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {
+ use up_data_structs::mapping::TokenAddressMapping;
+
+ let collection_id = CollectionId(collection_id);
+ let nft_id = TokenId(nft_id);
+ let cross_account_id = CrossAccountId::from_eth(
+ EvmTokenAddressMapping::token_to_address(collection_id, nft_id)
+ );
+
+ Ok(
+ pallet_nonfungible::Owned::<Runtime>::iter_prefix((collection_id, cross_account_id))
+ .map(|(child_id, _)| RmrkNftChild {
+ collection_id: collection_id.0, // todo make sure they're always from this collection
+ nft_id: child_id.0,
+ })
+ .collect()
+ )
+ }
+ fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+ use frame_support::BoundedVec;
+
+ let collection_id = CollectionId(collection_id);
+ let properties = pallet_common::Pallet::<Runtime>::collection_properties(collection_id);
+
+ return Ok(match filter_keys {
+ Some(keys) => {
+ let keys = pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(keys)?;
+ let properties = keys
+ .into_iter()
+ .filter_map(|key| {
+ properties.get(&key).map(|value| RmrkPropertyInfo {
+ key: BoundedVec::try_from(key.into_inner()).unwrap_or_default(),
+ value: BoundedVec::try_from(value.clone().into_inner()).unwrap_or_default(),
+ })
+ })
+ .collect();
+
+ properties
+ }
+ None => {
+ properties
+ .iter()
+ .map(|(key, value)| RmrkPropertyInfo {
+ key: BoundedVec::try_from(key.clone().into_inner()).unwrap_or_default(),
+ value: BoundedVec::try_from(value.clone().into_inner()).unwrap_or_default(),
+ })
+ .collect()
+ }
+ });
+ }
+ fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+ use frame_support::BoundedVec;
+
+ let collection_id = CollectionId(collection_id);
+ let token_id = TokenId(nft_id);
+
+ let properties = pallet_nonfungible::Pallet::<Runtime>::token_properties((collection_id, token_id)); // todo look into usage of nonfungible
+
+ return Ok(match filter_keys {
+ Some(keys) => {
+ let keys = pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(keys)?;
+ let properties = keys
+ .into_iter()
+ .filter_map(|key| {
+ properties.get(&key).map(|value| RmrkPropertyInfo {
+ key: BoundedVec::try_from(key.into_inner()).unwrap_or_default(),
+ value: BoundedVec::try_from(value.clone().into_inner()).unwrap_or_default(),
+ })
+ })
+ .collect();
+
+ properties
+ }
+ None => {
+ properties
+ .iter()
+ .map(|(key, value)| RmrkPropertyInfo {
+ key: BoundedVec::try_from(key.clone().into_inner()).unwrap_or_default(),
+ value: BoundedVec::try_from(value.clone().into_inner()).unwrap_or_default(),
+ })
+ .collect()
+ }
+ });
+ }
+ fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
+ todo!()
+ }
+ fn nft_resource_priorities(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceId>, DispatchError> {
+ todo!()
+ }
+ fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {
+ use frame_support::{BoundedVec, ensure};
+ use scale_info::prelude::string::String;
+
+ let collection_id = CollectionId(base_id);
+ let collection = match <pallet_common::CollectionById<Runtime>>::get(collection_id) {
+ Some(c) => c,
+ None => return Ok(None)
+ };
+
+ // string_keys_to_bytes_keys
+ let keys = pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(
+ Vec::from([String::from("rmrk:base-type").into_bytes()])
+ )?;
+ let properties = pallet_common::Pallet::<Runtime>::filter_collection_properties(collection_id, Some(keys))?;
+ //ensure!(properties.len() == 1); // todo make sure it's fine to have ensure in place // no access to errors from here? displace?
+
+ Ok(Some( RmrkBaseInfo {
+ issuer: collection.owner,
+ base_type: BoundedVec::try_from(properties[0].value.clone().into_inner()).unwrap_or_default(), // todo map_err? no access to errors
+ symbol: BoundedVec::try_from(collection.token_prefix.into_inner()).unwrap_or_default(),
+ }))
+ }
+ fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
+ todo!()
+ }
+ fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
+ todo!()
+ }
+ fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {
+ todo!()
+ }
+ }
+
impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion {
VERSION
runtime/common/src/sponsoring.rsdiffbeforeafterboth--- a/runtime/common/src/sponsoring.rs
+++ b/runtime/common/src/sponsoring.rs
@@ -21,17 +21,16 @@
storage::{StorageMap, StorageDoubleMap, StorageNMap},
};
use up_data_structs::{
- CollectionId, FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
- NFT_SPONSOR_TRANSFER_TIMEOUT, REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, TokenId, CollectionMode,
- CreateItemData,
+ CollectionId, FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, NFT_SPONSOR_TRANSFER_TIMEOUT,
+ REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, TokenId, CollectionMode, CreateItemData,
};
use sp_runtime::traits::Saturating;
use pallet_common::{CollectionHandle};
use pallet_evm::account::CrossAccountId;
use pallet_unique::{
Call as UniqueCall, Config as UniqueConfig, FungibleApproveBasket, RefungibleApproveBasket,
- NftApproveBasket, CreateItemBasket, ReFungibleTransferBasket,
- FungibleTransferBasket, NftTransferBasket,
+ NftApproveBasket, CreateItemBasket, ReFungibleTransferBasket, FungibleTransferBasket,
+ NftTransferBasket,
};
use pallet_fungible::Config as FungibleConfig;
use pallet_nonfungible::Config as NonfungibleConfig;
runtime/opal/Cargo.tomldiffbeforeafterboth--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -33,6 +33,7 @@
'pallet-fungible/runtime-benchmarks',
'pallet-refungible/runtime-benchmarks',
'pallet-nonfungible/runtime-benchmarks',
+ 'pallet-rmrk-proxy/runtime-benchmarks',
'pallet-unique/runtime-benchmarks',
'pallet-inflation/runtime-benchmarks',
'pallet-xcm/runtime-benchmarks',
@@ -89,6 +90,7 @@
'pallet-fungible/std',
'pallet-refungible/std',
'pallet-nonfungible/std',
+ 'pallet-rmrk-proxy/std',
'pallet-unique/std',
'pallet-unq-scheduler/std',
'pallet-charge-transaction/std',
@@ -109,6 +111,7 @@
'xcm-builder/std',
'xcm-executor/std',
'unique-runtime-common/std',
+ 'rmrk-rpc/std',
"orml-vesting/std",
]
@@ -386,6 +389,15 @@
default-features = false
################################################################################
+# RMRK dependencies
+
+# todo git
+[dependencies.rmrk-rpc]
+default-features = false
+git = "https://github.com/UniqueNetwork/rmrk-substrate.git"
+branch = "feature/separate-types-and-traits"
+
+################################################################################
# local dependencies
[dependencies]
@@ -405,6 +417,7 @@
pallet-fungible = { default-features = false, path = "../../pallets/fungible" }
pallet-refungible = { default-features = false, path = "../../pallets/refungible" }
pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
+pallet-rmrk-proxy = { default-features = false, path = "../../pallets/rmrk-proxy" }
pallet-unq-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.21", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
runtime/opal/src/lib.rsdiffbeforeafterboth--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -901,6 +901,10 @@
type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;
}
+impl pallet_rmrk_proxy::Config for Runtime {
+ type Event = Event;
+}
+
impl pallet_unique::Config for Runtime {
type Event = Event;
type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;
@@ -1013,6 +1017,7 @@
Refungible: pallet_refungible::{Pallet, Storage} = 68,
Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,
Structure: pallet_structure::{Pallet, Call, Storage, Event<T>} = 70,
+ RmrkProxy: pallet_rmrk_proxy::{Pallet, Call, Storage, Event<T>} = 71,
// Frontier
EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,
runtime/quartz/Cargo.tomldiffbeforeafterboth--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -386,6 +386,15 @@
default-features = false
################################################################################
+# RMRK dependencies
+
+# todo git
+[dependencies.rmrk-rpc]
+default-features = false
+git = "https://github.com/UniqueNetwork/rmrk-substrate.git"
+branch = "feature/separate-types-and-traits"
+
+################################################################################
# local dependencies
[dependencies]
runtime/tests/src/tests.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// Tests to be written here18use crate::{Test, TestCrossAccountId, CollectionCreationPrice, Origin, Unique, new_test_ext};19use up_data_structs::{20 COLLECTION_NUMBER_LIMIT, CollectionId, CreateItemData, CreateFungibleData, CreateNftData,21 CreateReFungibleData, MAX_DECIMAL_POINTS, COLLECTION_ADMINS_LIMIT,22 TokenId, MAX_TOKEN_OWNERSHIP, CreateCollectionData, CollectionField, SchemaVersion,23 CollectionMode, AccessMode,24};25use frame_support::{assert_noop, assert_ok, assert_err};26use sp_std::convert::TryInto;27use pallet_evm::account::CrossAccountId;28use pallet_common::Error as CommonError;29use pallet_unique::Error as UniqueError;3031fn add_balance(user: u64, value: u64) {32 const DONOR_USER: u64 = 999;33 assert_ok!(<pallet_balances::Pallet<Test>>::set_balance(34 Origin::root(),35 DONOR_USER,36 value,37 038 ));39 assert_ok!(<pallet_balances::Pallet<Test>>::force_transfer(40 Origin::root(),41 DONOR_USER,42 user,43 value44 ));45}4647fn default_nft_data() -> CreateNftData {48 CreateNftData {49 const_data: vec![1, 2, 3].try_into().unwrap(),50 }51}5253fn default_fungible_data() -> CreateFungibleData {54 CreateFungibleData { value: 5 }55}5657fn default_re_fungible_data() -> CreateReFungibleData {58 CreateReFungibleData {59 const_data: vec![1, 2, 3].try_into().unwrap(),60 pieces: 1023,61 }62}6364fn create_test_collection_for_owner(65 mode: &CollectionMode,66 owner: u64,67 id: CollectionId,68) -> CollectionId {69 add_balance(owner, CollectionCreationPrice::get() as u64 + 1);7071 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();72 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();73 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();7475 let data: CreateCollectionData<u64> = CreateCollectionData {76 name: col_name1.try_into().unwrap(),77 description: col_desc1.try_into().unwrap(),78 token_prefix: token_prefix1.try_into().unwrap(),79 mode: mode.clone(),80 ..Default::default()81 };8283 let origin1 = Origin::signed(owner);84 assert_ok!(Unique::create_collection_ex(origin1, data));8586 let saved_col_name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();87 let saved_description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();88 let saved_prefix: Vec<u8> = b"token_prefix1\0".to_vec();89 assert_eq!(90 <pallet_common::CollectionById<Test>>::get(id)91 .unwrap()92 .owner,93 owner94 );95 assert_eq!(96 <pallet_common::CollectionById<Test>>::get(id).unwrap().name,97 saved_col_name98 );99 assert_eq!(100 <pallet_common::CollectionById<Test>>::get(id).unwrap().mode,101 *mode102 );103 assert_eq!(104 <pallet_common::CollectionById<Test>>::get(id)105 .unwrap()106 .description,107 saved_description108 );109 assert_eq!(110 <pallet_common::CollectionById<Test>>::get(id)111 .unwrap()112 .token_prefix,113 saved_prefix114 );115 id116}117118fn create_test_collection(mode: &CollectionMode, id: CollectionId) -> CollectionId {119 create_test_collection_for_owner(&mode, 1, id)120}121122fn create_test_item(collection_id: CollectionId, data: &CreateItemData) {123 let origin1 = Origin::signed(1);124 assert_ok!(Unique::create_item(125 origin1,126 collection_id,127 account(1),128 data.clone()129 ));130}131132fn account(sub: u64) -> TestCrossAccountId {133 TestCrossAccountId::from_sub(sub)134}135136// Use cases tests region137// #region138139#[test]140fn set_version_schema() {141 new_test_ext().execute_with(|| {142 let origin1 = Origin::signed(1);143 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));144145 assert_ok!(Unique::set_schema_version(146 origin1,147 collection_id,148 SchemaVersion::Unique149 ));150 assert_eq!(151 <pallet_common::CollectionById<Test>>::get(collection_id)152 .unwrap()153 .schema_version,154 SchemaVersion::Unique155 );156 });157}158159#[test]160fn check_not_sufficient_founds() {161 new_test_ext().execute_with(|| {162 let acc: u64 = 1;163 <pallet_balances::Pallet<Test>>::set_balance(Origin::root(), acc, 0, 0).unwrap();164165 let name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();166 let description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();167 let token_prefix: Vec<u8> = b"token_prefix1\0".to_vec();168169 let data: CreateCollectionData<<Test as frame_system::Config>::AccountId> =170 CreateCollectionData {171 name: name.try_into().unwrap(),172 description: description.try_into().unwrap(),173 token_prefix: token_prefix.try_into().unwrap(),174 mode: CollectionMode::NFT,175 ..Default::default()176 };177178 let result = Unique::create_collection_ex(Origin::signed(acc), data);179 assert_err!(result, <CommonError<Test>>::NotSufficientFounds);180 });181}182183#[test]184fn create_fungible_collection_fails_with_large_decimal_numbers() {185 new_test_ext().execute_with(|| {186 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();187 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();188 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();189190 let data: CreateCollectionData<u64> = CreateCollectionData {191 name: col_name1.try_into().unwrap(),192 description: col_desc1.try_into().unwrap(),193 token_prefix: token_prefix1.try_into().unwrap(),194 mode: CollectionMode::Fungible(MAX_DECIMAL_POINTS + 1),195 ..Default::default()196 };197198 let origin1 = Origin::signed(1);199 assert_noop!(200 Unique::create_collection_ex(origin1, data),201 UniqueError::<Test>::CollectionDecimalPointLimitExceeded202 );203 });204}205206#[test]207fn create_nft_item() {208 new_test_ext().execute_with(|| {209 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));210211 let data = default_nft_data();212 create_test_item(collection_id, &data.clone().into());213214 let item = <pallet_nonfungible::TokenData<Test>>::get((collection_id, 1)).unwrap();215 assert_eq!(item.const_data, data.const_data.into_inner());216 });217}218219// Use cases tests region220// #region221#[test]222fn create_nft_multiple_items() {223 new_test_ext().execute_with(|| {224 create_test_collection(&CollectionMode::NFT, CollectionId(1));225226 let origin1 = Origin::signed(1);227228 let items_data = vec![default_nft_data(), default_nft_data(), default_nft_data()];229230 assert_ok!(Unique::create_multiple_items(231 origin1,232 CollectionId(1),233 account(1),234 items_data235 .clone()236 .into_iter()237 .map(|d| { d.into() })238 .collect()239 ));240 for (index, data) in items_data.into_iter().enumerate() {241 let item = <pallet_nonfungible::TokenData<Test>>::get((242 CollectionId(1),243 TokenId((index + 1) as u32),244 ))245 .unwrap();246 assert_eq!(item.const_data.to_vec(), data.const_data.into_inner());247 }248 });249}250251#[test]252fn create_refungible_item() {253 new_test_ext().execute_with(|| {254 let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));255256 let data = default_re_fungible_data();257 create_test_item(collection_id, &data.clone().into());258 let item = <pallet_refungible::TokenData<Test>>::get((collection_id, TokenId(1)));259 let balance =260 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1)));261 assert_eq!(item.const_data, data.const_data.into_inner());262 assert_eq!(balance, 1023);263 });264}265266#[test]267fn create_multiple_refungible_items() {268 new_test_ext().execute_with(|| {269 create_test_collection(&CollectionMode::ReFungible, CollectionId(1));270271 let origin1 = Origin::signed(1);272273 let items_data = vec![274 default_re_fungible_data(),275 default_re_fungible_data(),276 default_re_fungible_data(),277 ];278279 assert_ok!(Unique::create_multiple_items(280 origin1,281 CollectionId(1),282 account(1),283 items_data284 .clone()285 .into_iter()286 .map(|d| { d.into() })287 .collect()288 ));289 for (index, data) in items_data.into_iter().enumerate() {290 let item = <pallet_refungible::TokenData<Test>>::get((291 CollectionId(1),292 TokenId((index + 1) as u32),293 ));294 let balance =295 <pallet_refungible::Balance<Test>>::get((CollectionId(1), TokenId(1), account(1)));296 assert_eq!(item.const_data.to_vec(), data.const_data.into_inner());297 assert_eq!(balance, 1023);298 }299 });300}301302#[test]303fn create_fungible_item() {304 new_test_ext().execute_with(|| {305 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));306307 let data = default_fungible_data();308 create_test_item(collection_id, &data.into());309310 assert_eq!(311 <pallet_fungible::Balance<Test>>::get((collection_id, account(1))),312 5313 );314 });315}316317//#[test]318// fn create_multiple_fungible_items() {319// new_test_ext().execute_with(|| {320// default_limits();321322// create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));323324// let origin1 = Origin::signed(1);325326// let items_data = vec![default_fungible_data(), default_fungible_data(), default_fungible_data()];327328// assert_ok!(Unique::create_multiple_items(329// origin1.clone(),330// 1,331// 1,332// items_data.clone().into_iter().map(|d| { d.into() }).collect()333// ));334335// for (index, _) in items_data.iter().enumerate() {336// assert_eq!(Unique::fungible_item_id(1, (index + 1) as TokenId).value, 5);337// }338// assert_eq!(Unique::balance_count(1, 1), 3000);339// assert_eq!(Unique::address_tokens(1, 1), [1, 2, 3]);340// });341// }342343#[test]344fn transfer_fungible_item() {345 new_test_ext().execute_with(|| {346 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));347348 let origin1 = Origin::signed(1);349 let origin2 = Origin::signed(2);350351 let data = default_fungible_data();352 create_test_item(collection_id, &data.into());353354 assert_eq!(355 <pallet_fungible::Balance<Test>>::get((CollectionId(1), account(1))),356 5357 );358359 // change owner scenario360 assert_ok!(Unique::transfer(361 origin1,362 account(2),363 CollectionId(1),364 TokenId(0),365 5366 ));367 assert_eq!(368 <pallet_fungible::Balance<Test>>::get((CollectionId(1), account(1))),369 0370 );371372 // split item scenario373 assert_ok!(Unique::transfer(374 origin2.clone(),375 account(3),376 CollectionId(1),377 TokenId(0),378 3379 ));380381 // split item and new owner has account scenario382 assert_ok!(Unique::transfer(383 origin2,384 account(3),385 CollectionId(1),386 TokenId(0),387 1388 ));389 assert_eq!(390 <pallet_fungible::Balance<Test>>::get((CollectionId(1), account(2))),391 1392 );393 assert_eq!(394 <pallet_fungible::Balance<Test>>::get((CollectionId(1), account(3))),395 4396 );397 });398}399400#[test]401fn transfer_refungible_item() {402 new_test_ext().execute_with(|| {403 let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));404405 // Create RFT 1 in 1023 pieces for account 1406 let data = default_re_fungible_data();407 create_test_item(collection_id, &data.clone().into());408 let item = <pallet_refungible::TokenData<Test>>::get((collection_id, TokenId(1)));409 assert_eq!(item.const_data, data.const_data.into_inner());410 assert_eq!(411 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),412 1413 );414 assert_eq!(415 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),416 1023417 );418 assert_eq!(419 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),420 true421 );422423 // Account 1 transfers all 1023 pieces of RFT 1 to account 2424 let origin1 = Origin::signed(1);425 let origin2 = Origin::signed(2);426 assert_ok!(Unique::transfer(427 origin1,428 account(2),429 CollectionId(1),430 TokenId(1),431 1023432 ));433 assert_eq!(434 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),435 1023436 );437 assert_eq!(438 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),439 0440 );441 assert_eq!(442 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),443 1444 );445 assert_eq!(446 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),447 false448 );449 assert_eq!(450 <pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),451 true452 );453454 // Account 2 transfers 500 pieces of RFT 1 to account 3455 assert_ok!(Unique::transfer(456 origin2.clone(),457 account(3),458 CollectionId(1),459 TokenId(1),460 500461 ));462 assert_eq!(463 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),464 523465 );466 assert_eq!(467 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),468 500469 );470 assert_eq!(471 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),472 1473 );474 assert_eq!(475 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),476 1477 );478 assert_eq!(479 <pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),480 true481 );482 assert_eq!(483 <pallet_refungible::Owned<Test>>::get((collection_id, account(3), TokenId(1))),484 true485 );486487 // Account 2 transfers 200 more pieces of RFT 1 to account 3 with pre-existing balance488 assert_ok!(Unique::transfer(489 origin2,490 account(3),491 CollectionId(1),492 TokenId(1),493 200494 ));495 assert_eq!(496 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),497 323498 );499 assert_eq!(500 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),501 700502 );503 assert_eq!(504 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),505 1506 );507 assert_eq!(508 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),509 1510 );511 assert_eq!(512 <pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),513 true514 );515 assert_eq!(516 <pallet_refungible::Owned<Test>>::get((collection_id, account(3), TokenId(1))),517 true518 );519 });520}521522#[test]523fn transfer_nft_item() {524 new_test_ext().execute_with(|| {525 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));526527 let data = default_nft_data();528 create_test_item(collection_id, &data.into());529 assert_eq!(530 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),531 1532 );533 assert_eq!(534 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),535 true536 );537538 let origin1 = Origin::signed(1);539 // default scenario540 assert_ok!(Unique::transfer(541 origin1,542 account(2),543 CollectionId(1),544 TokenId(1),545 1546 ));547 assert_eq!(548 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),549 0550 );551 assert_eq!(552 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),553 1554 );555 assert_eq!(556 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),557 false558 );559 assert_eq!(560 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),561 true562 );563 });564}565566#[test]567fn transfer_nft_item_wrong_value() {568 new_test_ext().execute_with(|| {569 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));570571 let data = default_nft_data();572 create_test_item(collection_id, &data.into());573 assert_eq!(574 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),575 1576 );577 assert_eq!(578 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),579 true580 );581582 let origin1 = Origin::signed(1);583584 assert_noop!(585 Unique::transfer(origin1, account(2), CollectionId(1), TokenId(1), 2)586 .map_err(|e| e.error),587 <pallet_nonfungible::Error::<Test>>::NonfungibleItemsHaveNoAmount588 );589 });590}591592#[test]593fn transfer_nft_item_zero_value() {594 new_test_ext().execute_with(|| {595 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));596597 let data = default_nft_data();598 create_test_item(collection_id, &data.into());599 assert_eq!(600 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),601 1602 );603 assert_eq!(604 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),605 true606 );607608 let origin1 = Origin::signed(1);609610 // Transferring 0 amount works on NFT...611 assert_ok!(Unique::transfer(612 origin1,613 account(2),614 CollectionId(1),615 TokenId(1),616 0617 ));618 // ... and results in no transfer619 assert_eq!(620 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),621 1622 );623 assert_eq!(624 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),625 true626 );627 });628}629630#[test]631fn nft_approve_and_transfer_from() {632 new_test_ext().execute_with(|| {633 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));634635 let data = default_nft_data();636 create_test_item(collection_id, &data.into());637638 let origin1 = Origin::signed(1);639 let origin2 = Origin::signed(2);640641 assert_eq!(642 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),643 1644 );645 assert_eq!(646 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),647 true648 );649650 // neg transfer_from651 assert_noop!(652 Unique::transfer_from(653 origin2.clone(),654 account(1),655 account(2),656 CollectionId(1),657 TokenId(1),658 1659 )660 .map_err(|e| e.error),661 CommonError::<Test>::ApprovedValueTooLow662 );663664 // do approve665 assert_ok!(Unique::approve(666 origin1,667 account(2),668 CollectionId(1),669 TokenId(1),670 1671 ));672 assert_eq!(673 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),674 account(2)675 );676677 assert_ok!(Unique::transfer_from(678 origin2,679 account(1),680 account(3),681 CollectionId(1),682 TokenId(1),683 1684 ));685 assert!(686 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).is_none()687 );688 });689}690691#[test]692fn nft_approve_and_transfer_from_allow_list() {693 new_test_ext().execute_with(|| {694 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));695696 let origin1 = Origin::signed(1);697 let origin2 = Origin::signed(2);698699 // Create NFT 1 for account 1700 let data = default_nft_data();701 create_test_item(collection_id, &data.clone().into());702 assert_eq!(703 &<pallet_nonfungible::TokenData<Test>>::get((collection_id, TokenId(1)))704 .unwrap()705 .const_data,706 &data.const_data.into_inner()707 );708 assert_eq!(709 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),710 1711 );712 assert_eq!(713 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),714 true715 );716717 // Allow allow-list users to mint and add accounts 1, 2, and 3 to allow-list718 assert_ok!(Unique::set_mint_permission(719 origin1.clone(),720 CollectionId(1),721 true722 ));723 assert_ok!(Unique::set_public_access_mode(724 origin1.clone(),725 CollectionId(1),726 AccessMode::AllowList727 ));728 assert_ok!(Unique::add_to_allow_list(729 origin1.clone(),730 CollectionId(1),731 account(1)732 ));733 assert_ok!(Unique::add_to_allow_list(734 origin1.clone(),735 CollectionId(1),736 account(2)737 ));738 assert_ok!(Unique::add_to_allow_list(739 origin1.clone(),740 CollectionId(1),741 account(3)742 ));743744 // Account 1 approves account 2 for NFT 1745 assert_ok!(Unique::approve(746 origin1.clone(),747 account(2),748 CollectionId(1),749 TokenId(1),750 1751 ));752 assert_eq!(753 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),754 account(2)755 );756757 // Account 2 transfers NFT 1 from account 1 to account 3758 assert_ok!(Unique::transfer_from(759 origin2,760 account(1),761 account(3),762 CollectionId(1),763 TokenId(1),764 1765 ));766 assert!(767 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).is_none()768 );769 });770}771772#[test]773fn refungible_approve_and_transfer_from() {774 new_test_ext().execute_with(|| {775 let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));776777 let origin1 = Origin::signed(1);778 let origin2 = Origin::signed(2);779780 // Create RFT 1 in 1023 pieces for account 1781 let data = default_re_fungible_data();782 create_test_item(collection_id, &data.into());783784 assert_eq!(785 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),786 1787 );788 assert_eq!(789 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),790 1023791 );792 assert_eq!(793 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),794 true795 );796797 // Allow public minting, enable allow-list and add accounts 1, 2, 3 to allow-list798 assert_ok!(Unique::set_mint_permission(799 origin1.clone(),800 CollectionId(1),801 true802 ));803 assert_ok!(Unique::set_public_access_mode(804 origin1.clone(),805 CollectionId(1),806 AccessMode::AllowList807 ));808 assert_ok!(Unique::add_to_allow_list(809 origin1.clone(),810 CollectionId(1),811 account(1)812 ));813 assert_ok!(Unique::add_to_allow_list(814 origin1.clone(),815 CollectionId(1),816 account(2)817 ));818 assert_ok!(Unique::add_to_allow_list(819 origin1.clone(),820 CollectionId(1),821 account(3)822 ));823824 // Account 1 approves account 2 for 1023 pieces of RFT 1825 assert_ok!(Unique::approve(826 origin1,827 account(2),828 CollectionId(1),829 TokenId(1),830 1023831 ));832 assert_eq!(833 <pallet_refungible::Allowance<Test>>::get((834 CollectionId(1),835 TokenId(1),836 account(1),837 account(2)838 )),839 1023840 );841842 // Account 2 transfers 100 pieces of RFT 1 from account 1 to account 3843 assert_ok!(Unique::transfer_from(844 origin2,845 account(1),846 account(3),847 CollectionId(1),848 TokenId(1),849 100850 ));851 assert_eq!(852 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),853 1854 );855 assert_eq!(856 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),857 1858 );859 assert_eq!(860 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),861 923862 );863 assert_eq!(864 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),865 100866 );867 assert_eq!(868 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),869 true870 );871 assert_eq!(872 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),873 true874 );875 assert_eq!(876 <pallet_refungible::Allowance<Test>>::get((877 CollectionId(1),878 TokenId(1),879 account(1),880 account(2)881 )),882 923883 );884 });885}886887#[test]888fn fungible_approve_and_transfer_from() {889 new_test_ext().execute_with(|| {890 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));891892 let data = default_fungible_data();893 create_test_item(collection_id, &data.into());894895 let origin1 = Origin::signed(1);896 let origin2 = Origin::signed(2);897898 assert_ok!(Unique::set_mint_permission(899 origin1.clone(),900 CollectionId(1),901 true902 ));903 assert_ok!(Unique::set_public_access_mode(904 origin1.clone(),905 CollectionId(1),906 AccessMode::AllowList907 ));908 assert_ok!(Unique::add_to_allow_list(909 origin1.clone(),910 CollectionId(1),911 account(1)912 ));913 assert_ok!(Unique::add_to_allow_list(914 origin1.clone(),915 CollectionId(1),916 account(2)917 ));918 assert_ok!(Unique::add_to_allow_list(919 origin1.clone(),920 CollectionId(1),921 account(3)922 ));923924 // do approve925 assert_ok!(Unique::approve(926 origin1.clone(),927 account(2),928 CollectionId(1),929 TokenId(0),930 5931 ));932 assert_eq!(933 <pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),934 5935 );936 assert_ok!(Unique::approve(937 origin1,938 account(3),939 CollectionId(1),940 TokenId(0),941 5942 ));943 assert_eq!(944 <pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),945 5946 );947 assert_eq!(948 <pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(3))),949 5950 );951952 assert_ok!(Unique::transfer_from(953 origin2.clone(),954 account(1),955 account(3),956 CollectionId(1),957 TokenId(0),958 4959 ));960961 assert_eq!(962 <pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),963 1964 );965966 assert_noop!(967 Unique::transfer_from(968 origin2,969 account(1),970 account(3),971 CollectionId(1),972 TokenId(0),973 4974 )975 .map_err(|e| e.error),976 CommonError::<Test>::ApprovedValueTooLow977 );978 });979}980981#[test]982fn change_collection_owner() {983 new_test_ext().execute_with(|| {984 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));985986 let origin1 = Origin::signed(1);987 assert_ok!(Unique::change_collection_owner(origin1, collection_id, 2));988 assert_eq!(989 <pallet_common::CollectionById<Test>>::get(collection_id)990 .unwrap()991 .owner,992 2993 );994 });995}996997#[test]998fn destroy_collection() {999 new_test_ext().execute_with(|| {1000 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10011002 let origin1 = Origin::signed(1);1003 assert_ok!(Unique::destroy_collection(origin1, collection_id));1004 });1005}10061007#[test]1008fn burn_nft_item() {1009 new_test_ext().execute_with(|| {1010 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10111012 let origin1 = Origin::signed(1);10131014 let data = default_nft_data();1015 create_test_item(collection_id, &data.into());10161017 // check balance (collection with id = 1, user id = 1)1018 assert_eq!(1019 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1020 11021 );10221023 // burn item1024 assert_ok!(Unique::burn_item(1025 origin1.clone(),1026 collection_id,1027 TokenId(1),1028 11029 ));1030 assert_eq!(1031 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1032 01033 );1034 });1035}10361037#[test]1038fn burn_same_nft_item_twice() {1039 new_test_ext().execute_with(|| {1040 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10411042 let origin1 = Origin::signed(1);10431044 let data = default_nft_data();1045 create_test_item(collection_id, &data.into());10461047 // check balance (collection with id = 1, user id = 1)1048 assert_eq!(1049 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1050 11051 );10521053 // burn item1054 assert_ok!(Unique::burn_item(1055 origin1.clone(),1056 collection_id,1057 TokenId(1),1058 11059 ));10601061 // burn item again1062 assert_noop!(1063 Unique::burn_item(origin1, collection_id, TokenId(1), 1).map_err(|e| e.error),1064 CommonError::<Test>::TokenNotFound1065 );10661067 assert_eq!(1068 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1069 01070 );1071 });1072}10731074#[test]1075fn burn_fungible_item() {1076 new_test_ext().execute_with(|| {1077 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));10781079 let origin1 = Origin::signed(1);1080 assert_ok!(Unique::add_collection_admin(1081 origin1.clone(),1082 collection_id,1083 account(2)1084 ));10851086 let data = default_fungible_data();1087 create_test_item(collection_id, &data.into());10881089 // check balance (collection with id = 1, user id = 1)1090 assert_eq!(1091 <pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1092 51093 );10941095 // burn item1096 assert_ok!(Unique::burn_item(1097 origin1.clone(),1098 CollectionId(1),1099 TokenId(0),1100 51101 ));1102 assert_noop!(1103 Unique::burn_item(origin1, CollectionId(1), TokenId(0), 5).map_err(|e| e.error),1104 CommonError::<Test>::TokenValueTooLow1105 );11061107 assert_eq!(1108 <pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1109 01110 );1111 });1112}11131114#[test]1115fn burn_fungible_item_with_token_id() {1116 new_test_ext().execute_with(|| {1117 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));11181119 let origin1 = Origin::signed(1);1120 assert_ok!(Unique::add_collection_admin(1121 origin1.clone(),1122 collection_id,1123 account(2)1124 ));11251126 let data = default_fungible_data();1127 create_test_item(collection_id, &data.into());11281129 // check balance (collection with id = 1, user id = 1)1130 assert_eq!(1131 <pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1132 51133 );11341135 // Try to burn item using Token ID1136 assert_noop!(1137 Unique::burn_item(origin1, CollectionId(1), TokenId(1), 5).map_err(|e| e.error),1138 <pallet_fungible::Error::<Test>>::FungibleItemsHaveNoId1139 );1140 });1141}1142#[test]1143fn burn_refungible_item() {1144 new_test_ext().execute_with(|| {1145 let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));1146 let origin1 = Origin::signed(1);11471148 assert_ok!(Unique::set_mint_permission(1149 origin1.clone(),1150 collection_id,1151 true1152 ));1153 assert_ok!(Unique::set_public_access_mode(1154 origin1.clone(),1155 collection_id,1156 AccessMode::AllowList1157 ));1158 assert_ok!(Unique::add_to_allow_list(1159 origin1.clone(),1160 collection_id,1161 account(1)1162 ));11631164 assert_ok!(Unique::add_collection_admin(1165 origin1.clone(),1166 collection_id,1167 account(2)1168 ));11691170 let data = default_re_fungible_data();1171 create_test_item(collection_id, &data.into());11721173 // check balance (collection with id = 1, user id = 2)1174 assert_eq!(1175 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),1176 11177 );1178 assert_eq!(1179 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),1180 10231181 );11821183 // burn item1184 assert_ok!(Unique::burn_item(1185 origin1.clone(),1186 collection_id,1187 TokenId(1),1188 10231189 ));1190 assert_noop!(1191 Unique::burn_item(origin1, collection_id, TokenId(1), 1023).map_err(|e| e.error),1192 CommonError::<Test>::TokenValueTooLow1193 );11941195 assert_eq!(1196 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),1197 01198 );1199 });1200}12011202#[test]1203fn add_collection_admin() {1204 new_test_ext().execute_with(|| {1205 let collection1_id =1206 create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));1207 let origin1 = Origin::signed(1);12081209 // Add collection admins1210 assert_ok!(Unique::add_collection_admin(1211 origin1.clone(),1212 collection1_id,1213 account(2)1214 ));1215 assert_ok!(Unique::add_collection_admin(1216 origin1,1217 collection1_id,1218 account(3)1219 ));12201221 // Owner is not an admin by default1222 assert_eq!(1223 <pallet_common::IsAdmin<Test>>::get((CollectionId(1), account(1))),1224 false1225 );1226 assert!(<pallet_common::IsAdmin<Test>>::get((1227 CollectionId(1),1228 account(2)1229 )));1230 assert!(<pallet_common::IsAdmin<Test>>::get((1231 CollectionId(1),1232 account(3)1233 )));1234 });1235}12361237#[test]1238fn remove_collection_admin() {1239 new_test_ext().execute_with(|| {1240 let collection1_id =1241 create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));1242 let origin1 = Origin::signed(1);1243 let origin2 = Origin::signed(2);12441245 // Add collection admins 2 and 31246 assert_ok!(Unique::add_collection_admin(1247 origin1.clone(),1248 collection1_id,1249 account(2)1250 ));1251 assert_ok!(Unique::add_collection_admin(1252 origin1,1253 collection1_id,1254 account(3)1255 ));12561257 assert!(<pallet_common::IsAdmin<Test>>::get((1258 CollectionId(1),1259 account(2)1260 )));1261 assert!(<pallet_common::IsAdmin<Test>>::get((1262 CollectionId(1),1263 account(3)1264 )));12651266 // remove admin 31267 assert_ok!(Unique::remove_collection_admin(1268 origin2,1269 CollectionId(1),1270 account(3)1271 ));12721273 // 2 is still admin, 3 is not an admin anymore1274 assert!(<pallet_common::IsAdmin<Test>>::get((1275 CollectionId(1),1276 account(2)1277 )));1278 assert_eq!(1279 <pallet_common::IsAdmin<Test>>::get((CollectionId(1), account(3))),1280 false1281 );1282 });1283}12841285#[test]1286fn balance_of() {1287 new_test_ext().execute_with(|| {1288 let nft_collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1289 let fungible_collection_id =1290 create_test_collection(&CollectionMode::Fungible(3), CollectionId(2));1291 let re_fungible_collection_id =1292 create_test_collection(&CollectionMode::ReFungible, CollectionId(3));12931294 // check balance before1295 assert_eq!(1296 <pallet_nonfungible::AccountBalance<Test>>::get((nft_collection_id, account(1))),1297 01298 );1299 assert_eq!(1300 <pallet_fungible::Balance<Test>>::get((fungible_collection_id, account(1))),1301 01302 );1303 assert_eq!(1304 <pallet_refungible::AccountBalance<Test>>::get((re_fungible_collection_id, account(1))),1305 01306 );13071308 let nft_data = default_nft_data();1309 create_test_item(nft_collection_id, &nft_data.into());13101311 let fungible_data = default_fungible_data();1312 create_test_item(fungible_collection_id, &fungible_data.into());13131314 let re_fungible_data = default_re_fungible_data();1315 create_test_item(re_fungible_collection_id, &re_fungible_data.into());13161317 // check balance (collection with id = 1, user id = 1)1318 assert_eq!(1319 <pallet_nonfungible::AccountBalance<Test>>::get((nft_collection_id, account(1))),1320 11321 );1322 assert_eq!(1323 <pallet_fungible::Balance<Test>>::get((fungible_collection_id, account(1))),1324 51325 );1326 assert_eq!(1327 <pallet_refungible::AccountBalance<Test>>::get((re_fungible_collection_id, account(1))),1328 11329 );13301331 assert_eq!(1332 <pallet_nonfungible::Owned<Test>>::get((nft_collection_id, account(1), TokenId(1))),1333 true1334 );1335 assert_eq!(1336 <pallet_refungible::Owned<Test>>::get((1337 re_fungible_collection_id,1338 account(1),1339 TokenId(1)1340 )),1341 true1342 );1343 });1344}13451346#[test]1347fn approve() {1348 new_test_ext().execute_with(|| {1349 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));13501351 let data = default_nft_data();1352 create_test_item(collection_id, &data.into());13531354 let origin1 = Origin::signed(1);13551356 // approve1357 assert_ok!(Unique::approve(1358 origin1,1359 account(2),1360 CollectionId(1),1361 TokenId(1),1362 11363 ));1364 assert_eq!(1365 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1366 account(2)1367 );1368 });1369}13701371#[test]1372fn transfer_from() {1373 new_test_ext().execute_with(|| {1374 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1375 let origin1 = Origin::signed(1);1376 let origin2 = Origin::signed(2);13771378 let data = default_nft_data();1379 create_test_item(collection_id, &data.into());13801381 // approve1382 assert_ok!(Unique::approve(1383 origin1.clone(),1384 account(2),1385 CollectionId(1),1386 TokenId(1),1387 11388 ));1389 assert_eq!(1390 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1391 account(2)1392 );13931394 assert_ok!(Unique::set_mint_permission(1395 origin1.clone(),1396 CollectionId(1),1397 true1398 ));1399 assert_ok!(Unique::set_public_access_mode(1400 origin1.clone(),1401 CollectionId(1),1402 AccessMode::AllowList1403 ));1404 assert_ok!(Unique::add_to_allow_list(1405 origin1.clone(),1406 CollectionId(1),1407 account(1)1408 ));1409 assert_ok!(Unique::add_to_allow_list(1410 origin1.clone(),1411 CollectionId(1),1412 account(2)1413 ));1414 assert_ok!(Unique::add_to_allow_list(1415 origin1,1416 CollectionId(1),1417 account(3)1418 ));14191420 assert_ok!(Unique::transfer_from(1421 origin2,1422 account(1),1423 account(2),1424 CollectionId(1),1425 TokenId(1),1426 11427 ));14281429 // after transfer1430 assert_eq!(1431 <pallet_nonfungible::AccountBalance<Test>>::get((CollectionId(1), account(1))),1432 01433 );1434 assert_eq!(1435 <pallet_nonfungible::AccountBalance<Test>>::get((CollectionId(1), account(2))),1436 11437 );1438 });1439}14401441// #endregion14421443// Coverage tests region1444// #region14451446#[test]1447fn owner_can_add_address_to_allow_list() {1448 new_test_ext().execute_with(|| {1449 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));14501451 let origin1 = Origin::signed(1);1452 assert_ok!(Unique::add_to_allow_list(1453 origin1,1454 collection_id,1455 account(2)1456 ));1457 assert!(<pallet_common::Allowlist<Test>>::get((1458 collection_id,1459 account(2)1460 )));1461 });1462}14631464#[test]1465fn admin_can_add_address_to_allow_list() {1466 new_test_ext().execute_with(|| {1467 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1468 let origin1 = Origin::signed(1);1469 let origin2 = Origin::signed(2);14701471 assert_ok!(Unique::add_collection_admin(1472 origin1,1473 collection_id,1474 account(2)1475 ));1476 assert_ok!(Unique::add_to_allow_list(1477 origin2,1478 collection_id,1479 account(3)1480 ));1481 assert!(<pallet_common::Allowlist<Test>>::get((1482 collection_id,1483 account(3)1484 )));1485 });1486}14871488#[test]1489fn nonprivileged_user_cannot_add_address_to_allow_list() {1490 new_test_ext().execute_with(|| {1491 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));14921493 let origin2 = Origin::signed(2);1494 assert_noop!(1495 Unique::add_to_allow_list(origin2, collection_id, account(3)),1496 CommonError::<Test>::NoPermission1497 );1498 });1499}15001501#[test]1502fn nobody_can_add_address_to_allow_list_of_nonexisting_collection() {1503 new_test_ext().execute_with(|| {1504 let origin1 = Origin::signed(1);15051506 assert_noop!(1507 Unique::add_to_allow_list(origin1, CollectionId(1), account(2)),1508 CommonError::<Test>::CollectionNotFound1509 );1510 });1511}15121513#[test]1514fn nobody_can_add_address_to_allow_list_of_deleted_collection() {1515 new_test_ext().execute_with(|| {1516 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15171518 let origin1 = Origin::signed(1);1519 assert_ok!(Unique::destroy_collection(origin1.clone(), collection_id));1520 assert_noop!(1521 Unique::add_to_allow_list(origin1, collection_id, account(2)),1522 CommonError::<Test>::CollectionNotFound1523 );1524 });1525}15261527// If address is already added to allow list, nothing happens1528#[test]1529fn address_is_already_added_to_allow_list() {1530 new_test_ext().execute_with(|| {1531 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1532 let origin1 = Origin::signed(1);15331534 assert_ok!(Unique::add_to_allow_list(1535 origin1.clone(),1536 collection_id,1537 account(2)1538 ));1539 assert_ok!(Unique::add_to_allow_list(1540 origin1,1541 collection_id,1542 account(2)1543 ));1544 assert!(<pallet_common::Allowlist<Test>>::get((1545 collection_id,1546 account(2)1547 )));1548 });1549}15501551#[test]1552fn owner_can_remove_address_from_allow_list() {1553 new_test_ext().execute_with(|| {1554 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15551556 let origin1 = Origin::signed(1);1557 assert_ok!(Unique::add_to_allow_list(1558 origin1.clone(),1559 collection_id,1560 account(2)1561 ));1562 assert_ok!(Unique::remove_from_allow_list(1563 origin1,1564 collection_id,1565 account(2)1566 ));1567 assert_eq!(1568 <pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1569 false1570 );1571 });1572}15731574#[test]1575fn admin_can_remove_address_from_allow_list() {1576 new_test_ext().execute_with(|| {1577 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1578 let origin1 = Origin::signed(1);1579 let origin2 = Origin::signed(2);15801581 // Owner adds admin1582 assert_ok!(Unique::add_collection_admin(1583 origin1.clone(),1584 collection_id,1585 account(2)1586 ));15871588 // Owner adds address 3 to allow list1589 assert_ok!(Unique::add_to_allow_list(1590 origin1,1591 collection_id,1592 account(3)1593 ));15941595 // Admin removes address 3 from allow list1596 assert_ok!(Unique::remove_from_allow_list(1597 origin2,1598 collection_id,1599 account(3)1600 ));1601 assert_eq!(1602 <pallet_common::Allowlist<Test>>::get((collection_id, account(3))),1603 false1604 );1605 });1606}16071608#[test]1609fn nonprivileged_user_cannot_remove_address_from_allow_list() {1610 new_test_ext().execute_with(|| {1611 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1612 let origin1 = Origin::signed(1);1613 let origin2 = Origin::signed(2);16141615 assert_ok!(Unique::add_to_allow_list(1616 origin1,1617 collection_id,1618 account(2)1619 ));1620 assert_noop!(1621 Unique::remove_from_allow_list(origin2, collection_id, account(2)),1622 CommonError::<Test>::NoPermission1623 );1624 assert!(<pallet_common::Allowlist<Test>>::get((1625 collection_id,1626 account(2)1627 )));1628 });1629}16301631#[test]1632fn nobody_can_remove_address_from_allow_list_of_nonexisting_collection() {1633 new_test_ext().execute_with(|| {1634 let origin1 = Origin::signed(1);16351636 assert_noop!(1637 Unique::remove_from_allow_list(origin1, CollectionId(1), account(2)),1638 CommonError::<Test>::CollectionNotFound1639 );1640 });1641}16421643#[test]1644fn nobody_can_remove_address_from_allow_list_of_deleted_collection() {1645 new_test_ext().execute_with(|| {1646 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1647 let origin1 = Origin::signed(1);1648 let origin2 = Origin::signed(2);16491650 // Add account 2 to allow list1651 assert_ok!(Unique::add_to_allow_list(1652 origin1.clone(),1653 collection_id,1654 account(2)1655 ));16561657 // Account 2 is in collection allow-list1658 assert!(<pallet_common::Allowlist<Test>>::get((1659 collection_id,1660 account(2)1661 )));16621663 // Destroy collection1664 assert_ok!(Unique::destroy_collection(origin1, collection_id));16651666 // Attempt to remove account 2 from collection allow-list => error1667 assert_noop!(1668 Unique::remove_from_allow_list(origin2, collection_id, account(2)),1669 CommonError::<Test>::CollectionNotFound1670 );16711672 // Account 2 is not found in collection allow-list anyway1673 assert_eq!(1674 <pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1675 false1676 );1677 });1678}16791680// If address is already removed from allow list, nothing happens1681#[test]1682fn address_is_already_removed_from_allow_list() {1683 new_test_ext().execute_with(|| {1684 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1685 let origin1 = Origin::signed(1);16861687 assert_ok!(Unique::add_to_allow_list(1688 origin1.clone(),1689 collection_id,1690 account(2)1691 ));1692 assert_ok!(Unique::remove_from_allow_list(1693 origin1.clone(),1694 collection_id,1695 account(2)1696 ));1697 assert_eq!(1698 <pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1699 false1700 );1701 assert_ok!(Unique::remove_from_allow_list(1702 origin1,1703 collection_id,1704 account(2)1705 ));1706 assert_eq!(1707 <pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1708 false1709 );1710 });1711}17121713// If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom (2 tests)1714#[test]1715fn allow_list_test_1() {1716 new_test_ext().execute_with(|| {1717 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));17181719 let origin1 = Origin::signed(1);17201721 let data = default_nft_data();1722 create_test_item(collection_id, &data.into());17231724 assert_ok!(Unique::set_public_access_mode(1725 origin1.clone(),1726 collection_id,1727 AccessMode::AllowList1728 ));1729 assert_ok!(Unique::add_to_allow_list(1730 origin1.clone(),1731 collection_id,1732 account(2)1733 ));17341735 assert_noop!(1736 Unique::transfer(origin1, account(3), CollectionId(1), TokenId(1), 1)1737 .map_err(|e| e.error),1738 CommonError::<Test>::AddressNotInAllowlist1739 );1740 });1741}17421743#[test]1744fn allow_list_test_2() {1745 new_test_ext().execute_with(|| {1746 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1747 let origin1 = Origin::signed(1);17481749 let data = default_nft_data();1750 create_test_item(collection_id, &data.into());17511752 assert_ok!(Unique::set_public_access_mode(1753 origin1.clone(),1754 collection_id,1755 AccessMode::AllowList1756 ));1757 assert_ok!(Unique::add_to_allow_list(1758 origin1.clone(),1759 collection_id,1760 account(1)1761 ));1762 assert_ok!(Unique::add_to_allow_list(1763 origin1.clone(),1764 collection_id,1765 account(2)1766 ));17671768 // do approve1769 assert_ok!(Unique::approve(1770 origin1.clone(),1771 account(1),1772 collection_id,1773 TokenId(1),1774 11775 ));1776 assert_eq!(1777 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1778 account(1)1779 );17801781 assert_ok!(Unique::remove_from_allow_list(1782 origin1.clone(),1783 collection_id,1784 account(1)1785 ));17861787 assert_noop!(1788 Unique::transfer_from(1789 origin1,1790 account(1),1791 account(3),1792 CollectionId(1),1793 TokenId(1),1794 11795 )1796 .map_err(|e| e.error),1797 CommonError::<Test>::AddressNotInAllowlist1798 );1799 });1800}18011802// If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom (2 tests)1803#[test]1804fn allow_list_test_3() {1805 new_test_ext().execute_with(|| {1806 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18071808 let origin1 = Origin::signed(1);18091810 let data = default_nft_data();1811 create_test_item(collection_id, &data.into());18121813 assert_ok!(Unique::set_public_access_mode(1814 origin1.clone(),1815 collection_id,1816 AccessMode::AllowList1817 ));1818 assert_ok!(Unique::add_to_allow_list(1819 origin1.clone(),1820 collection_id,1821 account(1)1822 ));18231824 assert_noop!(1825 Unique::transfer(origin1, account(3), collection_id, TokenId(1), 1)1826 .map_err(|e| e.error),1827 CommonError::<Test>::AddressNotInAllowlist1828 );1829 });1830}18311832#[test]1833fn allow_list_test_4() {1834 new_test_ext().execute_with(|| {1835 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18361837 let origin1 = Origin::signed(1);18381839 let data = default_nft_data();1840 create_test_item(collection_id, &data.into());18411842 assert_ok!(Unique::set_public_access_mode(1843 origin1.clone(),1844 collection_id,1845 AccessMode::AllowList1846 ));1847 assert_ok!(Unique::add_to_allow_list(1848 origin1.clone(),1849 collection_id,1850 account(1)1851 ));1852 assert_ok!(Unique::add_to_allow_list(1853 origin1.clone(),1854 collection_id,1855 account(2)1856 ));18571858 // do approve1859 assert_ok!(Unique::approve(1860 origin1.clone(),1861 account(1),1862 collection_id,1863 TokenId(1),1864 11865 ));1866 assert_eq!(1867 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1868 account(1)1869 );18701871 assert_ok!(Unique::remove_from_allow_list(1872 origin1.clone(),1873 collection_id,1874 account(2)1875 ));18761877 assert_noop!(1878 Unique::transfer_from(1879 origin1,1880 account(1),1881 account(3),1882 collection_id,1883 TokenId(1),1884 11885 )1886 .map_err(|e| e.error),1887 CommonError::<Test>::AddressNotInAllowlist1888 );1889 });1890}18911892// If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)1893#[test]1894fn allow_list_test_5() {1895 new_test_ext().execute_with(|| {1896 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18971898 let origin1 = Origin::signed(1);18991900 let data = default_nft_data();1901 create_test_item(collection_id, &data.into());19021903 assert_ok!(Unique::set_public_access_mode(1904 origin1.clone(),1905 collection_id,1906 AccessMode::AllowList1907 ));1908 assert_noop!(1909 Unique::burn_item(origin1.clone(), CollectionId(1), TokenId(1), 1).map_err(|e| e.error),1910 CommonError::<Test>::AddressNotInAllowlist1911 );1912 });1913}19141915// If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method).1916#[test]1917fn allow_list_test_6() {1918 new_test_ext().execute_with(|| {1919 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19201921 let origin1 = Origin::signed(1);19221923 let data = default_nft_data();1924 create_test_item(collection_id, &data.into());19251926 assert_ok!(Unique::set_public_access_mode(1927 origin1.clone(),1928 collection_id,1929 AccessMode::AllowList1930 ));19311932 // do approve1933 assert_noop!(1934 Unique::approve(origin1, account(1), CollectionId(1), TokenId(1), 1)1935 .map_err(|e| e.error),1936 CommonError::<Test>::AddressNotInAllowlist1937 );1938 });1939}19401941// If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests) and1942// tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests)1943#[test]1944fn allow_list_test_7() {1945 new_test_ext().execute_with(|| {1946 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19471948 let data = default_nft_data();1949 create_test_item(collection_id, &data.into());19501951 let origin1 = Origin::signed(1);19521953 assert_ok!(Unique::set_public_access_mode(1954 origin1.clone(),1955 collection_id,1956 AccessMode::AllowList1957 ));1958 assert_ok!(Unique::add_to_allow_list(1959 origin1.clone(),1960 collection_id,1961 account(1)1962 ));1963 assert_ok!(Unique::add_to_allow_list(1964 origin1.clone(),1965 collection_id,1966 account(2)1967 ));19681969 assert_ok!(Unique::transfer(1970 origin1,1971 account(2),1972 CollectionId(1),1973 TokenId(1),1974 11975 ));1976 });1977}19781979#[test]1980fn allow_list_test_8() {1981 new_test_ext().execute_with(|| {1982 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19831984 // Create NFT for account 11985 let data = default_nft_data();1986 create_test_item(collection_id, &data.into());19871988 let origin1 = Origin::signed(1);19891990 // Toggle Allow List mode and add accounts 1 and 21991 assert_ok!(Unique::set_public_access_mode(1992 origin1.clone(),1993 collection_id,1994 AccessMode::AllowList1995 ));1996 assert_ok!(Unique::add_to_allow_list(1997 origin1.clone(),1998 collection_id,1999 account(1)2000 ));2001 assert_ok!(Unique::add_to_allow_list(2002 origin1.clone(),2003 collection_id,2004 account(2)2005 ));20062007 // Sself-approve account 1 for NFT 12008 assert_ok!(Unique::approve(2009 origin1.clone(),2010 account(1),2011 CollectionId(1),2012 TokenId(1),2013 12014 ));2015 assert_eq!(2016 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),2017 account(1)2018 );20192020 // Transfer from 1 to 22021 assert_ok!(Unique::transfer_from(2022 origin1,2023 account(1),2024 account(2),2025 CollectionId(1),2026 TokenId(1),2027 12028 ));2029 });2030}20312032// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner.2033#[test]2034fn allow_list_test_9() {2035 new_test_ext().execute_with(|| {2036 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2037 let origin1 = Origin::signed(1);20382039 assert_ok!(Unique::set_public_access_mode(2040 origin1.clone(),2041 collection_id,2042 AccessMode::AllowList2043 ));2044 assert_ok!(Unique::set_mint_permission(origin1, collection_id, false));20452046 let data = default_nft_data();2047 create_test_item(collection_id, &data.into());2048 });2049}20502051// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin.2052#[test]2053fn allow_list_test_10() {2054 new_test_ext().execute_with(|| {2055 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));20562057 let origin1 = Origin::signed(1);2058 let origin2 = Origin::signed(2);20592060 assert_ok!(Unique::set_public_access_mode(2061 origin1.clone(),2062 collection_id,2063 AccessMode::AllowList2064 ));2065 assert_ok!(Unique::set_mint_permission(2066 origin1.clone(),2067 collection_id,2068 false2069 ));20702071 assert_ok!(Unique::add_collection_admin(2072 origin1,2073 collection_id,2074 account(2)2075 ));20762077 assert_ok!(Unique::create_item(2078 origin2,2079 collection_id,2080 account(2),2081 default_nft_data().into()2082 ));2083 });2084}20852086// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow listed address.2087#[test]2088fn allow_list_test_11() {2089 new_test_ext().execute_with(|| {2090 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));20912092 let origin1 = Origin::signed(1);2093 let origin2 = Origin::signed(2);20942095 assert_ok!(Unique::set_public_access_mode(2096 origin1.clone(),2097 collection_id,2098 AccessMode::AllowList2099 ));2100 assert_ok!(Unique::set_mint_permission(2101 origin1.clone(),2102 collection_id,2103 false2104 ));2105 assert_ok!(Unique::add_to_allow_list(2106 origin1,2107 collection_id,2108 account(2)2109 ));21102111 assert_noop!(2112 Unique::create_item(2113 origin2,2114 CollectionId(1),2115 account(2),2116 default_nft_data().into()2117 )2118 .map_err(|e| e.error),2119 CommonError::<Test>::PublicMintingNotAllowed2120 );2121 });2122}21232124// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address.2125#[test]2126fn allow_list_test_12() {2127 new_test_ext().execute_with(|| {2128 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21292130 let origin1 = Origin::signed(1);2131 let origin2 = Origin::signed(2);21322133 assert_ok!(Unique::set_public_access_mode(2134 origin1.clone(),2135 collection_id,2136 AccessMode::AllowList2137 ));2138 assert_ok!(Unique::set_mint_permission(origin1, collection_id, false));21392140 assert_noop!(2141 Unique::create_item(2142 origin2,2143 CollectionId(1),2144 account(2),2145 default_nft_data().into()2146 )2147 .map_err(|e| e.error),2148 CommonError::<Test>::PublicMintingNotAllowed2149 );2150 });2151}21522153// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner.2154#[test]2155fn allow_list_test_13() {2156 new_test_ext().execute_with(|| {2157 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21582159 let origin1 = Origin::signed(1);21602161 assert_ok!(Unique::set_public_access_mode(2162 origin1.clone(),2163 collection_id,2164 AccessMode::AllowList2165 ));2166 assert_ok!(Unique::set_mint_permission(origin1, collection_id, true));21672168 let data = default_nft_data();2169 create_test_item(collection_id, &data.into());2170 });2171}21722173// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin.2174#[test]2175fn allow_list_test_14() {2176 new_test_ext().execute_with(|| {2177 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21782179 let origin1 = Origin::signed(1);2180 let origin2 = Origin::signed(2);21812182 assert_ok!(Unique::set_public_access_mode(2183 origin1.clone(),2184 collection_id,2185 AccessMode::AllowList2186 ));2187 assert_ok!(Unique::set_mint_permission(2188 origin1.clone(),2189 collection_id,2190 true2191 ));21922193 assert_ok!(Unique::add_collection_admin(2194 origin1,2195 collection_id,2196 account(2)2197 ));21982199 assert_ok!(Unique::create_item(2200 origin2,2201 collection_id,2202 account(2),2203 default_nft_data().into()2204 ));2205 });2206}22072208// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address.2209#[test]2210fn allow_list_test_15() {2211 new_test_ext().execute_with(|| {2212 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22132214 let origin1 = Origin::signed(1);2215 let origin2 = Origin::signed(2);22162217 assert_ok!(Unique::set_public_access_mode(2218 origin1.clone(),2219 collection_id,2220 AccessMode::AllowList2221 ));2222 assert_ok!(Unique::set_mint_permission(origin1, collection_id, true));22232224 assert_noop!(2225 Unique::create_item(2226 origin2,2227 collection_id,2228 account(2),2229 default_nft_data().into()2230 )2231 .map_err(|e| e.error),2232 CommonError::<Test>::AddressNotInAllowlist2233 );2234 });2235}22362237// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address.2238#[test]2239fn allow_list_test_16() {2240 new_test_ext().execute_with(|| {2241 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22422243 let origin1 = Origin::signed(1);2244 let origin2 = Origin::signed(2);22452246 assert_ok!(Unique::set_public_access_mode(2247 origin1.clone(),2248 collection_id,2249 AccessMode::AllowList2250 ));2251 assert_ok!(Unique::set_mint_permission(2252 origin1.clone(),2253 collection_id,2254 true2255 ));2256 assert_ok!(Unique::add_to_allow_list(2257 origin1,2258 collection_id,2259 account(2)2260 ));22612262 assert_ok!(Unique::create_item(2263 origin2,2264 collection_id,2265 account(2),2266 default_nft_data().into()2267 ));2268 });2269}22702271// Total number of collections. Positive test2272#[test]2273fn total_number_collections_bound() {2274 new_test_ext().execute_with(|| {2275 create_test_collection(&CollectionMode::NFT, CollectionId(1));2276 });2277}22782279#[test]2280fn create_max_collections() {2281 new_test_ext().execute_with(|| {2282 for i in 1..COLLECTION_NUMBER_LIMIT {2283 create_test_collection(&CollectionMode::NFT, CollectionId(i));2284 }2285 });2286}22872288// Total number of collections. Negative test2289#[test]2290fn total_number_collections_bound_neg() {2291 new_test_ext().execute_with(|| {2292 let origin1 = Origin::signed(1);22932294 for i in 1..=COLLECTION_NUMBER_LIMIT {2295 create_test_collection(&CollectionMode::NFT, CollectionId(i));2296 }22972298 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2299 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2300 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();23012302 let data: CreateCollectionData<u64> = CreateCollectionData {2303 name: col_name1.try_into().unwrap(),2304 description: col_desc1.try_into().unwrap(),2305 token_prefix: token_prefix1.try_into().unwrap(),2306 mode: CollectionMode::NFT,2307 ..Default::default()2308 };23092310 // 11-th collection in chain. Expects error2311 assert_noop!(2312 Unique::create_collection_ex(origin1, data),2313 CommonError::<Test>::TotalCollectionsLimitExceeded2314 );2315 });2316}23172318// Owned tokens by a single address. Positive test2319#[test]2320fn owned_tokens_bound() {2321 new_test_ext().execute_with(|| {2322 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23232324 let data = default_nft_data();2325 create_test_item(collection_id, &data.clone().into());2326 create_test_item(collection_id, &data.into());2327 });2328}23292330// Owned tokens by a single address. Negotive test2331#[test]2332fn owned_tokens_bound_neg() {2333 new_test_ext().execute_with(|| {2334 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23352336 let origin1 = Origin::signed(1);23372338 for _ in 1..=MAX_TOKEN_OWNERSHIP {2339 let data = default_nft_data();2340 create_test_item(collection_id, &data.clone().into());2341 }23422343 let data = default_nft_data();2344 assert_noop!(2345 Unique::create_item(origin1, CollectionId(1), account(1), data.into())2346 .map_err(|e| e.error),2347 CommonError::<Test>::AccountTokenLimitExceeded2348 );2349 });2350}23512352// Number of collection admins. Positive test2353#[test]2354fn collection_admins_bound() {2355 new_test_ext().execute_with(|| {2356 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23572358 let origin1 = Origin::signed(1);23592360 assert_ok!(Unique::add_collection_admin(2361 origin1.clone(),2362 collection_id,2363 account(2)2364 ));2365 assert_ok!(Unique::add_collection_admin(2366 origin1,2367 collection_id,2368 account(3)2369 ));2370 });2371}23722373// Number of collection admins. Negotive test2374#[test]2375fn collection_admins_bound_neg() {2376 new_test_ext().execute_with(|| {2377 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23782379 let origin1 = Origin::signed(1);23802381 for i in 0..COLLECTION_ADMINS_LIMIT {2382 assert_ok!(Unique::add_collection_admin(2383 origin1.clone(),2384 collection_id,2385 account((2 + i).into())2386 ));2387 }2388 assert_noop!(2389 Unique::add_collection_admin(2390 origin1,2391 collection_id,2392 account((3 + COLLECTION_ADMINS_LIMIT).into())2393 ),2394 CommonError::<Test>::CollectionAdminCountExceeded2395 );2396 });2397}2398// #endregion23992400#[test]2401fn set_const_on_chain_schema() {2402 new_test_ext().execute_with(|| {2403 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));24042405 let origin1 = Origin::signed(1);2406 assert_ok!(Unique::set_const_on_chain_schema(2407 origin1,2408 collection_id,2409 b"test const on chain schema".to_vec().try_into().unwrap()2410 ));24112412 assert_eq!(2413 <pallet_common::CollectionData<Test>>::get((2414 collection_id,2415 CollectionField::ConstOnChainSchema2416 )),2417 b"test const on chain schema".to_vec()2418 );2419 });2420}24212422#[test]2423fn collection_transfer_flag_works() {2424 new_test_ext().execute_with(|| {2425 let origin1 = Origin::signed(1);24262427 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2428 assert_ok!(Unique::set_transfers_enabled_flag(2429 origin1,2430 collection_id,2431 true2432 ));24332434 let data = default_nft_data();2435 create_test_item(collection_id, &data.into());2436 assert_eq!(2437 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2438 12439 );2440 assert_eq!(2441 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2442 true2443 );24442445 let origin1 = Origin::signed(1);24462447 // default scenario2448 assert_ok!(Unique::transfer(2449 origin1,2450 account(2),2451 collection_id,2452 TokenId(1),2453 12454 ));2455 assert_eq!(2456 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2457 false2458 );2459 assert_eq!(2460 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),2461 true2462 );2463 assert_eq!(2464 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2465 02466 );2467 assert_eq!(2468 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),2469 12470 );2471 });2472}24732474#[test]2475fn collection_transfer_flag_works_neg() {2476 new_test_ext().execute_with(|| {2477 let origin1 = Origin::signed(1);24782479 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2480 assert_ok!(Unique::set_transfers_enabled_flag(2481 origin1,2482 collection_id,2483 false2484 ));24852486 let data = default_nft_data();2487 create_test_item(collection_id, &data.into());2488 assert_eq!(2489 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2490 12491 );2492 assert_eq!(2493 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2494 true2495 );24962497 let origin1 = Origin::signed(1);24982499 // default scenario2500 assert_noop!(2501 Unique::transfer(origin1, account(2), CollectionId(1), TokenId(1), 1)2502 .map_err(|e| e.error),2503 CommonError::<Test>::TransferNotAllowed2504 );2505 assert_eq!(2506 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2507 12508 );2509 assert_eq!(2510 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),2511 02512 );2513 assert_eq!(2514 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2515 true2516 );2517 assert_eq!(2518 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),2519 false2520 );2521 });2522}25232524#[test]2525fn collection_sponsoring() {2526 new_test_ext().execute_with(|| {2527 // default_limits();2528 let user1 = 1_u64;2529 let user2 = 777_u64;2530 let origin1 = Origin::signed(user1);2531 let origin2 = Origin::signed(user2);2532 let account2 = account(user2);25332534 let collection_id =2535 create_test_collection_for_owner(&CollectionMode::NFT, user1, CollectionId(1));2536 assert_ok!(Unique::set_collection_sponsor(2537 origin1.clone(),2538 collection_id,2539 user12540 ));2541 assert_ok!(Unique::confirm_sponsorship(origin1.clone(), collection_id));25422543 // Expect error while have no permissions2544 assert!(Unique::create_item(2545 origin2.clone(),2546 collection_id,2547 account2.clone(),2548 default_nft_data().into()2549 )2550 .is_err());25512552 assert_ok!(Unique::set_public_access_mode(2553 origin1.clone(),2554 collection_id,2555 AccessMode::AllowList2556 ));2557 assert_ok!(Unique::add_to_allow_list(2558 origin1.clone(),2559 collection_id,2560 account2.clone()2561 ));2562 assert_ok!(Unique::set_mint_permission(2563 origin1.clone(),2564 collection_id,2565 true2566 ));25672568 assert_ok!(Unique::create_item(2569 origin2,2570 collection_id,2571 account2,2572 default_nft_data().into()2573 ));2574 });2575}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// Tests to be written here18use crate::{Test, TestCrossAccountId, CollectionCreationPrice, Origin, Unique, new_test_ext};19use up_data_structs::{20 COLLECTION_NUMBER_LIMIT, CollectionId, CreateItemData, CreateFungibleData, CreateNftData,21 CreateReFungibleData, MAX_DECIMAL_POINTS, COLLECTION_ADMINS_LIMIT, TokenId,22 MAX_TOKEN_OWNERSHIP, CreateCollectionData, CollectionField, SchemaVersion, CollectionMode,23 AccessMode,24};25use frame_support::{assert_noop, assert_ok, assert_err};26use sp_std::convert::TryInto;27use pallet_evm::account::CrossAccountId;28use pallet_common::Error as CommonError;29use pallet_unique::Error as UniqueError;3031fn add_balance(user: u64, value: u64) {32 const DONOR_USER: u64 = 999;33 assert_ok!(<pallet_balances::Pallet<Test>>::set_balance(34 Origin::root(),35 DONOR_USER,36 value,37 038 ));39 assert_ok!(<pallet_balances::Pallet<Test>>::force_transfer(40 Origin::root(),41 DONOR_USER,42 user,43 value44 ));45}4647fn default_nft_data() -> CreateNftData {48 CreateNftData {49 const_data: vec![1, 2, 3].try_into().unwrap(),50 properties: vec![].try_into().unwrap(),51 }52}5354fn default_fungible_data() -> CreateFungibleData {55 CreateFungibleData { value: 5 }56}5758fn default_re_fungible_data() -> CreateReFungibleData {59 CreateReFungibleData {60 const_data: vec![1, 2, 3].try_into().unwrap(),61 pieces: 1023,62 }63}6465fn create_test_collection_for_owner(66 mode: &CollectionMode,67 owner: u64,68 id: CollectionId,69) -> CollectionId {70 add_balance(owner, CollectionCreationPrice::get() as u64 + 1);7172 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();73 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();74 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();7576 let data: CreateCollectionData<u64> = CreateCollectionData {77 name: col_name1.try_into().unwrap(),78 description: col_desc1.try_into().unwrap(),79 token_prefix: token_prefix1.try_into().unwrap(),80 mode: mode.clone(),81 ..Default::default()82 };8384 let origin1 = Origin::signed(owner);85 assert_ok!(Unique::create_collection_ex(origin1, data));8687 let saved_col_name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();88 let saved_description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();89 let saved_prefix: Vec<u8> = b"token_prefix1\0".to_vec();90 assert_eq!(91 <pallet_common::CollectionById<Test>>::get(id)92 .unwrap()93 .owner,94 owner95 );96 assert_eq!(97 <pallet_common::CollectionById<Test>>::get(id).unwrap().name,98 saved_col_name99 );100 assert_eq!(101 <pallet_common::CollectionById<Test>>::get(id).unwrap().mode,102 *mode103 );104 assert_eq!(105 <pallet_common::CollectionById<Test>>::get(id)106 .unwrap()107 .description,108 saved_description109 );110 assert_eq!(111 <pallet_common::CollectionById<Test>>::get(id)112 .unwrap()113 .token_prefix,114 saved_prefix115 );116 id117}118119fn create_test_collection(mode: &CollectionMode, id: CollectionId) -> CollectionId {120 create_test_collection_for_owner(&mode, 1, id)121}122123fn create_test_item(collection_id: CollectionId, data: &CreateItemData) {124 let origin1 = Origin::signed(1);125 assert_ok!(Unique::create_item(126 origin1,127 collection_id,128 account(1),129 data.clone()130 ));131}132133fn account(sub: u64) -> TestCrossAccountId {134 TestCrossAccountId::from_sub(sub)135}136137// Use cases tests region138// #region139140#[test]141fn set_version_schema() {142 new_test_ext().execute_with(|| {143 let origin1 = Origin::signed(1);144 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));145146 assert_ok!(Unique::set_schema_version(147 origin1,148 collection_id,149 SchemaVersion::Unique150 ));151 assert_eq!(152 <pallet_common::CollectionById<Test>>::get(collection_id)153 .unwrap()154 .schema_version,155 SchemaVersion::Unique156 );157 });158}159160#[test]161fn check_not_sufficient_founds() {162 new_test_ext().execute_with(|| {163 let acc: u64 = 1;164 <pallet_balances::Pallet<Test>>::set_balance(Origin::root(), acc, 0, 0).unwrap();165166 let name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();167 let description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();168 let token_prefix: Vec<u8> = b"token_prefix1\0".to_vec();169170 let data: CreateCollectionData<<Test as frame_system::Config>::AccountId> =171 CreateCollectionData {172 name: name.try_into().unwrap(),173 description: description.try_into().unwrap(),174 token_prefix: token_prefix.try_into().unwrap(),175 mode: CollectionMode::NFT,176 ..Default::default()177 };178179 let result = Unique::create_collection_ex(Origin::signed(acc), data);180 assert_err!(result, <CommonError<Test>>::NotSufficientFounds);181 });182}183184#[test]185fn create_fungible_collection_fails_with_large_decimal_numbers() {186 new_test_ext().execute_with(|| {187 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();188 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();189 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();190191 let data: CreateCollectionData<u64> = CreateCollectionData {192 name: col_name1.try_into().unwrap(),193 description: col_desc1.try_into().unwrap(),194 token_prefix: token_prefix1.try_into().unwrap(),195 mode: CollectionMode::Fungible(MAX_DECIMAL_POINTS + 1),196 ..Default::default()197 };198199 let origin1 = Origin::signed(1);200 assert_noop!(201 Unique::create_collection_ex(origin1, data),202 UniqueError::<Test>::CollectionDecimalPointLimitExceeded203 );204 });205}206207#[test]208fn create_nft_item() {209 new_test_ext().execute_with(|| {210 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));211212 let data = default_nft_data();213 create_test_item(collection_id, &data.clone().into());214215 let item = <pallet_nonfungible::TokenData<Test>>::get((collection_id, 1)).unwrap();216 assert_eq!(item.const_data, data.const_data.into_inner());217 });218}219220// Use cases tests region221// #region222#[test]223fn create_nft_multiple_items() {224 new_test_ext().execute_with(|| {225 create_test_collection(&CollectionMode::NFT, CollectionId(1));226227 let origin1 = Origin::signed(1);228229 let items_data = vec![default_nft_data(), default_nft_data(), default_nft_data()];230231 assert_ok!(Unique::create_multiple_items(232 origin1,233 CollectionId(1),234 account(1),235 items_data236 .clone()237 .into_iter()238 .map(|d| { d.into() })239 .collect()240 ));241 for (index, data) in items_data.into_iter().enumerate() {242 let item = <pallet_nonfungible::TokenData<Test>>::get((243 CollectionId(1),244 TokenId((index + 1) as u32),245 ))246 .unwrap();247 assert_eq!(item.const_data.to_vec(), data.const_data.into_inner());248 }249 });250}251252#[test]253fn create_refungible_item() {254 new_test_ext().execute_with(|| {255 let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));256257 let data = default_re_fungible_data();258 create_test_item(collection_id, &data.clone().into());259 let item = <pallet_refungible::TokenData<Test>>::get((collection_id, TokenId(1)));260 let balance =261 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1)));262 assert_eq!(item.const_data, data.const_data.into_inner());263 assert_eq!(balance, 1023);264 });265}266267#[test]268fn create_multiple_refungible_items() {269 new_test_ext().execute_with(|| {270 create_test_collection(&CollectionMode::ReFungible, CollectionId(1));271272 let origin1 = Origin::signed(1);273274 let items_data = vec![275 default_re_fungible_data(),276 default_re_fungible_data(),277 default_re_fungible_data(),278 ];279280 assert_ok!(Unique::create_multiple_items(281 origin1,282 CollectionId(1),283 account(1),284 items_data285 .clone()286 .into_iter()287 .map(|d| { d.into() })288 .collect()289 ));290 for (index, data) in items_data.into_iter().enumerate() {291 let item = <pallet_refungible::TokenData<Test>>::get((292 CollectionId(1),293 TokenId((index + 1) as u32),294 ));295 let balance =296 <pallet_refungible::Balance<Test>>::get((CollectionId(1), TokenId(1), account(1)));297 assert_eq!(item.const_data.to_vec(), data.const_data.into_inner());298 assert_eq!(balance, 1023);299 }300 });301}302303#[test]304fn create_fungible_item() {305 new_test_ext().execute_with(|| {306 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));307308 let data = default_fungible_data();309 create_test_item(collection_id, &data.into());310311 assert_eq!(312 <pallet_fungible::Balance<Test>>::get((collection_id, account(1))),313 5314 );315 });316}317318//#[test]319// fn create_multiple_fungible_items() {320// new_test_ext().execute_with(|| {321// default_limits();322323// create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));324325// let origin1 = Origin::signed(1);326327// let items_data = vec![default_fungible_data(), default_fungible_data(), default_fungible_data()];328329// assert_ok!(Unique::create_multiple_items(330// origin1.clone(),331// 1,332// 1,333// items_data.clone().into_iter().map(|d| { d.into() }).collect()334// ));335336// for (index, _) in items_data.iter().enumerate() {337// assert_eq!(Unique::fungible_item_id(1, (index + 1) as TokenId).value, 5);338// }339// assert_eq!(Unique::balance_count(1, 1), 3000);340// assert_eq!(Unique::address_tokens(1, 1), [1, 2, 3]);341// });342// }343344#[test]345fn transfer_fungible_item() {346 new_test_ext().execute_with(|| {347 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));348349 let origin1 = Origin::signed(1);350 let origin2 = Origin::signed(2);351352 let data = default_fungible_data();353 create_test_item(collection_id, &data.into());354355 assert_eq!(356 <pallet_fungible::Balance<Test>>::get((CollectionId(1), account(1))),357 5358 );359360 // change owner scenario361 assert_ok!(Unique::transfer(362 origin1,363 account(2),364 CollectionId(1),365 TokenId(0),366 5367 ));368 assert_eq!(369 <pallet_fungible::Balance<Test>>::get((CollectionId(1), account(1))),370 0371 );372373 // split item scenario374 assert_ok!(Unique::transfer(375 origin2.clone(),376 account(3),377 CollectionId(1),378 TokenId(0),379 3380 ));381382 // split item and new owner has account scenario383 assert_ok!(Unique::transfer(384 origin2,385 account(3),386 CollectionId(1),387 TokenId(0),388 1389 ));390 assert_eq!(391 <pallet_fungible::Balance<Test>>::get((CollectionId(1), account(2))),392 1393 );394 assert_eq!(395 <pallet_fungible::Balance<Test>>::get((CollectionId(1), account(3))),396 4397 );398 });399}400401#[test]402fn transfer_refungible_item() {403 new_test_ext().execute_with(|| {404 let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));405406 // Create RFT 1 in 1023 pieces for account 1407 let data = default_re_fungible_data();408 create_test_item(collection_id, &data.clone().into());409 let item = <pallet_refungible::TokenData<Test>>::get((collection_id, TokenId(1)));410 assert_eq!(item.const_data, data.const_data.into_inner());411 assert_eq!(412 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),413 1414 );415 assert_eq!(416 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),417 1023418 );419 assert_eq!(420 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),421 true422 );423424 // Account 1 transfers all 1023 pieces of RFT 1 to account 2425 let origin1 = Origin::signed(1);426 let origin2 = Origin::signed(2);427 assert_ok!(Unique::transfer(428 origin1,429 account(2),430 CollectionId(1),431 TokenId(1),432 1023433 ));434 assert_eq!(435 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),436 1023437 );438 assert_eq!(439 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),440 0441 );442 assert_eq!(443 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),444 1445 );446 assert_eq!(447 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),448 false449 );450 assert_eq!(451 <pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),452 true453 );454455 // Account 2 transfers 500 pieces of RFT 1 to account 3456 assert_ok!(Unique::transfer(457 origin2.clone(),458 account(3),459 CollectionId(1),460 TokenId(1),461 500462 ));463 assert_eq!(464 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),465 523466 );467 assert_eq!(468 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),469 500470 );471 assert_eq!(472 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),473 1474 );475 assert_eq!(476 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),477 1478 );479 assert_eq!(480 <pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),481 true482 );483 assert_eq!(484 <pallet_refungible::Owned<Test>>::get((collection_id, account(3), TokenId(1))),485 true486 );487488 // Account 2 transfers 200 more pieces of RFT 1 to account 3 with pre-existing balance489 assert_ok!(Unique::transfer(490 origin2,491 account(3),492 CollectionId(1),493 TokenId(1),494 200495 ));496 assert_eq!(497 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),498 323499 );500 assert_eq!(501 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),502 700503 );504 assert_eq!(505 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),506 1507 );508 assert_eq!(509 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),510 1511 );512 assert_eq!(513 <pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),514 true515 );516 assert_eq!(517 <pallet_refungible::Owned<Test>>::get((collection_id, account(3), TokenId(1))),518 true519 );520 });521}522523#[test]524fn transfer_nft_item() {525 new_test_ext().execute_with(|| {526 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));527528 let data = default_nft_data();529 create_test_item(collection_id, &data.into());530 assert_eq!(531 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),532 1533 );534 assert_eq!(535 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),536 true537 );538539 let origin1 = Origin::signed(1);540 // default scenario541 assert_ok!(Unique::transfer(542 origin1,543 account(2),544 CollectionId(1),545 TokenId(1),546 1547 ));548 assert_eq!(549 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),550 0551 );552 assert_eq!(553 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),554 1555 );556 assert_eq!(557 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),558 false559 );560 assert_eq!(561 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),562 true563 );564 });565}566567#[test]568fn transfer_nft_item_wrong_value() {569 new_test_ext().execute_with(|| {570 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));571572 let data = default_nft_data();573 create_test_item(collection_id, &data.into());574 assert_eq!(575 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),576 1577 );578 assert_eq!(579 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),580 true581 );582583 let origin1 = Origin::signed(1);584585 assert_noop!(586 Unique::transfer(origin1, account(2), CollectionId(1), TokenId(1), 2)587 .map_err(|e| e.error),588 <pallet_nonfungible::Error::<Test>>::NonfungibleItemsHaveNoAmount589 );590 });591}592593#[test]594fn transfer_nft_item_zero_value() {595 new_test_ext().execute_with(|| {596 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));597598 let data = default_nft_data();599 create_test_item(collection_id, &data.into());600 assert_eq!(601 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),602 1603 );604 assert_eq!(605 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),606 true607 );608609 let origin1 = Origin::signed(1);610611 // Transferring 0 amount works on NFT...612 assert_ok!(Unique::transfer(613 origin1,614 account(2),615 CollectionId(1),616 TokenId(1),617 0618 ));619 // ... and results in no transfer620 assert_eq!(621 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),622 1623 );624 assert_eq!(625 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),626 true627 );628 });629}630631#[test]632fn nft_approve_and_transfer_from() {633 new_test_ext().execute_with(|| {634 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));635636 let data = default_nft_data();637 create_test_item(collection_id, &data.into());638639 let origin1 = Origin::signed(1);640 let origin2 = Origin::signed(2);641642 assert_eq!(643 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),644 1645 );646 assert_eq!(647 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),648 true649 );650651 // neg transfer_from652 assert_noop!(653 Unique::transfer_from(654 origin2.clone(),655 account(1),656 account(2),657 CollectionId(1),658 TokenId(1),659 1660 )661 .map_err(|e| e.error),662 CommonError::<Test>::ApprovedValueTooLow663 );664665 // do approve666 assert_ok!(Unique::approve(667 origin1,668 account(2),669 CollectionId(1),670 TokenId(1),671 1672 ));673 assert_eq!(674 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),675 account(2)676 );677678 assert_ok!(Unique::transfer_from(679 origin2,680 account(1),681 account(3),682 CollectionId(1),683 TokenId(1),684 1685 ));686 assert!(687 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).is_none()688 );689 });690}691692#[test]693fn nft_approve_and_transfer_from_allow_list() {694 new_test_ext().execute_with(|| {695 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));696697 let origin1 = Origin::signed(1);698 let origin2 = Origin::signed(2);699700 // Create NFT 1 for account 1701 let data = default_nft_data();702 create_test_item(collection_id, &data.clone().into());703 assert_eq!(704 &<pallet_nonfungible::TokenData<Test>>::get((collection_id, TokenId(1)))705 .unwrap()706 .const_data,707 &data.const_data.into_inner()708 );709 assert_eq!(710 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),711 1712 );713 assert_eq!(714 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),715 true716 );717718 // Allow allow-list users to mint and add accounts 1, 2, and 3 to allow-list719 assert_ok!(Unique::set_mint_permission(720 origin1.clone(),721 CollectionId(1),722 true723 ));724 assert_ok!(Unique::set_public_access_mode(725 origin1.clone(),726 CollectionId(1),727 AccessMode::AllowList728 ));729 assert_ok!(Unique::add_to_allow_list(730 origin1.clone(),731 CollectionId(1),732 account(1)733 ));734 assert_ok!(Unique::add_to_allow_list(735 origin1.clone(),736 CollectionId(1),737 account(2)738 ));739 assert_ok!(Unique::add_to_allow_list(740 origin1.clone(),741 CollectionId(1),742 account(3)743 ));744745 // Account 1 approves account 2 for NFT 1746 assert_ok!(Unique::approve(747 origin1.clone(),748 account(2),749 CollectionId(1),750 TokenId(1),751 1752 ));753 assert_eq!(754 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),755 account(2)756 );757758 // Account 2 transfers NFT 1 from account 1 to account 3759 assert_ok!(Unique::transfer_from(760 origin2,761 account(1),762 account(3),763 CollectionId(1),764 TokenId(1),765 1766 ));767 assert!(768 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).is_none()769 );770 });771}772773#[test]774fn refungible_approve_and_transfer_from() {775 new_test_ext().execute_with(|| {776 let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));777778 let origin1 = Origin::signed(1);779 let origin2 = Origin::signed(2);780781 // Create RFT 1 in 1023 pieces for account 1782 let data = default_re_fungible_data();783 create_test_item(collection_id, &data.into());784785 assert_eq!(786 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),787 1788 );789 assert_eq!(790 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),791 1023792 );793 assert_eq!(794 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),795 true796 );797798 // Allow public minting, enable allow-list and add accounts 1, 2, 3 to allow-list799 assert_ok!(Unique::set_mint_permission(800 origin1.clone(),801 CollectionId(1),802 true803 ));804 assert_ok!(Unique::set_public_access_mode(805 origin1.clone(),806 CollectionId(1),807 AccessMode::AllowList808 ));809 assert_ok!(Unique::add_to_allow_list(810 origin1.clone(),811 CollectionId(1),812 account(1)813 ));814 assert_ok!(Unique::add_to_allow_list(815 origin1.clone(),816 CollectionId(1),817 account(2)818 ));819 assert_ok!(Unique::add_to_allow_list(820 origin1.clone(),821 CollectionId(1),822 account(3)823 ));824825 // Account 1 approves account 2 for 1023 pieces of RFT 1826 assert_ok!(Unique::approve(827 origin1,828 account(2),829 CollectionId(1),830 TokenId(1),831 1023832 ));833 assert_eq!(834 <pallet_refungible::Allowance<Test>>::get((835 CollectionId(1),836 TokenId(1),837 account(1),838 account(2)839 )),840 1023841 );842843 // Account 2 transfers 100 pieces of RFT 1 from account 1 to account 3844 assert_ok!(Unique::transfer_from(845 origin2,846 account(1),847 account(3),848 CollectionId(1),849 TokenId(1),850 100851 ));852 assert_eq!(853 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),854 1855 );856 assert_eq!(857 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),858 1859 );860 assert_eq!(861 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),862 923863 );864 assert_eq!(865 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),866 100867 );868 assert_eq!(869 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),870 true871 );872 assert_eq!(873 <pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),874 true875 );876 assert_eq!(877 <pallet_refungible::Allowance<Test>>::get((878 CollectionId(1),879 TokenId(1),880 account(1),881 account(2)882 )),883 923884 );885 });886}887888#[test]889fn fungible_approve_and_transfer_from() {890 new_test_ext().execute_with(|| {891 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));892893 let data = default_fungible_data();894 create_test_item(collection_id, &data.into());895896 let origin1 = Origin::signed(1);897 let origin2 = Origin::signed(2);898899 assert_ok!(Unique::set_mint_permission(900 origin1.clone(),901 CollectionId(1),902 true903 ));904 assert_ok!(Unique::set_public_access_mode(905 origin1.clone(),906 CollectionId(1),907 AccessMode::AllowList908 ));909 assert_ok!(Unique::add_to_allow_list(910 origin1.clone(),911 CollectionId(1),912 account(1)913 ));914 assert_ok!(Unique::add_to_allow_list(915 origin1.clone(),916 CollectionId(1),917 account(2)918 ));919 assert_ok!(Unique::add_to_allow_list(920 origin1.clone(),921 CollectionId(1),922 account(3)923 ));924925 // do approve926 assert_ok!(Unique::approve(927 origin1.clone(),928 account(2),929 CollectionId(1),930 TokenId(0),931 5932 ));933 assert_eq!(934 <pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),935 5936 );937 assert_ok!(Unique::approve(938 origin1,939 account(3),940 CollectionId(1),941 TokenId(0),942 5943 ));944 assert_eq!(945 <pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),946 5947 );948 assert_eq!(949 <pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(3))),950 5951 );952953 assert_ok!(Unique::transfer_from(954 origin2.clone(),955 account(1),956 account(3),957 CollectionId(1),958 TokenId(0),959 4960 ));961962 assert_eq!(963 <pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),964 1965 );966967 assert_noop!(968 Unique::transfer_from(969 origin2,970 account(1),971 account(3),972 CollectionId(1),973 TokenId(0),974 4975 )976 .map_err(|e| e.error),977 CommonError::<Test>::ApprovedValueTooLow978 );979 });980}981982#[test]983fn change_collection_owner() {984 new_test_ext().execute_with(|| {985 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));986987 let origin1 = Origin::signed(1);988 assert_ok!(Unique::change_collection_owner(origin1, collection_id, 2));989 assert_eq!(990 <pallet_common::CollectionById<Test>>::get(collection_id)991 .unwrap()992 .owner,993 2994 );995 });996}997998#[test]999fn destroy_collection() {1000 new_test_ext().execute_with(|| {1001 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10021003 let origin1 = Origin::signed(1);1004 assert_ok!(Unique::destroy_collection(origin1, collection_id));1005 });1006}10071008#[test]1009fn burn_nft_item() {1010 new_test_ext().execute_with(|| {1011 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10121013 let origin1 = Origin::signed(1);10141015 let data = default_nft_data();1016 create_test_item(collection_id, &data.into());10171018 // check balance (collection with id = 1, user id = 1)1019 assert_eq!(1020 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1021 11022 );10231024 // burn item1025 assert_ok!(Unique::burn_item(1026 origin1.clone(),1027 collection_id,1028 TokenId(1),1029 11030 ));1031 assert_eq!(1032 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1033 01034 );1035 });1036}10371038#[test]1039fn burn_same_nft_item_twice() {1040 new_test_ext().execute_with(|| {1041 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10421043 let origin1 = Origin::signed(1);10441045 let data = default_nft_data();1046 create_test_item(collection_id, &data.into());10471048 // check balance (collection with id = 1, user id = 1)1049 assert_eq!(1050 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1051 11052 );10531054 // burn item1055 assert_ok!(Unique::burn_item(1056 origin1.clone(),1057 collection_id,1058 TokenId(1),1059 11060 ));10611062 // burn item again1063 assert_noop!(1064 Unique::burn_item(origin1, collection_id, TokenId(1), 1).map_err(|e| e.error),1065 CommonError::<Test>::TokenNotFound1066 );10671068 assert_eq!(1069 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1070 01071 );1072 });1073}10741075#[test]1076fn burn_fungible_item() {1077 new_test_ext().execute_with(|| {1078 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));10791080 let origin1 = Origin::signed(1);1081 assert_ok!(Unique::add_collection_admin(1082 origin1.clone(),1083 collection_id,1084 account(2)1085 ));10861087 let data = default_fungible_data();1088 create_test_item(collection_id, &data.into());10891090 // check balance (collection with id = 1, user id = 1)1091 assert_eq!(1092 <pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1093 51094 );10951096 // burn item1097 assert_ok!(Unique::burn_item(1098 origin1.clone(),1099 CollectionId(1),1100 TokenId(0),1101 51102 ));1103 assert_noop!(1104 Unique::burn_item(origin1, CollectionId(1), TokenId(0), 5).map_err(|e| e.error),1105 CommonError::<Test>::TokenValueTooLow1106 );11071108 assert_eq!(1109 <pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1110 01111 );1112 });1113}11141115#[test]1116fn burn_fungible_item_with_token_id() {1117 new_test_ext().execute_with(|| {1118 let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));11191120 let origin1 = Origin::signed(1);1121 assert_ok!(Unique::add_collection_admin(1122 origin1.clone(),1123 collection_id,1124 account(2)1125 ));11261127 let data = default_fungible_data();1128 create_test_item(collection_id, &data.into());11291130 // check balance (collection with id = 1, user id = 1)1131 assert_eq!(1132 <pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1133 51134 );11351136 // Try to burn item using Token ID1137 assert_noop!(1138 Unique::burn_item(origin1, CollectionId(1), TokenId(1), 5).map_err(|e| e.error),1139 <pallet_fungible::Error::<Test>>::FungibleItemsHaveNoId1140 );1141 });1142}1143#[test]1144fn burn_refungible_item() {1145 new_test_ext().execute_with(|| {1146 let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));1147 let origin1 = Origin::signed(1);11481149 assert_ok!(Unique::set_mint_permission(1150 origin1.clone(),1151 collection_id,1152 true1153 ));1154 assert_ok!(Unique::set_public_access_mode(1155 origin1.clone(),1156 collection_id,1157 AccessMode::AllowList1158 ));1159 assert_ok!(Unique::add_to_allow_list(1160 origin1.clone(),1161 collection_id,1162 account(1)1163 ));11641165 assert_ok!(Unique::add_collection_admin(1166 origin1.clone(),1167 collection_id,1168 account(2)1169 ));11701171 let data = default_re_fungible_data();1172 create_test_item(collection_id, &data.into());11731174 // check balance (collection with id = 1, user id = 2)1175 assert_eq!(1176 <pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),1177 11178 );1179 assert_eq!(1180 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),1181 10231182 );11831184 // burn item1185 assert_ok!(Unique::burn_item(1186 origin1.clone(),1187 collection_id,1188 TokenId(1),1189 10231190 ));1191 assert_noop!(1192 Unique::burn_item(origin1, collection_id, TokenId(1), 1023).map_err(|e| e.error),1193 CommonError::<Test>::TokenValueTooLow1194 );11951196 assert_eq!(1197 <pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),1198 01199 );1200 });1201}12021203#[test]1204fn add_collection_admin() {1205 new_test_ext().execute_with(|| {1206 let collection1_id =1207 create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));1208 let origin1 = Origin::signed(1);12091210 // Add collection admins1211 assert_ok!(Unique::add_collection_admin(1212 origin1.clone(),1213 collection1_id,1214 account(2)1215 ));1216 assert_ok!(Unique::add_collection_admin(1217 origin1,1218 collection1_id,1219 account(3)1220 ));12211222 // Owner is not an admin by default1223 assert_eq!(1224 <pallet_common::IsAdmin<Test>>::get((CollectionId(1), account(1))),1225 false1226 );1227 assert!(<pallet_common::IsAdmin<Test>>::get((1228 CollectionId(1),1229 account(2)1230 )));1231 assert!(<pallet_common::IsAdmin<Test>>::get((1232 CollectionId(1),1233 account(3)1234 )));1235 });1236}12371238#[test]1239fn remove_collection_admin() {1240 new_test_ext().execute_with(|| {1241 let collection1_id =1242 create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));1243 let origin1 = Origin::signed(1);1244 let origin2 = Origin::signed(2);12451246 // Add collection admins 2 and 31247 assert_ok!(Unique::add_collection_admin(1248 origin1.clone(),1249 collection1_id,1250 account(2)1251 ));1252 assert_ok!(Unique::add_collection_admin(1253 origin1,1254 collection1_id,1255 account(3)1256 ));12571258 assert!(<pallet_common::IsAdmin<Test>>::get((1259 CollectionId(1),1260 account(2)1261 )));1262 assert!(<pallet_common::IsAdmin<Test>>::get((1263 CollectionId(1),1264 account(3)1265 )));12661267 // remove admin 31268 assert_ok!(Unique::remove_collection_admin(1269 origin2,1270 CollectionId(1),1271 account(3)1272 ));12731274 // 2 is still admin, 3 is not an admin anymore1275 assert!(<pallet_common::IsAdmin<Test>>::get((1276 CollectionId(1),1277 account(2)1278 )));1279 assert_eq!(1280 <pallet_common::IsAdmin<Test>>::get((CollectionId(1), account(3))),1281 false1282 );1283 });1284}12851286#[test]1287fn balance_of() {1288 new_test_ext().execute_with(|| {1289 let nft_collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1290 let fungible_collection_id =1291 create_test_collection(&CollectionMode::Fungible(3), CollectionId(2));1292 let re_fungible_collection_id =1293 create_test_collection(&CollectionMode::ReFungible, CollectionId(3));12941295 // check balance before1296 assert_eq!(1297 <pallet_nonfungible::AccountBalance<Test>>::get((nft_collection_id, account(1))),1298 01299 );1300 assert_eq!(1301 <pallet_fungible::Balance<Test>>::get((fungible_collection_id, account(1))),1302 01303 );1304 assert_eq!(1305 <pallet_refungible::AccountBalance<Test>>::get((re_fungible_collection_id, account(1))),1306 01307 );13081309 let nft_data = default_nft_data();1310 create_test_item(nft_collection_id, &nft_data.into());13111312 let fungible_data = default_fungible_data();1313 create_test_item(fungible_collection_id, &fungible_data.into());13141315 let re_fungible_data = default_re_fungible_data();1316 create_test_item(re_fungible_collection_id, &re_fungible_data.into());13171318 // check balance (collection with id = 1, user id = 1)1319 assert_eq!(1320 <pallet_nonfungible::AccountBalance<Test>>::get((nft_collection_id, account(1))),1321 11322 );1323 assert_eq!(1324 <pallet_fungible::Balance<Test>>::get((fungible_collection_id, account(1))),1325 51326 );1327 assert_eq!(1328 <pallet_refungible::AccountBalance<Test>>::get((re_fungible_collection_id, account(1))),1329 11330 );13311332 assert_eq!(1333 <pallet_nonfungible::Owned<Test>>::get((nft_collection_id, account(1), TokenId(1))),1334 true1335 );1336 assert_eq!(1337 <pallet_refungible::Owned<Test>>::get((1338 re_fungible_collection_id,1339 account(1),1340 TokenId(1)1341 )),1342 true1343 );1344 });1345}13461347#[test]1348fn approve() {1349 new_test_ext().execute_with(|| {1350 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));13511352 let data = default_nft_data();1353 create_test_item(collection_id, &data.into());13541355 let origin1 = Origin::signed(1);13561357 // approve1358 assert_ok!(Unique::approve(1359 origin1,1360 account(2),1361 CollectionId(1),1362 TokenId(1),1363 11364 ));1365 assert_eq!(1366 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1367 account(2)1368 );1369 });1370}13711372#[test]1373fn transfer_from() {1374 new_test_ext().execute_with(|| {1375 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1376 let origin1 = Origin::signed(1);1377 let origin2 = Origin::signed(2);13781379 let data = default_nft_data();1380 create_test_item(collection_id, &data.into());13811382 // approve1383 assert_ok!(Unique::approve(1384 origin1.clone(),1385 account(2),1386 CollectionId(1),1387 TokenId(1),1388 11389 ));1390 assert_eq!(1391 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1392 account(2)1393 );13941395 assert_ok!(Unique::set_mint_permission(1396 origin1.clone(),1397 CollectionId(1),1398 true1399 ));1400 assert_ok!(Unique::set_public_access_mode(1401 origin1.clone(),1402 CollectionId(1),1403 AccessMode::AllowList1404 ));1405 assert_ok!(Unique::add_to_allow_list(1406 origin1.clone(),1407 CollectionId(1),1408 account(1)1409 ));1410 assert_ok!(Unique::add_to_allow_list(1411 origin1.clone(),1412 CollectionId(1),1413 account(2)1414 ));1415 assert_ok!(Unique::add_to_allow_list(1416 origin1,1417 CollectionId(1),1418 account(3)1419 ));14201421 assert_ok!(Unique::transfer_from(1422 origin2,1423 account(1),1424 account(2),1425 CollectionId(1),1426 TokenId(1),1427 11428 ));14291430 // after transfer1431 assert_eq!(1432 <pallet_nonfungible::AccountBalance<Test>>::get((CollectionId(1), account(1))),1433 01434 );1435 assert_eq!(1436 <pallet_nonfungible::AccountBalance<Test>>::get((CollectionId(1), account(2))),1437 11438 );1439 });1440}14411442// #endregion14431444// Coverage tests region1445// #region14461447#[test]1448fn owner_can_add_address_to_allow_list() {1449 new_test_ext().execute_with(|| {1450 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));14511452 let origin1 = Origin::signed(1);1453 assert_ok!(Unique::add_to_allow_list(1454 origin1,1455 collection_id,1456 account(2)1457 ));1458 assert!(<pallet_common::Allowlist<Test>>::get((1459 collection_id,1460 account(2)1461 )));1462 });1463}14641465#[test]1466fn admin_can_add_address_to_allow_list() {1467 new_test_ext().execute_with(|| {1468 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1469 let origin1 = Origin::signed(1);1470 let origin2 = Origin::signed(2);14711472 assert_ok!(Unique::add_collection_admin(1473 origin1,1474 collection_id,1475 account(2)1476 ));1477 assert_ok!(Unique::add_to_allow_list(1478 origin2,1479 collection_id,1480 account(3)1481 ));1482 assert!(<pallet_common::Allowlist<Test>>::get((1483 collection_id,1484 account(3)1485 )));1486 });1487}14881489#[test]1490fn nonprivileged_user_cannot_add_address_to_allow_list() {1491 new_test_ext().execute_with(|| {1492 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));14931494 let origin2 = Origin::signed(2);1495 assert_noop!(1496 Unique::add_to_allow_list(origin2, collection_id, account(3)),1497 CommonError::<Test>::NoPermission1498 );1499 });1500}15011502#[test]1503fn nobody_can_add_address_to_allow_list_of_nonexisting_collection() {1504 new_test_ext().execute_with(|| {1505 let origin1 = Origin::signed(1);15061507 assert_noop!(1508 Unique::add_to_allow_list(origin1, CollectionId(1), account(2)),1509 CommonError::<Test>::CollectionNotFound1510 );1511 });1512}15131514#[test]1515fn nobody_can_add_address_to_allow_list_of_deleted_collection() {1516 new_test_ext().execute_with(|| {1517 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15181519 let origin1 = Origin::signed(1);1520 assert_ok!(Unique::destroy_collection(origin1.clone(), collection_id));1521 assert_noop!(1522 Unique::add_to_allow_list(origin1, collection_id, account(2)),1523 CommonError::<Test>::CollectionNotFound1524 );1525 });1526}15271528// If address is already added to allow list, nothing happens1529#[test]1530fn address_is_already_added_to_allow_list() {1531 new_test_ext().execute_with(|| {1532 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1533 let origin1 = Origin::signed(1);15341535 assert_ok!(Unique::add_to_allow_list(1536 origin1.clone(),1537 collection_id,1538 account(2)1539 ));1540 assert_ok!(Unique::add_to_allow_list(1541 origin1,1542 collection_id,1543 account(2)1544 ));1545 assert!(<pallet_common::Allowlist<Test>>::get((1546 collection_id,1547 account(2)1548 )));1549 });1550}15511552#[test]1553fn owner_can_remove_address_from_allow_list() {1554 new_test_ext().execute_with(|| {1555 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15561557 let origin1 = Origin::signed(1);1558 assert_ok!(Unique::add_to_allow_list(1559 origin1.clone(),1560 collection_id,1561 account(2)1562 ));1563 assert_ok!(Unique::remove_from_allow_list(1564 origin1,1565 collection_id,1566 account(2)1567 ));1568 assert_eq!(1569 <pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1570 false1571 );1572 });1573}15741575#[test]1576fn admin_can_remove_address_from_allow_list() {1577 new_test_ext().execute_with(|| {1578 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1579 let origin1 = Origin::signed(1);1580 let origin2 = Origin::signed(2);15811582 // Owner adds admin1583 assert_ok!(Unique::add_collection_admin(1584 origin1.clone(),1585 collection_id,1586 account(2)1587 ));15881589 // Owner adds address 3 to allow list1590 assert_ok!(Unique::add_to_allow_list(1591 origin1,1592 collection_id,1593 account(3)1594 ));15951596 // Admin removes address 3 from allow list1597 assert_ok!(Unique::remove_from_allow_list(1598 origin2,1599 collection_id,1600 account(3)1601 ));1602 assert_eq!(1603 <pallet_common::Allowlist<Test>>::get((collection_id, account(3))),1604 false1605 );1606 });1607}16081609#[test]1610fn nonprivileged_user_cannot_remove_address_from_allow_list() {1611 new_test_ext().execute_with(|| {1612 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1613 let origin1 = Origin::signed(1);1614 let origin2 = Origin::signed(2);16151616 assert_ok!(Unique::add_to_allow_list(1617 origin1,1618 collection_id,1619 account(2)1620 ));1621 assert_noop!(1622 Unique::remove_from_allow_list(origin2, collection_id, account(2)),1623 CommonError::<Test>::NoPermission1624 );1625 assert!(<pallet_common::Allowlist<Test>>::get((1626 collection_id,1627 account(2)1628 )));1629 });1630}16311632#[test]1633fn nobody_can_remove_address_from_allow_list_of_nonexisting_collection() {1634 new_test_ext().execute_with(|| {1635 let origin1 = Origin::signed(1);16361637 assert_noop!(1638 Unique::remove_from_allow_list(origin1, CollectionId(1), account(2)),1639 CommonError::<Test>::CollectionNotFound1640 );1641 });1642}16431644#[test]1645fn nobody_can_remove_address_from_allow_list_of_deleted_collection() {1646 new_test_ext().execute_with(|| {1647 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1648 let origin1 = Origin::signed(1);1649 let origin2 = Origin::signed(2);16501651 // Add account 2 to allow list1652 assert_ok!(Unique::add_to_allow_list(1653 origin1.clone(),1654 collection_id,1655 account(2)1656 ));16571658 // Account 2 is in collection allow-list1659 assert!(<pallet_common::Allowlist<Test>>::get((1660 collection_id,1661 account(2)1662 )));16631664 // Destroy collection1665 assert_ok!(Unique::destroy_collection(origin1, collection_id));16661667 // Attempt to remove account 2 from collection allow-list => error1668 assert_noop!(1669 Unique::remove_from_allow_list(origin2, collection_id, account(2)),1670 CommonError::<Test>::CollectionNotFound1671 );16721673 // Account 2 is not found in collection allow-list anyway1674 assert_eq!(1675 <pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1676 false1677 );1678 });1679}16801681// If address is already removed from allow list, nothing happens1682#[test]1683fn address_is_already_removed_from_allow_list() {1684 new_test_ext().execute_with(|| {1685 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1686 let origin1 = Origin::signed(1);16871688 assert_ok!(Unique::add_to_allow_list(1689 origin1.clone(),1690 collection_id,1691 account(2)1692 ));1693 assert_ok!(Unique::remove_from_allow_list(1694 origin1.clone(),1695 collection_id,1696 account(2)1697 ));1698 assert_eq!(1699 <pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1700 false1701 );1702 assert_ok!(Unique::remove_from_allow_list(1703 origin1,1704 collection_id,1705 account(2)1706 ));1707 assert_eq!(1708 <pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1709 false1710 );1711 });1712}17131714// If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom (2 tests)1715#[test]1716fn allow_list_test_1() {1717 new_test_ext().execute_with(|| {1718 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));17191720 let origin1 = Origin::signed(1);17211722 let data = default_nft_data();1723 create_test_item(collection_id, &data.into());17241725 assert_ok!(Unique::set_public_access_mode(1726 origin1.clone(),1727 collection_id,1728 AccessMode::AllowList1729 ));1730 assert_ok!(Unique::add_to_allow_list(1731 origin1.clone(),1732 collection_id,1733 account(2)1734 ));17351736 assert_noop!(1737 Unique::transfer(origin1, account(3), CollectionId(1), TokenId(1), 1)1738 .map_err(|e| e.error),1739 CommonError::<Test>::AddressNotInAllowlist1740 );1741 });1742}17431744#[test]1745fn allow_list_test_2() {1746 new_test_ext().execute_with(|| {1747 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1748 let origin1 = Origin::signed(1);17491750 let data = default_nft_data();1751 create_test_item(collection_id, &data.into());17521753 assert_ok!(Unique::set_public_access_mode(1754 origin1.clone(),1755 collection_id,1756 AccessMode::AllowList1757 ));1758 assert_ok!(Unique::add_to_allow_list(1759 origin1.clone(),1760 collection_id,1761 account(1)1762 ));1763 assert_ok!(Unique::add_to_allow_list(1764 origin1.clone(),1765 collection_id,1766 account(2)1767 ));17681769 // do approve1770 assert_ok!(Unique::approve(1771 origin1.clone(),1772 account(1),1773 collection_id,1774 TokenId(1),1775 11776 ));1777 assert_eq!(1778 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1779 account(1)1780 );17811782 assert_ok!(Unique::remove_from_allow_list(1783 origin1.clone(),1784 collection_id,1785 account(1)1786 ));17871788 assert_noop!(1789 Unique::transfer_from(1790 origin1,1791 account(1),1792 account(3),1793 CollectionId(1),1794 TokenId(1),1795 11796 )1797 .map_err(|e| e.error),1798 CommonError::<Test>::AddressNotInAllowlist1799 );1800 });1801}18021803// If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom (2 tests)1804#[test]1805fn allow_list_test_3() {1806 new_test_ext().execute_with(|| {1807 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18081809 let origin1 = Origin::signed(1);18101811 let data = default_nft_data();1812 create_test_item(collection_id, &data.into());18131814 assert_ok!(Unique::set_public_access_mode(1815 origin1.clone(),1816 collection_id,1817 AccessMode::AllowList1818 ));1819 assert_ok!(Unique::add_to_allow_list(1820 origin1.clone(),1821 collection_id,1822 account(1)1823 ));18241825 assert_noop!(1826 Unique::transfer(origin1, account(3), collection_id, TokenId(1), 1)1827 .map_err(|e| e.error),1828 CommonError::<Test>::AddressNotInAllowlist1829 );1830 });1831}18321833#[test]1834fn allow_list_test_4() {1835 new_test_ext().execute_with(|| {1836 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18371838 let origin1 = Origin::signed(1);18391840 let data = default_nft_data();1841 create_test_item(collection_id, &data.into());18421843 assert_ok!(Unique::set_public_access_mode(1844 origin1.clone(),1845 collection_id,1846 AccessMode::AllowList1847 ));1848 assert_ok!(Unique::add_to_allow_list(1849 origin1.clone(),1850 collection_id,1851 account(1)1852 ));1853 assert_ok!(Unique::add_to_allow_list(1854 origin1.clone(),1855 collection_id,1856 account(2)1857 ));18581859 // do approve1860 assert_ok!(Unique::approve(1861 origin1.clone(),1862 account(1),1863 collection_id,1864 TokenId(1),1865 11866 ));1867 assert_eq!(1868 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1869 account(1)1870 );18711872 assert_ok!(Unique::remove_from_allow_list(1873 origin1.clone(),1874 collection_id,1875 account(2)1876 ));18771878 assert_noop!(1879 Unique::transfer_from(1880 origin1,1881 account(1),1882 account(3),1883 collection_id,1884 TokenId(1),1885 11886 )1887 .map_err(|e| e.error),1888 CommonError::<Test>::AddressNotInAllowlist1889 );1890 });1891}18921893// If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)1894#[test]1895fn allow_list_test_5() {1896 new_test_ext().execute_with(|| {1897 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18981899 let origin1 = Origin::signed(1);19001901 let data = default_nft_data();1902 create_test_item(collection_id, &data.into());19031904 assert_ok!(Unique::set_public_access_mode(1905 origin1.clone(),1906 collection_id,1907 AccessMode::AllowList1908 ));1909 assert_noop!(1910 Unique::burn_item(origin1.clone(), CollectionId(1), TokenId(1), 1).map_err(|e| e.error),1911 CommonError::<Test>::AddressNotInAllowlist1912 );1913 });1914}19151916// If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method).1917#[test]1918fn allow_list_test_6() {1919 new_test_ext().execute_with(|| {1920 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19211922 let origin1 = Origin::signed(1);19231924 let data = default_nft_data();1925 create_test_item(collection_id, &data.into());19261927 assert_ok!(Unique::set_public_access_mode(1928 origin1.clone(),1929 collection_id,1930 AccessMode::AllowList1931 ));19321933 // do approve1934 assert_noop!(1935 Unique::approve(origin1, account(1), CollectionId(1), TokenId(1), 1)1936 .map_err(|e| e.error),1937 CommonError::<Test>::AddressNotInAllowlist1938 );1939 });1940}19411942// If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests) and1943// tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests)1944#[test]1945fn allow_list_test_7() {1946 new_test_ext().execute_with(|| {1947 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19481949 let data = default_nft_data();1950 create_test_item(collection_id, &data.into());19511952 let origin1 = Origin::signed(1);19531954 assert_ok!(Unique::set_public_access_mode(1955 origin1.clone(),1956 collection_id,1957 AccessMode::AllowList1958 ));1959 assert_ok!(Unique::add_to_allow_list(1960 origin1.clone(),1961 collection_id,1962 account(1)1963 ));1964 assert_ok!(Unique::add_to_allow_list(1965 origin1.clone(),1966 collection_id,1967 account(2)1968 ));19691970 assert_ok!(Unique::transfer(1971 origin1,1972 account(2),1973 CollectionId(1),1974 TokenId(1),1975 11976 ));1977 });1978}19791980#[test]1981fn allow_list_test_8() {1982 new_test_ext().execute_with(|| {1983 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19841985 // Create NFT for account 11986 let data = default_nft_data();1987 create_test_item(collection_id, &data.into());19881989 let origin1 = Origin::signed(1);19901991 // Toggle Allow List mode and add accounts 1 and 21992 assert_ok!(Unique::set_public_access_mode(1993 origin1.clone(),1994 collection_id,1995 AccessMode::AllowList1996 ));1997 assert_ok!(Unique::add_to_allow_list(1998 origin1.clone(),1999 collection_id,2000 account(1)2001 ));2002 assert_ok!(Unique::add_to_allow_list(2003 origin1.clone(),2004 collection_id,2005 account(2)2006 ));20072008 // Sself-approve account 1 for NFT 12009 assert_ok!(Unique::approve(2010 origin1.clone(),2011 account(1),2012 CollectionId(1),2013 TokenId(1),2014 12015 ));2016 assert_eq!(2017 <pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),2018 account(1)2019 );20202021 // Transfer from 1 to 22022 assert_ok!(Unique::transfer_from(2023 origin1,2024 account(1),2025 account(2),2026 CollectionId(1),2027 TokenId(1),2028 12029 ));2030 });2031}20322033// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner.2034#[test]2035fn allow_list_test_9() {2036 new_test_ext().execute_with(|| {2037 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2038 let origin1 = Origin::signed(1);20392040 assert_ok!(Unique::set_public_access_mode(2041 origin1.clone(),2042 collection_id,2043 AccessMode::AllowList2044 ));2045 assert_ok!(Unique::set_mint_permission(origin1, collection_id, false));20462047 let data = default_nft_data();2048 create_test_item(collection_id, &data.into());2049 });2050}20512052// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin.2053#[test]2054fn allow_list_test_10() {2055 new_test_ext().execute_with(|| {2056 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));20572058 let origin1 = Origin::signed(1);2059 let origin2 = Origin::signed(2);20602061 assert_ok!(Unique::set_public_access_mode(2062 origin1.clone(),2063 collection_id,2064 AccessMode::AllowList2065 ));2066 assert_ok!(Unique::set_mint_permission(2067 origin1.clone(),2068 collection_id,2069 false2070 ));20712072 assert_ok!(Unique::add_collection_admin(2073 origin1,2074 collection_id,2075 account(2)2076 ));20772078 assert_ok!(Unique::create_item(2079 origin2,2080 collection_id,2081 account(2),2082 default_nft_data().into()2083 ));2084 });2085}20862087// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow listed address.2088#[test]2089fn allow_list_test_11() {2090 new_test_ext().execute_with(|| {2091 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));20922093 let origin1 = Origin::signed(1);2094 let origin2 = Origin::signed(2);20952096 assert_ok!(Unique::set_public_access_mode(2097 origin1.clone(),2098 collection_id,2099 AccessMode::AllowList2100 ));2101 assert_ok!(Unique::set_mint_permission(2102 origin1.clone(),2103 collection_id,2104 false2105 ));2106 assert_ok!(Unique::add_to_allow_list(2107 origin1,2108 collection_id,2109 account(2)2110 ));21112112 assert_noop!(2113 Unique::create_item(2114 origin2,2115 CollectionId(1),2116 account(2),2117 default_nft_data().into()2118 )2119 .map_err(|e| e.error),2120 CommonError::<Test>::PublicMintingNotAllowed2121 );2122 });2123}21242125// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address.2126#[test]2127fn allow_list_test_12() {2128 new_test_ext().execute_with(|| {2129 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21302131 let origin1 = Origin::signed(1);2132 let origin2 = Origin::signed(2);21332134 assert_ok!(Unique::set_public_access_mode(2135 origin1.clone(),2136 collection_id,2137 AccessMode::AllowList2138 ));2139 assert_ok!(Unique::set_mint_permission(origin1, collection_id, false));21402141 assert_noop!(2142 Unique::create_item(2143 origin2,2144 CollectionId(1),2145 account(2),2146 default_nft_data().into()2147 )2148 .map_err(|e| e.error),2149 CommonError::<Test>::PublicMintingNotAllowed2150 );2151 });2152}21532154// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner.2155#[test]2156fn allow_list_test_13() {2157 new_test_ext().execute_with(|| {2158 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21592160 let origin1 = Origin::signed(1);21612162 assert_ok!(Unique::set_public_access_mode(2163 origin1.clone(),2164 collection_id,2165 AccessMode::AllowList2166 ));2167 assert_ok!(Unique::set_mint_permission(origin1, collection_id, true));21682169 let data = default_nft_data();2170 create_test_item(collection_id, &data.into());2171 });2172}21732174// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin.2175#[test]2176fn allow_list_test_14() {2177 new_test_ext().execute_with(|| {2178 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21792180 let origin1 = Origin::signed(1);2181 let origin2 = Origin::signed(2);21822183 assert_ok!(Unique::set_public_access_mode(2184 origin1.clone(),2185 collection_id,2186 AccessMode::AllowList2187 ));2188 assert_ok!(Unique::set_mint_permission(2189 origin1.clone(),2190 collection_id,2191 true2192 ));21932194 assert_ok!(Unique::add_collection_admin(2195 origin1,2196 collection_id,2197 account(2)2198 ));21992200 assert_ok!(Unique::create_item(2201 origin2,2202 collection_id,2203 account(2),2204 default_nft_data().into()2205 ));2206 });2207}22082209// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address.2210#[test]2211fn allow_list_test_15() {2212 new_test_ext().execute_with(|| {2213 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22142215 let origin1 = Origin::signed(1);2216 let origin2 = Origin::signed(2);22172218 assert_ok!(Unique::set_public_access_mode(2219 origin1.clone(),2220 collection_id,2221 AccessMode::AllowList2222 ));2223 assert_ok!(Unique::set_mint_permission(origin1, collection_id, true));22242225 assert_noop!(2226 Unique::create_item(2227 origin2,2228 collection_id,2229 account(2),2230 default_nft_data().into()2231 )2232 .map_err(|e| e.error),2233 CommonError::<Test>::AddressNotInAllowlist2234 );2235 });2236}22372238// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address.2239#[test]2240fn allow_list_test_16() {2241 new_test_ext().execute_with(|| {2242 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22432244 let origin1 = Origin::signed(1);2245 let origin2 = Origin::signed(2);22462247 assert_ok!(Unique::set_public_access_mode(2248 origin1.clone(),2249 collection_id,2250 AccessMode::AllowList2251 ));2252 assert_ok!(Unique::set_mint_permission(2253 origin1.clone(),2254 collection_id,2255 true2256 ));2257 assert_ok!(Unique::add_to_allow_list(2258 origin1,2259 collection_id,2260 account(2)2261 ));22622263 assert_ok!(Unique::create_item(2264 origin2,2265 collection_id,2266 account(2),2267 default_nft_data().into()2268 ));2269 });2270}22712272// Total number of collections. Positive test2273#[test]2274fn total_number_collections_bound() {2275 new_test_ext().execute_with(|| {2276 create_test_collection(&CollectionMode::NFT, CollectionId(1));2277 });2278}22792280#[test]2281fn create_max_collections() {2282 new_test_ext().execute_with(|| {2283 for i in 1..COLLECTION_NUMBER_LIMIT {2284 create_test_collection(&CollectionMode::NFT, CollectionId(i));2285 }2286 });2287}22882289// Total number of collections. Negative test2290#[test]2291fn total_number_collections_bound_neg() {2292 new_test_ext().execute_with(|| {2293 let origin1 = Origin::signed(1);22942295 for i in 1..=COLLECTION_NUMBER_LIMIT {2296 create_test_collection(&CollectionMode::NFT, CollectionId(i));2297 }22982299 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2300 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2301 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();23022303 let data: CreateCollectionData<u64> = CreateCollectionData {2304 name: col_name1.try_into().unwrap(),2305 description: col_desc1.try_into().unwrap(),2306 token_prefix: token_prefix1.try_into().unwrap(),2307 mode: CollectionMode::NFT,2308 ..Default::default()2309 };23102311 // 11-th collection in chain. Expects error2312 assert_noop!(2313 Unique::create_collection_ex(origin1, data),2314 CommonError::<Test>::TotalCollectionsLimitExceeded2315 );2316 });2317}23182319// Owned tokens by a single address. Positive test2320#[test]2321fn owned_tokens_bound() {2322 new_test_ext().execute_with(|| {2323 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23242325 let data = default_nft_data();2326 create_test_item(collection_id, &data.clone().into());2327 create_test_item(collection_id, &data.into());2328 });2329}23302331// Owned tokens by a single address. Negotive test2332#[test]2333fn owned_tokens_bound_neg() {2334 new_test_ext().execute_with(|| {2335 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23362337 let origin1 = Origin::signed(1);23382339 for _ in 1..=MAX_TOKEN_OWNERSHIP {2340 let data = default_nft_data();2341 create_test_item(collection_id, &data.clone().into());2342 }23432344 let data = default_nft_data();2345 assert_noop!(2346 Unique::create_item(origin1, CollectionId(1), account(1), data.into())2347 .map_err(|e| e.error),2348 CommonError::<Test>::AccountTokenLimitExceeded2349 );2350 });2351}23522353// Number of collection admins. Positive test2354#[test]2355fn collection_admins_bound() {2356 new_test_ext().execute_with(|| {2357 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23582359 let origin1 = Origin::signed(1);23602361 assert_ok!(Unique::add_collection_admin(2362 origin1.clone(),2363 collection_id,2364 account(2)2365 ));2366 assert_ok!(Unique::add_collection_admin(2367 origin1,2368 collection_id,2369 account(3)2370 ));2371 });2372}23732374// Number of collection admins. Negotive test2375#[test]2376fn collection_admins_bound_neg() {2377 new_test_ext().execute_with(|| {2378 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23792380 let origin1 = Origin::signed(1);23812382 for i in 0..COLLECTION_ADMINS_LIMIT {2383 assert_ok!(Unique::add_collection_admin(2384 origin1.clone(),2385 collection_id,2386 account((2 + i).into())2387 ));2388 }2389 assert_noop!(2390 Unique::add_collection_admin(2391 origin1,2392 collection_id,2393 account((3 + COLLECTION_ADMINS_LIMIT).into())2394 ),2395 CommonError::<Test>::CollectionAdminCountExceeded2396 );2397 });2398}2399// #endregion24002401#[test]2402fn set_const_on_chain_schema() {2403 new_test_ext().execute_with(|| {2404 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));24052406 let origin1 = Origin::signed(1);2407 assert_ok!(Unique::set_const_on_chain_schema(2408 origin1,2409 collection_id,2410 b"test const on chain schema".to_vec().try_into().unwrap()2411 ));24122413 assert_eq!(2414 <pallet_common::CollectionData<Test>>::get((2415 collection_id,2416 CollectionField::ConstOnChainSchema2417 )),2418 b"test const on chain schema".to_vec()2419 );2420 });2421}24222423#[test]2424fn collection_transfer_flag_works() {2425 new_test_ext().execute_with(|| {2426 let origin1 = Origin::signed(1);24272428 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2429 assert_ok!(Unique::set_transfers_enabled_flag(2430 origin1,2431 collection_id,2432 true2433 ));24342435 let data = default_nft_data();2436 create_test_item(collection_id, &data.into());2437 assert_eq!(2438 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2439 12440 );2441 assert_eq!(2442 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2443 true2444 );24452446 let origin1 = Origin::signed(1);24472448 // default scenario2449 assert_ok!(Unique::transfer(2450 origin1,2451 account(2),2452 collection_id,2453 TokenId(1),2454 12455 ));2456 assert_eq!(2457 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2458 false2459 );2460 assert_eq!(2461 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),2462 true2463 );2464 assert_eq!(2465 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2466 02467 );2468 assert_eq!(2469 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),2470 12471 );2472 });2473}24742475#[test]2476fn collection_transfer_flag_works_neg() {2477 new_test_ext().execute_with(|| {2478 let origin1 = Origin::signed(1);24792480 let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2481 assert_ok!(Unique::set_transfers_enabled_flag(2482 origin1,2483 collection_id,2484 false2485 ));24862487 let data = default_nft_data();2488 create_test_item(collection_id, &data.into());2489 assert_eq!(2490 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2491 12492 );2493 assert_eq!(2494 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2495 true2496 );24972498 let origin1 = Origin::signed(1);24992500 // default scenario2501 assert_noop!(2502 Unique::transfer(origin1, account(2), CollectionId(1), TokenId(1), 1)2503 .map_err(|e| e.error),2504 CommonError::<Test>::TransferNotAllowed2505 );2506 assert_eq!(2507 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2508 12509 );2510 assert_eq!(2511 <pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),2512 02513 );2514 assert_eq!(2515 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2516 true2517 );2518 assert_eq!(2519 <pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),2520 false2521 );2522 });2523}25242525#[test]2526fn collection_sponsoring() {2527 new_test_ext().execute_with(|| {2528 // default_limits();2529 let user1 = 1_u64;2530 let user2 = 777_u64;2531 let origin1 = Origin::signed(user1);2532 let origin2 = Origin::signed(user2);2533 let account2 = account(user2);25342535 let collection_id =2536 create_test_collection_for_owner(&CollectionMode::NFT, user1, CollectionId(1));2537 assert_ok!(Unique::set_collection_sponsor(2538 origin1.clone(),2539 collection_id,2540 user12541 ));2542 assert_ok!(Unique::confirm_sponsorship(origin1.clone(), collection_id));25432544 // Expect error while have no permissions2545 assert!(Unique::create_item(2546 origin2.clone(),2547 collection_id,2548 account2.clone(),2549 default_nft_data().into()2550 )2551 .is_err());25522553 assert_ok!(Unique::set_public_access_mode(2554 origin1.clone(),2555 collection_id,2556 AccessMode::AllowList2557 ));2558 assert_ok!(Unique::add_to_allow_list(2559 origin1.clone(),2560 collection_id,2561 account2.clone()2562 ));2563 assert_ok!(Unique::set_mint_permission(2564 origin1.clone(),2565 collection_id,2566 true2567 ));25682569 assert_ok!(Unique::create_item(2570 origin2,2571 collection_id,2572 account2,2573 default_nft_data().into()2574 ));2575 });2576}runtime/unique/Cargo.tomldiffbeforeafterboth--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -386,6 +386,15 @@
default-features = false
################################################################################
+# RMRK dependencies
+
+# todo git
+[dependencies.rmrk-rpc]
+default-features = false
+git = "https://github.com/UniqueNetwork/rmrk-substrate.git"
+branch = "feature/separate-types-and-traits"
+
+################################################################################
# local dependencies
[dependencies]
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, 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, PhantomTypeUpDataStructsRpcCollection, PhantomTypeUpDataStructsTokenData, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, UpDataStructsCollection, UpDataStructsCollectionField, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission } 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, PhantomTypeUpDataStructsBaseInfo, PhantomTypeUpDataStructsCollectionInfo, PhantomTypeUpDataStructsNftChild, PhantomTypeUpDataStructsNftInfo, PhantomTypeUpDataStructsPartType, PhantomTypeUpDataStructsPropertyInfo, PhantomTypeUpDataStructsResourceInfo, PhantomTypeUpDataStructsRpcCollection, PhantomTypeUpDataStructsTheme, PhantomTypeUpDataStructsTokenData, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, UpDataStructsCollection, UpDataStructsCollectionField, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission } from '@polkadot/types/lookup';
import type { Observable } from '@polkadot/types/types';
declare module '@polkadot/api-base/types/storage' {
@@ -92,7 +92,7 @@
/**
* Not used by code, exists only to provide some types to metadata
**/
- dummyStorageValue: AugmentedQuery<ApiType, () => Observable<Option<ITuple<[UpDataStructsCollectionStats, u32, u32, PhantomTypeUpDataStructsTokenData, PhantomTypeUpDataStructsRpcCollection]>>>, []> & QueryableStorageEntry<ApiType, []>;
+ dummyStorageValue: AugmentedQuery<ApiType, () => Observable<Option<ITuple<[UpDataStructsCollectionStats, u32, u32, PhantomTypeUpDataStructsTokenData, PhantomTypeUpDataStructsRpcCollection, PhantomTypeUpDataStructsCollectionInfo, PhantomTypeUpDataStructsNftInfo, PhantomTypeUpDataStructsResourceInfo, PhantomTypeUpDataStructsPropertyInfo, PhantomTypeUpDataStructsBaseInfo, PhantomTypeUpDataStructsPartType, PhantomTypeUpDataStructsTheme, PhantomTypeUpDataStructsNftChild]>>>, []> & QueryableStorageEntry<ApiType, []>;
/**
* List of collection admins
**/
tests/src/interfaces/augment-api-rpc.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-rpc.ts
+++ b/tests/src/interfaces/augment-api-rpc.ts
@@ -1,7 +1,7 @@
// Auto-generated via `yarn polkadot-types-from-chain`, do not edit
/* eslint-disable */
-import type { PalletEvmAccountBasicCrossAccountIdRepr, UpDataStructsCollectionLimits, UpDataStructsCollectionStats, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsRpcCollection, UpDataStructsTokenData } from './unique';
+import type { PalletEvmAccountBasicCrossAccountIdRepr, RmrkTypesBaseInfo, RmrkTypesCollectionInfo, RmrkTypesNftChild, RmrkTypesNftInfo, RmrkTypesPartType, RmrkTypesPropertyInfo, RmrkTypesResourceInfo, RmrkTypesTheme, UpDataStructsCollectionLimits, UpDataStructsCollectionStats, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsRpcCollection, UpDataStructsTokenData } from './unique';
import type { AugmentedRpc } from '@polkadot/rpc-core/types';
import type { Metadata, StorageKey } from '@polkadot/types';
import type { Bytes, HashMap, Json, Null, Option, Text, U256, U64, Vec, bool, u128, u32, u64 } from '@polkadot/types-codec';
@@ -22,7 +22,7 @@
import type { StorageKind } from '@polkadot/types/interfaces/offchain';
import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
import type { RpcMethods } from '@polkadot/types/interfaces/rpc';
-import type { AccountId, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime';
+import type { AccountId, AccountId32, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime';
import type { MigrationStatusResult, ReadProof, RuntimeVersion, TraceBlockResponse } from '@polkadot/types/interfaces/state';
import type { ApplyExtrinsicResult, ChainProperties, ChainType, Health, NetworkState, NodeRole, PeerInfo, SyncState } from '@polkadot/types/interfaces/system';
import type { IExtrinsic, Observable } from '@polkadot/types/types';
@@ -393,6 +393,60 @@
**/
queryInfo: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<RuntimeDispatchInfo>>;
};
+ rmrk: {
+ /**
+ * Get tokens owned by an account in a collection
+ **/
+ accountTokens: AugmentedRpc<(accountId: AccountId32 | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<u32>>>;
+ /**
+ * Get base info
+ **/
+ base: AugmentedRpc<(baseId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<RmrkTypesBaseInfo>>>;
+ /**
+ * Get all Base's parts
+ **/
+ baseParts: AugmentedRpc<(baseId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<RmrkTypesPartType>>>;
+ /**
+ * Get collection by id
+ **/
+ collectionById: AugmentedRpc<(id: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<RmrkTypesCollectionInfo>>>;
+ /**
+ * Get collection properties
+ **/
+ collectionProperties: AugmentedRpc<(collectionId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<RmrkTypesPropertyInfo>>>;
+ /**
+ * Get the latest created collection id
+ **/
+ lastCollectionIdx: AugmentedRpc<(at?: Hash | string | Uint8Array) => Observable<u32>>;
+ /**
+ * Get NFT by collection id and NFT id
+ **/
+ nftById: AugmentedRpc<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<RmrkTypesNftInfo>>>;
+ /**
+ * Get NFT children
+ **/
+ nftChildren: AugmentedRpc<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<RmrkTypesNftChild>>>;
+ /**
+ * Get NFT properties
+ **/
+ nftProperties: AugmentedRpc<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<RmrkTypesPropertyInfo>>>;
+ /**
+ * Get NFT resource priorities
+ **/
+ nftResourcePriorities: AugmentedRpc<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<Bytes>>>;
+ /**
+ * Get NFT resources
+ **/
+ nftResources: AugmentedRpc<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<RmrkTypesResourceInfo>>>;
+ /**
+ * Get Base's theme names
+ **/
+ themeNames: AugmentedRpc<(baseId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<Bytes>>>;
+ /**
+ * Get Theme's keys values
+ **/
+ themes: AugmentedRpc<(baseId: u32 | AnyNumber | Uint8Array, themeName: Text | string, keys: Option<Vec<Text>> | null | object | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<RmrkTypesTheme>>>;
+ };
rpc: {
/**
* Retrieves the list of RPC methods that are exposed by the node
tests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -3,7 +3,7 @@
import type { ApiTypes } from '@polkadot/api-base/types';
import type { Bytes, Compact, Option, U256, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec';
-import type { AnyNumber, ITuple } from '@polkadot/types-codec/types';
+import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types';
import type { AccountId32, Call, H160, H256, MultiAddress, Perbill } from '@polkadot/types/interfaces/runtime';
import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, UpDataStructsAccessMode, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsSchemaVersion, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
@@ -378,7 +378,7 @@
* - Weight of derivative `call` execution + 10,000.
* # </weight>
**/
- sudo: AugmentedSubmittable<(call: Call) => SubmittableExtrinsic<ApiType>, [Call]>;
+ sudo: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Call]>;
/**
* Authenticates the sudo key and dispatches a function call with `Signed` origin from
* a given account.
@@ -392,7 +392,7 @@
* - Weight of derivative `call` execution + 10,000.
* # </weight>
**/
- sudoAs: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, call: Call) => SubmittableExtrinsic<ApiType>, [MultiAddress, Call]>;
+ sudoAs: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, Call]>;
/**
* Authenticates the sudo key and dispatches a function call with `Root` origin.
* This function does not check the weight of the call, and instead allows the
@@ -405,7 +405,7 @@
* - The weight of this call is defined by the caller.
* # </weight>
**/
- sudoUncheckedWeight: AugmentedSubmittable<(call: Call, weight: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Call, u64]>;
+ sudoUncheckedWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Call, u64]>;
/**
* Generic tx
**/
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, 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, FrameSupportPalletId, FrameSupportStorageBoundedBTreeSet, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructsRpcCollection, PhantomTypeUpDataStructsTokenData, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionField, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingRule, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSchemaVersion, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, 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 './unique';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, 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, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructsBaseInfo, PhantomTypeUpDataStructsCollectionInfo, PhantomTypeUpDataStructsNftChild, PhantomTypeUpDataStructsNftInfo, PhantomTypeUpDataStructsPartType, PhantomTypeUpDataStructsPropertyInfo, PhantomTypeUpDataStructsResourceInfo, PhantomTypeUpDataStructsRpcCollection, PhantomTypeUpDataStructsTheme, PhantomTypeUpDataStructsTokenData, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTypesAccountIdOrCollectionNftTuple, RmrkTypesBaseInfo, RmrkTypesCollectionInfo, RmrkTypesEquippableList, RmrkTypesFixedPart, RmrkTypesNftChild, RmrkTypesNftInfo, RmrkTypesPartType, RmrkTypesPropertyInfo, RmrkTypesResourceInfo, RmrkTypesRoyaltyInfo, RmrkTypesSlotPart, RmrkTypesTheme, RmrkTypesThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionField, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingRule, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSchemaVersion, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, 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 './unique';
import type { Data, StorageKey } from '@polkadot/types';
import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, 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';
@@ -478,7 +478,6 @@
ForkTreePendingChangeNode: ForkTreePendingChangeNode;
FpRpcTransactionStatus: FpRpcTransactionStatus;
FrameSupportPalletId: FrameSupportPalletId;
- FrameSupportStorageBoundedBTreeSet: FrameSupportStorageBoundedBTreeSet;
FrameSupportTokensMiscBalanceStatus: FrameSupportTokensMiscBalanceStatus;
FrameSupportWeightsDispatchClass: FrameSupportWeightsDispatchClass;
FrameSupportWeightsDispatchInfo: FrameSupportWeightsDispatchInfo;
@@ -850,7 +849,15 @@
PerU16: PerU16;
Phantom: Phantom;
PhantomData: PhantomData;
+ PhantomTypeUpDataStructsBaseInfo: PhantomTypeUpDataStructsBaseInfo;
+ PhantomTypeUpDataStructsCollectionInfo: PhantomTypeUpDataStructsCollectionInfo;
+ PhantomTypeUpDataStructsNftChild: PhantomTypeUpDataStructsNftChild;
+ PhantomTypeUpDataStructsNftInfo: PhantomTypeUpDataStructsNftInfo;
+ PhantomTypeUpDataStructsPartType: PhantomTypeUpDataStructsPartType;
+ PhantomTypeUpDataStructsPropertyInfo: PhantomTypeUpDataStructsPropertyInfo;
+ PhantomTypeUpDataStructsResourceInfo: PhantomTypeUpDataStructsResourceInfo;
PhantomTypeUpDataStructsRpcCollection: PhantomTypeUpDataStructsRpcCollection;
+ PhantomTypeUpDataStructsTheme: PhantomTypeUpDataStructsTheme;
PhantomTypeUpDataStructsTokenData: PhantomTypeUpDataStructsTokenData;
Phase: Phase;
PhragmenScore: PhragmenScore;
@@ -943,6 +950,20 @@
Retriable: Retriable;
RewardDestination: RewardDestination;
RewardPoint: RewardPoint;
+ RmrkTypesAccountIdOrCollectionNftTuple: RmrkTypesAccountIdOrCollectionNftTuple;
+ RmrkTypesBaseInfo: RmrkTypesBaseInfo;
+ RmrkTypesCollectionInfo: RmrkTypesCollectionInfo;
+ RmrkTypesEquippableList: RmrkTypesEquippableList;
+ RmrkTypesFixedPart: RmrkTypesFixedPart;
+ RmrkTypesNftChild: RmrkTypesNftChild;
+ RmrkTypesNftInfo: RmrkTypesNftInfo;
+ RmrkTypesPartType: RmrkTypesPartType;
+ RmrkTypesPropertyInfo: RmrkTypesPropertyInfo;
+ RmrkTypesResourceInfo: RmrkTypesResourceInfo;
+ RmrkTypesRoyaltyInfo: RmrkTypesRoyaltyInfo;
+ RmrkTypesSlotPart: RmrkTypesSlotPart;
+ RmrkTypesTheme: RmrkTypesTheme;
+ RmrkTypesThemeProperty: RmrkTypesThemeProperty;
RoundSnapshot: RoundSnapshot;
RoundState: RoundState;
RpcMethods: RpcMethods;
tests/src/interfaces/definitions.tsdiffbeforeafterboth--- a/tests/src/interfaces/definitions.ts
+++ b/tests/src/interfaces/definitions.ts
@@ -15,3 +15,4 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
export {default as unique} from './unique/definitions';
+export {default as rmrk} from './rmrk/definitions';
tests/src/interfaces/lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -1448,14 +1448,10 @@
_enum: {
Disabled: 'Null',
Owner: 'Null',
- OwnerRestricted: 'FrameSupportStorageBoundedBTreeSet'
+ OwnerRestricted: 'BTreeSet<u32>'
}
},
/**
- * Lookup171: frame_support::storage::bounded_btree_set::BoundedBTreeSet<up_data_structs::CollectionId, S>
- **/
- FrameSupportStorageBoundedBTreeSet: 'BTreeSet<u32>',
- /**
* Lookup177: up_data_structs::PropertyKeyPermission
**/
UpDataStructsPropertyKeyPermission: {
@@ -2351,56 +2347,212 @@
properties: 'Vec<UpDataStructsProperty>'
},
/**
- * Lookup333: pallet_common::pallet::Error<T>
+ * Lookup333: PhantomType::up_data_structs<rmrk_types::CollectionInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>, sp_core::crypto::AccountId32>>
+ **/
+ PhantomTypeUpDataStructsCollectionInfo: '[Lookup334;0]',
+ /**
+ * Lookup334: rmrk_types::CollectionInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>, sp_core::crypto::AccountId32>
+ **/
+ RmrkTypesCollectionInfo: {
+ issuer: 'AccountId32',
+ metadata: 'Bytes',
+ max: 'Option<u32>',
+ symbol: 'Bytes',
+ nftsCount: 'u32'
+ },
+ /**
+ * Lookup338: PhantomType::up_data_structs<rmrk_types::NftInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill, frame_support::storage::bounded_vec::BoundedVec<T, S>>>
+ **/
+ PhantomTypeUpDataStructsNftInfo: '[Lookup339;0]',
+ /**
+ * Lookup339: rmrk_types::NftInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesNftInfo: {
+ owner: 'RmrkTypesAccountIdOrCollectionNftTuple',
+ royalty: 'Option<RmrkTypesRoyaltyInfo>',
+ metadata: 'Bytes',
+ equipped: 'bool',
+ pending: 'bool'
+ },
+ /**
+ * Lookup340: rmrk_types::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
+ **/
+ RmrkTypesAccountIdOrCollectionNftTuple: {
+ _enum: {
+ AccountId: 'AccountId32',
+ CollectionAndNftTuple: '(u32,u32)'
+ }
+ },
+ /**
+ * Lookup342: rmrk_types::RoyaltyInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill>
+ **/
+ RmrkTypesRoyaltyInfo: {
+ recipient: 'AccountId32',
+ amount: 'Permill'
+ },
+ /**
+ * Lookup344: PhantomType::up_data_structs<rmrk_types::ResourceInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>>
+ **/
+ PhantomTypeUpDataStructsResourceInfo: '[Lookup345;0]',
+ /**
+ * Lookup345: rmrk_types::ResourceInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesResourceInfo: {
+ id: 'Bytes',
+ pending: 'bool',
+ pendingRemoval: 'bool',
+ parts: 'Option<Vec<u32>>',
+ base: 'Option<u32>',
+ src: 'Option<Bytes>',
+ metadata: 'Option<Bytes>',
+ slot: 'Option<u32>',
+ license: 'Option<Bytes>',
+ thumb: 'Option<Bytes>'
+ },
+ /**
+ * Lookup351: PhantomType::up_data_structs<rmrk_types::PropertyInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>>
+ **/
+ PhantomTypeUpDataStructsPropertyInfo: '[Lookup352;0]',
+ /**
+ * Lookup352: rmrk_types::PropertyInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesPropertyInfo: {
+ key: 'Bytes',
+ value: 'Bytes'
+ },
+ /**
+ * Lookup356: PhantomType::up_data_structs<rmrk_types::BaseInfo<sp_core::crypto::AccountId32, frame_support::storage::bounded_vec::BoundedVec<T, S>>>
+ **/
+ PhantomTypeUpDataStructsBaseInfo: '[Lookup357;0]',
+ /**
+ * Lookup357: rmrk_types::BaseInfo<sp_core::crypto::AccountId32, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesBaseInfo: {
+ issuer: 'AccountId32',
+ baseType: 'Bytes',
+ symbol: 'Bytes'
+ },
+ /**
+ * Lookup359: PhantomType::up_data_structs<rmrk_types::PartType<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>>
+ **/
+ PhantomTypeUpDataStructsPartType: '[Lookup360;0]',
+ /**
+ * Lookup360: rmrk_types::PartType<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesPartType: {
+ _enum: {
+ FixedPart: 'RmrkTypesFixedPart',
+ SlotPart: 'RmrkTypesSlotPart'
+ }
+ },
+ /**
+ * Lookup362: rmrk_types::FixedPart<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesFixedPart: {
+ id: 'u32',
+ z: 'u32',
+ src: 'Bytes'
+ },
+ /**
+ * Lookup363: rmrk_types::SlotPart<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesSlotPart: {
+ id: 'u32',
+ equippable: 'RmrkTypesEquippableList',
+ src: 'Bytes',
+ z: 'u32'
+ },
+ /**
+ * Lookup364: rmrk_types::EquippableList<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesEquippableList: {
+ _enum: {
+ All: 'Null',
+ Empty: 'Null',
+ Custom: 'Vec<u32>'
+ }
+ },
+ /**
+ * Lookup366: PhantomType::up_data_structs<rmrk_types::Theme<frame_support::storage::bounded_vec::BoundedVec<T, S>, BoundedPropertyList>>
+ **/
+ PhantomTypeUpDataStructsTheme: '[Lookup367;0]',
+ /**
+ * Lookup367: rmrk_types::Theme<frame_support::storage::bounded_vec::BoundedVec<T, S>, BoundedPropertyList>
+ **/
+ RmrkTypesTheme: {
+ name: 'Bytes',
+ properties: 'Vec<RmrkTypesThemeProperty>',
+ inherit: 'bool'
+ },
+ /**
+ * Lookup369: rmrk_types::ThemeProperty<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+ **/
+ RmrkTypesThemeProperty: {
+ key: 'Bytes',
+ value: 'Bytes'
+ },
+ /**
+ * Lookup371: PhantomType::up_data_structs<rmrk_types::NftChild>
+ **/
+ PhantomTypeUpDataStructsNftChild: '[Lookup372;0]',
+ /**
+ * Lookup372: rmrk_types::NftChild
+ **/
+ RmrkTypesNftChild: {
+ collectionId: 'u32',
+ nftId: 'u32'
+ },
+ /**
+ * Lookup374: pallet_common::pallet::Error<T>
**/
PalletCommonError: {
_enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsZero', 'UnsupportedOperation', 'NotSufficientFounds', 'NestingIsDisabled', 'OnlyOwnerAllowedToNest', 'SourceCollectionIsNotAllowedToNest', 'CollectionFieldSizeExceeded', 'NoSpaceForProperty', 'PropertyLimitReached', 'PropertyKeyIsTooLong', 'InvalidCharacterInPropertyKey', 'EmptyPropertyKey']
},
/**
- * Lookup335: pallet_fungible::pallet::Error<T>
+ * Lookup376: pallet_fungible::pallet::Error<T>
**/
PalletFungibleError: {
_enum: ['NotFungibleDataUsedToMintFungibleCollectionToken', 'FungibleItemsHaveNoId', 'FungibleItemsDontHaveData', 'FungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
},
/**
- * Lookup336: pallet_refungible::ItemData
+ * Lookup377: pallet_refungible::ItemData
**/
PalletRefungibleItemData: {
constData: 'Bytes'
},
/**
- * Lookup340: pallet_refungible::pallet::Error<T>
+ * Lookup381: pallet_refungible::pallet::Error<T>
**/
PalletRefungibleError: {
_enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces', 'RefungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
},
/**
- * Lookup341: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup382: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
PalletNonfungibleItemData: {
constData: 'Bytes',
owner: 'PalletEvmAccountBasicCrossAccountIdRepr'
},
/**
- * Lookup342: pallet_nonfungible::pallet::Error<T>
+ * Lookup383: pallet_nonfungible::pallet::Error<T>
**/
PalletNonfungibleError: {
_enum: ['NotNonfungibleDataUsedToMintFungibleCollectionToken', 'NonfungibleItemsHaveNoAmount']
},
/**
- * Lookup343: pallet_structure::pallet::Error<T>
+ * Lookup384: pallet_structure::pallet::Error<T>
**/
PalletStructureError: {
_enum: ['OuroborosDetected', 'DepthLimit', 'TokenNotFound']
},
/**
- * Lookup346: pallet_evm::pallet::Error<T>
+ * Lookup387: pallet_evm::pallet::Error<T>
**/
PalletEvmError: {
_enum: ['BalanceLow', 'FeeOverflow', 'PaymentOverflow', 'WithdrawFailed', 'GasPriceTooLow', 'InvalidNonce']
},
/**
- * Lookup349: fp_rpc::TransactionStatus
+ * Lookup390: fp_rpc::TransactionStatus
**/
FpRpcTransactionStatus: {
transactionHash: 'H256',
@@ -2412,11 +2564,11 @@
logsBloom: 'EthbloomBloom'
},
/**
- * Lookup351: ethbloom::Bloom
+ * Lookup392: ethbloom::Bloom
**/
EthbloomBloom: '[u8;256]',
/**
- * Lookup353: ethereum::receipt::ReceiptV3
+ * Lookup394: ethereum::receipt::ReceiptV3
**/
EthereumReceiptReceiptV3: {
_enum: {
@@ -2426,7 +2578,7 @@
}
},
/**
- * Lookup354: ethereum::receipt::EIP658ReceiptData
+ * Lookup395: ethereum::receipt::EIP658ReceiptData
**/
EthereumReceiptEip658ReceiptData: {
statusCode: 'u8',
@@ -2435,7 +2587,7 @@
logs: 'Vec<EthereumLog>'
},
/**
- * Lookup355: ethereum::block::Block<ethereum::transaction::TransactionV2>
+ * Lookup396: ethereum::block::Block<ethereum::transaction::TransactionV2>
**/
EthereumBlock: {
header: 'EthereumHeader',
@@ -2443,7 +2595,7 @@
ommers: 'Vec<EthereumHeader>'
},
/**
- * Lookup356: ethereum::header::Header
+ * Lookup397: ethereum::header::Header
**/
EthereumHeader: {
parentHash: 'H256',
@@ -2463,41 +2615,41 @@
nonce: 'EthereumTypesHashH64'
},
/**
- * Lookup357: ethereum_types::hash::H64
+ * Lookup398: ethereum_types::hash::H64
**/
EthereumTypesHashH64: '[u8;8]',
/**
- * Lookup362: pallet_ethereum::pallet::Error<T>
+ * Lookup403: pallet_ethereum::pallet::Error<T>
**/
PalletEthereumError: {
_enum: ['InvalidSignature', 'PreLogExists']
},
/**
- * Lookup363: pallet_evm_coder_substrate::pallet::Error<T>
+ * Lookup404: pallet_evm_coder_substrate::pallet::Error<T>
**/
PalletEvmCoderSubstrateError: {
_enum: ['OutOfGas', 'OutOfFund']
},
/**
- * Lookup364: pallet_evm_contract_helpers::SponsoringModeT
+ * Lookup405: pallet_evm_contract_helpers::SponsoringModeT
**/
PalletEvmContractHelpersSponsoringModeT: {
_enum: ['Disabled', 'Allowlisted', 'Generous']
},
/**
- * Lookup366: pallet_evm_contract_helpers::pallet::Error<T>
+ * Lookup407: pallet_evm_contract_helpers::pallet::Error<T>
**/
PalletEvmContractHelpersError: {
_enum: ['NoPermission']
},
/**
- * Lookup367: pallet_evm_migration::pallet::Error<T>
+ * Lookup408: pallet_evm_migration::pallet::Error<T>
**/
PalletEvmMigrationError: {
_enum: ['AccountNotEmpty', 'AccountIsNotMigrating']
},
/**
- * Lookup369: sp_runtime::MultiSignature
+ * Lookup410: sp_runtime::MultiSignature
**/
SpRuntimeMultiSignature: {
_enum: {
@@ -2507,43 +2659,43 @@
}
},
/**
- * Lookup370: sp_core::ed25519::Signature
+ * Lookup411: sp_core::ed25519::Signature
**/
SpCoreEd25519Signature: '[u8;64]',
/**
- * Lookup372: sp_core::sr25519::Signature
+ * Lookup413: sp_core::sr25519::Signature
**/
SpCoreSr25519Signature: '[u8;64]',
/**
- * Lookup373: sp_core::ecdsa::Signature
+ * Lookup414: sp_core::ecdsa::Signature
**/
SpCoreEcdsaSignature: '[u8;65]',
/**
- * Lookup376: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
+ * Lookup417: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
**/
FrameSystemExtensionsCheckSpecVersion: 'Null',
/**
- * Lookup377: frame_system::extensions::check_genesis::CheckGenesis<T>
+ * Lookup418: frame_system::extensions::check_genesis::CheckGenesis<T>
**/
FrameSystemExtensionsCheckGenesis: 'Null',
/**
- * Lookup380: frame_system::extensions::check_nonce::CheckNonce<T>
+ * Lookup421: frame_system::extensions::check_nonce::CheckNonce<T>
**/
FrameSystemExtensionsCheckNonce: 'Compact<u32>',
/**
- * Lookup381: frame_system::extensions::check_weight::CheckWeight<T>
+ * Lookup422: frame_system::extensions::check_weight::CheckWeight<T>
**/
FrameSystemExtensionsCheckWeight: 'Null',
/**
- * Lookup382: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
+ * Lookup423: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
**/
PalletTemplateTransactionPaymentChargeTransactionPayment: 'Compact<u128>',
/**
- * Lookup383: opal_runtime::Runtime
+ * Lookup424: opal_runtime::Runtime
**/
OpalRuntimeRuntime: 'Null',
/**
- * Lookup384: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
+ * Lookup425: 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, 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, FrameSupportPalletId, FrameSupportStorageBoundedBTreeSet, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructsRpcCollection, PhantomTypeUpDataStructsTokenData, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionField, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingRule, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSchemaVersion, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, 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, 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, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructsBaseInfo, PhantomTypeUpDataStructsCollectionInfo, PhantomTypeUpDataStructsNftChild, PhantomTypeUpDataStructsNftInfo, PhantomTypeUpDataStructsPartType, PhantomTypeUpDataStructsPropertyInfo, PhantomTypeUpDataStructsResourceInfo, PhantomTypeUpDataStructsRpcCollection, PhantomTypeUpDataStructsTheme, PhantomTypeUpDataStructsTokenData, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTypesAccountIdOrCollectionNftTuple, RmrkTypesBaseInfo, RmrkTypesCollectionInfo, RmrkTypesEquippableList, RmrkTypesFixedPart, RmrkTypesNftChild, RmrkTypesNftInfo, RmrkTypesPartType, RmrkTypesPropertyInfo, RmrkTypesResourceInfo, RmrkTypesRoyaltyInfo, RmrkTypesSlotPart, RmrkTypesTheme, RmrkTypesThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionField, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingRule, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSchemaVersion, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, 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 {
@@ -47,7 +47,6 @@
EvmCoreErrorExitSucceed: EvmCoreErrorExitSucceed;
FpRpcTransactionStatus: FpRpcTransactionStatus;
FrameSupportPalletId: FrameSupportPalletId;
- FrameSupportStorageBoundedBTreeSet: FrameSupportStorageBoundedBTreeSet;
FrameSupportTokensMiscBalanceStatus: FrameSupportTokensMiscBalanceStatus;
FrameSupportWeightsDispatchClass: FrameSupportWeightsDispatchClass;
FrameSupportWeightsDispatchInfo: FrameSupportWeightsDispatchInfo;
@@ -125,7 +124,15 @@
PalletXcmCall: PalletXcmCall;
PalletXcmError: PalletXcmError;
PalletXcmEvent: PalletXcmEvent;
+ PhantomTypeUpDataStructsBaseInfo: PhantomTypeUpDataStructsBaseInfo;
+ PhantomTypeUpDataStructsCollectionInfo: PhantomTypeUpDataStructsCollectionInfo;
+ PhantomTypeUpDataStructsNftChild: PhantomTypeUpDataStructsNftChild;
+ PhantomTypeUpDataStructsNftInfo: PhantomTypeUpDataStructsNftInfo;
+ PhantomTypeUpDataStructsPartType: PhantomTypeUpDataStructsPartType;
+ PhantomTypeUpDataStructsPropertyInfo: PhantomTypeUpDataStructsPropertyInfo;
+ PhantomTypeUpDataStructsResourceInfo: PhantomTypeUpDataStructsResourceInfo;
PhantomTypeUpDataStructsRpcCollection: PhantomTypeUpDataStructsRpcCollection;
+ PhantomTypeUpDataStructsTheme: PhantomTypeUpDataStructsTheme;
PhantomTypeUpDataStructsTokenData: PhantomTypeUpDataStructsTokenData;
PolkadotCorePrimitivesInboundDownwardMessage: PolkadotCorePrimitivesInboundDownwardMessage;
PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage;
@@ -135,6 +142,20 @@
PolkadotPrimitivesV2AbridgedHrmpChannel: PolkadotPrimitivesV2AbridgedHrmpChannel;
PolkadotPrimitivesV2PersistedValidationData: PolkadotPrimitivesV2PersistedValidationData;
PolkadotPrimitivesV2UpgradeRestriction: PolkadotPrimitivesV2UpgradeRestriction;
+ RmrkTypesAccountIdOrCollectionNftTuple: RmrkTypesAccountIdOrCollectionNftTuple;
+ RmrkTypesBaseInfo: RmrkTypesBaseInfo;
+ RmrkTypesCollectionInfo: RmrkTypesCollectionInfo;
+ RmrkTypesEquippableList: RmrkTypesEquippableList;
+ RmrkTypesFixedPart: RmrkTypesFixedPart;
+ RmrkTypesNftChild: RmrkTypesNftChild;
+ RmrkTypesNftInfo: RmrkTypesNftInfo;
+ RmrkTypesPartType: RmrkTypesPartType;
+ RmrkTypesPropertyInfo: RmrkTypesPropertyInfo;
+ RmrkTypesResourceInfo: RmrkTypesResourceInfo;
+ RmrkTypesRoyaltyInfo: RmrkTypesRoyaltyInfo;
+ RmrkTypesSlotPart: RmrkTypesSlotPart;
+ RmrkTypesTheme: RmrkTypesTheme;
+ RmrkTypesThemeProperty: RmrkTypesThemeProperty;
SpCoreEcdsaSignature: SpCoreEcdsaSignature;
SpCoreEd25519Signature: SpCoreEd25519Signature;
SpCoreSr25519Signature: SpCoreSr25519Signature;
tests/src/interfaces/rmrk/definitions.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/rmrk/definitions.ts
@@ -0,0 +1,115 @@
+// 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 types from '../lookup';
+
+type RpcParam = {
+ name: string;
+ type: string;
+ isOptional?: true;
+};
+
+const atParam = {name: 'at', type: 'Hash', isOptional: true};
+const fn = (description: string, params: RpcParam[], type: string) => ({
+ description,
+ params: [...params, atParam],
+ type,
+});
+
+export default {
+ types,
+ rpc: {
+ lastCollectionIdx: fn('Get the latest created collection id', [], 'u32'),
+ collectionById: fn('Get collection by id', [{name: 'id', type: 'u32'}], 'Option<RmrkTypesCollectionInfo>'),
+ nftById: fn(
+ 'Get NFT by collection id and NFT id',
+ [
+ {name: 'collectionId', type: 'u32'},
+ {name: 'nftId', type: 'u32'},
+ ],
+ 'Option<RmrkTypesNftInfo>'
+ ),
+ accountTokens: fn(
+ 'Get tokens owned by an account in a collection',
+ [
+ {name: 'accountId', type: 'AccountId32'},
+ {name: 'collectionId', type: 'u32'}
+ ],
+ 'Vec<u32>'
+ ),
+ nftChildren: fn(
+ 'Get NFT children',
+ [
+ {name: 'collectionId', type: 'u32'},
+ {name: 'nftId', type: 'u32'},
+ ],
+ 'Vec<RmrkTypesNftChild>'
+ ),
+ collectionProperties: fn(
+ 'Get collection properties',
+ [{name: 'collectionId', type: 'u32'}],
+ 'Vec<RmrkTypesPropertyInfo>'
+ ),
+ nftProperties: fn(
+ 'Get NFT properties',
+ [
+ {name: 'collectionId', type: 'u32'},
+ {name: 'nftId', type: 'u32'}
+ ],
+ 'Vec<RmrkTypesPropertyInfo>'
+ ),
+ nftResources: fn(
+ 'Get NFT resources',
+ [
+ {name: 'collectionId', type: 'u32'},
+ {name: 'nftId', type: 'u32'}
+ ],
+ 'Vec<RmrkTypesResourceInfo>'
+ ),
+ nftResourcePriorities: fn(
+ 'Get NFT resource priorities',
+ [
+ {name: 'collectionId', type: 'u32'},
+ {name: 'nftId', type: 'u32'}
+ ],
+ 'Vec<Bytes>'
+ ),
+ base: fn(
+ 'Get base info',
+ [{name: 'baseId', type: 'u32'}],
+ 'Option<RmrkTypesBaseInfo>'
+ ),
+ baseParts: fn(
+ 'Get all Base\'s parts',
+ [{name: 'baseId', type: 'u32'}],
+ 'Vec<RmrkTypesPartType>'
+ ),
+ themeNames: fn(
+ 'Get Base\'s theme names',
+ [{name: 'baseId', type: 'u32'}],
+ 'Vec<Bytes>'
+ ),
+ themes: fn(
+ 'Get Theme\'s keys values',
+ [
+ {name: 'baseId', type: 'u32'},
+ {name: 'themeName', type: 'String'},
+ {name: 'keys', type: 'Option<Vec<String>>'}
+ ],
+ 'Option<RmrkTypesTheme>'
+ )
+ }
+};
tests/src/interfaces/rmrk/index.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/rmrk/index.ts
@@ -0,0 +1,4 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+export * from './types';
tests/src/interfaces/rmrk/types.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/rmrk/types.ts
@@ -0,0 +1,2910 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
+import type { ITuple } from '@polkadot/types-codec/types';
+import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';
+import type { Event } from '@polkadot/types/interfaces/system';
+
+/** @name CumulusPalletDmpQueueCall */
+export interface CumulusPalletDmpQueueCall extends Enum {
+ readonly isServiceOverweight: boolean;
+ readonly asServiceOverweight: {
+ readonly index: u64;
+ readonly weightLimit: u64;
+ } & Struct;
+ readonly type: 'ServiceOverweight';
+}
+
+/** @name CumulusPalletDmpQueueConfigData */
+export interface CumulusPalletDmpQueueConfigData extends Struct {
+ readonly maxIndividual: u64;
+}
+
+/** @name CumulusPalletDmpQueueError */
+export interface CumulusPalletDmpQueueError extends Enum {
+ readonly isUnknown: boolean;
+ readonly isOverLimit: boolean;
+ readonly type: 'Unknown' | 'OverLimit';
+}
+
+/** @name CumulusPalletDmpQueueEvent */
+export interface CumulusPalletDmpQueueEvent extends Enum {
+ readonly isInvalidFormat: boolean;
+ readonly asInvalidFormat: U8aFixed;
+ readonly isUnsupportedVersion: boolean;
+ readonly asUnsupportedVersion: U8aFixed;
+ readonly isExecutedDownward: boolean;
+ readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;
+ readonly isWeightExhausted: boolean;
+ readonly asWeightExhausted: ITuple<[U8aFixed, u64, u64]>;
+ readonly isOverweightEnqueued: boolean;
+ readonly asOverweightEnqueued: ITuple<[U8aFixed, u64, u64]>;
+ readonly isOverweightServiced: boolean;
+ readonly asOverweightServiced: ITuple<[u64, u64]>;
+ readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';
+}
+
+/** @name CumulusPalletDmpQueuePageIndexData */
+export interface CumulusPalletDmpQueuePageIndexData extends Struct {
+ readonly beginUsed: u32;
+ readonly endUsed: u32;
+ readonly overweightCount: u64;
+}
+
+/** @name CumulusPalletParachainSystemCall */
+export interface CumulusPalletParachainSystemCall extends Enum {
+ readonly isSetValidationData: boolean;
+ readonly asSetValidationData: {
+ readonly data: CumulusPrimitivesParachainInherentParachainInherentData;
+ } & Struct;
+ readonly isSudoSendUpwardMessage: boolean;
+ readonly asSudoSendUpwardMessage: {
+ readonly message: Bytes;
+ } & Struct;
+ readonly isAuthorizeUpgrade: boolean;
+ readonly asAuthorizeUpgrade: {
+ readonly codeHash: H256;
+ } & Struct;
+ readonly isEnactAuthorizedUpgrade: boolean;
+ readonly asEnactAuthorizedUpgrade: {
+ readonly code: Bytes;
+ } & Struct;
+ readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade';
+}
+
+/** @name CumulusPalletParachainSystemError */
+export interface CumulusPalletParachainSystemError extends Enum {
+ readonly isOverlappingUpgrades: boolean;
+ readonly isProhibitedByPolkadot: boolean;
+ readonly isTooBig: boolean;
+ readonly isValidationDataNotAvailable: boolean;
+ readonly isHostConfigurationNotAvailable: boolean;
+ readonly isNotScheduled: boolean;
+ readonly isNothingAuthorized: boolean;
+ readonly isUnauthorized: boolean;
+ readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized';
+}
+
+/** @name CumulusPalletParachainSystemEvent */
+export interface CumulusPalletParachainSystemEvent extends Enum {
+ readonly isValidationFunctionStored: boolean;
+ readonly isValidationFunctionApplied: boolean;
+ readonly asValidationFunctionApplied: u32;
+ readonly isValidationFunctionDiscarded: boolean;
+ readonly isUpgradeAuthorized: boolean;
+ readonly asUpgradeAuthorized: H256;
+ readonly isDownwardMessagesReceived: boolean;
+ readonly asDownwardMessagesReceived: u32;
+ readonly isDownwardMessagesProcessed: boolean;
+ readonly asDownwardMessagesProcessed: ITuple<[u64, H256]>;
+ readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';
+}
+
+/** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot */
+export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct {
+ readonly dmqMqcHead: H256;
+ readonly relayDispatchQueueSize: ITuple<[u32, u32]>;
+ readonly ingressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;
+ readonly egressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;
+}
+
+/** @name CumulusPalletXcmCall */
+export interface CumulusPalletXcmCall extends Null {}
+
+/** @name CumulusPalletXcmError */
+export interface CumulusPalletXcmError extends Null {}
+
+/** @name CumulusPalletXcmEvent */
+export interface CumulusPalletXcmEvent extends Enum {
+ readonly isInvalidFormat: boolean;
+ readonly asInvalidFormat: U8aFixed;
+ readonly isUnsupportedVersion: boolean;
+ readonly asUnsupportedVersion: U8aFixed;
+ readonly isExecutedDownward: boolean;
+ readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;
+ readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';
+}
+
+/** @name CumulusPalletXcmpQueueCall */
+export interface CumulusPalletXcmpQueueCall extends Enum {
+ readonly isServiceOverweight: boolean;
+ readonly asServiceOverweight: {
+ readonly index: u64;
+ readonly weightLimit: u64;
+ } & Struct;
+ readonly isSuspendXcmExecution: boolean;
+ readonly isResumeXcmExecution: boolean;
+ readonly isUpdateSuspendThreshold: boolean;
+ readonly asUpdateSuspendThreshold: {
+ readonly new_: u32;
+ } & Struct;
+ readonly isUpdateDropThreshold: boolean;
+ readonly asUpdateDropThreshold: {
+ readonly new_: u32;
+ } & Struct;
+ readonly isUpdateResumeThreshold: boolean;
+ readonly asUpdateResumeThreshold: {
+ readonly new_: u32;
+ } & Struct;
+ readonly isUpdateThresholdWeight: boolean;
+ readonly asUpdateThresholdWeight: {
+ readonly new_: u64;
+ } & Struct;
+ readonly isUpdateWeightRestrictDecay: boolean;
+ readonly asUpdateWeightRestrictDecay: {
+ readonly new_: u64;
+ } & Struct;
+ readonly isUpdateXcmpMaxIndividualWeight: boolean;
+ readonly asUpdateXcmpMaxIndividualWeight: {
+ readonly new_: u64;
+ } & Struct;
+ readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight';
+}
+
+/** @name CumulusPalletXcmpQueueError */
+export interface CumulusPalletXcmpQueueError extends Enum {
+ readonly isFailedToSend: boolean;
+ readonly isBadXcmOrigin: boolean;
+ readonly isBadXcm: boolean;
+ readonly isBadOverweightIndex: boolean;
+ readonly isWeightOverLimit: boolean;
+ readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';
+}
+
+/** @name CumulusPalletXcmpQueueEvent */
+export interface CumulusPalletXcmpQueueEvent extends Enum {
+ readonly isSuccess: boolean;
+ readonly asSuccess: Option<H256>;
+ readonly isFail: boolean;
+ readonly asFail: ITuple<[Option<H256>, XcmV2TraitsError]>;
+ readonly isBadVersion: boolean;
+ readonly asBadVersion: Option<H256>;
+ readonly isBadFormat: boolean;
+ readonly asBadFormat: Option<H256>;
+ readonly isUpwardMessageSent: boolean;
+ readonly asUpwardMessageSent: Option<H256>;
+ readonly isXcmpMessageSent: boolean;
+ readonly asXcmpMessageSent: Option<H256>;
+ readonly isOverweightEnqueued: boolean;
+ readonly asOverweightEnqueued: ITuple<[u32, u32, u64, u64]>;
+ readonly isOverweightServiced: boolean;
+ readonly asOverweightServiced: ITuple<[u64, u64]>;
+ readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';
+}
+
+/** @name CumulusPalletXcmpQueueInboundChannelDetails */
+export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {
+ readonly sender: u32;
+ readonly state: CumulusPalletXcmpQueueInboundState;
+ readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;
+}
+
+/** @name CumulusPalletXcmpQueueInboundState */
+export interface CumulusPalletXcmpQueueInboundState extends Enum {
+ readonly isOk: boolean;
+ readonly isSuspended: boolean;
+ readonly type: 'Ok' | 'Suspended';
+}
+
+/** @name CumulusPalletXcmpQueueOutboundChannelDetails */
+export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {
+ readonly recipient: u32;
+ readonly state: CumulusPalletXcmpQueueOutboundState;
+ readonly signalsExist: bool;
+ readonly firstIndex: u16;
+ readonly lastIndex: u16;
+}
+
+/** @name CumulusPalletXcmpQueueOutboundState */
+export interface CumulusPalletXcmpQueueOutboundState extends Enum {
+ readonly isOk: boolean;
+ readonly isSuspended: boolean;
+ readonly type: 'Ok' | 'Suspended';
+}
+
+/** @name CumulusPalletXcmpQueueQueueConfigData */
+export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {
+ readonly suspendThreshold: u32;
+ readonly dropThreshold: u32;
+ readonly resumeThreshold: u32;
+ readonly thresholdWeight: u64;
+ readonly weightRestrictDecay: u64;
+ readonly xcmpMaxIndividualWeight: u64;
+}
+
+/** @name CumulusPrimitivesParachainInherentParachainInherentData */
+export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct {
+ readonly validationData: PolkadotPrimitivesV2PersistedValidationData;
+ readonly relayChainState: SpTrieStorageProof;
+ readonly downwardMessages: Vec<PolkadotCorePrimitivesInboundDownwardMessage>;
+ readonly horizontalMessages: BTreeMap<u32, Vec<PolkadotCorePrimitivesInboundHrmpMessage>>;
+}
+
+/** @name EthbloomBloom */
+export interface EthbloomBloom extends U8aFixed {}
+
+/** @name EthereumBlock */
+export interface EthereumBlock extends Struct {
+ readonly header: EthereumHeader;
+ readonly transactions: Vec<EthereumTransactionTransactionV2>;
+ readonly ommers: Vec<EthereumHeader>;
+}
+
+/** @name EthereumHeader */
+export interface EthereumHeader extends Struct {
+ readonly parentHash: H256;
+ readonly ommersHash: H256;
+ readonly beneficiary: H160;
+ readonly stateRoot: H256;
+ readonly transactionsRoot: H256;
+ readonly receiptsRoot: H256;
+ readonly logsBloom: EthbloomBloom;
+ readonly difficulty: U256;
+ readonly number: U256;
+ readonly gasLimit: U256;
+ readonly gasUsed: U256;
+ readonly timestamp: u64;
+ readonly extraData: Bytes;
+ readonly mixHash: H256;
+ readonly nonce: EthereumTypesHashH64;
+}
+
+/** @name EthereumLog */
+export interface EthereumLog extends Struct {
+ readonly address: H160;
+ readonly topics: Vec<H256>;
+ readonly data: Bytes;
+}
+
+/** @name EthereumReceiptEip658ReceiptData */
+export interface EthereumReceiptEip658ReceiptData extends Struct {
+ readonly statusCode: u8;
+ readonly usedGas: U256;
+ readonly logsBloom: EthbloomBloom;
+ readonly logs: Vec<EthereumLog>;
+}
+
+/** @name EthereumReceiptReceiptV3 */
+export interface EthereumReceiptReceiptV3 extends Enum {
+ readonly isLegacy: boolean;
+ readonly asLegacy: EthereumReceiptEip658ReceiptData;
+ readonly isEip2930: boolean;
+ readonly asEip2930: EthereumReceiptEip658ReceiptData;
+ readonly isEip1559: boolean;
+ readonly asEip1559: EthereumReceiptEip658ReceiptData;
+ readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
+}
+
+/** @name EthereumTransactionAccessListItem */
+export interface EthereumTransactionAccessListItem extends Struct {
+ readonly address: H160;
+ readonly storageKeys: Vec<H256>;
+}
+
+/** @name EthereumTransactionEip1559Transaction */
+export interface EthereumTransactionEip1559Transaction extends Struct {
+ readonly chainId: u64;
+ readonly nonce: U256;
+ readonly maxPriorityFeePerGas: U256;
+ readonly maxFeePerGas: U256;
+ readonly gasLimit: U256;
+ readonly action: EthereumTransactionTransactionAction;
+ readonly value: U256;
+ readonly input: Bytes;
+ readonly accessList: Vec<EthereumTransactionAccessListItem>;
+ readonly oddYParity: bool;
+ readonly r: H256;
+ readonly s: H256;
+}
+
+/** @name EthereumTransactionEip2930Transaction */
+export interface EthereumTransactionEip2930Transaction extends Struct {
+ readonly chainId: u64;
+ readonly nonce: U256;
+ readonly gasPrice: U256;
+ readonly gasLimit: U256;
+ readonly action: EthereumTransactionTransactionAction;
+ readonly value: U256;
+ readonly input: Bytes;
+ readonly accessList: Vec<EthereumTransactionAccessListItem>;
+ readonly oddYParity: bool;
+ readonly r: H256;
+ readonly s: H256;
+}
+
+/** @name EthereumTransactionLegacyTransaction */
+export interface EthereumTransactionLegacyTransaction extends Struct {
+ readonly nonce: U256;
+ readonly gasPrice: U256;
+ readonly gasLimit: U256;
+ readonly action: EthereumTransactionTransactionAction;
+ readonly value: U256;
+ readonly input: Bytes;
+ readonly signature: EthereumTransactionTransactionSignature;
+}
+
+/** @name EthereumTransactionTransactionAction */
+export interface EthereumTransactionTransactionAction extends Enum {
+ readonly isCall: boolean;
+ readonly asCall: H160;
+ readonly isCreate: boolean;
+ readonly type: 'Call' | 'Create';
+}
+
+/** @name EthereumTransactionTransactionSignature */
+export interface EthereumTransactionTransactionSignature extends Struct {
+ readonly v: u64;
+ readonly r: H256;
+ readonly s: H256;
+}
+
+/** @name EthereumTransactionTransactionV2 */
+export interface EthereumTransactionTransactionV2 extends Enum {
+ readonly isLegacy: boolean;
+ readonly asLegacy: EthereumTransactionLegacyTransaction;
+ readonly isEip2930: boolean;
+ readonly asEip2930: EthereumTransactionEip2930Transaction;
+ readonly isEip1559: boolean;
+ readonly asEip1559: EthereumTransactionEip1559Transaction;
+ readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
+}
+
+/** @name EthereumTypesHashH64 */
+export interface EthereumTypesHashH64 extends U8aFixed {}
+
+/** @name EvmCoreErrorExitError */
+export interface EvmCoreErrorExitError extends Enum {
+ readonly isStackUnderflow: boolean;
+ readonly isStackOverflow: boolean;
+ readonly isInvalidJump: boolean;
+ readonly isInvalidRange: boolean;
+ readonly isDesignatedInvalid: boolean;
+ readonly isCallTooDeep: boolean;
+ readonly isCreateCollision: boolean;
+ readonly isCreateContractLimit: boolean;
+ readonly isOutOfOffset: boolean;
+ readonly isOutOfGas: boolean;
+ readonly isOutOfFund: boolean;
+ readonly isPcUnderflow: boolean;
+ readonly isCreateEmpty: boolean;
+ readonly isOther: boolean;
+ readonly asOther: Text;
+ readonly isInvalidCode: boolean;
+ readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';
+}
+
+/** @name EvmCoreErrorExitFatal */
+export interface EvmCoreErrorExitFatal extends Enum {
+ readonly isNotSupported: boolean;
+ readonly isUnhandledInterrupt: boolean;
+ readonly isCallErrorAsFatal: boolean;
+ readonly asCallErrorAsFatal: EvmCoreErrorExitError;
+ readonly isOther: boolean;
+ readonly asOther: Text;
+ readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';
+}
+
+/** @name EvmCoreErrorExitReason */
+export interface EvmCoreErrorExitReason extends Enum {
+ readonly isSucceed: boolean;
+ readonly asSucceed: EvmCoreErrorExitSucceed;
+ readonly isError: boolean;
+ readonly asError: EvmCoreErrorExitError;
+ readonly isRevert: boolean;
+ readonly asRevert: EvmCoreErrorExitRevert;
+ readonly isFatal: boolean;
+ readonly asFatal: EvmCoreErrorExitFatal;
+ readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';
+}
+
+/** @name EvmCoreErrorExitRevert */
+export interface EvmCoreErrorExitRevert extends Enum {
+ readonly isReverted: boolean;
+ readonly type: 'Reverted';
+}
+
+/** @name EvmCoreErrorExitSucceed */
+export interface EvmCoreErrorExitSucceed extends Enum {
+ readonly isStopped: boolean;
+ readonly isReturned: boolean;
+ readonly isSuicided: boolean;
+ readonly type: 'Stopped' | 'Returned' | 'Suicided';
+}
+
+/** @name FpRpcTransactionStatus */
+export interface FpRpcTransactionStatus extends Struct {
+ readonly transactionHash: H256;
+ readonly transactionIndex: u32;
+ readonly from: H160;
+ readonly to: Option<H160>;
+ readonly contractAddress: Option<H160>;
+ readonly logs: Vec<EthereumLog>;
+ readonly logsBloom: EthbloomBloom;
+}
+
+/** @name FrameSupportPalletId */
+export interface FrameSupportPalletId extends U8aFixed {}
+
+/** @name FrameSupportTokensMiscBalanceStatus */
+export interface FrameSupportTokensMiscBalanceStatus extends Enum {
+ readonly isFree: boolean;
+ readonly isReserved: boolean;
+ readonly type: 'Free' | 'Reserved';
+}
+
+/** @name FrameSupportWeightsDispatchClass */
+export interface FrameSupportWeightsDispatchClass extends Enum {
+ readonly isNormal: boolean;
+ readonly isOperational: boolean;
+ readonly isMandatory: boolean;
+ readonly type: 'Normal' | 'Operational' | 'Mandatory';
+}
+
+/** @name FrameSupportWeightsDispatchInfo */
+export interface FrameSupportWeightsDispatchInfo extends Struct {
+ readonly weight: u64;
+ readonly class: FrameSupportWeightsDispatchClass;
+ readonly paysFee: FrameSupportWeightsPays;
+}
+
+/** @name FrameSupportWeightsPays */
+export interface FrameSupportWeightsPays extends Enum {
+ readonly isYes: boolean;
+ readonly isNo: boolean;
+ readonly type: 'Yes' | 'No';
+}
+
+/** @name FrameSupportWeightsPerDispatchClassU32 */
+export interface FrameSupportWeightsPerDispatchClassU32 extends Struct {
+ readonly normal: u32;
+ readonly operational: u32;
+ readonly mandatory: u32;
+}
+
+/** @name FrameSupportWeightsPerDispatchClassU64 */
+export interface FrameSupportWeightsPerDispatchClassU64 extends Struct {
+ readonly normal: u64;
+ readonly operational: u64;
+ readonly mandatory: u64;
+}
+
+/** @name FrameSupportWeightsPerDispatchClassWeightsPerClass */
+export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct {
+ readonly normal: FrameSystemLimitsWeightsPerClass;
+ readonly operational: FrameSystemLimitsWeightsPerClass;
+ readonly mandatory: FrameSystemLimitsWeightsPerClass;
+}
+
+/** @name FrameSupportWeightsRuntimeDbWeight */
+export interface FrameSupportWeightsRuntimeDbWeight extends Struct {
+ readonly read: u64;
+ readonly write: u64;
+}
+
+/** @name FrameSupportWeightsWeightToFeeCoefficient */
+export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct {
+ readonly coeffInteger: u128;
+ readonly coeffFrac: Perbill;
+ readonly negative: bool;
+ readonly degree: u8;
+}
+
+/** @name FrameSystemAccountInfo */
+export interface FrameSystemAccountInfo extends Struct {
+ readonly nonce: u32;
+ readonly consumers: u32;
+ readonly providers: u32;
+ readonly sufficients: u32;
+ readonly data: PalletBalancesAccountData;
+}
+
+/** @name FrameSystemCall */
+export interface FrameSystemCall extends Enum {
+ readonly isFillBlock: boolean;
+ readonly asFillBlock: {
+ readonly ratio: Perbill;
+ } & Struct;
+ readonly isRemark: boolean;
+ readonly asRemark: {
+ readonly remark: Bytes;
+ } & Struct;
+ readonly isSetHeapPages: boolean;
+ readonly asSetHeapPages: {
+ readonly pages: u64;
+ } & Struct;
+ readonly isSetCode: boolean;
+ readonly asSetCode: {
+ readonly code: Bytes;
+ } & Struct;
+ readonly isSetCodeWithoutChecks: boolean;
+ readonly asSetCodeWithoutChecks: {
+ readonly code: Bytes;
+ } & Struct;
+ readonly isSetStorage: boolean;
+ readonly asSetStorage: {
+ readonly items: Vec<ITuple<[Bytes, Bytes]>>;
+ } & Struct;
+ readonly isKillStorage: boolean;
+ readonly asKillStorage: {
+ readonly keys_: Vec<Bytes>;
+ } & Struct;
+ readonly isKillPrefix: boolean;
+ readonly asKillPrefix: {
+ readonly prefix: Bytes;
+ readonly subkeys: u32;
+ } & Struct;
+ readonly isRemarkWithEvent: boolean;
+ readonly asRemarkWithEvent: {
+ readonly remark: Bytes;
+ } & Struct;
+ readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent';
+}
+
+/** @name FrameSystemError */
+export interface FrameSystemError extends Enum {
+ readonly isInvalidSpecName: boolean;
+ readonly isSpecVersionNeedsToIncrease: boolean;
+ readonly isFailedToExtractRuntimeVersion: boolean;
+ readonly isNonDefaultComposite: boolean;
+ readonly isNonZeroRefCount: boolean;
+ readonly isCallFiltered: boolean;
+ readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';
+}
+
+/** @name FrameSystemEvent */
+export interface FrameSystemEvent extends Enum {
+ readonly isExtrinsicSuccess: boolean;
+ readonly asExtrinsicSuccess: {
+ readonly dispatchInfo: FrameSupportWeightsDispatchInfo;
+ } & Struct;
+ readonly isExtrinsicFailed: boolean;
+ readonly asExtrinsicFailed: {
+ readonly dispatchError: SpRuntimeDispatchError;
+ readonly dispatchInfo: FrameSupportWeightsDispatchInfo;
+ } & Struct;
+ readonly isCodeUpdated: boolean;
+ readonly isNewAccount: boolean;
+ readonly asNewAccount: {
+ readonly account: AccountId32;
+ } & Struct;
+ readonly isKilledAccount: boolean;
+ readonly asKilledAccount: {
+ readonly account: AccountId32;
+ } & Struct;
+ readonly isRemarked: boolean;
+ readonly asRemarked: {
+ readonly sender: AccountId32;
+ readonly hash_: H256;
+ } & Struct;
+ readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked';
+}
+
+/** @name FrameSystemEventRecord */
+export interface FrameSystemEventRecord extends Struct {
+ readonly phase: FrameSystemPhase;
+ readonly event: Event;
+ readonly topics: Vec<H256>;
+}
+
+/** @name FrameSystemExtensionsCheckGenesis */
+export interface FrameSystemExtensionsCheckGenesis extends Null {}
+
+/** @name FrameSystemExtensionsCheckNonce */
+export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}
+
+/** @name FrameSystemExtensionsCheckSpecVersion */
+export interface FrameSystemExtensionsCheckSpecVersion extends Null {}
+
+/** @name FrameSystemExtensionsCheckWeight */
+export interface FrameSystemExtensionsCheckWeight extends Null {}
+
+/** @name FrameSystemLastRuntimeUpgradeInfo */
+export interface FrameSystemLastRuntimeUpgradeInfo extends Struct {
+ readonly specVersion: Compact<u32>;
+ readonly specName: Text;
+}
+
+/** @name FrameSystemLimitsBlockLength */
+export interface FrameSystemLimitsBlockLength extends Struct {
+ readonly max: FrameSupportWeightsPerDispatchClassU32;
+}
+
+/** @name FrameSystemLimitsBlockWeights */
+export interface FrameSystemLimitsBlockWeights extends Struct {
+ readonly baseBlock: u64;
+ readonly maxBlock: u64;
+ readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;
+}
+
+/** @name FrameSystemLimitsWeightsPerClass */
+export interface FrameSystemLimitsWeightsPerClass extends Struct {
+ readonly baseExtrinsic: u64;
+ readonly maxExtrinsic: Option<u64>;
+ readonly maxTotal: Option<u64>;
+ readonly reserved: Option<u64>;
+}
+
+/** @name FrameSystemPhase */
+export interface FrameSystemPhase extends Enum {
+ readonly isApplyExtrinsic: boolean;
+ readonly asApplyExtrinsic: u32;
+ readonly isFinalization: boolean;
+ readonly isInitialization: boolean;
+ readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';
+}
+
+/** @name OpalRuntimeRuntime */
+export interface OpalRuntimeRuntime extends Null {}
+
+/** @name OrmlVestingModuleCall */
+export interface OrmlVestingModuleCall extends Enum {
+ readonly isClaim: boolean;
+ readonly isVestedTransfer: boolean;
+ readonly asVestedTransfer: {
+ readonly dest: MultiAddress;
+ readonly schedule: OrmlVestingVestingSchedule;
+ } & Struct;
+ readonly isUpdateVestingSchedules: boolean;
+ readonly asUpdateVestingSchedules: {
+ readonly who: MultiAddress;
+ readonly vestingSchedules: Vec<OrmlVestingVestingSchedule>;
+ } & Struct;
+ readonly isClaimFor: boolean;
+ readonly asClaimFor: {
+ readonly dest: MultiAddress;
+ } & Struct;
+ readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor';
+}
+
+/** @name OrmlVestingModuleError */
+export interface OrmlVestingModuleError extends Enum {
+ readonly isZeroVestingPeriod: boolean;
+ readonly isZeroVestingPeriodCount: boolean;
+ readonly isInsufficientBalanceToLock: boolean;
+ readonly isTooManyVestingSchedules: boolean;
+ readonly isAmountLow: boolean;
+ readonly isMaxVestingSchedulesExceeded: boolean;
+ readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';
+}
+
+/** @name OrmlVestingModuleEvent */
+export interface OrmlVestingModuleEvent extends Enum {
+ readonly isVestingScheduleAdded: boolean;
+ readonly asVestingScheduleAdded: {
+ readonly from: AccountId32;
+ readonly to: AccountId32;
+ readonly vestingSchedule: OrmlVestingVestingSchedule;
+ } & Struct;
+ readonly isClaimed: boolean;
+ readonly asClaimed: {
+ readonly who: AccountId32;
+ readonly amount: u128;
+ } & Struct;
+ readonly isVestingSchedulesUpdated: boolean;
+ readonly asVestingSchedulesUpdated: {
+ readonly who: AccountId32;
+ } & Struct;
+ readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';
+}
+
+/** @name OrmlVestingVestingSchedule */
+export interface OrmlVestingVestingSchedule extends Struct {
+ readonly start: u32;
+ readonly period: u32;
+ readonly periodCount: u32;
+ readonly perPeriod: Compact<u128>;
+}
+
+/** @name PalletBalancesAccountData */
+export interface PalletBalancesAccountData extends Struct {
+ readonly free: u128;
+ readonly reserved: u128;
+ readonly miscFrozen: u128;
+ readonly feeFrozen: u128;
+}
+
+/** @name PalletBalancesBalanceLock */
+export interface PalletBalancesBalanceLock extends Struct {
+ readonly id: U8aFixed;
+ readonly amount: u128;
+ readonly reasons: PalletBalancesReasons;
+}
+
+/** @name PalletBalancesCall */
+export interface PalletBalancesCall extends Enum {
+ readonly isTransfer: boolean;
+ readonly asTransfer: {
+ readonly dest: MultiAddress;
+ readonly value: Compact<u128>;
+ } & Struct;
+ readonly isSetBalance: boolean;
+ readonly asSetBalance: {
+ readonly who: MultiAddress;
+ readonly newFree: Compact<u128>;
+ readonly newReserved: Compact<u128>;
+ } & Struct;
+ readonly isForceTransfer: boolean;
+ readonly asForceTransfer: {
+ readonly source: MultiAddress;
+ readonly dest: MultiAddress;
+ readonly value: Compact<u128>;
+ } & Struct;
+ readonly isTransferKeepAlive: boolean;
+ readonly asTransferKeepAlive: {
+ readonly dest: MultiAddress;
+ readonly value: Compact<u128>;
+ } & Struct;
+ readonly isTransferAll: boolean;
+ readonly asTransferAll: {
+ readonly dest: MultiAddress;
+ readonly keepAlive: bool;
+ } & Struct;
+ readonly isForceUnreserve: boolean;
+ readonly asForceUnreserve: {
+ readonly who: MultiAddress;
+ readonly amount: u128;
+ } & Struct;
+ readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve';
+}
+
+/** @name PalletBalancesError */
+export interface PalletBalancesError extends Enum {
+ readonly isVestingBalance: boolean;
+ readonly isLiquidityRestrictions: boolean;
+ readonly isInsufficientBalance: boolean;
+ readonly isExistentialDeposit: boolean;
+ readonly isKeepAlive: boolean;
+ readonly isExistingVestingSchedule: boolean;
+ readonly isDeadAccount: boolean;
+ readonly isTooManyReserves: boolean;
+ readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves';
+}
+
+/** @name PalletBalancesEvent */
+export interface PalletBalancesEvent extends Enum {
+ readonly isEndowed: boolean;
+ readonly asEndowed: {
+ readonly account: AccountId32;
+ readonly freeBalance: u128;
+ } & Struct;
+ readonly isDustLost: boolean;
+ readonly asDustLost: {
+ readonly account: AccountId32;
+ readonly amount: u128;
+ } & Struct;
+ readonly isTransfer: boolean;
+ readonly asTransfer: {
+ readonly from: AccountId32;
+ readonly to: AccountId32;
+ readonly amount: u128;
+ } & Struct;
+ readonly isBalanceSet: boolean;
+ readonly asBalanceSet: {
+ readonly who: AccountId32;
+ readonly free: u128;
+ readonly reserved: u128;
+ } & Struct;
+ readonly isReserved: boolean;
+ readonly asReserved: {
+ readonly who: AccountId32;
+ readonly amount: u128;
+ } & Struct;
+ readonly isUnreserved: boolean;
+ readonly asUnreserved: {
+ readonly who: AccountId32;
+ readonly amount: u128;
+ } & Struct;
+ readonly isReserveRepatriated: boolean;
+ readonly asReserveRepatriated: {
+ readonly from: AccountId32;
+ readonly to: AccountId32;
+ readonly amount: u128;
+ readonly destinationStatus: FrameSupportTokensMiscBalanceStatus;
+ } & Struct;
+ readonly isDeposit: boolean;
+ readonly asDeposit: {
+ readonly who: AccountId32;
+ readonly amount: u128;
+ } & Struct;
+ readonly isWithdraw: boolean;
+ readonly asWithdraw: {
+ readonly who: AccountId32;
+ readonly amount: u128;
+ } & Struct;
+ readonly isSlashed: boolean;
+ readonly asSlashed: {
+ readonly who: AccountId32;
+ readonly amount: u128;
+ } & Struct;
+ readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed';
+}
+
+/** @name PalletBalancesReasons */
+export interface PalletBalancesReasons extends Enum {
+ readonly isFee: boolean;
+ readonly isMisc: boolean;
+ readonly isAll: boolean;
+ readonly type: 'Fee' | 'Misc' | 'All';
+}
+
+/** @name PalletBalancesReleases */
+export interface PalletBalancesReleases extends Enum {
+ readonly isV100: boolean;
+ readonly isV200: boolean;
+ readonly type: 'V100' | 'V200';
+}
+
+/** @name PalletBalancesReserveData */
+export interface PalletBalancesReserveData extends Struct {
+ readonly id: U8aFixed;
+ readonly amount: u128;
+}
+
+/** @name PalletCommonError */
+export interface PalletCommonError extends Enum {
+ readonly isCollectionNotFound: boolean;
+ readonly isMustBeTokenOwner: boolean;
+ readonly isNoPermission: boolean;
+ readonly isPublicMintingNotAllowed: boolean;
+ readonly isAddressNotInAllowlist: boolean;
+ readonly isCollectionNameLimitExceeded: boolean;
+ readonly isCollectionDescriptionLimitExceeded: boolean;
+ readonly isCollectionTokenPrefixLimitExceeded: boolean;
+ readonly isTotalCollectionsLimitExceeded: boolean;
+ readonly isCollectionAdminCountExceeded: boolean;
+ readonly isCollectionLimitBoundsExceeded: boolean;
+ readonly isOwnerPermissionsCantBeReverted: boolean;
+ readonly isTransferNotAllowed: boolean;
+ readonly isAccountTokenLimitExceeded: boolean;
+ readonly isCollectionTokenLimitExceeded: boolean;
+ readonly isMetadataFlagFrozen: boolean;
+ readonly isTokenNotFound: boolean;
+ readonly isTokenValueTooLow: boolean;
+ readonly isApprovedValueTooLow: boolean;
+ readonly isCantApproveMoreThanOwned: boolean;
+ readonly isAddressIsZero: boolean;
+ readonly isUnsupportedOperation: boolean;
+ readonly isNotSufficientFounds: boolean;
+ readonly isNestingIsDisabled: boolean;
+ readonly isOnlyOwnerAllowedToNest: boolean;
+ readonly isSourceCollectionIsNotAllowedToNest: boolean;
+ readonly isCollectionFieldSizeExceeded: boolean;
+ readonly isNoSpaceForProperty: boolean;
+ readonly isPropertyLimitReached: boolean;
+ readonly isPropertyKeyIsTooLong: boolean;
+ readonly isInvalidCharacterInPropertyKey: boolean;
+ readonly isEmptyPropertyKey: boolean;
+ readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'NestingIsDisabled' | 'OnlyOwnerAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey';
+}
+
+/** @name PalletCommonEvent */
+export interface PalletCommonEvent extends Enum {
+ readonly isCollectionCreated: boolean;
+ readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;
+ readonly isCollectionDestroyed: boolean;
+ readonly asCollectionDestroyed: u32;
+ readonly isItemCreated: boolean;
+ readonly asItemCreated: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;
+ readonly isItemDestroyed: boolean;
+ readonly asItemDestroyed: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;
+ readonly isTransfer: boolean;
+ readonly asTransfer: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;
+ readonly isApproved: boolean;
+ readonly asApproved: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;
+ readonly isCollectionPropertySet: boolean;
+ readonly asCollectionPropertySet: ITuple<[u32, Bytes]>;
+ readonly isCollectionPropertyDeleted: boolean;
+ readonly asCollectionPropertyDeleted: ITuple<[u32, Bytes]>;
+ readonly isTokenPropertySet: boolean;
+ readonly asTokenPropertySet: ITuple<[u32, u32, Bytes]>;
+ readonly isTokenPropertyDeleted: boolean;
+ readonly asTokenPropertyDeleted: ITuple<[u32, u32, Bytes]>;
+ readonly isPropertyPermissionSet: boolean;
+ readonly asPropertyPermissionSet: ITuple<[u32, Bytes]>;
+ readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet';
+}
+
+/** @name PalletEthereumCall */
+export interface PalletEthereumCall extends Enum {
+ readonly isTransact: boolean;
+ readonly asTransact: {
+ readonly transaction: EthereumTransactionTransactionV2;
+ } & Struct;
+ readonly type: 'Transact';
+}
+
+/** @name PalletEthereumError */
+export interface PalletEthereumError extends Enum {
+ readonly isInvalidSignature: boolean;
+ readonly isPreLogExists: boolean;
+ readonly type: 'InvalidSignature' | 'PreLogExists';
+}
+
+/** @name PalletEthereumEvent */
+export interface PalletEthereumEvent extends Enum {
+ readonly isExecuted: boolean;
+ readonly asExecuted: ITuple<[H160, H160, H256, EvmCoreErrorExitReason]>;
+ readonly type: 'Executed';
+}
+
+/** @name PalletEthereumFakeTransactionFinalizer */
+export interface PalletEthereumFakeTransactionFinalizer extends Null {}
+
+/** @name PalletEvmAccountBasicCrossAccountIdRepr */
+export interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum {
+ readonly isSubstrate: boolean;
+ readonly asSubstrate: AccountId32;
+ readonly isEthereum: boolean;
+ readonly asEthereum: H160;
+ readonly type: 'Substrate' | 'Ethereum';
+}
+
+/** @name PalletEvmCall */
+export interface PalletEvmCall extends Enum {
+ readonly isWithdraw: boolean;
+ readonly asWithdraw: {
+ readonly address: H160;
+ readonly value: u128;
+ } & Struct;
+ readonly isCall: boolean;
+ readonly asCall: {
+ readonly source: H160;
+ readonly target: H160;
+ readonly input: Bytes;
+ readonly value: U256;
+ readonly gasLimit: u64;
+ readonly maxFeePerGas: U256;
+ readonly maxPriorityFeePerGas: Option<U256>;
+ readonly nonce: Option<U256>;
+ readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;
+ } & Struct;
+ readonly isCreate: boolean;
+ readonly asCreate: {
+ readonly source: H160;
+ readonly init: Bytes;
+ readonly value: U256;
+ readonly gasLimit: u64;
+ readonly maxFeePerGas: U256;
+ readonly maxPriorityFeePerGas: Option<U256>;
+ readonly nonce: Option<U256>;
+ readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;
+ } & Struct;
+ readonly isCreate2: boolean;
+ readonly asCreate2: {
+ readonly source: H160;
+ readonly init: Bytes;
+ readonly salt: H256;
+ readonly value: U256;
+ readonly gasLimit: u64;
+ readonly maxFeePerGas: U256;
+ readonly maxPriorityFeePerGas: Option<U256>;
+ readonly nonce: Option<U256>;
+ readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;
+ } & Struct;
+ readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';
+}
+
+/** @name PalletEvmCoderSubstrateError */
+export interface PalletEvmCoderSubstrateError extends Enum {
+ readonly isOutOfGas: boolean;
+ readonly isOutOfFund: boolean;
+ readonly type: 'OutOfGas' | 'OutOfFund';
+}
+
+/** @name PalletEvmContractHelpersError */
+export interface PalletEvmContractHelpersError extends Enum {
+ readonly isNoPermission: boolean;
+ readonly type: 'NoPermission';
+}
+
+/** @name PalletEvmContractHelpersSponsoringModeT */
+export interface PalletEvmContractHelpersSponsoringModeT extends Enum {
+ readonly isDisabled: boolean;
+ readonly isAllowlisted: boolean;
+ readonly isGenerous: boolean;
+ readonly type: 'Disabled' | 'Allowlisted' | 'Generous';
+}
+
+/** @name PalletEvmError */
+export interface PalletEvmError extends Enum {
+ readonly isBalanceLow: boolean;
+ readonly isFeeOverflow: boolean;
+ readonly isPaymentOverflow: boolean;
+ readonly isWithdrawFailed: boolean;
+ readonly isGasPriceTooLow: boolean;
+ readonly isInvalidNonce: boolean;
+ readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';
+}
+
+/** @name PalletEvmEvent */
+export interface PalletEvmEvent extends Enum {
+ readonly isLog: boolean;
+ readonly asLog: EthereumLog;
+ readonly isCreated: boolean;
+ readonly asCreated: H160;
+ readonly isCreatedFailed: boolean;
+ readonly asCreatedFailed: H160;
+ readonly isExecuted: boolean;
+ readonly asExecuted: H160;
+ readonly isExecutedFailed: boolean;
+ readonly asExecutedFailed: H160;
+ readonly isBalanceDeposit: boolean;
+ readonly asBalanceDeposit: ITuple<[AccountId32, H160, U256]>;
+ readonly isBalanceWithdraw: boolean;
+ readonly asBalanceWithdraw: ITuple<[AccountId32, H160, U256]>;
+ readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed' | 'BalanceDeposit' | 'BalanceWithdraw';
+}
+
+/** @name PalletEvmMigrationCall */
+export interface PalletEvmMigrationCall extends Enum {
+ readonly isBegin: boolean;
+ readonly asBegin: {
+ readonly address: H160;
+ } & Struct;
+ readonly isSetData: boolean;
+ readonly asSetData: {
+ readonly address: H160;
+ readonly data: Vec<ITuple<[H256, H256]>>;
+ } & Struct;
+ readonly isFinish: boolean;
+ readonly asFinish: {
+ readonly address: H160;
+ readonly code: Bytes;
+ } & Struct;
+ readonly type: 'Begin' | 'SetData' | 'Finish';
+}
+
+/** @name PalletEvmMigrationError */
+export interface PalletEvmMigrationError extends Enum {
+ readonly isAccountNotEmpty: boolean;
+ readonly isAccountIsNotMigrating: boolean;
+ readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';
+}
+
+/** @name PalletFungibleError */
+export interface PalletFungibleError extends Enum {
+ readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;
+ readonly isFungibleItemsHaveNoId: boolean;
+ readonly isFungibleItemsDontHaveData: boolean;
+ readonly isFungibleDisallowsNesting: boolean;
+ readonly isSettingPropertiesNotAllowed: boolean;
+ readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
+}
+
+/** @name PalletInflationCall */
+export interface PalletInflationCall extends Enum {
+ readonly isStartInflation: boolean;
+ readonly asStartInflation: {
+ readonly inflationStartRelayBlock: u32;
+ } & Struct;
+ readonly type: 'StartInflation';
+}
+
+/** @name PalletNonfungibleError */
+export interface PalletNonfungibleError extends Enum {
+ readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;
+ readonly isNonfungibleItemsHaveNoAmount: boolean;
+ readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount';
+}
+
+/** @name PalletNonfungibleItemData */
+export interface PalletNonfungibleItemData extends Struct {
+ readonly constData: Bytes;
+ readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
+}
+
+/** @name PalletRefungibleError */
+export interface PalletRefungibleError extends Enum {
+ readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;
+ readonly isWrongRefungiblePieces: boolean;
+ readonly isRefungibleDisallowsNesting: boolean;
+ readonly isSettingPropertiesNotAllowed: boolean;
+ readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
+}
+
+/** @name PalletRefungibleItemData */
+export interface PalletRefungibleItemData extends Struct {
+ readonly constData: Bytes;
+}
+
+/** @name PalletStructureCall */
+export interface PalletStructureCall extends Null {}
+
+/** @name PalletStructureError */
+export interface PalletStructureError extends Enum {
+ readonly isOuroborosDetected: boolean;
+ readonly isDepthLimit: boolean;
+ readonly isTokenNotFound: boolean;
+ readonly type: 'OuroborosDetected' | 'DepthLimit' | 'TokenNotFound';
+}
+
+/** @name PalletStructureEvent */
+export interface PalletStructureEvent extends Enum {
+ readonly isExecuted: boolean;
+ readonly asExecuted: Result<Null, SpRuntimeDispatchError>;
+ readonly type: 'Executed';
+}
+
+/** @name PalletSudoCall */
+export interface PalletSudoCall extends Enum {
+ readonly isSudo: boolean;
+ readonly asSudo: {
+ readonly call: Call;
+ } & Struct;
+ readonly isSudoUncheckedWeight: boolean;
+ readonly asSudoUncheckedWeight: {
+ readonly call: Call;
+ readonly weight: u64;
+ } & Struct;
+ readonly isSetKey: boolean;
+ readonly asSetKey: {
+ readonly new_: MultiAddress;
+ } & Struct;
+ readonly isSudoAs: boolean;
+ readonly asSudoAs: {
+ readonly who: MultiAddress;
+ readonly call: Call;
+ } & Struct;
+ readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs';
+}
+
+/** @name PalletSudoError */
+export interface PalletSudoError extends Enum {
+ readonly isRequireSudo: boolean;
+ readonly type: 'RequireSudo';
+}
+
+/** @name PalletSudoEvent */
+export interface PalletSudoEvent extends Enum {
+ readonly isSudid: boolean;
+ readonly asSudid: {
+ readonly sudoResult: Result<Null, SpRuntimeDispatchError>;
+ } & Struct;
+ readonly isKeyChanged: boolean;
+ readonly asKeyChanged: {
+ readonly oldSudoer: Option<AccountId32>;
+ } & Struct;
+ readonly isSudoAsDone: boolean;
+ readonly asSudoAsDone: {
+ readonly sudoResult: Result<Null, SpRuntimeDispatchError>;
+ } & Struct;
+ readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';
+}
+
+/** @name PalletTemplateTransactionPaymentCall */
+export interface PalletTemplateTransactionPaymentCall extends Null {}
+
+/** @name PalletTemplateTransactionPaymentChargeTransactionPayment */
+export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}
+
+/** @name PalletTimestampCall */
+export interface PalletTimestampCall extends Enum {
+ readonly isSet: boolean;
+ readonly asSet: {
+ readonly now: Compact<u64>;
+ } & Struct;
+ readonly type: 'Set';
+}
+
+/** @name PalletTransactionPaymentReleases */
+export interface PalletTransactionPaymentReleases extends Enum {
+ readonly isV1Ancient: boolean;
+ readonly isV2: boolean;
+ readonly type: 'V1Ancient' | 'V2';
+}
+
+/** @name PalletTreasuryCall */
+export interface PalletTreasuryCall extends Enum {
+ readonly isProposeSpend: boolean;
+ readonly asProposeSpend: {
+ readonly value: Compact<u128>;
+ readonly beneficiary: MultiAddress;
+ } & Struct;
+ readonly isRejectProposal: boolean;
+ readonly asRejectProposal: {
+ readonly proposalId: Compact<u32>;
+ } & Struct;
+ readonly isApproveProposal: boolean;
+ readonly asApproveProposal: {
+ readonly proposalId: Compact<u32>;
+ } & Struct;
+ readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal';
+}
+
+/** @name PalletTreasuryError */
+export interface PalletTreasuryError extends Enum {
+ readonly isInsufficientProposersBalance: boolean;
+ readonly isInvalidIndex: boolean;
+ readonly isTooManyApprovals: boolean;
+ readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals';
+}
+
+/** @name PalletTreasuryEvent */
+export interface PalletTreasuryEvent extends Enum {
+ readonly isProposed: boolean;
+ readonly asProposed: {
+ readonly proposalIndex: u32;
+ } & Struct;
+ readonly isSpending: boolean;
+ readonly asSpending: {
+ readonly budgetRemaining: u128;
+ } & Struct;
+ readonly isAwarded: boolean;
+ readonly asAwarded: {
+ readonly proposalIndex: u32;
+ readonly award: u128;
+ readonly account: AccountId32;
+ } & Struct;
+ readonly isRejected: boolean;
+ readonly asRejected: {
+ readonly proposalIndex: u32;
+ readonly slashed: u128;
+ } & Struct;
+ readonly isBurnt: boolean;
+ readonly asBurnt: {
+ readonly burntFunds: u128;
+ } & Struct;
+ readonly isRollover: boolean;
+ readonly asRollover: {
+ readonly rolloverBalance: u128;
+ } & Struct;
+ readonly isDeposit: boolean;
+ readonly asDeposit: {
+ readonly value: u128;
+ } & Struct;
+ readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit';
+}
+
+/** @name PalletTreasuryProposal */
+export interface PalletTreasuryProposal extends Struct {
+ readonly proposer: AccountId32;
+ readonly value: u128;
+ readonly beneficiary: AccountId32;
+ readonly bond: u128;
+}
+
+/** @name PalletUniqueCall */
+export interface PalletUniqueCall extends Enum {
+ readonly isCreateCollection: boolean;
+ readonly asCreateCollection: {
+ readonly collectionName: Vec<u16>;
+ readonly collectionDescription: Vec<u16>;
+ readonly tokenPrefix: Bytes;
+ readonly mode: UpDataStructsCollectionMode;
+ } & Struct;
+ readonly isCreateCollectionEx: boolean;
+ readonly asCreateCollectionEx: {
+ readonly data: UpDataStructsCreateCollectionData;
+ } & Struct;
+ readonly isDestroyCollection: boolean;
+ readonly asDestroyCollection: {
+ readonly collectionId: u32;
+ } & Struct;
+ readonly isAddToAllowList: boolean;
+ readonly asAddToAllowList: {
+ readonly collectionId: u32;
+ readonly address: PalletEvmAccountBasicCrossAccountIdRepr;
+ } & Struct;
+ readonly isRemoveFromAllowList: boolean;
+ readonly asRemoveFromAllowList: {
+ readonly collectionId: u32;
+ readonly address: PalletEvmAccountBasicCrossAccountIdRepr;
+ } & Struct;
+ readonly isSetPublicAccessMode: boolean;
+ readonly asSetPublicAccessMode: {
+ readonly collectionId: u32;
+ readonly mode: UpDataStructsAccessMode;
+ } & Struct;
+ readonly isSetMintPermission: boolean;
+ readonly asSetMintPermission: {
+ readonly collectionId: u32;
+ readonly mintPermission: bool;
+ } & Struct;
+ readonly isChangeCollectionOwner: boolean;
+ readonly asChangeCollectionOwner: {
+ readonly collectionId: u32;
+ readonly newOwner: AccountId32;
+ } & Struct;
+ readonly isAddCollectionAdmin: boolean;
+ readonly asAddCollectionAdmin: {
+ readonly collectionId: u32;
+ readonly newAdminId: PalletEvmAccountBasicCrossAccountIdRepr;
+ } & Struct;
+ readonly isRemoveCollectionAdmin: boolean;
+ readonly asRemoveCollectionAdmin: {
+ readonly collectionId: u32;
+ readonly accountId: PalletEvmAccountBasicCrossAccountIdRepr;
+ } & Struct;
+ readonly isSetCollectionSponsor: boolean;
+ readonly asSetCollectionSponsor: {
+ readonly collectionId: u32;
+ readonly newSponsor: AccountId32;
+ } & Struct;
+ readonly isConfirmSponsorship: boolean;
+ readonly asConfirmSponsorship: {
+ readonly collectionId: u32;
+ } & Struct;
+ readonly isRemoveCollectionSponsor: boolean;
+ readonly asRemoveCollectionSponsor: {
+ readonly collectionId: u32;
+ } & Struct;
+ readonly isCreateItem: boolean;
+ readonly asCreateItem: {
+ readonly collectionId: u32;
+ readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly data: UpDataStructsCreateItemData;
+ } & Struct;
+ readonly isCreateMultipleItems: boolean;
+ readonly asCreateMultipleItems: {
+ readonly collectionId: u32;
+ readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly itemsData: Vec<UpDataStructsCreateItemData>;
+ } & Struct;
+ readonly isSetCollectionProperties: boolean;
+ readonly asSetCollectionProperties: {
+ readonly collectionId: u32;
+ readonly properties: Vec<UpDataStructsProperty>;
+ } & Struct;
+ readonly isDeleteCollectionProperties: boolean;
+ readonly asDeleteCollectionProperties: {
+ readonly collectionId: u32;
+ readonly propertyKeys: Vec<Bytes>;
+ } & Struct;
+ readonly isSetTokenProperties: boolean;
+ readonly asSetTokenProperties: {
+ readonly collectionId: u32;
+ readonly tokenId: u32;
+ readonly properties: Vec<UpDataStructsProperty>;
+ } & Struct;
+ readonly isDeleteTokenProperties: boolean;
+ readonly asDeleteTokenProperties: {
+ readonly collectionId: u32;
+ readonly tokenId: u32;
+ readonly propertyKeys: Vec<Bytes>;
+ } & Struct;
+ readonly isSetPropertyPermissions: boolean;
+ readonly asSetPropertyPermissions: {
+ readonly collectionId: u32;
+ readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;
+ } & Struct;
+ readonly isCreateMultipleItemsEx: boolean;
+ readonly asCreateMultipleItemsEx: {
+ readonly collectionId: u32;
+ readonly data: UpDataStructsCreateItemExData;
+ } & Struct;
+ readonly isSetTransfersEnabledFlag: boolean;
+ readonly asSetTransfersEnabledFlag: {
+ readonly collectionId: u32;
+ readonly value: bool;
+ } & Struct;
+ readonly isBurnItem: boolean;
+ readonly asBurnItem: {
+ readonly collectionId: u32;
+ readonly itemId: u32;
+ readonly value: u128;
+ } & Struct;
+ readonly isBurnFrom: boolean;
+ readonly asBurnFrom: {
+ readonly collectionId: u32;
+ readonly from: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly itemId: u32;
+ readonly value: u128;
+ } & Struct;
+ readonly isTransfer: boolean;
+ readonly asTransfer: {
+ readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly collectionId: u32;
+ readonly itemId: u32;
+ readonly value: u128;
+ } & Struct;
+ readonly isApprove: boolean;
+ readonly asApprove: {
+ readonly spender: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly collectionId: u32;
+ readonly itemId: u32;
+ readonly amount: u128;
+ } & Struct;
+ readonly isTransferFrom: boolean;
+ readonly asTransferFrom: {
+ readonly from: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly collectionId: u32;
+ readonly itemId: u32;
+ readonly value: u128;
+ } & Struct;
+ readonly isSetSchemaVersion: boolean;
+ readonly asSetSchemaVersion: {
+ readonly collectionId: u32;
+ readonly version: UpDataStructsSchemaVersion;
+ } & Struct;
+ readonly isSetOffchainSchema: boolean;
+ readonly asSetOffchainSchema: {
+ readonly collectionId: u32;
+ readonly schema: Bytes;
+ } & Struct;
+ readonly isSetConstOnChainSchema: boolean;
+ readonly asSetConstOnChainSchema: {
+ readonly collectionId: u32;
+ readonly schema: Bytes;
+ } & Struct;
+ readonly isSetCollectionLimits: boolean;
+ readonly asSetCollectionLimits: {
+ readonly collectionId: u32;
+ readonly newLimit: UpDataStructsCollectionLimits;
+ } & Struct;
+ readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'SetPublicAccessMode' | 'SetMintPermission' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetSchemaVersion' | 'SetOffchainSchema' | 'SetConstOnChainSchema' | 'SetCollectionLimits';
+}
+
+/** @name PalletUniqueError */
+export interface PalletUniqueError extends Enum {
+ readonly isCollectionDecimalPointLimitExceeded: boolean;
+ readonly isConfirmUnsetSponsorFail: boolean;
+ readonly isEmptyArgument: boolean;
+ readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument';
+}
+
+/** @name PalletUniqueRawEvent */
+export interface PalletUniqueRawEvent extends Enum {
+ readonly isCollectionSponsorRemoved: boolean;
+ readonly asCollectionSponsorRemoved: u32;
+ readonly isCollectionAdminAdded: boolean;
+ readonly asCollectionAdminAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;
+ readonly isCollectionOwnedChanged: boolean;
+ readonly asCollectionOwnedChanged: ITuple<[u32, AccountId32]>;
+ readonly isCollectionSponsorSet: boolean;
+ readonly asCollectionSponsorSet: ITuple<[u32, AccountId32]>;
+ readonly isConstOnChainSchemaSet: boolean;
+ readonly asConstOnChainSchemaSet: u32;
+ readonly isSponsorshipConfirmed: boolean;
+ readonly asSponsorshipConfirmed: ITuple<[u32, AccountId32]>;
+ readonly isCollectionAdminRemoved: boolean;
+ readonly asCollectionAdminRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;
+ readonly isAllowListAddressRemoved: boolean;
+ readonly asAllowListAddressRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;
+ readonly isAllowListAddressAdded: boolean;
+ readonly asAllowListAddressAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;
+ readonly isCollectionLimitSet: boolean;
+ readonly asCollectionLimitSet: u32;
+ readonly isMintPermissionSet: boolean;
+ readonly asMintPermissionSet: u32;
+ readonly isOffchainSchemaSet: boolean;
+ readonly asOffchainSchemaSet: u32;
+ readonly isPublicAccessModeSet: boolean;
+ readonly asPublicAccessModeSet: ITuple<[u32, UpDataStructsAccessMode]>;
+ readonly isSchemaVersionSet: boolean;
+ readonly asSchemaVersionSet: u32;
+ readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'ConstOnChainSchemaSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'MintPermissionSet' | 'OffchainSchemaSet' | 'PublicAccessModeSet' | 'SchemaVersionSet';
+}
+
+/** @name PalletXcmCall */
+export interface PalletXcmCall extends Enum {
+ readonly isSend: boolean;
+ readonly asSend: {
+ readonly dest: XcmVersionedMultiLocation;
+ readonly message: XcmVersionedXcm;
+ } & Struct;
+ readonly isTeleportAssets: boolean;
+ readonly asTeleportAssets: {
+ readonly dest: XcmVersionedMultiLocation;
+ readonly beneficiary: XcmVersionedMultiLocation;
+ readonly assets: XcmVersionedMultiAssets;
+ readonly feeAssetItem: u32;
+ } & Struct;
+ readonly isReserveTransferAssets: boolean;
+ readonly asReserveTransferAssets: {
+ readonly dest: XcmVersionedMultiLocation;
+ readonly beneficiary: XcmVersionedMultiLocation;
+ readonly assets: XcmVersionedMultiAssets;
+ readonly feeAssetItem: u32;
+ } & Struct;
+ readonly isExecute: boolean;
+ readonly asExecute: {
+ readonly message: XcmVersionedXcm;
+ readonly maxWeight: u64;
+ } & Struct;
+ readonly isForceXcmVersion: boolean;
+ readonly asForceXcmVersion: {
+ readonly location: XcmV1MultiLocation;
+ readonly xcmVersion: u32;
+ } & Struct;
+ readonly isForceDefaultXcmVersion: boolean;
+ readonly asForceDefaultXcmVersion: {
+ readonly maybeXcmVersion: Option<u32>;
+ } & Struct;
+ readonly isForceSubscribeVersionNotify: boolean;
+ readonly asForceSubscribeVersionNotify: {
+ readonly location: XcmVersionedMultiLocation;
+ } & Struct;
+ readonly isForceUnsubscribeVersionNotify: boolean;
+ readonly asForceUnsubscribeVersionNotify: {
+ readonly location: XcmVersionedMultiLocation;
+ } & Struct;
+ readonly isLimitedReserveTransferAssets: boolean;
+ readonly asLimitedReserveTransferAssets: {
+ readonly dest: XcmVersionedMultiLocation;
+ readonly beneficiary: XcmVersionedMultiLocation;
+ readonly assets: XcmVersionedMultiAssets;
+ readonly feeAssetItem: u32;
+ readonly weightLimit: XcmV2WeightLimit;
+ } & Struct;
+ readonly isLimitedTeleportAssets: boolean;
+ readonly asLimitedTeleportAssets: {
+ readonly dest: XcmVersionedMultiLocation;
+ readonly beneficiary: XcmVersionedMultiLocation;
+ readonly assets: XcmVersionedMultiAssets;
+ readonly feeAssetItem: u32;
+ readonly weightLimit: XcmV2WeightLimit;
+ } & Struct;
+ readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets';
+}
+
+/** @name PalletXcmError */
+export interface PalletXcmError extends Enum {
+ readonly isUnreachable: boolean;
+ readonly isSendFailure: boolean;
+ readonly isFiltered: boolean;
+ readonly isUnweighableMessage: boolean;
+ readonly isDestinationNotInvertible: boolean;
+ readonly isEmpty: boolean;
+ readonly isCannotReanchor: boolean;
+ readonly isTooManyAssets: boolean;
+ readonly isInvalidOrigin: boolean;
+ readonly isBadVersion: boolean;
+ readonly isBadLocation: boolean;
+ readonly isNoSubscription: boolean;
+ readonly isAlreadySubscribed: boolean;
+ readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';
+}
+
+/** @name PalletXcmEvent */
+export interface PalletXcmEvent extends Enum {
+ readonly isAttempted: boolean;
+ readonly asAttempted: XcmV2TraitsOutcome;
+ readonly isSent: boolean;
+ readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>;
+ readonly isUnexpectedResponse: boolean;
+ readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>;
+ readonly isResponseReady: boolean;
+ readonly asResponseReady: ITuple<[u64, XcmV2Response]>;
+ readonly isNotified: boolean;
+ readonly asNotified: ITuple<[u64, u8, u8]>;
+ readonly isNotifyOverweight: boolean;
+ readonly asNotifyOverweight: ITuple<[u64, u8, u8, u64, u64]>;
+ readonly isNotifyDispatchError: boolean;
+ readonly asNotifyDispatchError: ITuple<[u64, u8, u8]>;
+ readonly isNotifyDecodeFailed: boolean;
+ readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>;
+ readonly isInvalidResponder: boolean;
+ readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option<XcmV1MultiLocation>]>;
+ readonly isInvalidResponderVersion: boolean;
+ readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>;
+ readonly isResponseTaken: boolean;
+ readonly asResponseTaken: u64;
+ readonly isAssetsTrapped: boolean;
+ readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;
+ readonly isVersionChangeNotified: boolean;
+ readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>;
+ readonly isSupportedVersionChanged: boolean;
+ readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>;
+ readonly isNotifyTargetSendFail: boolean;
+ readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>;
+ readonly isNotifyTargetMigrationFail: boolean;
+ readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>;
+ readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail';
+}
+
+/** @name PhantomTypeUpDataStructsBaseInfo */
+export interface PhantomTypeUpDataStructsBaseInfo extends Vec<Lookup357> {}
+
+/** @name PhantomTypeUpDataStructsCollectionInfo */
+export interface PhantomTypeUpDataStructsCollectionInfo extends Vec<Lookup334> {}
+
+/** @name PhantomTypeUpDataStructsNftChild */
+export interface PhantomTypeUpDataStructsNftChild extends Vec<Lookup372> {}
+
+/** @name PhantomTypeUpDataStructsNftInfo */
+export interface PhantomTypeUpDataStructsNftInfo extends Vec<Lookup339> {}
+
+/** @name PhantomTypeUpDataStructsPartType */
+export interface PhantomTypeUpDataStructsPartType extends Vec<Lookup360> {}
+
+/** @name PhantomTypeUpDataStructsPropertyInfo */
+export interface PhantomTypeUpDataStructsPropertyInfo extends Vec<Lookup352> {}
+
+/** @name PhantomTypeUpDataStructsResourceInfo */
+export interface PhantomTypeUpDataStructsResourceInfo extends Vec<Lookup345> {}
+
+/** @name PhantomTypeUpDataStructsRpcCollection */
+export interface PhantomTypeUpDataStructsRpcCollection extends Vec<Lookup331> {}
+
+/** @name PhantomTypeUpDataStructsTheme */
+export interface PhantomTypeUpDataStructsTheme extends Vec<Lookup367> {}
+
+/** @name PhantomTypeUpDataStructsTokenData */
+export interface PhantomTypeUpDataStructsTokenData extends Vec<Lookup327> {}
+
+/** @name PolkadotCorePrimitivesInboundDownwardMessage */
+export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct {
+ readonly sentAt: u32;
+ readonly msg: Bytes;
+}
+
+/** @name PolkadotCorePrimitivesInboundHrmpMessage */
+export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct {
+ readonly sentAt: u32;
+ readonly data: Bytes;
+}
+
+/** @name PolkadotCorePrimitivesOutboundHrmpMessage */
+export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct {
+ readonly recipient: u32;
+ readonly data: Bytes;
+}
+
+/** @name PolkadotParachainPrimitivesXcmpMessageFormat */
+export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {
+ readonly isConcatenatedVersionedXcm: boolean;
+ readonly isConcatenatedEncodedBlob: boolean;
+ readonly isSignals: boolean;
+ readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';
+}
+
+/** @name PolkadotPrimitivesV2AbridgedHostConfiguration */
+export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct {
+ readonly maxCodeSize: u32;
+ readonly maxHeadDataSize: u32;
+ readonly maxUpwardQueueCount: u32;
+ readonly maxUpwardQueueSize: u32;
+ readonly maxUpwardMessageSize: u32;
+ readonly maxUpwardMessageNumPerCandidate: u32;
+ readonly hrmpMaxMessageNumPerCandidate: u32;
+ readonly validationUpgradeCooldown: u32;
+ readonly validationUpgradeDelay: u32;
+}
+
+/** @name PolkadotPrimitivesV2AbridgedHrmpChannel */
+export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct {
+ readonly maxCapacity: u32;
+ readonly maxTotalSize: u32;
+ readonly maxMessageSize: u32;
+ readonly msgCount: u32;
+ readonly totalSize: u32;
+ readonly mqcHead: Option<H256>;
+}
+
+/** @name PolkadotPrimitivesV2PersistedValidationData */
+export interface PolkadotPrimitivesV2PersistedValidationData extends Struct {
+ readonly parentHead: Bytes;
+ readonly relayParentNumber: u32;
+ readonly relayParentStorageRoot: H256;
+ readonly maxPovSize: u32;
+}
+
+/** @name PolkadotPrimitivesV2UpgradeRestriction */
+export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum {
+ readonly isPresent: boolean;
+ readonly type: 'Present';
+}
+
+/** @name RmrkTypesAccountIdOrCollectionNftTuple */
+export interface RmrkTypesAccountIdOrCollectionNftTuple extends Enum {
+ readonly isAccountId: boolean;
+ readonly asAccountId: AccountId32;
+ readonly isCollectionAndNftTuple: boolean;
+ readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;
+ readonly type: 'AccountId' | 'CollectionAndNftTuple';
+}
+
+/** @name RmrkTypesBaseInfo */
+export interface RmrkTypesBaseInfo extends Struct {
+ readonly issuer: AccountId32;
+ readonly baseType: Bytes;
+ readonly symbol: Bytes;
+}
+
+/** @name RmrkTypesCollectionInfo */
+export interface RmrkTypesCollectionInfo extends Struct {
+ readonly issuer: AccountId32;
+ readonly metadata: Bytes;
+ readonly max: Option<u32>;
+ readonly symbol: Bytes;
+ readonly nftsCount: u32;
+}
+
+/** @name RmrkTypesEquippableList */
+export interface RmrkTypesEquippableList extends Enum {
+ readonly isAll: boolean;
+ readonly isEmpty: boolean;
+ readonly isCustom: boolean;
+ readonly asCustom: Vec<u32>;
+ readonly type: 'All' | 'Empty' | 'Custom';
+}
+
+/** @name RmrkTypesFixedPart */
+export interface RmrkTypesFixedPart extends Struct {
+ readonly id: u32;
+ readonly z: u32;
+ readonly src: Bytes;
+}
+
+/** @name RmrkTypesNftChild */
+export interface RmrkTypesNftChild extends Struct {
+ readonly collectionId: u32;
+ readonly nftId: u32;
+}
+
+/** @name RmrkTypesNftInfo */
+export interface RmrkTypesNftInfo extends Struct {
+ readonly owner: RmrkTypesAccountIdOrCollectionNftTuple;
+ readonly royalty: Option<RmrkTypesRoyaltyInfo>;
+ readonly metadata: Bytes;
+ readonly equipped: bool;
+ readonly pending: bool;
+}
+
+/** @name RmrkTypesPartType */
+export interface RmrkTypesPartType extends Enum {
+ readonly isFixedPart: boolean;
+ readonly asFixedPart: RmrkTypesFixedPart;
+ readonly isSlotPart: boolean;
+ readonly asSlotPart: RmrkTypesSlotPart;
+ readonly type: 'FixedPart' | 'SlotPart';
+}
+
+/** @name RmrkTypesPropertyInfo */
+export interface RmrkTypesPropertyInfo extends Struct {
+ readonly key: Bytes;
+ readonly value: Bytes;
+}
+
+/** @name RmrkTypesResourceInfo */
+export interface RmrkTypesResourceInfo extends Struct {
+ readonly id: Bytes;
+ readonly pending: bool;
+ readonly pendingRemoval: bool;
+ readonly parts: Option<Vec<u32>>;
+ readonly base: Option<u32>;
+ readonly src: Option<Bytes>;
+ readonly metadata: Option<Bytes>;
+ readonly slot: Option<u32>;
+ readonly license: Option<Bytes>;
+ readonly thumb: Option<Bytes>;
+}
+
+/** @name RmrkTypesRoyaltyInfo */
+export interface RmrkTypesRoyaltyInfo extends Struct {
+ readonly recipient: AccountId32;
+ readonly amount: Permill;
+}
+
+/** @name RmrkTypesSlotPart */
+export interface RmrkTypesSlotPart extends Struct {
+ readonly id: u32;
+ readonly equippable: RmrkTypesEquippableList;
+ readonly src: Bytes;
+ readonly z: u32;
+}
+
+/** @name RmrkTypesTheme */
+export interface RmrkTypesTheme extends Struct {
+ readonly name: Bytes;
+ readonly properties: Vec<RmrkTypesThemeProperty>;
+ readonly inherit: bool;
+}
+
+/** @name RmrkTypesThemeProperty */
+export interface RmrkTypesThemeProperty extends Struct {
+ readonly key: Bytes;
+ readonly value: Bytes;
+}
+
+/** @name SpCoreEcdsaSignature */
+export interface SpCoreEcdsaSignature extends U8aFixed {}
+
+/** @name SpCoreEd25519Signature */
+export interface SpCoreEd25519Signature extends U8aFixed {}
+
+/** @name SpCoreSr25519Signature */
+export interface SpCoreSr25519Signature extends U8aFixed {}
+
+/** @name SpRuntimeArithmeticError */
+export interface SpRuntimeArithmeticError extends Enum {
+ readonly isUnderflow: boolean;
+ readonly isOverflow: boolean;
+ readonly isDivisionByZero: boolean;
+ readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';
+}
+
+/** @name SpRuntimeDigest */
+export interface SpRuntimeDigest extends Struct {
+ readonly logs: Vec<SpRuntimeDigestDigestItem>;
+}
+
+/** @name SpRuntimeDigestDigestItem */
+export interface SpRuntimeDigestDigestItem extends Enum {
+ readonly isOther: boolean;
+ readonly asOther: Bytes;
+ readonly isConsensus: boolean;
+ readonly asConsensus: ITuple<[U8aFixed, Bytes]>;
+ readonly isSeal: boolean;
+ readonly asSeal: ITuple<[U8aFixed, Bytes]>;
+ readonly isPreRuntime: boolean;
+ readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>;
+ readonly isRuntimeEnvironmentUpdated: boolean;
+ readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated';
+}
+
+/** @name SpRuntimeDispatchError */
+export interface SpRuntimeDispatchError extends Enum {
+ readonly isOther: boolean;
+ readonly isCannotLookup: boolean;
+ readonly isBadOrigin: boolean;
+ readonly isModule: boolean;
+ readonly asModule: SpRuntimeModuleError;
+ readonly isConsumerRemaining: boolean;
+ readonly isNoProviders: boolean;
+ readonly isTooManyConsumers: boolean;
+ readonly isToken: boolean;
+ readonly asToken: SpRuntimeTokenError;
+ readonly isArithmetic: boolean;
+ readonly asArithmetic: SpRuntimeArithmeticError;
+ readonly isTransactional: boolean;
+ readonly asTransactional: SpRuntimeTransactionalError;
+ readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional';
+}
+
+/** @name SpRuntimeModuleError */
+export interface SpRuntimeModuleError extends Struct {
+ readonly index: u8;
+ readonly error: U8aFixed;
+}
+
+/** @name SpRuntimeMultiSignature */
+export interface SpRuntimeMultiSignature extends Enum {
+ readonly isEd25519: boolean;
+ readonly asEd25519: SpCoreEd25519Signature;
+ readonly isSr25519: boolean;
+ readonly asSr25519: SpCoreSr25519Signature;
+ readonly isEcdsa: boolean;
+ readonly asEcdsa: SpCoreEcdsaSignature;
+ readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';
+}
+
+/** @name SpRuntimeTokenError */
+export interface SpRuntimeTokenError extends Enum {
+ readonly isNoFunds: boolean;
+ readonly isWouldDie: boolean;
+ readonly isBelowMinimum: boolean;
+ readonly isCannotCreate: boolean;
+ readonly isUnknownAsset: boolean;
+ readonly isFrozen: boolean;
+ readonly isUnsupported: boolean;
+ readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported';
+}
+
+/** @name SpRuntimeTransactionalError */
+export interface SpRuntimeTransactionalError extends Enum {
+ readonly isLimitReached: boolean;
+ readonly isNoLayer: boolean;
+ readonly type: 'LimitReached' | 'NoLayer';
+}
+
+/** @name SpTrieStorageProof */
+export interface SpTrieStorageProof extends Struct {
+ readonly trieNodes: BTreeSet<Bytes>;
+}
+
+/** @name SpVersionRuntimeVersion */
+export interface SpVersionRuntimeVersion extends Struct {
+ readonly specName: Text;
+ readonly implName: Text;
+ readonly authoringVersion: u32;
+ readonly specVersion: u32;
+ readonly implVersion: u32;
+ readonly apis: Vec<ITuple<[U8aFixed, u32]>>;
+ readonly transactionVersion: u32;
+ readonly stateVersion: u8;
+}
+
+/** @name UpDataStructsAccessMode */
+export interface UpDataStructsAccessMode extends Enum {
+ readonly isNormal: boolean;
+ readonly isAllowList: boolean;
+ readonly type: 'Normal' | 'AllowList';
+}
+
+/** @name UpDataStructsCollection */
+export interface UpDataStructsCollection extends Struct {
+ readonly owner: AccountId32;
+ readonly mode: UpDataStructsCollectionMode;
+ readonly access: UpDataStructsAccessMode;
+ readonly name: Vec<u16>;
+ readonly description: Vec<u16>;
+ readonly tokenPrefix: Bytes;
+ readonly mintMode: bool;
+ readonly schemaVersion: UpDataStructsSchemaVersion;
+ readonly sponsorship: UpDataStructsSponsorshipState;
+ readonly limits: UpDataStructsCollectionLimits;
+}
+
+/** @name UpDataStructsCollectionField */
+export interface UpDataStructsCollectionField extends Enum {
+ readonly isConstOnChainSchema: boolean;
+ readonly isOffchainSchema: boolean;
+ readonly type: 'ConstOnChainSchema' | 'OffchainSchema';
+}
+
+/** @name UpDataStructsCollectionLimits */
+export interface UpDataStructsCollectionLimits extends Struct {
+ readonly accountTokenOwnershipLimit: Option<u32>;
+ readonly sponsoredDataSize: Option<u32>;
+ readonly sponsoredDataRateLimit: Option<UpDataStructsSponsoringRateLimit>;
+ readonly tokenLimit: Option<u32>;
+ readonly sponsorTransferTimeout: Option<u32>;
+ readonly sponsorApproveTimeout: Option<u32>;
+ readonly ownerCanTransfer: Option<bool>;
+ readonly ownerCanDestroy: Option<bool>;
+ readonly transfersEnabled: Option<bool>;
+ readonly nestingRule: Option<UpDataStructsNestingRule>;
+}
+
+/** @name UpDataStructsCollectionMode */
+export interface UpDataStructsCollectionMode extends Enum {
+ readonly isNft: boolean;
+ readonly isFungible: boolean;
+ readonly asFungible: u8;
+ readonly isReFungible: boolean;
+ readonly type: 'Nft' | 'Fungible' | 'ReFungible';
+}
+
+/** @name UpDataStructsCollectionStats */
+export interface UpDataStructsCollectionStats extends Struct {
+ readonly created: u32;
+ readonly destroyed: u32;
+ readonly alive: u32;
+}
+
+/** @name UpDataStructsCreateCollectionData */
+export interface UpDataStructsCreateCollectionData extends Struct {
+ readonly mode: UpDataStructsCollectionMode;
+ readonly access: Option<UpDataStructsAccessMode>;
+ readonly name: Vec<u16>;
+ readonly description: Vec<u16>;
+ readonly tokenPrefix: Bytes;
+ readonly offchainSchema: Bytes;
+ readonly schemaVersion: Option<UpDataStructsSchemaVersion>;
+ readonly pendingSponsor: Option<AccountId32>;
+ readonly limits: Option<UpDataStructsCollectionLimits>;
+ readonly constOnChainSchema: Bytes;
+ readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;
+ readonly properties: Vec<UpDataStructsProperty>;
+}
+
+/** @name UpDataStructsCreateFungibleData */
+export interface UpDataStructsCreateFungibleData extends Struct {
+ readonly value: u128;
+}
+
+/** @name UpDataStructsCreateItemData */
+export interface UpDataStructsCreateItemData extends Enum {
+ readonly isNft: boolean;
+ readonly asNft: UpDataStructsCreateNftData;
+ readonly isFungible: boolean;
+ readonly asFungible: UpDataStructsCreateFungibleData;
+ readonly isReFungible: boolean;
+ readonly asReFungible: UpDataStructsCreateReFungibleData;
+ readonly type: 'Nft' | 'Fungible' | 'ReFungible';
+}
+
+/** @name UpDataStructsCreateItemExData */
+export interface UpDataStructsCreateItemExData extends Enum {
+ readonly isNft: boolean;
+ readonly asNft: Vec<UpDataStructsCreateNftExData>;
+ readonly isFungible: boolean;
+ readonly asFungible: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr,u128>;
+ readonly isRefungibleMultipleItems: boolean;
+ readonly asRefungibleMultipleItems: Vec<UpDataStructsCreateRefungibleExData>;
+ readonly isRefungibleMultipleOwners: boolean;
+ readonly asRefungibleMultipleOwners: UpDataStructsCreateRefungibleExData;
+ readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners';
+}
+
+/** @name UpDataStructsCreateNftData */
+export interface UpDataStructsCreateNftData extends Struct {
+ readonly constData: Bytes;
+ readonly properties: Vec<UpDataStructsProperty>;
+}
+
+/** @name UpDataStructsCreateNftExData */
+export interface UpDataStructsCreateNftExData extends Struct {
+ readonly constData: Bytes;
+ readonly properties: Vec<UpDataStructsProperty>;
+ readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
+}
+
+/** @name UpDataStructsCreateReFungibleData */
+export interface UpDataStructsCreateReFungibleData extends Struct {
+ readonly constData: Bytes;
+ readonly pieces: u128;
+}
+
+/** @name UpDataStructsCreateRefungibleExData */
+export interface UpDataStructsCreateRefungibleExData extends Struct {
+ readonly constData: Bytes;
+ readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;
+}
+
+/** @name UpDataStructsNestingRule */
+export interface UpDataStructsNestingRule extends Enum {
+ readonly isDisabled: boolean;
+ readonly isOwner: boolean;
+ readonly isOwnerRestricted: boolean;
+ readonly asOwnerRestricted: BTreeSet<u32>;
+ readonly type: 'Disabled' | 'Owner' | 'OwnerRestricted';
+}
+
+/** @name UpDataStructsProperties */
+export interface UpDataStructsProperties extends Struct {
+ readonly map: UpDataStructsPropertiesMapBoundedVec;
+ readonly consumedSpace: u32;
+ readonly spaceLimit: u32;
+}
+
+/** @name UpDataStructsPropertiesMapBoundedVec */
+export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}
+
+/** @name UpDataStructsPropertiesMapPropertyPermission */
+export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}
+
+/** @name UpDataStructsProperty */
+export interface UpDataStructsProperty extends Struct {
+ readonly key: Bytes;
+ readonly value: Bytes;
+}
+
+/** @name UpDataStructsPropertyKeyPermission */
+export interface UpDataStructsPropertyKeyPermission extends Struct {
+ readonly key: Bytes;
+ readonly permission: UpDataStructsPropertyPermission;
+}
+
+/** @name UpDataStructsPropertyPermission */
+export interface UpDataStructsPropertyPermission extends Struct {
+ readonly mutable: bool;
+ readonly collectionAdmin: bool;
+ readonly tokenOwner: bool;
+}
+
+/** @name UpDataStructsRpcCollection */
+export interface UpDataStructsRpcCollection extends Struct {
+ readonly owner: AccountId32;
+ readonly mode: UpDataStructsCollectionMode;
+ readonly access: UpDataStructsAccessMode;
+ readonly name: Vec<u16>;
+ readonly description: Vec<u16>;
+ readonly tokenPrefix: Bytes;
+ readonly mintMode: bool;
+ readonly offchainSchema: Bytes;
+ readonly schemaVersion: UpDataStructsSchemaVersion;
+ readonly sponsorship: UpDataStructsSponsorshipState;
+ readonly limits: UpDataStructsCollectionLimits;
+ readonly constOnChainSchema: Bytes;
+ readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;
+ readonly properties: Vec<UpDataStructsProperty>;
+}
+
+/** @name UpDataStructsSchemaVersion */
+export interface UpDataStructsSchemaVersion extends Enum {
+ readonly isImageURL: boolean;
+ readonly isUnique: boolean;
+ readonly type: 'ImageURL' | 'Unique';
+}
+
+/** @name UpDataStructsSponsoringRateLimit */
+export interface UpDataStructsSponsoringRateLimit extends Enum {
+ readonly isSponsoringDisabled: boolean;
+ readonly isBlocks: boolean;
+ readonly asBlocks: u32;
+ readonly type: 'SponsoringDisabled' | 'Blocks';
+}
+
+/** @name UpDataStructsSponsorshipState */
+export interface UpDataStructsSponsorshipState extends Enum {
+ readonly isDisabled: boolean;
+ readonly isUnconfirmed: boolean;
+ readonly asUnconfirmed: AccountId32;
+ readonly isConfirmed: boolean;
+ readonly asConfirmed: AccountId32;
+ readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';
+}
+
+/** @name UpDataStructsTokenData */
+export interface UpDataStructsTokenData extends Struct {
+ readonly constData: Bytes;
+ readonly properties: Vec<UpDataStructsProperty>;
+ readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;
+}
+
+/** @name XcmDoubleEncoded */
+export interface XcmDoubleEncoded extends Struct {
+ readonly encoded: Bytes;
+}
+
+/** @name XcmV0Junction */
+export interface XcmV0Junction extends Enum {
+ readonly isParent: boolean;
+ readonly isParachain: boolean;
+ readonly asParachain: Compact<u32>;
+ readonly isAccountId32: boolean;
+ readonly asAccountId32: {
+ readonly network: XcmV0JunctionNetworkId;
+ readonly id: U8aFixed;
+ } & Struct;
+ readonly isAccountIndex64: boolean;
+ readonly asAccountIndex64: {
+ readonly network: XcmV0JunctionNetworkId;
+ readonly index: Compact<u64>;
+ } & Struct;
+ readonly isAccountKey20: boolean;
+ readonly asAccountKey20: {
+ readonly network: XcmV0JunctionNetworkId;
+ readonly key: U8aFixed;
+ } & Struct;
+ readonly isPalletInstance: boolean;
+ readonly asPalletInstance: u8;
+ readonly isGeneralIndex: boolean;
+ readonly asGeneralIndex: Compact<u128>;
+ readonly isGeneralKey: boolean;
+ readonly asGeneralKey: Bytes;
+ readonly isOnlyChild: boolean;
+ readonly isPlurality: boolean;
+ readonly asPlurality: {
+ readonly id: XcmV0JunctionBodyId;
+ readonly part: XcmV0JunctionBodyPart;
+ } & Struct;
+ readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';
+}
+
+/** @name XcmV0JunctionBodyId */
+export interface XcmV0JunctionBodyId extends Enum {
+ readonly isUnit: boolean;
+ readonly isNamed: boolean;
+ readonly asNamed: Bytes;
+ readonly isIndex: boolean;
+ readonly asIndex: Compact<u32>;
+ readonly isExecutive: boolean;
+ readonly isTechnical: boolean;
+ readonly isLegislative: boolean;
+ readonly isJudicial: boolean;
+ readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial';
+}
+
+/** @name XcmV0JunctionBodyPart */
+export interface XcmV0JunctionBodyPart extends Enum {
+ readonly isVoice: boolean;
+ readonly isMembers: boolean;
+ readonly asMembers: {
+ readonly count: Compact<u32>;
+ } & Struct;
+ readonly isFraction: boolean;
+ readonly asFraction: {
+ readonly nom: Compact<u32>;
+ readonly denom: Compact<u32>;
+ } & Struct;
+ readonly isAtLeastProportion: boolean;
+ readonly asAtLeastProportion: {
+ readonly nom: Compact<u32>;
+ readonly denom: Compact<u32>;
+ } & Struct;
+ readonly isMoreThanProportion: boolean;
+ readonly asMoreThanProportion: {
+ readonly nom: Compact<u32>;
+ readonly denom: Compact<u32>;
+ } & Struct;
+ readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion';
+}
+
+/** @name XcmV0JunctionNetworkId */
+export interface XcmV0JunctionNetworkId extends Enum {
+ readonly isAny: boolean;
+ readonly isNamed: boolean;
+ readonly asNamed: Bytes;
+ readonly isPolkadot: boolean;
+ readonly isKusama: boolean;
+ readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama';
+}
+
+/** @name XcmV0MultiAsset */
+export interface XcmV0MultiAsset extends Enum {
+ readonly isNone: boolean;
+ readonly isAll: boolean;
+ readonly isAllFungible: boolean;
+ readonly isAllNonFungible: boolean;
+ readonly isAllAbstractFungible: boolean;
+ readonly asAllAbstractFungible: {
+ readonly id: Bytes;
+ } & Struct;
+ readonly isAllAbstractNonFungible: boolean;
+ readonly asAllAbstractNonFungible: {
+ readonly class: Bytes;
+ } & Struct;
+ readonly isAllConcreteFungible: boolean;
+ readonly asAllConcreteFungible: {
+ readonly id: XcmV0MultiLocation;
+ } & Struct;
+ readonly isAllConcreteNonFungible: boolean;
+ readonly asAllConcreteNonFungible: {
+ readonly class: XcmV0MultiLocation;
+ } & Struct;
+ readonly isAbstractFungible: boolean;
+ readonly asAbstractFungible: {
+ readonly id: Bytes;
+ readonly amount: Compact<u128>;
+ } & Struct;
+ readonly isAbstractNonFungible: boolean;
+ readonly asAbstractNonFungible: {
+ readonly class: Bytes;
+ readonly instance: XcmV1MultiassetAssetInstance;
+ } & Struct;
+ readonly isConcreteFungible: boolean;
+ readonly asConcreteFungible: {
+ readonly id: XcmV0MultiLocation;
+ readonly amount: Compact<u128>;
+ } & Struct;
+ readonly isConcreteNonFungible: boolean;
+ readonly asConcreteNonFungible: {
+ readonly class: XcmV0MultiLocation;
+ readonly instance: XcmV1MultiassetAssetInstance;
+ } & Struct;
+ readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible';
+}
+
+/** @name XcmV0MultiLocation */
+export interface XcmV0MultiLocation extends Enum {
+ readonly isNull: boolean;
+ readonly isX1: boolean;
+ readonly asX1: XcmV0Junction;
+ readonly isX2: boolean;
+ readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>;
+ readonly isX3: boolean;
+ readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>;
+ readonly isX4: boolean;
+ readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;
+ readonly isX5: boolean;
+ readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;
+ readonly isX6: boolean;
+ readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;
+ readonly isX7: boolean;
+ readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;
+ readonly isX8: boolean;
+ readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;
+ readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';
+}
+
+/** @name XcmV0Order */
+export interface XcmV0Order extends Enum {
+ readonly isNull: boolean;
+ readonly isDepositAsset: boolean;
+ readonly asDepositAsset: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly dest: XcmV0MultiLocation;
+ } & Struct;
+ readonly isDepositReserveAsset: boolean;
+ readonly asDepositReserveAsset: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly dest: XcmV0MultiLocation;
+ readonly effects: Vec<XcmV0Order>;
+ } & Struct;
+ readonly isExchangeAsset: boolean;
+ readonly asExchangeAsset: {
+ readonly give: Vec<XcmV0MultiAsset>;
+ readonly receive: Vec<XcmV0MultiAsset>;
+ } & Struct;
+ readonly isInitiateReserveWithdraw: boolean;
+ readonly asInitiateReserveWithdraw: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly reserve: XcmV0MultiLocation;
+ readonly effects: Vec<XcmV0Order>;
+ } & Struct;
+ readonly isInitiateTeleport: boolean;
+ readonly asInitiateTeleport: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly dest: XcmV0MultiLocation;
+ readonly effects: Vec<XcmV0Order>;
+ } & Struct;
+ readonly isQueryHolding: boolean;
+ readonly asQueryHolding: {
+ readonly queryId: Compact<u64>;
+ readonly dest: XcmV0MultiLocation;
+ readonly assets: Vec<XcmV0MultiAsset>;
+ } & Struct;
+ readonly isBuyExecution: boolean;
+ readonly asBuyExecution: {
+ readonly fees: XcmV0MultiAsset;
+ readonly weight: u64;
+ readonly debt: u64;
+ readonly haltOnError: bool;
+ readonly xcm: Vec<XcmV0Xcm>;
+ } & Struct;
+ readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';
+}
+
+/** @name XcmV0OriginKind */
+export interface XcmV0OriginKind extends Enum {
+ readonly isNative: boolean;
+ readonly isSovereignAccount: boolean;
+ readonly isSuperuser: boolean;
+ readonly isXcm: boolean;
+ readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm';
+}
+
+/** @name XcmV0Response */
+export interface XcmV0Response extends Enum {
+ readonly isAssets: boolean;
+ readonly asAssets: Vec<XcmV0MultiAsset>;
+ readonly type: 'Assets';
+}
+
+/** @name XcmV0Xcm */
+export interface XcmV0Xcm extends Enum {
+ readonly isWithdrawAsset: boolean;
+ readonly asWithdrawAsset: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly effects: Vec<XcmV0Order>;
+ } & Struct;
+ readonly isReserveAssetDeposit: boolean;
+ readonly asReserveAssetDeposit: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly effects: Vec<XcmV0Order>;
+ } & Struct;
+ readonly isTeleportAsset: boolean;
+ readonly asTeleportAsset: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly effects: Vec<XcmV0Order>;
+ } & Struct;
+ readonly isQueryResponse: boolean;
+ readonly asQueryResponse: {
+ readonly queryId: Compact<u64>;
+ readonly response: XcmV0Response;
+ } & Struct;
+ readonly isTransferAsset: boolean;
+ readonly asTransferAsset: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly dest: XcmV0MultiLocation;
+ } & Struct;
+ readonly isTransferReserveAsset: boolean;
+ readonly asTransferReserveAsset: {
+ readonly assets: Vec<XcmV0MultiAsset>;
+ readonly dest: XcmV0MultiLocation;
+ readonly effects: Vec<XcmV0Order>;
+ } & Struct;
+ readonly isTransact: boolean;
+ readonly asTransact: {
+ readonly originType: XcmV0OriginKind;
+ readonly requireWeightAtMost: u64;
+ readonly call: XcmDoubleEncoded;
+ } & Struct;
+ readonly isHrmpNewChannelOpenRequest: boolean;
+ readonly asHrmpNewChannelOpenRequest: {
+ readonly sender: Compact<u32>;
+ readonly maxMessageSize: Compact<u32>;
+ readonly maxCapacity: Compact<u32>;
+ } & Struct;
+ readonly isHrmpChannelAccepted: boolean;
+ readonly asHrmpChannelAccepted: {
+ readonly recipient: Compact<u32>;
+ } & Struct;
+ readonly isHrmpChannelClosing: boolean;
+ readonly asHrmpChannelClosing: {
+ readonly initiator: Compact<u32>;
+ readonly sender: Compact<u32>;
+ readonly recipient: Compact<u32>;
+ } & Struct;
+ readonly isRelayedFrom: boolean;
+ readonly asRelayedFrom: {
+ readonly who: XcmV0MultiLocation;
+ readonly message: XcmV0Xcm;
+ } & Struct;
+ readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom';
+}
+
+/** @name XcmV1Junction */
+export interface XcmV1Junction extends Enum {
+ readonly isParachain: boolean;
+ readonly asParachain: Compact<u32>;
+ readonly isAccountId32: boolean;
+ readonly asAccountId32: {
+ readonly network: XcmV0JunctionNetworkId;
+ readonly id: U8aFixed;
+ } & Struct;
+ readonly isAccountIndex64: boolean;
+ readonly asAccountIndex64: {
+ readonly network: XcmV0JunctionNetworkId;
+ readonly index: Compact<u64>;
+ } & Struct;
+ readonly isAccountKey20: boolean;
+ readonly asAccountKey20: {
+ readonly network: XcmV0JunctionNetworkId;
+ readonly key: U8aFixed;
+ } & Struct;
+ readonly isPalletInstance: boolean;
+ readonly asPalletInstance: u8;
+ readonly isGeneralIndex: boolean;
+ readonly asGeneralIndex: Compact<u128>;
+ readonly isGeneralKey: boolean;
+ readonly asGeneralKey: Bytes;
+ readonly isOnlyChild: boolean;
+ readonly isPlurality: boolean;
+ readonly asPlurality: {
+ readonly id: XcmV0JunctionBodyId;
+ readonly part: XcmV0JunctionBodyPart;
+ } & Struct;
+ readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';
+}
+
+/** @name XcmV1MultiAsset */
+export interface XcmV1MultiAsset extends Struct {
+ readonly id: XcmV1MultiassetAssetId;
+ readonly fun: XcmV1MultiassetFungibility;
+}
+
+/** @name XcmV1MultiassetAssetId */
+export interface XcmV1MultiassetAssetId extends Enum {
+ readonly isConcrete: boolean;
+ readonly asConcrete: XcmV1MultiLocation;
+ readonly isAbstract: boolean;
+ readonly asAbstract: Bytes;
+ readonly type: 'Concrete' | 'Abstract';
+}
+
+/** @name XcmV1MultiassetAssetInstance */
+export interface XcmV1MultiassetAssetInstance extends Enum {
+ readonly isUndefined: boolean;
+ readonly isIndex: boolean;
+ readonly asIndex: Compact<u128>;
+ readonly isArray4: boolean;
+ readonly asArray4: U8aFixed;
+ readonly isArray8: boolean;
+ readonly asArray8: U8aFixed;
+ readonly isArray16: boolean;
+ readonly asArray16: U8aFixed;
+ readonly isArray32: boolean;
+ readonly asArray32: U8aFixed;
+ readonly isBlob: boolean;
+ readonly asBlob: Bytes;
+ readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob';
+}
+
+/** @name XcmV1MultiassetFungibility */
+export interface XcmV1MultiassetFungibility extends Enum {
+ readonly isFungible: boolean;
+ readonly asFungible: Compact<u128>;
+ readonly isNonFungible: boolean;
+ readonly asNonFungible: XcmV1MultiassetAssetInstance;
+ readonly type: 'Fungible' | 'NonFungible';
+}
+
+/** @name XcmV1MultiassetMultiAssetFilter */
+export interface XcmV1MultiassetMultiAssetFilter extends Enum {
+ readonly isDefinite: boolean;
+ readonly asDefinite: XcmV1MultiassetMultiAssets;
+ readonly isWild: boolean;
+ readonly asWild: XcmV1MultiassetWildMultiAsset;
+ readonly type: 'Definite' | 'Wild';
+}
+
+/** @name XcmV1MultiassetMultiAssets */
+export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}
+
+/** @name XcmV1MultiassetWildFungibility */
+export interface XcmV1MultiassetWildFungibility extends Enum {
+ readonly isFungible: boolean;
+ readonly isNonFungible: boolean;
+ readonly type: 'Fungible' | 'NonFungible';
+}
+
+/** @name XcmV1MultiassetWildMultiAsset */
+export interface XcmV1MultiassetWildMultiAsset extends Enum {
+ readonly isAll: boolean;
+ readonly isAllOf: boolean;
+ readonly asAllOf: {
+ readonly id: XcmV1MultiassetAssetId;
+ readonly fun: XcmV1MultiassetWildFungibility;
+ } & Struct;
+ readonly type: 'All' | 'AllOf';
+}
+
+/** @name XcmV1MultiLocation */
+export interface XcmV1MultiLocation extends Struct {
+ readonly parents: u8;
+ readonly interior: XcmV1MultilocationJunctions;
+}
+
+/** @name XcmV1MultilocationJunctions */
+export interface XcmV1MultilocationJunctions extends Enum {
+ readonly isHere: boolean;
+ readonly isX1: boolean;
+ readonly asX1: XcmV1Junction;
+ readonly isX2: boolean;
+ readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>;
+ readonly isX3: boolean;
+ readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>;
+ readonly isX4: boolean;
+ readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;
+ readonly isX5: boolean;
+ readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;
+ readonly isX6: boolean;
+ readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;
+ readonly isX7: boolean;
+ readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;
+ readonly isX8: boolean;
+ readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;
+ readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';
+}
+
+/** @name XcmV1Order */
+export interface XcmV1Order extends Enum {
+ readonly isNoop: boolean;
+ readonly isDepositAsset: boolean;
+ readonly asDepositAsset: {
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly maxAssets: u32;
+ readonly beneficiary: XcmV1MultiLocation;
+ } & Struct;
+ readonly isDepositReserveAsset: boolean;
+ readonly asDepositReserveAsset: {
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly maxAssets: u32;
+ readonly dest: XcmV1MultiLocation;
+ readonly effects: Vec<XcmV1Order>;
+ } & Struct;
+ readonly isExchangeAsset: boolean;
+ readonly asExchangeAsset: {
+ readonly give: XcmV1MultiassetMultiAssetFilter;
+ readonly receive: XcmV1MultiassetMultiAssets;
+ } & Struct;
+ readonly isInitiateReserveWithdraw: boolean;
+ readonly asInitiateReserveWithdraw: {
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly reserve: XcmV1MultiLocation;
+ readonly effects: Vec<XcmV1Order>;
+ } & Struct;
+ readonly isInitiateTeleport: boolean;
+ readonly asInitiateTeleport: {
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly dest: XcmV1MultiLocation;
+ readonly effects: Vec<XcmV1Order>;
+ } & Struct;
+ readonly isQueryHolding: boolean;
+ readonly asQueryHolding: {
+ readonly queryId: Compact<u64>;
+ readonly dest: XcmV1MultiLocation;
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ } & Struct;
+ readonly isBuyExecution: boolean;
+ readonly asBuyExecution: {
+ readonly fees: XcmV1MultiAsset;
+ readonly weight: u64;
+ readonly debt: u64;
+ readonly haltOnError: bool;
+ readonly instructions: Vec<XcmV1Xcm>;
+ } & Struct;
+ readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';
+}
+
+/** @name XcmV1Response */
+export interface XcmV1Response extends Enum {
+ readonly isAssets: boolean;
+ readonly asAssets: XcmV1MultiassetMultiAssets;
+ readonly isVersion: boolean;
+ readonly asVersion: u32;
+ readonly type: 'Assets' | 'Version';
+}
+
+/** @name XcmV1Xcm */
+export interface XcmV1Xcm extends Enum {
+ readonly isWithdrawAsset: boolean;
+ readonly asWithdrawAsset: {
+ readonly assets: XcmV1MultiassetMultiAssets;
+ readonly effects: Vec<XcmV1Order>;
+ } & Struct;
+ readonly isReserveAssetDeposited: boolean;
+ readonly asReserveAssetDeposited: {
+ readonly assets: XcmV1MultiassetMultiAssets;
+ readonly effects: Vec<XcmV1Order>;
+ } & Struct;
+ readonly isReceiveTeleportedAsset: boolean;
+ readonly asReceiveTeleportedAsset: {
+ readonly assets: XcmV1MultiassetMultiAssets;
+ readonly effects: Vec<XcmV1Order>;
+ } & Struct;
+ readonly isQueryResponse: boolean;
+ readonly asQueryResponse: {
+ readonly queryId: Compact<u64>;
+ readonly response: XcmV1Response;
+ } & Struct;
+ readonly isTransferAsset: boolean;
+ readonly asTransferAsset: {
+ readonly assets: XcmV1MultiassetMultiAssets;
+ readonly beneficiary: XcmV1MultiLocation;
+ } & Struct;
+ readonly isTransferReserveAsset: boolean;
+ readonly asTransferReserveAsset: {
+ readonly assets: XcmV1MultiassetMultiAssets;
+ readonly dest: XcmV1MultiLocation;
+ readonly effects: Vec<XcmV1Order>;
+ } & Struct;
+ readonly isTransact: boolean;
+ readonly asTransact: {
+ readonly originType: XcmV0OriginKind;
+ readonly requireWeightAtMost: u64;
+ readonly call: XcmDoubleEncoded;
+ } & Struct;
+ readonly isHrmpNewChannelOpenRequest: boolean;
+ readonly asHrmpNewChannelOpenRequest: {
+ readonly sender: Compact<u32>;
+ readonly maxMessageSize: Compact<u32>;
+ readonly maxCapacity: Compact<u32>;
+ } & Struct;
+ readonly isHrmpChannelAccepted: boolean;
+ readonly asHrmpChannelAccepted: {
+ readonly recipient: Compact<u32>;
+ } & Struct;
+ readonly isHrmpChannelClosing: boolean;
+ readonly asHrmpChannelClosing: {
+ readonly initiator: Compact<u32>;
+ readonly sender: Compact<u32>;
+ readonly recipient: Compact<u32>;
+ } & Struct;
+ readonly isRelayedFrom: boolean;
+ readonly asRelayedFrom: {
+ readonly who: XcmV1MultilocationJunctions;
+ readonly message: XcmV1Xcm;
+ } & Struct;
+ readonly isSubscribeVersion: boolean;
+ readonly asSubscribeVersion: {
+ readonly queryId: Compact<u64>;
+ readonly maxResponseWeight: Compact<u64>;
+ } & Struct;
+ readonly isUnsubscribeVersion: boolean;
+ readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion';
+}
+
+/** @name XcmV2Instruction */
+export interface XcmV2Instruction extends Enum {
+ readonly isWithdrawAsset: boolean;
+ readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;
+ readonly isReserveAssetDeposited: boolean;
+ readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets;
+ readonly isReceiveTeleportedAsset: boolean;
+ readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets;
+ readonly isQueryResponse: boolean;
+ readonly asQueryResponse: {
+ readonly queryId: Compact<u64>;
+ readonly response: XcmV2Response;
+ readonly maxWeight: Compact<u64>;
+ } & Struct;
+ readonly isTransferAsset: boolean;
+ readonly asTransferAsset: {
+ readonly assets: XcmV1MultiassetMultiAssets;
+ readonly beneficiary: XcmV1MultiLocation;
+ } & Struct;
+ readonly isTransferReserveAsset: boolean;
+ readonly asTransferReserveAsset: {
+ readonly assets: XcmV1MultiassetMultiAssets;
+ readonly dest: XcmV1MultiLocation;
+ readonly xcm: XcmV2Xcm;
+ } & Struct;
+ readonly isTransact: boolean;
+ readonly asTransact: {
+ readonly originType: XcmV0OriginKind;
+ readonly requireWeightAtMost: Compact<u64>;
+ readonly call: XcmDoubleEncoded;
+ } & Struct;
+ readonly isHrmpNewChannelOpenRequest: boolean;
+ readonly asHrmpNewChannelOpenRequest: {
+ readonly sender: Compact<u32>;
+ readonly maxMessageSize: Compact<u32>;
+ readonly maxCapacity: Compact<u32>;
+ } & Struct;
+ readonly isHrmpChannelAccepted: boolean;
+ readonly asHrmpChannelAccepted: {
+ readonly recipient: Compact<u32>;
+ } & Struct;
+ readonly isHrmpChannelClosing: boolean;
+ readonly asHrmpChannelClosing: {
+ readonly initiator: Compact<u32>;
+ readonly sender: Compact<u32>;
+ readonly recipient: Compact<u32>;
+ } & Struct;
+ readonly isClearOrigin: boolean;
+ readonly isDescendOrigin: boolean;
+ readonly asDescendOrigin: XcmV1MultilocationJunctions;
+ readonly isReportError: boolean;
+ readonly asReportError: {
+ readonly queryId: Compact<u64>;
+ readonly dest: XcmV1MultiLocation;
+ readonly maxResponseWeight: Compact<u64>;
+ } & Struct;
+ readonly isDepositAsset: boolean;
+ readonly asDepositAsset: {
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly maxAssets: Compact<u32>;
+ readonly beneficiary: XcmV1MultiLocation;
+ } & Struct;
+ readonly isDepositReserveAsset: boolean;
+ readonly asDepositReserveAsset: {
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly maxAssets: Compact<u32>;
+ readonly dest: XcmV1MultiLocation;
+ readonly xcm: XcmV2Xcm;
+ } & Struct;
+ readonly isExchangeAsset: boolean;
+ readonly asExchangeAsset: {
+ readonly give: XcmV1MultiassetMultiAssetFilter;
+ readonly receive: XcmV1MultiassetMultiAssets;
+ } & Struct;
+ readonly isInitiateReserveWithdraw: boolean;
+ readonly asInitiateReserveWithdraw: {
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly reserve: XcmV1MultiLocation;
+ readonly xcm: XcmV2Xcm;
+ } & Struct;
+ readonly isInitiateTeleport: boolean;
+ readonly asInitiateTeleport: {
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly dest: XcmV1MultiLocation;
+ readonly xcm: XcmV2Xcm;
+ } & Struct;
+ readonly isQueryHolding: boolean;
+ readonly asQueryHolding: {
+ readonly queryId: Compact<u64>;
+ readonly dest: XcmV1MultiLocation;
+ readonly assets: XcmV1MultiassetMultiAssetFilter;
+ readonly maxResponseWeight: Compact<u64>;
+ } & Struct;
+ readonly isBuyExecution: boolean;
+ readonly asBuyExecution: {
+ readonly fees: XcmV1MultiAsset;
+ readonly weightLimit: XcmV2WeightLimit;
+ } & Struct;
+ readonly isRefundSurplus: boolean;
+ readonly isSetErrorHandler: boolean;
+ readonly asSetErrorHandler: XcmV2Xcm;
+ readonly isSetAppendix: boolean;
+ readonly asSetAppendix: XcmV2Xcm;
+ readonly isClearError: boolean;
+ readonly isClaimAsset: boolean;
+ readonly asClaimAsset: {
+ readonly assets: XcmV1MultiassetMultiAssets;
+ readonly ticket: XcmV1MultiLocation;
+ } & Struct;
+ readonly isTrap: boolean;
+ readonly asTrap: Compact<u64>;
+ readonly isSubscribeVersion: boolean;
+ readonly asSubscribeVersion: {
+ readonly queryId: Compact<u64>;
+ readonly maxResponseWeight: Compact<u64>;
+ } & Struct;
+ readonly isUnsubscribeVersion: boolean;
+ readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion';
+}
+
+/** @name XcmV2Response */
+export interface XcmV2Response extends Enum {
+ readonly isNull: boolean;
+ readonly isAssets: boolean;
+ readonly asAssets: XcmV1MultiassetMultiAssets;
+ readonly isExecutionResult: boolean;
+ readonly asExecutionResult: Option<ITuple<[u32, XcmV2TraitsError]>>;
+ readonly isVersion: boolean;
+ readonly asVersion: u32;
+ readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version';
+}
+
+/** @name XcmV2TraitsError */
+export interface XcmV2TraitsError extends Enum {
+ readonly isOverflow: boolean;
+ readonly isUnimplemented: boolean;
+ readonly isUntrustedReserveLocation: boolean;
+ readonly isUntrustedTeleportLocation: boolean;
+ readonly isMultiLocationFull: boolean;
+ readonly isMultiLocationNotInvertible: boolean;
+ readonly isBadOrigin: boolean;
+ readonly isInvalidLocation: boolean;
+ readonly isAssetNotFound: boolean;
+ readonly isFailedToTransactAsset: boolean;
+ readonly isNotWithdrawable: boolean;
+ readonly isLocationCannotHold: boolean;
+ readonly isExceedsMaxMessageSize: boolean;
+ readonly isDestinationUnsupported: boolean;
+ readonly isTransport: boolean;
+ readonly isUnroutable: boolean;
+ readonly isUnknownClaim: boolean;
+ readonly isFailedToDecode: boolean;
+ readonly isMaxWeightInvalid: boolean;
+ readonly isNotHoldingFees: boolean;
+ readonly isTooExpensive: boolean;
+ readonly isTrap: boolean;
+ readonly asTrap: u64;
+ readonly isUnhandledXcmVersion: boolean;
+ readonly isWeightLimitReached: boolean;
+ readonly asWeightLimitReached: u64;
+ readonly isBarrier: boolean;
+ readonly isWeightNotComputable: boolean;
+ readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable';
+}
+
+/** @name XcmV2TraitsOutcome */
+export interface XcmV2TraitsOutcome extends Enum {
+ readonly isComplete: boolean;
+ readonly asComplete: u64;
+ readonly isIncomplete: boolean;
+ readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>;
+ readonly isError: boolean;
+ readonly asError: XcmV2TraitsError;
+ readonly type: 'Complete' | 'Incomplete' | 'Error';
+}
+
+/** @name XcmV2WeightLimit */
+export interface XcmV2WeightLimit extends Enum {
+ readonly isUnlimited: boolean;
+ readonly isLimited: boolean;
+ readonly asLimited: Compact<u64>;
+ readonly type: 'Unlimited' | 'Limited';
+}
+
+/** @name XcmV2Xcm */
+export interface XcmV2Xcm extends Vec<XcmV2Instruction> {}
+
+/** @name XcmVersionedMultiAssets */
+export interface XcmVersionedMultiAssets extends Enum {
+ readonly isV0: boolean;
+ readonly asV0: Vec<XcmV0MultiAsset>;
+ readonly isV1: boolean;
+ readonly asV1: XcmV1MultiassetMultiAssets;
+ readonly type: 'V0' | 'V1';
+}
+
+/** @name XcmVersionedMultiLocation */
+export interface XcmVersionedMultiLocation extends Enum {
+ readonly isV0: boolean;
+ readonly asV0: XcmV0MultiLocation;
+ readonly isV1: boolean;
+ readonly asV1: XcmV1MultiLocation;
+ readonly type: 'V0' | 'V1';
+}
+
+/** @name XcmVersionedXcm */
+export interface XcmVersionedXcm extends Enum {
+ readonly isV0: boolean;
+ readonly asV0: XcmV0Xcm;
+ readonly isV1: boolean;
+ readonly asV1: XcmV1Xcm;
+ readonly isV2: boolean;
+ readonly asV2: XcmV2Xcm;
+ readonly type: 'V0' | 'V1' | 'V2';
+}
+
+export type PHANTOM_RMRK = 'rmrk';
tests/src/interfaces/types-lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/types-lookup.ts
+++ b/tests/src/interfaces/types-lookup.ts
@@ -4,7 +4,7 @@
declare module '@polkadot/types/lookup' {
import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
import type { ITuple } from '@polkadot/types-codec/types';
- import type { AccountId32, Call, H160, H256, MultiAddress, Perbill } from '@polkadot/types/interfaces/runtime';
+ import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';
import type { Event } from '@polkadot/types/interfaces/system';
/** @name PolkadotPrimitivesV2PersistedValidationData (2) */
@@ -1582,12 +1582,9 @@
readonly isDisabled: boolean;
readonly isOwner: boolean;
readonly isOwnerRestricted: boolean;
- readonly asOwnerRestricted: FrameSupportStorageBoundedBTreeSet;
+ readonly asOwnerRestricted: BTreeSet<u32>;
readonly type: 'Disabled' | 'Owner' | 'OwnerRestricted';
}
-
- /** @name FrameSupportStorageBoundedBTreeSet (171) */
- export interface FrameSupportStorageBoundedBTreeSet extends BTreeSet<u32> {}
/** @name UpDataStructsPropertyKeyPermission (177) */
export interface UpDataStructsPropertyKeyPermission extends Struct {
@@ -2544,7 +2541,143 @@
readonly properties: Vec<UpDataStructsProperty>;
}
- /** @name PalletCommonError (333) */
+ /** @name PhantomTypeUpDataStructsCollectionInfo (333) */
+ export interface PhantomTypeUpDataStructsCollectionInfo extends Vec<RmrkTypesCollectionInfo> {}
+
+ /** @name RmrkTypesCollectionInfo (334) */
+ export interface RmrkTypesCollectionInfo extends Struct {
+ readonly issuer: AccountId32;
+ readonly metadata: Bytes;
+ readonly max: Option<u32>;
+ readonly symbol: Bytes;
+ readonly nftsCount: u32;
+ }
+
+ /** @name PhantomTypeUpDataStructsNftInfo (338) */
+ export interface PhantomTypeUpDataStructsNftInfo extends Vec<RmrkTypesNftInfo> {}
+
+ /** @name RmrkTypesNftInfo (339) */
+ export interface RmrkTypesNftInfo extends Struct {
+ readonly owner: RmrkTypesAccountIdOrCollectionNftTuple;
+ readonly royalty: Option<RmrkTypesRoyaltyInfo>;
+ readonly metadata: Bytes;
+ readonly equipped: bool;
+ readonly pending: bool;
+ }
+
+ /** @name RmrkTypesAccountIdOrCollectionNftTuple (340) */
+ export interface RmrkTypesAccountIdOrCollectionNftTuple extends Enum {
+ readonly isAccountId: boolean;
+ readonly asAccountId: AccountId32;
+ readonly isCollectionAndNftTuple: boolean;
+ readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;
+ readonly type: 'AccountId' | 'CollectionAndNftTuple';
+ }
+
+ /** @name RmrkTypesRoyaltyInfo (342) */
+ export interface RmrkTypesRoyaltyInfo extends Struct {
+ readonly recipient: AccountId32;
+ readonly amount: Permill;
+ }
+
+ /** @name PhantomTypeUpDataStructsResourceInfo (344) */
+ export interface PhantomTypeUpDataStructsResourceInfo extends Vec<RmrkTypesResourceInfo> {}
+
+ /** @name RmrkTypesResourceInfo (345) */
+ export interface RmrkTypesResourceInfo extends Struct {
+ readonly id: Bytes;
+ readonly pending: bool;
+ readonly pendingRemoval: bool;
+ readonly parts: Option<Vec<u32>>;
+ readonly base: Option<u32>;
+ readonly src: Option<Bytes>;
+ readonly metadata: Option<Bytes>;
+ readonly slot: Option<u32>;
+ readonly license: Option<Bytes>;
+ readonly thumb: Option<Bytes>;
+ }
+
+ /** @name PhantomTypeUpDataStructsPropertyInfo (351) */
+ export interface PhantomTypeUpDataStructsPropertyInfo extends Vec<RmrkTypesPropertyInfo> {}
+
+ /** @name RmrkTypesPropertyInfo (352) */
+ export interface RmrkTypesPropertyInfo extends Struct {
+ readonly key: Bytes;
+ readonly value: Bytes;
+ }
+
+ /** @name PhantomTypeUpDataStructsBaseInfo (356) */
+ export interface PhantomTypeUpDataStructsBaseInfo extends Vec<RmrkTypesBaseInfo> {}
+
+ /** @name RmrkTypesBaseInfo (357) */
+ export interface RmrkTypesBaseInfo extends Struct {
+ readonly issuer: AccountId32;
+ readonly baseType: Bytes;
+ readonly symbol: Bytes;
+ }
+
+ /** @name PhantomTypeUpDataStructsPartType (359) */
+ export interface PhantomTypeUpDataStructsPartType extends Vec<RmrkTypesPartType> {}
+
+ /** @name RmrkTypesPartType (360) */
+ export interface RmrkTypesPartType extends Enum {
+ readonly isFixedPart: boolean;
+ readonly asFixedPart: RmrkTypesFixedPart;
+ readonly isSlotPart: boolean;
+ readonly asSlotPart: RmrkTypesSlotPart;
+ readonly type: 'FixedPart' | 'SlotPart';
+ }
+
+ /** @name RmrkTypesFixedPart (362) */
+ export interface RmrkTypesFixedPart extends Struct {
+ readonly id: u32;
+ readonly z: u32;
+ readonly src: Bytes;
+ }
+
+ /** @name RmrkTypesSlotPart (363) */
+ export interface RmrkTypesSlotPart extends Struct {
+ readonly id: u32;
+ readonly equippable: RmrkTypesEquippableList;
+ readonly src: Bytes;
+ readonly z: u32;
+ }
+
+ /** @name RmrkTypesEquippableList (364) */
+ export interface RmrkTypesEquippableList extends Enum {
+ readonly isAll: boolean;
+ readonly isEmpty: boolean;
+ readonly isCustom: boolean;
+ readonly asCustom: Vec<u32>;
+ readonly type: 'All' | 'Empty' | 'Custom';
+ }
+
+ /** @name PhantomTypeUpDataStructsTheme (366) */
+ export interface PhantomTypeUpDataStructsTheme extends Vec<RmrkTypesTheme> {}
+
+ /** @name RmrkTypesTheme (367) */
+ export interface RmrkTypesTheme extends Struct {
+ readonly name: Bytes;
+ readonly properties: Vec<RmrkTypesThemeProperty>;
+ readonly inherit: bool;
+ }
+
+ /** @name RmrkTypesThemeProperty (369) */
+ export interface RmrkTypesThemeProperty extends Struct {
+ readonly key: Bytes;
+ readonly value: Bytes;
+ }
+
+ /** @name PhantomTypeUpDataStructsNftChild (371) */
+ export interface PhantomTypeUpDataStructsNftChild extends Vec<RmrkTypesNftChild> {}
+
+ /** @name RmrkTypesNftChild (372) */
+ export interface RmrkTypesNftChild extends Struct {
+ readonly collectionId: u32;
+ readonly nftId: u32;
+ }
+
+ /** @name PalletCommonError (374) */
export interface PalletCommonError extends Enum {
readonly isCollectionNotFound: boolean;
readonly isMustBeTokenOwner: boolean;
@@ -2581,7 +2714,7 @@
readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'NestingIsDisabled' | 'OnlyOwnerAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey';
}
- /** @name PalletFungibleError (335) */
+ /** @name PalletFungibleError (376) */
export interface PalletFungibleError extends Enum {
readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isFungibleItemsHaveNoId: boolean;
@@ -2591,12 +2724,12 @@
readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
}
- /** @name PalletRefungibleItemData (336) */
+ /** @name PalletRefungibleItemData (377) */
export interface PalletRefungibleItemData extends Struct {
readonly constData: Bytes;
}
- /** @name PalletRefungibleError (340) */
+ /** @name PalletRefungibleError (381) */
export interface PalletRefungibleError extends Enum {
readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isWrongRefungiblePieces: boolean;
@@ -2605,20 +2738,20 @@
readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
}
- /** @name PalletNonfungibleItemData (341) */
+ /** @name PalletNonfungibleItemData (382) */
export interface PalletNonfungibleItemData extends Struct {
readonly constData: Bytes;
readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
}
- /** @name PalletNonfungibleError (342) */
+ /** @name PalletNonfungibleError (383) */
export interface PalletNonfungibleError extends Enum {
readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isNonfungibleItemsHaveNoAmount: boolean;
readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount';
}
- /** @name PalletStructureError (343) */
+ /** @name PalletStructureError (384) */
export interface PalletStructureError extends Enum {
readonly isOuroborosDetected: boolean;
readonly isDepthLimit: boolean;
@@ -2626,7 +2759,7 @@
readonly type: 'OuroborosDetected' | 'DepthLimit' | 'TokenNotFound';
}
- /** @name PalletEvmError (346) */
+ /** @name PalletEvmError (387) */
export interface PalletEvmError extends Enum {
readonly isBalanceLow: boolean;
readonly isFeeOverflow: boolean;
@@ -2637,7 +2770,7 @@
readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';
}
- /** @name FpRpcTransactionStatus (349) */
+ /** @name FpRpcTransactionStatus (390) */
export interface FpRpcTransactionStatus extends Struct {
readonly transactionHash: H256;
readonly transactionIndex: u32;
@@ -2648,10 +2781,10 @@
readonly logsBloom: EthbloomBloom;
}
- /** @name EthbloomBloom (351) */
+ /** @name EthbloomBloom (392) */
export interface EthbloomBloom extends U8aFixed {}
- /** @name EthereumReceiptReceiptV3 (353) */
+ /** @name EthereumReceiptReceiptV3 (394) */
export interface EthereumReceiptReceiptV3 extends Enum {
readonly isLegacy: boolean;
readonly asLegacy: EthereumReceiptEip658ReceiptData;
@@ -2662,7 +2795,7 @@
readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
}
- /** @name EthereumReceiptEip658ReceiptData (354) */
+ /** @name EthereumReceiptEip658ReceiptData (395) */
export interface EthereumReceiptEip658ReceiptData extends Struct {
readonly statusCode: u8;
readonly usedGas: U256;
@@ -2670,14 +2803,14 @@
readonly logs: Vec<EthereumLog>;
}
- /** @name EthereumBlock (355) */
+ /** @name EthereumBlock (396) */
export interface EthereumBlock extends Struct {
readonly header: EthereumHeader;
readonly transactions: Vec<EthereumTransactionTransactionV2>;
readonly ommers: Vec<EthereumHeader>;
}
- /** @name EthereumHeader (356) */
+ /** @name EthereumHeader (397) */
export interface EthereumHeader extends Struct {
readonly parentHash: H256;
readonly ommersHash: H256;
@@ -2696,24 +2829,24 @@
readonly nonce: EthereumTypesHashH64;
}
- /** @name EthereumTypesHashH64 (357) */
+ /** @name EthereumTypesHashH64 (398) */
export interface EthereumTypesHashH64 extends U8aFixed {}
- /** @name PalletEthereumError (362) */
+ /** @name PalletEthereumError (403) */
export interface PalletEthereumError extends Enum {
readonly isInvalidSignature: boolean;
readonly isPreLogExists: boolean;
readonly type: 'InvalidSignature' | 'PreLogExists';
}
- /** @name PalletEvmCoderSubstrateError (363) */
+ /** @name PalletEvmCoderSubstrateError (404) */
export interface PalletEvmCoderSubstrateError extends Enum {
readonly isOutOfGas: boolean;
readonly isOutOfFund: boolean;
readonly type: 'OutOfGas' | 'OutOfFund';
}
- /** @name PalletEvmContractHelpersSponsoringModeT (364) */
+ /** @name PalletEvmContractHelpersSponsoringModeT (405) */
export interface PalletEvmContractHelpersSponsoringModeT extends Enum {
readonly isDisabled: boolean;
readonly isAllowlisted: boolean;
@@ -2721,20 +2854,20 @@
readonly type: 'Disabled' | 'Allowlisted' | 'Generous';
}
- /** @name PalletEvmContractHelpersError (366) */
+ /** @name PalletEvmContractHelpersError (407) */
export interface PalletEvmContractHelpersError extends Enum {
readonly isNoPermission: boolean;
readonly type: 'NoPermission';
}
- /** @name PalletEvmMigrationError (367) */
+ /** @name PalletEvmMigrationError (408) */
export interface PalletEvmMigrationError extends Enum {
readonly isAccountNotEmpty: boolean;
readonly isAccountIsNotMigrating: boolean;
readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';
}
- /** @name SpRuntimeMultiSignature (369) */
+ /** @name SpRuntimeMultiSignature (410) */
export interface SpRuntimeMultiSignature extends Enum {
readonly isEd25519: boolean;
readonly asEd25519: SpCoreEd25519Signature;
@@ -2745,34 +2878,34 @@
readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';
}
- /** @name SpCoreEd25519Signature (370) */
+ /** @name SpCoreEd25519Signature (411) */
export interface SpCoreEd25519Signature extends U8aFixed {}
- /** @name SpCoreSr25519Signature (372) */
+ /** @name SpCoreSr25519Signature (413) */
export interface SpCoreSr25519Signature extends U8aFixed {}
- /** @name SpCoreEcdsaSignature (373) */
+ /** @name SpCoreEcdsaSignature (414) */
export interface SpCoreEcdsaSignature extends U8aFixed {}
- /** @name FrameSystemExtensionsCheckSpecVersion (376) */
+ /** @name FrameSystemExtensionsCheckSpecVersion (417) */
export type FrameSystemExtensionsCheckSpecVersion = Null;
- /** @name FrameSystemExtensionsCheckGenesis (377) */
+ /** @name FrameSystemExtensionsCheckGenesis (418) */
export type FrameSystemExtensionsCheckGenesis = Null;
- /** @name FrameSystemExtensionsCheckNonce (380) */
+ /** @name FrameSystemExtensionsCheckNonce (421) */
export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}
- /** @name FrameSystemExtensionsCheckWeight (381) */
+ /** @name FrameSystemExtensionsCheckWeight (422) */
export type FrameSystemExtensionsCheckWeight = Null;
- /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (382) */
+ /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (423) */
export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}
- /** @name OpalRuntimeRuntime (383) */
+ /** @name OpalRuntimeRuntime (424) */
export type OpalRuntimeRuntime = Null;
- /** @name PalletEthereumFakeTransactionFinalizer (384) */
+ /** @name PalletEthereumFakeTransactionFinalizer (425) */
export type PalletEthereumFakeTransactionFinalizer = Null;
} // declare module
tests/src/interfaces/types.tsdiffbeforeafterboth--- a/tests/src/interfaces/types.ts
+++ b/tests/src/interfaces/types.ts
@@ -2,3 +2,4 @@
/* eslint-disable */
export * from './unique/types';
+export * from './rmrk/types';
tests/src/interfaces/unique/types.tsdiffbeforeafterboth--- a/tests/src/interfaces/unique/types.ts
+++ b/tests/src/interfaces/unique/types.ts
@@ -3,7 +3,7 @@
import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
import type { ITuple } from '@polkadot/types-codec/types';
-import type { AccountId32, Call, H160, H256, MultiAddress, Perbill } from '@polkadot/types/interfaces/runtime';
+import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';
import type { Event } from '@polkadot/types/interfaces/system';
/** @name CumulusPalletDmpQueueCall */
@@ -445,9 +445,6 @@
/** @name FrameSupportPalletId */
export interface FrameSupportPalletId extends U8aFixed {}
-
-/** @name FrameSupportStorageBoundedBTreeSet */
-export interface FrameSupportStorageBoundedBTreeSet extends BTreeSet<u32> {}
/** @name FrameSupportTokensMiscBalanceStatus */
export interface FrameSupportTokensMiscBalanceStatus extends Enum {
@@ -1617,9 +1614,33 @@
readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail';
}
+/** @name PhantomTypeUpDataStructsBaseInfo */
+export interface PhantomTypeUpDataStructsBaseInfo extends Vec<Lookup357> {}
+
+/** @name PhantomTypeUpDataStructsCollectionInfo */
+export interface PhantomTypeUpDataStructsCollectionInfo extends Vec<Lookup334> {}
+
+/** @name PhantomTypeUpDataStructsNftChild */
+export interface PhantomTypeUpDataStructsNftChild extends Vec<Lookup372> {}
+
+/** @name PhantomTypeUpDataStructsNftInfo */
+export interface PhantomTypeUpDataStructsNftInfo extends Vec<Lookup339> {}
+
+/** @name PhantomTypeUpDataStructsPartType */
+export interface PhantomTypeUpDataStructsPartType extends Vec<Lookup360> {}
+
+/** @name PhantomTypeUpDataStructsPropertyInfo */
+export interface PhantomTypeUpDataStructsPropertyInfo extends Vec<Lookup352> {}
+
+/** @name PhantomTypeUpDataStructsResourceInfo */
+export interface PhantomTypeUpDataStructsResourceInfo extends Vec<Lookup345> {}
+
/** @name PhantomTypeUpDataStructsRpcCollection */
export interface PhantomTypeUpDataStructsRpcCollection extends Vec<Lookup331> {}
+/** @name PhantomTypeUpDataStructsTheme */
+export interface PhantomTypeUpDataStructsTheme extends Vec<Lookup367> {}
+
/** @name PhantomTypeUpDataStructsTokenData */
export interface PhantomTypeUpDataStructsTokenData extends Vec<Lookup327> {}
@@ -1686,6 +1707,118 @@
readonly type: 'Present';
}
+/** @name RmrkTypesAccountIdOrCollectionNftTuple */
+export interface RmrkTypesAccountIdOrCollectionNftTuple extends Enum {
+ readonly isAccountId: boolean;
+ readonly asAccountId: AccountId32;
+ readonly isCollectionAndNftTuple: boolean;
+ readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;
+ readonly type: 'AccountId' | 'CollectionAndNftTuple';
+}
+
+/** @name RmrkTypesBaseInfo */
+export interface RmrkTypesBaseInfo extends Struct {
+ readonly issuer: AccountId32;
+ readonly baseType: Bytes;
+ readonly symbol: Bytes;
+}
+
+/** @name RmrkTypesCollectionInfo */
+export interface RmrkTypesCollectionInfo extends Struct {
+ readonly issuer: AccountId32;
+ readonly metadata: Bytes;
+ readonly max: Option<u32>;
+ readonly symbol: Bytes;
+ readonly nftsCount: u32;
+}
+
+/** @name RmrkTypesEquippableList */
+export interface RmrkTypesEquippableList extends Enum {
+ readonly isAll: boolean;
+ readonly isEmpty: boolean;
+ readonly isCustom: boolean;
+ readonly asCustom: Vec<u32>;
+ readonly type: 'All' | 'Empty' | 'Custom';
+}
+
+/** @name RmrkTypesFixedPart */
+export interface RmrkTypesFixedPart extends Struct {
+ readonly id: u32;
+ readonly z: u32;
+ readonly src: Bytes;
+}
+
+/** @name RmrkTypesNftChild */
+export interface RmrkTypesNftChild extends Struct {
+ readonly collectionId: u32;
+ readonly nftId: u32;
+}
+
+/** @name RmrkTypesNftInfo */
+export interface RmrkTypesNftInfo extends Struct {
+ readonly owner: RmrkTypesAccountIdOrCollectionNftTuple;
+ readonly royalty: Option<RmrkTypesRoyaltyInfo>;
+ readonly metadata: Bytes;
+ readonly equipped: bool;
+ readonly pending: bool;
+}
+
+/** @name RmrkTypesPartType */
+export interface RmrkTypesPartType extends Enum {
+ readonly isFixedPart: boolean;
+ readonly asFixedPart: RmrkTypesFixedPart;
+ readonly isSlotPart: boolean;
+ readonly asSlotPart: RmrkTypesSlotPart;
+ readonly type: 'FixedPart' | 'SlotPart';
+}
+
+/** @name RmrkTypesPropertyInfo */
+export interface RmrkTypesPropertyInfo extends Struct {
+ readonly key: Bytes;
+ readonly value: Bytes;
+}
+
+/** @name RmrkTypesResourceInfo */
+export interface RmrkTypesResourceInfo extends Struct {
+ readonly id: Bytes;
+ readonly pending: bool;
+ readonly pendingRemoval: bool;
+ readonly parts: Option<Vec<u32>>;
+ readonly base: Option<u32>;
+ readonly src: Option<Bytes>;
+ readonly metadata: Option<Bytes>;
+ readonly slot: Option<u32>;
+ readonly license: Option<Bytes>;
+ readonly thumb: Option<Bytes>;
+}
+
+/** @name RmrkTypesRoyaltyInfo */
+export interface RmrkTypesRoyaltyInfo extends Struct {
+ readonly recipient: AccountId32;
+ readonly amount: Permill;
+}
+
+/** @name RmrkTypesSlotPart */
+export interface RmrkTypesSlotPart extends Struct {
+ readonly id: u32;
+ readonly equippable: RmrkTypesEquippableList;
+ readonly src: Bytes;
+ readonly z: u32;
+}
+
+/** @name RmrkTypesTheme */
+export interface RmrkTypesTheme extends Struct {
+ readonly name: Bytes;
+ readonly properties: Vec<RmrkTypesThemeProperty>;
+ readonly inherit: bool;
+}
+
+/** @name RmrkTypesThemeProperty */
+export interface RmrkTypesThemeProperty extends Struct {
+ readonly key: Bytes;
+ readonly value: Bytes;
+}
+
/** @name SpCoreEcdsaSignature */
export interface SpCoreEcdsaSignature extends U8aFixed {}
@@ -1927,7 +2060,7 @@
readonly isDisabled: boolean;
readonly isOwner: boolean;
readonly isOwnerRestricted: boolean;
- readonly asOwnerRestricted: FrameSupportStorageBoundedBTreeSet;
+ readonly asOwnerRestricted: BTreeSet<u32>;
readonly type: 'Disabled' | 'Owner' | 'OwnerRestricted';
}
tests/src/substrate/substrate-api.tsdiffbeforeafterboth--- a/tests/src/substrate/substrate-api.ts
+++ b/tests/src/substrate/substrate-api.ts
@@ -41,6 +41,7 @@
},
rpc: {
unique: defs.unique.rpc,
+ rmrk: defs.rmrk.rpc,
eth: {
feeHistory: {
description: 'Dummy',