From 4fa2f8e12260fb90299062534ca1ced62f1f185d Mon Sep 17 00:00:00 2001 From: str-mv Date: Fri, 08 Apr 2022 06:11:01 +0000 Subject: [PATCH] Merge remote-tracking branch 'origin/develop' into develop --- --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ *store_key*.json /.idea/ +/.cargo/ tests/.vscode cumulus-parachain/ --- a/Cargo.lock +++ b/Cargo.lock @@ -68,7 +68,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.5", + "getrandom 0.2.6", "once_cell", "version_check", ] @@ -188,9 +188,9 @@ [[package]] name = "async-global-executor" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c026b7e44f1316b567ee750fea85103f87fcb80792b860e979f221259796ca0a" +checksum = "c290043c9a95b05d45e952fb6383c67bcb61471f60cfa21e890dba6654234f43" dependencies = [ "async-channel", "async-executor", @@ -306,9 +306,9 @@ [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" dependencies = [ "proc-macro2", "quote", @@ -392,7 +392,7 @@ checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom 0.2.5", + "getrandom 0.2.6", "instant", "pin-project-lite 0.2.8", "rand 0.8.5", @@ -440,9 +440,9 @@ [[package]] name = "base64ct" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71acf5509fc522cce1b100ac0121c635129bfd4d91cdf036bcc9b9935f97ccf5" +checksum = "dea908e7347a8c64e378c17e30ef880ad73e3b4498346b055c2c00ea342f3179" [[package]] name = "beef" @@ -990,7 +990,7 @@ dependencies = [ "camino", "cargo-platform", - "semver 1.0.6", + "semver 1.0.7", "serde", "serde_json", ] @@ -1111,9 +1111,9 @@ [[package]] name = "clap" -version = "3.1.6" +version = "3.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123" +checksum = "71c47df61d9e16dc010b55dba1952a57d8c215dbb533fd13cdd13369aac73b1c" dependencies = [ "atty", "bitflags", @@ -1128,9 +1128,9 @@ [[package]] name = "clap_derive" -version = "3.1.4" +version = "3.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16" +checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1" dependencies = [ "heck 0.4.0", "proc-macro-error", @@ -1913,9 +1913,9 @@ [[package]] name = "darling" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ "darling_core", "darling_macro", @@ -1923,9 +1923,9 @@ [[package]] name = "darling_core" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", @@ -1937,9 +1937,9 @@ [[package]] name = "darling_macro" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", @@ -2484,7 +2484,7 @@ [[package]] name = "fc-consensus" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "async-trait", "derive_more", @@ -2511,7 +2511,7 @@ [[package]] name = "fc-db" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "fp-storage", "kvdb", @@ -2527,7 +2527,7 @@ [[package]] name = "fc-mapping-sync" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "fc-consensus", "fc-db", @@ -2545,7 +2545,7 @@ [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "ethereum", "ethereum-types", @@ -2591,7 +2591,7 @@ [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "ethereum", "ethereum-types", @@ -2725,7 +2725,7 @@ [[package]] name = "fp-consensus" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "ethereum", "parity-scale-codec", @@ -2739,7 +2739,7 @@ [[package]] name = "fp-evm" version = "3.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "evm", "impl-trait-for-tuples", @@ -2751,9 +2751,18 @@ ] [[package]] +name = "fp-evm-mapping" +version = "0.1.0" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" +dependencies = [ + "frame-support", + "sp-core", +] + +[[package]] name = "fp-rpc" version = "3.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "ethereum", "ethereum-types", @@ -2770,7 +2779,7 @@ [[package]] name = "fp-self-contained" version = "1.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "ethereum", "frame-support", @@ -2787,7 +2796,7 @@ [[package]] name = "fp-storage" version = "2.0.0" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" [[package]] name = "frame-benchmarking" @@ -3234,9 +3243,9 @@ [[package]] name = "getrandom" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if 1.0.0", "libc", @@ -3308,9 +3317,9 @@ [[package]] name = "h2" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" dependencies = [ "bytes 1.1.0", "fnv", @@ -3321,7 +3330,7 @@ "indexmap", "slab", "tokio 1.17.0", - "tokio-util", + "tokio-util 0.7.1", "tracing", ] @@ -3679,9 +3688,9 @@ [[package]] name = "indexmap" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" dependencies = [ "autocfg", "hashbrown 0.11.2", @@ -3906,7 +3915,7 @@ "log", "tokio 1.17.0", "tokio-stream", - "tokio-util", + "tokio-util 0.6.9", "unicase", ] @@ -3976,7 +3985,7 @@ "thiserror", "tokio 1.17.0", "tokio-rustls 0.23.3", - "tokio-util", + "tokio-util 0.6.9", "tracing", "webpki-roots 0.22.2", ] @@ -3997,7 +4006,7 @@ "thiserror", "tokio 1.17.0", "tokio-rustls 0.23.3", - "tokio-util", + "tokio-util 0.6.9", "tracing", "webpki-roots 0.22.2", ] @@ -4158,7 +4167,7 @@ "thiserror", "tokio 1.17.0", "tokio-rustls 0.22.0", - "tokio-util", + "tokio-util 0.6.9", ] [[package]] @@ -4769,7 +4778,7 @@ "libp2p-core", "libp2p-swarm", "log", - "lru 0.7.3", + "lru 0.7.5", "rand 0.7.3", "smallvec", "unsigned-varint 0.7.1", @@ -4999,10 +5008,11 @@ [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ + "autocfg", "scopeguard", ] @@ -5027,9 +5037,9 @@ [[package]] name = "lru" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb87f3080f6d1d69e8c564c0fcfde1d7aa8cc451ce40cae89479111f03bc0eb" +checksum = "32613e41de4c47ab04970c348ca7ae7382cf116625755af070b008a15516a889" dependencies = [ "hashbrown 0.11.2", ] @@ -5576,6 +5586,7 @@ "cumulus-primitives-timestamp", "cumulus-primitives-utility", "derivative", + "fp-evm-mapping", "fp-rpc", "fp-self-contained", "frame-benchmarking", @@ -5632,7 +5643,6 @@ "substrate-wasm-builder", "unique-runtime-common", "up-data-structs", - "up-evm-mapping", "up-rpc", "xcm", "xcm-builder", @@ -5831,7 +5841,7 @@ [[package]] name = "pallet-base-fee" version = "1.0.0" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "frame-support", "frame-system", @@ -5984,6 +5994,7 @@ version = "0.1.0" dependencies = [ "evm-coder", + "fp-evm-mapping", "frame-support", "frame-system", "pallet-evm", @@ -5995,7 +6006,6 @@ "sp-runtime", "sp-std", "up-data-structs", - "up-evm-mapping", ] [[package]] @@ -6058,13 +6068,14 @@ [[package]] name = "pallet-ethereum" version = "4.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "ethereum", "ethereum-types", "evm", "fp-consensus", "fp-evm", + "fp-evm-mapping", "fp-rpc", "fp-self-contained", "fp-storage", @@ -6088,12 +6099,13 @@ [[package]] name = "pallet-evm" version = "6.0.0-dev" -source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18#7c8ce8f83e0c8a5b57655622b721f8655b161903" +source = "git+https://github.com/uniquenetwork/frontier.git?branch=unique-polkadot-v0.9.18-2#82310d1dd3189f34bd901a9ac894ad33eca5cf89" dependencies = [ "evm", "evm-gasometer", "evm-runtime", "fp-evm", + "fp-evm-mapping", "frame-benchmarking", "frame-support", "frame-system", @@ -6136,6 +6148,7 @@ version = "0.1.0" dependencies = [ "evm-coder", + "fp-evm-mapping", "frame-support", "frame-system", "log", @@ -6171,6 +6184,7 @@ version = "0.1.0" dependencies = [ "fp-evm", + "fp-evm-mapping", "frame-support", "frame-system", "pallet-ethereum", @@ -6181,7 +6195,6 @@ "sp-io", "sp-runtime", "sp-std", - "up-evm-mapping", "up-sponsorship", ] @@ -6195,6 +6208,7 @@ "frame-support", "frame-system", "pallet-common", + "pallet-evm", "pallet-evm-coder-substrate", "parity-scale-codec", "scale-info", @@ -6421,6 +6435,7 @@ "frame-support", "frame-system", "pallet-common", + "pallet-evm", "pallet-evm-coder-substrate", "parity-scale-codec", "scale-info", @@ -6537,6 +6552,7 @@ "frame-support", "frame-system", "pallet-common", + "pallet-evm", "parity-scale-codec", "scale-info", "sp-core", @@ -6672,7 +6688,7 @@ [[package]] name = "pallet-template-transaction-payment" version = "3.0.0" -source = "git+https://github.com/UniqueNetwork/pallet-sponsoring?branch=polkadot-v0.9.18#e914a799e5ff1c18383a614ea99e87dd7f3f446e" +source = "git+https://github.com/UniqueNetwork/pallet-sponsoring?branch=polkadot-v0.9.18#7bc842b35a53f762ee6ee89e5f5bef84a284c9f4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6795,6 +6811,7 @@ "ethereum", "evm-coder", "fp-evm", + "fp-evm-mapping", "frame-benchmarking", "frame-support", "frame-system", @@ -6821,7 +6838,6 @@ "sp-runtime", "sp-std", "up-data-structs", - "up-evm-mapping", "up-sponsorship", ] @@ -6925,9 +6941,9 @@ [[package]] name = "parity-db" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d121a9af17a43efd0a38c6afa508b927ba07785bd4709efb2ac03bf77efef8d" +checksum = "b3e7f385d61562f5834282b90aa50b41f38a35cf64d5209b8b05487b50553dbe" dependencies = [ "blake2-rfc", "crc32fast", @@ -6998,7 +7014,7 @@ "ethereum-types", "hashbrown 0.12.0", "impl-trait-for-tuples", - "lru 0.7.3", + "lru 0.7.5", "parity-util-mem-derive", "parking_lot 0.12.0", "primitive-types", @@ -7074,7 +7090,7 @@ checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" dependencies = [ "lock_api", - "parking_lot_core 0.9.1", + "parking_lot_core 0.9.2", ] [[package]] @@ -7093,9 +7109,9 @@ [[package]] name = "parking_lot_core" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" dependencies = [ "cfg-if 1.0.0", "libc", @@ -7106,9 +7122,9 @@ [[package]] name = "paste" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5" +checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" [[package]] name = "pbkdf2" @@ -7270,9 +7286,9 @@ [[package]] name = "pkg-config" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "platforms" @@ -7315,7 +7331,7 @@ "derive_more", "fatality", "futures 0.3.21", - "lru 0.7.3", + "lru 0.7.5", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7337,7 +7353,7 @@ dependencies = [ "fatality", "futures 0.3.21", - "lru 0.7.3", + "lru 0.7.5", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7446,7 +7462,7 @@ "derive_more", "fatality", "futures 0.3.21", - "lru 0.7.3", + "lru 0.7.5", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7542,7 +7558,7 @@ "futures 0.3.21", "futures-timer", "kvdb", - "lru 0.7.3", + "lru 0.7.5", "merlin", "parity-scale-codec", "polkadot-node-jaeger", @@ -7671,7 +7687,7 @@ "fatality", "futures 0.3.21", "kvdb", - "lru 0.7.3", + "lru 0.7.5", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -7897,7 +7913,7 @@ "futures 0.3.21", "itertools", "kvdb", - "lru 0.7.3", + "lru 0.7.5", "metered-channel", "parity-db", "parity-scale-codec", @@ -7926,7 +7942,7 @@ dependencies = [ "futures 0.3.21", "futures-timer", - "lru 0.7.3", + "lru 0.7.5", "parity-util-mem", "parking_lot 0.12.0", "polkadot-node-metrics", @@ -8273,7 +8289,7 @@ "kusama-runtime", "kvdb", "kvdb-rocksdb", - "lru 0.7.3", + "lru 0.7.5", "pallet-babe", "pallet-im-online", "pallet-mmr-primitives", @@ -8608,9 +8624,9 @@ [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" dependencies = [ "unicode-xid", ] @@ -8684,9 +8700,9 @@ [[package]] name = "psm" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eca0fa5dd7c4c96e184cec588f0b1db1ee3165e678db21c09793105acb17e6f" +checksum = "871372391786ccec00d3c5d3d6608905b3d4db263639cfe075d3b60a736d115a" dependencies = [ "cc", ] @@ -8704,6 +8720,7 @@ "cumulus-primitives-timestamp", "cumulus-primitives-utility", "derivative", + "fp-evm-mapping", "fp-rpc", "fp-self-contained", "frame-executive", @@ -8757,7 +8774,6 @@ "substrate-wasm-builder", "unique-runtime-common", "up-data-structs", - "up-evm-mapping", "up-rpc", "xcm", "xcm-builder", @@ -8789,9 +8805,9 @@ [[package]] name = "quote" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4af2ec4714533fcdf07e886f17025ace8b997b9ce51204ee69b6da831c3da57" +checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" dependencies = [ "proc-macro2", ] @@ -8862,7 +8878,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.5", + "getrandom 0.2.6", ] [[package]] @@ -8926,20 +8942,20 @@ [[package]] name = "redox_syscall" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ "bitflags", ] [[package]] name = "redox_users" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7776223e2696f1aa4c6b0170e83212f47296a00424305117d013dfe86fb0fe55" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.5", + "getrandom 0.2.6", "redox_syscall", "thiserror", ] @@ -9253,7 +9269,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.6", + "semver 1.0.7", ] [[package]] @@ -9974,7 +9990,7 @@ "linked-hash-map", "linked_hash_set", "log", - "lru 0.7.3", + "lru 0.7.5", "parity-scale-codec", "parking_lot 0.12.0", "pin-project 1.0.10", @@ -10012,7 +10028,7 @@ "futures-timer", "libp2p", "log", - "lru 0.7.3", + "lru 0.7.5", "sc-network", "sp-runtime", "substrate-prometheus-endpoint", @@ -10532,9 +10548,9 @@ [[package]] name = "semver" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" +checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" dependencies = [ "serde", ] @@ -10747,9 +10763,9 @@ [[package]] name = "slab" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "slot-range-helper" @@ -10940,7 +10956,7 @@ dependencies = [ "futures 0.3.21", "log", - "lru 0.7.3", + "lru 0.7.5", "parity-scale-codec", "parking_lot 0.12.0", "sp-api", @@ -11801,9 +11817,9 @@ [[package]] name = "syn" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54" +checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" dependencies = [ "proc-macro2", "quote", @@ -12094,6 +12110,20 @@ ] [[package]] +name = "tokio-util" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +dependencies = [ + "bytes 1.1.0", + "futures-core", + "futures-sink", + "pin-project-lite 0.2.8", + "tokio 1.17.0", + "tracing", +] + +[[package]] name = "toml" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12133,9 +12163,9 @@ [[package]] name = "tracing-core" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" +checksum = "90442985ee2f57c9e1b548ee72ae842f4a9a20e3f417cc38dbc5dc684d9bb4ee" dependencies = [ "lazy_static", "valuable", @@ -12333,6 +12363,7 @@ "jsonrpc-core-client", "jsonrpc-derive", "pallet-common", + "pallet-evm", "parity-scale-codec", "sp-api", "sp-blockchain", @@ -12475,6 +12506,7 @@ "substrate-build-script-utils", "substrate-frame-rpc-system", "substrate-prometheus-endpoint", + "tokio 1.17.0", "unique-rpc", "unique-runtime", "unique-runtime-common", @@ -12542,6 +12574,7 @@ "cumulus-primitives-timestamp", "cumulus-primitives-utility", "derivative", + "fp-evm-mapping", "fp-rpc", "fp-self-contained", "frame-benchmarking", @@ -12598,7 +12631,6 @@ "substrate-wasm-builder", "unique-runtime-common", "up-data-structs", - "up-evm-mapping", "up-rpc", "xcm", "xcm-builder", @@ -12613,6 +12645,7 @@ "frame-support", "frame-system", "pallet-common", + "pallet-evm", "parity-scale-codec", "scale-info", "sp-consensus-aura", @@ -12682,18 +12715,11 @@ ] [[package]] -name = "up-evm-mapping" -version = "0.1.0" -dependencies = [ - "frame-support", - "sp-core", -] - -[[package]] name = "up-rpc" version = "0.1.0" dependencies = [ "pallet-common", + "pallet-evm", "parity-scale-codec", "sp-api", "sp-core", @@ -12705,7 +12731,7 @@ [[package]] name = "up-sponsorship" version = "0.1.0" -source = "git+https://github.com/UniqueNetwork/pallet-sponsoring?branch=polkadot-v0.9.18#e914a799e5ff1c18383a614ea99e87dd7f3f446e" +source = "git+https://github.com/UniqueNetwork/pallet-sponsoring?branch=polkadot-v0.9.18#7bc842b35a53f762ee6ee89e5f5bef84a284c9f4" dependencies = [ "impl-trait-for-tuples", ] @@ -13313,9 +13339,9 @@ [[package]] name = "windows-sys" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" +checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" dependencies = [ "windows_aarch64_msvc", "windows_i686_gnu", @@ -13326,33 +13352,33 @@ [[package]] name = "windows_aarch64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_i686_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "winreg" --- a/client/rpc/Cargo.toml +++ b/client/rpc/Cargo.toml @@ -18,3 +18,4 @@ sp-core = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.18" } sp-rpc = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.18" } sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } --- a/client/rpc/src/lib.rs +++ b/client/rpc/src/lib.rs @@ -19,7 +19,7 @@ use codec::Decode; use jsonrpc_core::{Error as RpcError, ErrorCode, Result}; use jsonrpc_derive::rpc; -use up_data_structs::{Collection, CollectionId, CollectionStats, TokenId}; +use up_data_structs::{Collection, CollectionId, CollectionStats, CollectionLimits, TokenId}; use sp_api::{BlockId, BlockT, ProvideRuntimeApi, ApiExt}; use sp_blockchain::HeaderBackend; use up_rpc::UniqueApi as UniqueRuntimeApi; @@ -128,6 +128,12 @@ token: TokenId, at: Option, ) -> Result>; + #[rpc(name = "unique_effectiveCollectionLimits")] + fn effective_collection_limits( + &self, + collection_id: CollectionId, + at: Option, + ) -> Result>; } pub struct Unique { @@ -210,7 +216,7 @@ AccountId: Decode, C: 'static + ProvideRuntimeApi + HeaderBackend, C::Api: UniqueRuntimeApi, - CrossAccountId: pallet_common::account::CrossAccountId, + CrossAccountId: pallet_evm::account::CrossAccountId, { pass_method!(account_tokens(collection: CollectionId, account: CrossAccountId) -> Vec); pass_method!(token_exists(collection: CollectionId, token: TokenId) -> bool); @@ -232,4 +238,5 @@ pass_method!(collection_by_id(collection: CollectionId) -> Option>); pass_method!(collection_stats() -> CollectionStats); pass_method!(next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Option); + pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option); } --- a/node/cli/Cargo.toml +++ b/node/cli/Cargo.toml @@ -302,13 +302,13 @@ jsonrpc-pubsub = "18.0.0" tokio = { version = "1.17.0", features = ["time"] } -fc-rpc-core = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fc-consensus = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fc-mapping-sync = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fc-rpc = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fc-db = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-rpc = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +fc-rpc-core = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fc-consensus = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fc-mapping-sync = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fc-rpc = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fc-db = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-rpc = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } unique-rpc = { default-features = false, path = "../rpc" } --- a/node/cli/src/chain_spec.rs +++ b/node/cli/src/chain_spec.rs @@ -212,6 +212,16 @@ vec![ get_account_id_from_seed::("Alice"), get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), ], 1000 ) --- a/node/rpc/Cargo.toml +++ b/node/rpc/Cargo.toml @@ -41,12 +41,12 @@ substrate-frame-rpc-system = { git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } tokio = { version = "0.2.25", features = ["macros", "sync"] } -pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fc-db = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fc-mapping-sync = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fc-db = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fc-mapping-sync = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } pallet-common = { default-features = false, path = "../../pallets/common" } unique-runtime-common = { default-features = false, path = "../../runtime/common" } --- a/pallets/common/Cargo.toml +++ b/pallets/common/Cargo.toml @@ -16,11 +16,11 @@ sp-runtime = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } -up-evm-mapping = { default-features = false, path = '../../primitives/evm-mapping' } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } up-data-structs = { default-features = false, path = '../../primitives/data-structs' } pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' } evm-coder = { default-features = false, path = '../../crates/evm-coder' } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } serde = { version = "1.0.130", default-features = false } scale-info = { version = "2.0.1", default-features = false, features = [ "derive", @@ -33,7 +33,7 @@ "frame-system/std", "sp-runtime/std", "sp-std/std", - "up-evm-mapping/std", + "fp-evm-mapping/std", "up-data-structs/std", "pallet-evm/std", ] --- a/pallets/common/src/account.rs +++ /dev/null @@ -1,194 +0,0 @@ -// 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 . - -use crate::Config; -use codec::{Encode, EncodeLike, Decode, MaxEncodedLen}; -use sp_core::H160; -use scale_info::{Type, TypeInfo}; -use core::cmp::Ordering; -use serde::{Serialize, Deserialize}; -use pallet_evm::AddressMapping; -use sp_std::vec::Vec; -use sp_std::clone::Clone; -pub use up_evm_mapping::EvmBackwardsAddressMapping; - -pub trait CrossAccountId: - Encode + EncodeLike + Decode + TypeInfo + MaxEncodedLen + Clone + PartialEq + Ord + core::fmt::Debug -// + -// Serialize + Deserialize<'static> -{ - fn as_sub(&self) -> &AccountId; - fn as_eth(&self) -> &H160; - - fn from_sub(account: AccountId) -> Self; - fn from_eth(account: H160) -> Self; - - fn conv_eq(&self, other: &Self) -> bool; -} - -#[derive(Encode, Decode, Serialize, Deserialize, TypeInfo, MaxEncodedLen)] -#[serde(rename_all = "camelCase")] -enum BasicCrossAccountIdRepr { - Substrate(AccountId), - Ethereum(H160), -} - -#[derive(PartialEq, Eq)] -pub struct BasicCrossAccountId { - /// If true - then ethereum is canonical encoding - from_ethereum: bool, - substrate: T::AccountId, - ethereum: H160, -} - -impl MaxEncodedLen for BasicCrossAccountId { - fn max_encoded_len() -> usize { - >::max_encoded_len() - } -} - -impl TypeInfo for BasicCrossAccountId { - type Identity = Self; - - fn type_info() -> Type { - >::type_info() - } -} - -impl core::fmt::Debug for BasicCrossAccountId { - fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { - if self.from_ethereum { - fmt.debug_tuple("CrossAccountId::Ethereum") - .field(&self.ethereum) - .finish() - } else { - fmt.debug_tuple("CrossAccountId::Substrate") - .field(&self.substrate) - .finish() - } - } -} - -impl PartialOrd for BasicCrossAccountId { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.substrate.cmp(&other.substrate)) - } -} - -impl Ord for BasicCrossAccountId { - fn cmp(&self, other: &Self) -> Ordering { - self.partial_cmp(other) - .expect("substrate account is total ordered") - } -} - -impl Clone for BasicCrossAccountId { - fn clone(&self) -> Self { - Self { - from_ethereum: self.from_ethereum, - substrate: self.substrate.clone(), - ethereum: self.ethereum, - } - } -} -impl Encode for BasicCrossAccountId { - fn encode(&self) -> Vec { - BasicCrossAccountIdRepr::from(self.clone()).encode() - } -} -impl EncodeLike for BasicCrossAccountId {} -impl Decode for BasicCrossAccountId { - fn decode(input: &mut I) -> Result - where - I: codec::Input, - { - Ok(BasicCrossAccountIdRepr::decode(input)?.into()) - } -} -impl Serialize for BasicCrossAccountId -where - T: Config, - T::AccountId: Serialize, -{ - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - let repr = BasicCrossAccountIdRepr::from(self.clone()); - (&repr).serialize(serializer) - } -} -impl<'de, T> Deserialize<'de> for BasicCrossAccountId -where - T: Config, - T::AccountId: Deserialize<'de>, -{ - fn deserialize(deserializer: D) -> Result - where - D: serde::Deserializer<'de>, - { - Ok(BasicCrossAccountIdRepr::deserialize(deserializer)?.into()) - } -} -impl CrossAccountId for BasicCrossAccountId { - fn as_sub(&self) -> &T::AccountId { - &self.substrate - } - fn as_eth(&self) -> &H160 { - &self.ethereum - } - fn from_sub(substrate: T::AccountId) -> Self { - Self { - ethereum: T::EvmBackwardsAddressMapping::from_account_id(substrate.clone()), - substrate, - from_ethereum: false, - } - } - fn from_eth(ethereum: H160) -> Self { - Self { - ethereum, - substrate: T::EvmAddressMapping::into_account_id(ethereum), - from_ethereum: true, - } - } - fn conv_eq(&self, other: &Self) -> bool { - if self.from_ethereum == other.from_ethereum { - self.substrate == other.substrate && self.ethereum == other.ethereum - } else if self.from_ethereum { - // ethereum is canonical encoding, but we need to compare derived address - self.substrate == other.substrate - } else { - self.ethereum == other.ethereum - } - } -} -impl From> for BasicCrossAccountId { - fn from(repr: BasicCrossAccountIdRepr) -> Self { - match repr { - BasicCrossAccountIdRepr::Substrate(s) => Self::from_sub(s), - BasicCrossAccountIdRepr::Ethereum(e) => Self::from_eth(e), - } - } -} -impl From> for BasicCrossAccountIdRepr { - fn from(v: BasicCrossAccountId) -> Self { - if v.from_ethereum { - BasicCrossAccountIdRepr::Ethereum(*v.as_eth()) - } else { - BasicCrossAccountIdRepr::Substrate(v.as_sub().clone()) - } - } -} --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -19,7 +19,7 @@ use core::ops::{Deref, DerefMut}; use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder}; use sp_std::vec::Vec; -use account::CrossAccountId; +use pallet_evm::account::CrossAccountId; use frame_support::{ dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo}, ensure, fail, @@ -33,12 +33,11 @@ TokenId, Weight, WithdrawReasons, CollectionStats, MAX_TOKEN_OWNERSHIP, CollectionMode, NFT_SPONSOR_TRANSFER_TIMEOUT, FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, MAX_SPONSOR_TIMEOUT, CUSTOM_DATA_LIMIT, CollectionLimits, - CustomDataLimit, CreateCollectionData, SponsorshipState, CreateItemExData, + CustomDataLimit, CreateCollectionData, SponsorshipState, CreateItemExData, SponsoringRateLimit, }; pub use pallet::*; use sp_core::H160; use sp_runtime::{ArithmeticError, DispatchError, DispatchResult}; -pub mod account; #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; pub mod erc; @@ -163,20 +162,17 @@ pub mod pallet { use super::*; use frame_support::{Blake2_128Concat, pallet_prelude::*, storage::Key}; - use account::CrossAccountId; + use pallet_evm::account; use frame_support::traits::Currency; use up_data_structs::TokenId; use scale_info::TypeInfo; #[pallet::config] - pub trait Config: frame_system::Config + pallet_evm_coder_substrate::Config + TypeInfo { + pub trait Config: + frame_system::Config + pallet_evm_coder_substrate::Config + TypeInfo + account::Config + { type Event: IsType<::Event> + From>; - - type CrossAccountId: CrossAccountId; - type EvmAddressMapping: pallet_evm::AddressMapping; - type EvmBackwardsAddressMapping: up_evm_mapping::EvmBackwardsAddressMapping; - type Currency: Currency; #[pallet::constant] @@ -421,6 +417,39 @@ alive: created.0 - destroyed.0, } } + + pub fn effective_collection_limits(collection: CollectionId) -> Option { + let collection = >::get(collection); + if collection.is_none() { + return None; + } + + let collection = collection.unwrap(); + let limits = collection.limits; + let effective_limits = CollectionLimits { + account_token_ownership_limit: Some(limits.account_token_ownership_limit()), + sponsored_data_size: Some(limits.sponsored_data_size()), + sponsored_data_rate_limit: Some( + limits + .sponsored_data_rate_limit + .unwrap_or(SponsoringRateLimit::SponsoringDisabled), + ), + token_limit: Some(limits.token_limit()), + sponsor_transfer_timeout: Some(limits.sponsor_transfer_timeout( + match collection.mode { + CollectionMode::NFT => NFT_SPONSOR_TRANSFER_TIMEOUT, + CollectionMode::Fungible(_) => FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, + CollectionMode::ReFungible => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, + }, + )), + sponsor_approve_timeout: Some(limits.sponsor_approve_timeout()), + owner_can_transfer: Some(limits.owner_can_transfer()), + owner_can_destroy: Some(limits.owner_can_destroy()), + transfers_enabled: Some(limits.transfers_enabled()), + }; + + Some(effective_limits) + } } impl Pallet { --- a/pallets/evm-coder-substrate/Cargo.toml +++ b/pallets/evm-coder-substrate/Cargo.toml @@ -12,8 +12,8 @@ sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } ethereum = { version = "0.12.0", default-features = false } evm-coder = { default-features = false, path = "../../crates/evm-coder" } -pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } frame-support = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } frame-system = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } frame-benchmarking = { default-features = false, optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } --- a/pallets/evm-contract-helpers/Cargo.toml +++ b/pallets/evm-contract-helpers/Cargo.toml @@ -15,7 +15,8 @@ sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } evm-coder = { default-features = false, path = '../../crates/evm-coder' } pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring", branch = 'polkadot-v0.9.18' } log = "0.4.14" --- a/pallets/evm-contract-helpers/src/eth.rs +++ b/pallets/evm-contract-helpers/src/eth.rs @@ -17,14 +17,17 @@ use core::marker::PhantomData; use evm_coder::{abi::AbiWriter, execution::Result, generate_stubgen, solidity_interface, types::*}; use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder}; -use pallet_evm::{ExitRevert, OnCreate, OnMethodCall, PrecompileResult, PrecompileFailure}; +use pallet_evm::{ + ExitRevert, OnCreate, OnMethodCall, PrecompileResult, PrecompileFailure, + account::CrossAccountId, +}; use sp_core::H160; use crate::{ AllowlistEnabled, Config, Owner, Pallet, SponsorBasket, SponsoringRateLimit, SponsoringModeT, }; use frame_support::traits::Get; use up_sponsorship::SponsorshipHandler; -use sp_std::{convert::TryInto, vec::Vec}; +use sp_std::vec::Vec; struct ContractHelpers(SubstrateRecorder); impl WithRecorder for ContractHelpers { @@ -177,18 +180,21 @@ } pub struct HelpersContractSponsoring(PhantomData<*const T>); -impl SponsorshipHandler)> for HelpersContractSponsoring { - fn get_sponsor(who: &H160, call: &(H160, Vec)) -> Option { +impl SponsorshipHandler)> + for HelpersContractSponsoring +{ + fn get_sponsor(who: &T::CrossAccountId, call: &(H160, Vec)) -> Option { let mode = >::sponsoring_mode(call.0); if mode == SponsoringModeT::Disabled { return None; } - if mode == SponsoringModeT::Allowlisted && !>::allowed(call.0, *who) { + + if mode == SponsoringModeT::Allowlisted && !>::allowed(call.0, *who.as_eth()) { return None; } let block_number = >::block_number() as T::BlockNumber; - if let Some(last_tx_block) = >::get(&call.0, who) { + if let Some(last_tx_block) = >::get(&call.0, who.as_eth()) { let limit = >::get(&call.0); let timeout = last_tx_block + limit; @@ -197,9 +203,10 @@ } } - >::insert(&call.0, who, block_number); + >::insert(&call.0, who.as_eth(), block_number); - Some(call.0) + let sponsor = T::CrossAccountId::from_eth(call.0); + Some(sponsor) } } --- a/pallets/evm-contract-helpers/src/lib.rs +++ b/pallets/evm-contract-helpers/src/lib.rs @@ -30,7 +30,9 @@ use sp_core::H160; #[pallet::config] - pub trait Config: frame_system::Config + pallet_evm_coder_substrate::Config { + pub trait Config: + frame_system::Config + pallet_evm_coder_substrate::Config + pallet_evm::account::Config + { type ContractAddress: Get; type DefaultSponsoringRateLimit: Get; } --- a/pallets/evm-migration/Cargo.toml +++ b/pallets/evm-migration/Cargo.toml @@ -15,8 +15,8 @@ sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-io = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } [dependencies.codec] default-features = false --- a/pallets/evm-transaction-payment/Cargo.toml +++ b/pallets/evm-transaction-payment/Cargo.toml @@ -14,11 +14,11 @@ sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-io = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring", branch = 'polkadot-v0.9.18' } -up-evm-mapping = { default-features = false, path = "../../primitives/evm-mapping" } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } [dependencies.codec] default-features = false @@ -39,5 +39,5 @@ "pallet-ethereum/std", "fp-evm/std", "up-sponsorship/std", - "up-evm-mapping/std", + "fp-evm-mapping/std", ] --- a/pallets/evm-transaction-payment/src/lib.rs +++ b/pallets/evm-transaction-payment/src/lib.rs @@ -20,12 +20,10 @@ use fp_evm::WithdrawReason; use frame_support::traits::{Currency, IsSubType}; pub use pallet::*; -use pallet_evm::{EVMCurrencyAdapter, EnsureAddressOrigin}; +use pallet_evm::{EVMCurrencyAdapter, EnsureAddressOrigin, account::CrossAccountId}; use sp_core::{H160, U256}; use sp_runtime::TransactionOutcome; use up_sponsorship::SponsorshipHandler; -use up_evm_mapping::EvmBackwardsAddressMapping; -use pallet_evm::AddressMapping; #[frame_support::pallet] pub mod pallet { @@ -35,11 +33,9 @@ use sp_std::vec::Vec; #[pallet::config] - pub trait Config: frame_system::Config { - type EvmSponsorshipHandler: SponsorshipHandler)>; + pub trait Config: frame_system::Config + pallet_evm::account::Config { + type EvmSponsorshipHandler: SponsorshipHandler)>; type Currency: Currency; - type EvmBackwardsAddressMapping: EvmBackwardsAddressMapping; - type EvmAddressMapping: AddressMapping; } #[pallet::pallet] @@ -60,14 +56,15 @@ } pub struct TransactionValidityHack(PhantomData<*const T>); -impl fp_evm::TransactionValidityHack for TransactionValidityHack { - fn who_pays_fee(origin: H160, reason: &WithdrawReason) -> Option { +impl fp_evm::TransactionValidityHack for TransactionValidityHack { + fn who_pays_fee(origin: H160, reason: &WithdrawReason) -> Option { match reason { WithdrawReason::Call { target, input } => { // This method is only used for checking, we shouldn't touch storage in it frame_support::storage::with_transaction(|| { + let origin_sub = T::CrossAccountId::from_eth(origin); TransactionOutcome::Rollback(T::EvmSponsorshipHandler::get_sponsor( - &origin, + &origin_sub, &(*target, input.clone()), )) }) @@ -85,33 +82,36 @@ type LiquidityInfo = Option>; fn withdraw_fee( - who: &H160, + who: &T::CrossAccountId, reason: WithdrawReason, fee: U256, ) -> core::result::Result> { - let mut who_pays_fee = *who; - if let WithdrawReason::Call { target, input } = &reason { - who_pays_fee = T::EvmSponsorshipHandler::get_sponsor(who, &(*target, input.clone())) - .unwrap_or(who_pays_fee); - } + let who_pays_fee = if let WithdrawReason::Call { target, input } = &reason { + T::EvmSponsorshipHandler::get_sponsor(who, &(*target, input.clone())) + .unwrap_or(who.clone()) + } else { + who.clone() + }; + let negative_imbalance = EVMCurrencyAdapter::<::Currency, ()>::withdraw_fee( &who_pays_fee, reason, fee, )?; + Ok(negative_imbalance.map(|i| ChargeEvmLiquidityInfo { - who: who_pays_fee, + who: who_pays_fee.as_eth().clone(), negative_imbalance: i, })) } fn correct_and_deposit_fee( - who: &H160, + who: &T::CrossAccountId, corrected_fee: U256, already_withdrawn: Self::LiquidityInfo, ) { ::Currency, ()> as pallet_evm::OnChargeEVMTransaction>::correct_and_deposit_fee( - &already_withdrawn.as_ref().map(|e| e.who).unwrap_or(*who), + &already_withdrawn.as_ref().map(|e| T::CrossAccountId::from_eth(e.who)).unwrap_or(who.clone()), corrected_fee, already_withdrawn.map(|e| e.negative_imbalance), ) @@ -142,7 +142,7 @@ >::Signed(who.clone()).into(), ) .ok()?; - let who = T::EvmBackwardsAddressMapping::from_account_id(who.clone()); + let who = T::CrossAccountId::from_sub(who.clone()); // Effects from EvmSponsorshipHandler are applied in OnChargeEvmTransaction by pallet_evm::runner // TODO: Should we implement simulation mode (test, but do not apply effects) in `up-sponsorship`? let sponsor = frame_support::storage::with_transaction(|| { @@ -151,8 +151,7 @@ &(*target, input.clone()), )) })?; - let sponsor = T::EvmAddressMapping::into_account_id(sponsor); - Some(sponsor) + Some(sponsor.as_sub().clone()) } _ => None, } --- a/pallets/fungible/Cargo.toml +++ b/pallets/fungible/Cargo.toml @@ -22,6 +22,7 @@ pallet-evm-coder-substrate = { default-features = false, path = '../evm-coder-substrate' } ethereum = { version = "0.12.0", default-features = false } frame-benchmarking = { default-features = false, optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } scale-info = { version = "2.0.1", default-features = false, features = [ "derive", ] } @@ -39,5 +40,6 @@ "ethereum/std", "pallet-evm-coder-substrate/std", 'frame-benchmarking/std', + "pallet-evm/std" ] runtime-benchmarks = ['frame-benchmarking', 'pallet-common/runtime-benchmarks'] --- a/pallets/fungible/src/erc.rs +++ b/pallets/fungible/src/erc.rs @@ -21,7 +21,7 @@ use pallet_common::erc::{CommonEvmHandler, PrecompileResult}; use sp_core::{H160, U256}; use sp_std::vec::Vec; -use pallet_common::account::CrossAccountId; +use pallet_evm::account::CrossAccountId; use pallet_evm_coder_substrate::{call, dispatch_to_evm}; use crate::{ --- a/pallets/fungible/src/lib.rs +++ b/pallets/fungible/src/lib.rs @@ -19,9 +19,8 @@ use core::ops::Deref; use frame_support::{ensure}; use up_data_structs::{AccessMode, CollectionId, TokenId, CreateCollectionData}; -use pallet_common::{ - Error as CommonError, Event as CommonEvent, Pallet as PalletCommon, account::CrossAccountId, -}; +use pallet_common::{Error as CommonError, Event as CommonEvent, Pallet as PalletCommon}; +use pallet_evm::account::CrossAccountId; use pallet_evm_coder_substrate::WithRecorder; use sp_core::H160; use sp_runtime::{ArithmeticError, DispatchError, DispatchResult}; @@ -36,7 +35,7 @@ pub mod erc; pub mod weights; -pub type CreateItemData = (::CrossAccountId, u128); +pub type CreateItemData = (::CrossAccountId, u128); pub(crate) type SelfWeightOf = ::WeightInfo; #[frame_support::pallet] --- a/pallets/nonfungible/Cargo.toml +++ b/pallets/nonfungible/Cargo.toml @@ -16,6 +16,7 @@ sp-runtime = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } pallet-common = { default-features = false, path = '../common' } up-data-structs = { default-features = false, path = '../../primitives/data-structs' } evm-coder = { default-features = false, path = '../../crates/evm-coder' } @@ -39,6 +40,7 @@ "ethereum/std", "pallet-evm-coder-substrate/std", 'frame-benchmarking/std', + "pallet-evm/std" ] runtime-benchmarks = [ 'frame-benchmarking', --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -25,9 +25,9 @@ use sp_core::{H160, U256}; use sp_std::{vec::Vec, vec}; use pallet_common::{ - account::CrossAccountId, erc::{CommonEvmHandler, PrecompileResult}, }; +use pallet_evm::account::CrossAccountId; use pallet_evm_coder_substrate::call; use crate::{ --- a/pallets/nonfungible/src/lib.rs +++ b/pallets/nonfungible/src/lib.rs @@ -21,9 +21,8 @@ use up_data_structs::{ AccessMode, CollectionId, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData, }; -use pallet_common::{ - Error as CommonError, Pallet as PalletCommon, Event as CommonEvent, account::CrossAccountId, -}; +use pallet_common::{Error as CommonError, Pallet as PalletCommon, Event as CommonEvent}; +use pallet_evm::account::CrossAccountId; use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder}; use sp_core::H160; use sp_runtime::{ArithmeticError, DispatchError, DispatchResult}; @@ -40,7 +39,7 @@ pub mod erc; pub mod weights; -pub type CreateItemData = CreateNftExData<::CrossAccountId>; +pub type CreateItemData = CreateNftExData<::CrossAccountId>; pub(crate) type SelfWeightOf = ::WeightInfo; #[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] --- a/pallets/refungible/Cargo.toml +++ b/pallets/refungible/Cargo.toml @@ -16,6 +16,7 @@ sp-runtime = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } pallet-common = { default-features = false, path = '../common' } up-data-structs = { default-features = false, path = '../../primitives/data-structs' } frame-benchmarking = { default-features = false, optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } @@ -33,6 +34,7 @@ "up-data-structs/std", "pallet-common/std", 'frame-benchmarking/std', + "pallet-evm/std", ] runtime-benchmarks = [ 'frame-benchmarking', --- a/pallets/refungible/src/lib.rs +++ b/pallets/refungible/src/lib.rs @@ -21,9 +21,8 @@ AccessMode, CollectionId, CustomDataLimit, MAX_REFUNGIBLE_PIECES, TokenId, CreateCollectionData, CreateRefungibleExData, }; -use pallet_common::{ - Error as CommonError, Event as CommonEvent, Pallet as PalletCommon, account::CrossAccountId, -}; +use pallet_common::{Error as CommonError, Event as CommonEvent, Pallet as PalletCommon}; +use pallet_evm::account::CrossAccountId; use sp_runtime::{ArithmeticError, DispatchError, DispatchResult}; use sp_std::{vec::Vec, vec, collections::btree_map::BTreeMap}; use core::ops::Deref; --- a/pallets/unique/Cargo.toml +++ b/pallets/unique/Cargo.toml @@ -34,7 +34,7 @@ 'fp-evm/std', 'up-data-structs/std', 'up-sponsorship/std', - 'up-evm-mapping/std', + 'fp-evm-mapping/std', 'sp-std/std', 'sp-api/std', 'sp-runtime/std', @@ -132,16 +132,16 @@ sp-api = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.18" } up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring", branch = 'polkadot-v0.9.18' } -up-evm-mapping = { default-features = false, path = "../../primitives/evm-mapping" } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } evm-coder = { default-features = false, path = "../../crates/evm-coder" } pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" } primitive-types = { version = "0.11.1", default-features = false, features = [ "serde_no_std", ] } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } hex-literal = "0.3.3" pallet-common = { default-features = false, path = "../common" } --- a/pallets/unique/src/eth/sponsoring.rs +++ b/pallets/unique/src/eth/sponsoring.rs @@ -24,26 +24,24 @@ use up_sponsorship::SponsorshipHandler; use core::marker::PhantomData; use core::convert::TryInto; -use up_data_structs::{TokenId, CreateItemData, CreateNftData}; -use up_evm_mapping::EvmBackwardsAddressMapping; -use pallet_common::account::CrossAccountId; +use pallet_evm::account::CrossAccountId; use pallet_nonfungible::erc::{ UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721MintableCall, ERC721Call, }; use pallet_fungible::erc::{UniqueFungibleCall, ERC20Call}; +use up_data_structs::{TokenId, CreateItemData, CreateNftData}; pub struct UniqueEthSponsorshipHandler(PhantomData<*const T>); -impl SponsorshipHandler)> for UniqueEthSponsorshipHandler { - fn get_sponsor(who: &H160, call: &(H160, Vec)) -> Option { +impl SponsorshipHandler)> + for UniqueEthSponsorshipHandler +{ + fn get_sponsor(who: &T::CrossAccountId, call: &(H160, Vec)) -> Option { let collection_id = map_eth_to_id(&call.0)?; let collection = >::new(collection_id)?; let sponsor = collection.sponsorship.sponsor()?.clone(); - let sponsor = - ::EvmBackwardsAddressMapping::from_account_id(sponsor); - let who = T::CrossAccountId::from_eth(*who); let (method_id, mut reader) = AbiReader::new_call(&call.1).ok()?; - match &collection.mode { + Some(T::CrossAccountId::from_sub(match &collection.mode { crate::CollectionMode::NFT => { let call = >::parse(method_id, &mut reader).ok()??; match call { @@ -83,7 +81,7 @@ #[allow(clippy::single_match)] match call { UniqueFungibleCall::ERC20(ERC20Call::Transfer { .. }) => { - withdraw_transfer::(&collection, &who, &TokenId::default()) + withdraw_transfer::(&collection, who, &TokenId::default()) .map(|()| sponsor) } UniqueFungibleCall::ERC20(ERC20Call::TransferFrom { from, .. }) => { @@ -99,6 +97,6 @@ } } _ => None, - } + }?)) } } --- a/pallets/unique/src/lib.rs +++ b/pallets/unique/src/lib.rs @@ -53,10 +53,8 @@ CollectionMode, TokenId, SchemaVersion, SponsorshipState, MetaUpdatePermission, CreateCollectionData, CustomDataLimit, CreateItemExData, }; -use pallet_common::{ - account::CrossAccountId, CollectionHandle, Pallet as PalletCommon, Error as CommonError, - CommonWeightInfo, -}; +use pallet_common::{CollectionHandle, Pallet as PalletCommon, Error as CommonError, CommonWeightInfo}; +use pallet_evm::account::CrossAccountId; use pallet_refungible::{Pallet as PalletRefungible, RefungibleHandle}; use pallet_fungible::{Pallet as PalletFungible, FungibleHandle}; use pallet_nonfungible::{Pallet as PalletNonfungible, NonfungibleHandle}; @@ -122,7 +120,7 @@ pub enum Event where ::AccountId, - ::CrossAccountId, + ::CrossAccountId, { /// Collection sponsor was removed /// --- a/pallets/unique/src/mock.rs +++ b/pallets/unique/src/mock.rs @@ -25,8 +25,8 @@ }; use pallet_transaction_payment::{CurrencyAdapter}; use frame_system as system; -use pallet_evm::{AddressMapping, runner::stack::MaybeMirroredLog}; -use pallet_common::account::{EvmBackwardsAddressMapping, CrossAccountId}; +use pallet_evm::{AddressMapping, runner::stack::MaybeMirroredLog, account::CrossAccountId}; +use fp_evm_mapping::EvmBackwardsAddressMapping; use codec::{Encode, Decode, MaxEncodedLen}; use scale_info::TypeInfo; use up_data_structs::ConstU32; @@ -191,15 +191,17 @@ impl pallet_common::Config for Test { type Event = (); - type EvmBackwardsAddressMapping = TestEvmBackwardsAddressMapping; - type EvmAddressMapping = TestEvmAddressMapping; - type CrossAccountId = TestCrossAccountId; - type Currency = Balances; type CollectionCreationPrice = CollectionCreationPrice; type TreasuryAccountId = TreasuryAccountId; } +impl pallet_evm::account::Config for Test { + type CrossAccountId = TestCrossAccountId; + type EvmAddressMapping = TestEvmAddressMapping; + type EvmBackwardsAddressMapping = TestEvmBackwardsAddressMapping; +} + impl pallet_fungible::Config for Test { type WeightInfo = (); } --- a/pallets/unique/src/sponsorship.rs +++ b/pallets/unique/src/sponsorship.rs @@ -30,7 +30,7 @@ NFT_SPONSOR_TRANSFER_TIMEOUT, REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, TokenId, }; use pallet_common::{CollectionHandle}; -use pallet_common::account::CrossAccountId; +use pallet_evm::account::CrossAccountId; pub fn withdraw_transfer( collection: &CollectionHandle, --- a/pallets/unique/src/tests.rs +++ b/pallets/unique/src/tests.rs @@ -18,6 +18,7 @@ use super::*; use crate::mock::*; use crate::{AccessMode, CollectionMode}; +use sp_runtime::AccountId32; use up_data_structs::{ COLLECTION_NUMBER_LIMIT, CollectionId, CreateItemData, CreateFungibleData, CreateNftData, CreateReFungibleData, MAX_DECIMAL_POINTS, COLLECTION_ADMINS_LIMIT, MetaUpdatePermission, @@ -2854,3 +2855,59 @@ ); }); } + +#[test] +fn collection_sponsoring() { + new_test_ext().execute_with(|| { + // default_limits(); + let user1 = 1_u64; + let user2 = 777_u64; + let origin1 = Origin::signed(user1); + let origin2 = Origin::signed(user2); + let account2 = account(user2); + + let collection_id = + create_test_collection_for_owner(&CollectionMode::NFT, user1, CollectionId(1)); + assert_ok!(TemplateModule::set_collection_sponsor( + origin1.clone(), + collection_id, + user1 + )); + assert_ok!(TemplateModule::confirm_sponsorship( + origin1.clone(), + collection_id + )); + + // Expect error while have no permissions + assert!(TemplateModule::create_item( + origin2.clone(), + collection_id, + account2.clone(), + default_nft_data().into() + ) + .is_err()); + + assert_ok!(TemplateModule::set_public_access_mode( + origin1.clone(), + collection_id, + AccessMode::AllowList + )); + assert_ok!(TemplateModule::add_to_allow_list( + origin1.clone(), + collection_id, + account2.clone() + )); + assert_ok!(TemplateModule::set_mint_permission( + origin1.clone(), + collection_id, + true + )); + + assert_ok!(TemplateModule::create_item( + origin2, + collection_id, + account2, + default_nft_data().into() + )); + }); +} --- a/primitives/evm-mapping/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "up-evm-mapping" -version = "0.1.0" -license = "GPLv3" -edition = "2021" - -[dependencies] -sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } -frame-support = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } - -[features] -default = ["std"] -std = ["sp-core/std", "frame-support/std"] --- a/primitives/evm-mapping/src/lib.rs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -#![cfg_attr(not(feature = "std"), no_std)] - -use frame_support::sp_runtime::AccountId32; -use sp_core::H160; - -/// Transforms substrate addresses to ethereum (Reverse of `EvmAddressMapping`) -/// pallet_evm doesn't have this, as it only checks if eth address -/// is owned by substrate via `EnsureAddressOrigin` trait -/// -/// This trait implementations shouldn't conflict with used `EnsureAddressOrigin` -pub trait EvmBackwardsAddressMapping { - fn from_account_id(account_id: AccountId) -> H160; -} - -/// Should have same mapping as EnsureAddressTruncated -pub struct MapBackwardsAddressTruncated; -impl EvmBackwardsAddressMapping for MapBackwardsAddressTruncated { - fn from_account_id(account_id: AccountId32) -> H160 { - let mut out = [0; 20]; - out.copy_from_slice(&(account_id.as_ref() as &[u8])[0..20]); - H160(out) - } -} --- a/primitives/rpc/Cargo.toml +++ b/primitives/rpc/Cargo.toml @@ -14,6 +14,7 @@ sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-api = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } sp-runtime = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.18' } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } [features] default = ["std"] --- a/primitives/rpc/src/lib.rs +++ b/primitives/rpc/src/lib.rs @@ -16,7 +16,7 @@ #![cfg_attr(not(feature = "std"), no_std)] -use up_data_structs::{CollectionId, TokenId, Collection, CollectionStats}; +use up_data_structs::{CollectionId, TokenId, Collection, CollectionStats, CollectionLimits}; use sp_std::vec::Vec; use sp_core::H160; use codec::Decode; @@ -28,7 +28,7 @@ #[api_version(2)] pub trait UniqueApi where AccountId: Decode, - CrossAccountId: pallet_common::account::CrossAccountId, + CrossAccountId: pallet_evm::account::CrossAccountId, { #[changed_in(2)] fn token_owner(collection: CollectionId, token: TokenId) -> Result; @@ -60,5 +60,6 @@ fn collection_by_id(collection: CollectionId) -> Result>>; fn collection_stats() -> Result; fn next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Result>; + fn effective_collection_limits(collection_id: CollectionId) -> Result>; } } --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -69,4 +69,7 @@ [dependencies.fp-rpc] default-features = false git = "https://github.com/uniquenetwork/frontier.git" -branch = "unique-polkadot-v0.9.18" +branch = "unique-polkadot-v0.9.18-2" + +[dependencies] +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } \ No newline at end of file --- a/runtime/common/src/runtime_apis.rs +++ b/runtime/common/src/runtime_apis.rs @@ -75,6 +75,9 @@ collection, account, token)) + + fn effective_collection_limits(collection: CollectionId) -> Result, DispatchError> { + Ok(>::effective_collection_limits(collection)) } } @@ -188,7 +191,7 @@ }; ::Runner::call( - from, + CrossAccountId::from_eth(from), to, data, value, @@ -222,7 +225,7 @@ }; ::Runner::create( - from, + CrossAccountId::from_eth(from), data, value, gas_limit.low_u64(), --- a/runtime/common/src/types.rs +++ b/runtime/common/src/types.rs @@ -42,7 +42,7 @@ pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; pub trait RuntimeInstance { - type CrossAccountId: pallet_common::account::CrossAccountId + type CrossAccountId: pallet_evm::account::CrossAccountId + Send + Sync + 'static; --- a/runtime/opal/Cargo.toml +++ b/runtime/opal/Cargo.toml @@ -72,7 +72,7 @@ 'pallet-base-fee/std', 'fp-rpc/std', 'up-rpc/std', - 'up-evm-mapping/std', + 'fp-evm-mapping/std', 'fp-self-contained/std', 'parachain-info/std', 'serde', @@ -382,7 +382,7 @@ derivative = "2.2.0" pallet-unique = { path = '../../pallets/unique', default-features = false } up-rpc = { path = "../../primitives/rpc", default-features = false } -up-evm-mapping = { path = "../../primitives/evm-mapping", default-features = false } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } pallet-inflation = { path = '../../pallets/inflation', default-features = false } up-data-structs = { path = '../../primitives/data-structs', default-features = false } pallet-common = { default-features = false, path = "../../pallets/common" } @@ -396,11 +396,11 @@ pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false } pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false } pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } ################################################################################ # Build Dependencies --- a/runtime/opal/src/lib.rs +++ b/runtime/opal/src/lib.rs @@ -48,7 +48,9 @@ }; // A few exports that help ease life for downstream crates. pub use pallet_balances::Call as BalancesCall; -pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner}; +pub use pallet_evm::{ + EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _, +}; pub use frame_support::{ construct_runtime, match_type, dispatch::DispatchResult, @@ -117,11 +119,10 @@ pub const RUNTIME_NAME: &str = "opal"; pub const TOKEN_SYMBOL: &str = "OPL"; -type CrossAccountId = pallet_common::account::BasicCrossAccountId; +type CrossAccountId = pallet_evm::account::BasicCrossAccountId; impl RuntimeInstance for Runtime { type CrossAccountId = self::CrossAccountId; - type TransactionConverter = self::TransactionConverter; fn get_transaction_converter() -> TransactionConverter { @@ -129,6 +130,22 @@ } } +/// The type for looking up accounts. We don't expect more than 4 billion of them, but you +/// never know... +pub type AccountIndex = u32; + +/// Balance of an account. +pub type Balance = u128; + +/// Index of a transaction in the chain. +pub type Index = u32; + +/// A hash of some data used by the chain. +pub type Hash = sp_core::H256; + +/// Digest item type. +pub type DigestItem = generic::DigestItem; + /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know /// the specifics of the runtime. They can then be made to be agnostic over specific formats /// of data like extrinsics, allowing for them to continue syncing the network through upgrades @@ -152,7 +169,7 @@ spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 918001, + spec_version: 918010, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -258,6 +275,12 @@ } } +impl pallet_evm::account::Config for Runtime { + type CrossAccountId = pallet_evm::account::BasicCrossAccountId; + type EvmAddressMapping = pallet_evm::HashedAddressMapping; + type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated; +} + impl pallet_evm::Config for Runtime { type BlockGasLimit = BlockGasLimit; type FeeCalculator = FixedFee; @@ -845,10 +868,6 @@ impl pallet_common::Config for Runtime { type Event = Event; - type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated; - type EvmAddressMapping = HashedAddressMapping; - type CrossAccountId = pallet_common::account::BasicCrossAccountId; - type Currency = Balances; type CollectionCreationPrice = CollectionCreationPrice; type TreasuryAccountId = TreasuryAccountId; @@ -912,8 +931,6 @@ impl pallet_evm_transaction_payment::Config for Runtime { type EvmSponsorshipHandler = EvmSponsorshipHandler; type Currency = Balances; - type EvmAddressMapping = HashedAddressMapping; - type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated; } impl pallet_charge_transaction::Config for Runtime { --- a/runtime/quartz/Cargo.toml +++ b/runtime/quartz/Cargo.toml @@ -72,7 +72,7 @@ 'pallet-base-fee/std', 'fp-rpc/std', 'up-rpc/std', - 'up-evm-mapping/std', + 'fp-evm-mapping/std', 'fp-self-contained/std', 'parachain-info/std', 'serde', @@ -382,7 +382,7 @@ derivative = "2.2.0" pallet-unique = { path = '../../pallets/unique', default-features = false } up-rpc = { path = "../../primitives/rpc", default-features = false } -up-evm-mapping = { path = "../../primitives/evm-mapping", default-features = false } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } pallet-inflation = { path = '../../pallets/inflation', default-features = false } up-data-structs = { path = '../../primitives/data-structs', default-features = false } pallet-common = { default-features = false, path = "../../pallets/common" } @@ -396,11 +396,11 @@ pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false } pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false } pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } ################################################################################ # Build Dependencies --- a/runtime/quartz/src/lib.rs +++ b/runtime/quartz/src/lib.rs @@ -48,7 +48,9 @@ }; // A few exports that help ease life for downstream crates. pub use pallet_balances::Call as BalancesCall; -pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner}; +pub use pallet_evm::{ + EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _, +}; pub use frame_support::{ construct_runtime, match_type, dispatch::DispatchResult, @@ -117,7 +119,7 @@ pub const RUNTIME_NAME: &str = "quartz"; pub const TOKEN_SYMBOL: &str = "QTZ"; -type CrossAccountId = pallet_common::account::BasicCrossAccountId; +type CrossAccountId = pallet_evm::account::BasicCrossAccountId; impl RuntimeInstance for Runtime { type CrossAccountId = self::CrossAccountId; @@ -152,7 +154,7 @@ spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 918001, + spec_version: 918010, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -845,15 +847,18 @@ impl pallet_common::Config for Runtime { type Event = Event; - type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated; - type EvmAddressMapping = HashedAddressMapping; - type CrossAccountId = pallet_common::account::BasicCrossAccountId; type Currency = Balances; type CollectionCreationPrice = CollectionCreationPrice; type TreasuryAccountId = TreasuryAccountId; } +impl pallet_evm::account::Config for Runtime { + type CrossAccountId = pallet_evm::account::BasicCrossAccountId; + type EvmAddressMapping = HashedAddressMapping; + type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated; +} + impl pallet_fungible::Config for Runtime { type WeightInfo = pallet_fungible::weights::SubstrateWeight; } @@ -912,8 +917,6 @@ impl pallet_evm_transaction_payment::Config for Runtime { type EvmSponsorshipHandler = EvmSponsorshipHandler; type Currency = Balances; - type EvmAddressMapping = HashedAddressMapping; - type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated; } impl pallet_charge_transaction::Config for Runtime { --- a/runtime/unique/Cargo.toml +++ b/runtime/unique/Cargo.toml @@ -72,7 +72,7 @@ 'pallet-base-fee/std', 'fp-rpc/std', 'up-rpc/std', - 'up-evm-mapping/std', + 'fp-evm-mapping/std', 'fp-self-contained/std', 'parachain-info/std', 'serde', @@ -382,7 +382,6 @@ derivative = "2.2.0" pallet-unique = { path = '../../pallets/unique', default-features = false } up-rpc = { path = "../../primitives/rpc", default-features = false } -up-evm-mapping = { path = "../../primitives/evm-mapping", default-features = false } pallet-inflation = { path = '../../pallets/inflation', default-features = false } up-data-structs = { path = '../../primitives/data-structs', default-features = false } pallet-common = { default-features = false, path = "../../pallets/common" } @@ -396,11 +395,12 @@ pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false } pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false } pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } -fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.18-2" } ################################################################################ # Build Dependencies --- a/runtime/unique/src/lib.rs +++ b/runtime/unique/src/lib.rs @@ -48,7 +48,9 @@ }; // A few exports that help ease life for downstream crates. pub use pallet_balances::Call as BalancesCall; -pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner}; +pub use pallet_evm::{ + EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _, +}; pub use frame_support::{ construct_runtime, match_type, dispatch::DispatchResult, @@ -116,7 +118,7 @@ pub const RUNTIME_NAME: &str = "unique"; pub const TOKEN_SYMBOL: &str = "UNQ"; -type CrossAccountId = pallet_common::account::BasicCrossAccountId; +type CrossAccountId = pallet_evm::account::BasicCrossAccountId; impl RuntimeInstance for Runtime { type CrossAccountId = self::CrossAccountId; @@ -151,7 +153,7 @@ spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 918001, + spec_version: 918010, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -844,15 +846,17 @@ impl pallet_common::Config for Runtime { type Event = Event; - type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated; - type EvmAddressMapping = HashedAddressMapping; - type CrossAccountId = pallet_common::account::BasicCrossAccountId; - type Currency = Balances; type CollectionCreationPrice = CollectionCreationPrice; type TreasuryAccountId = TreasuryAccountId; } +impl pallet_evm::account::Config for Runtime { + type CrossAccountId = pallet_evm::account::BasicCrossAccountId; + type EvmAddressMapping = HashedAddressMapping; + type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated; +} + impl pallet_fungible::Config for Runtime { type WeightInfo = pallet_fungible::weights::SubstrateWeight; } @@ -911,8 +915,6 @@ impl pallet_evm_transaction_payment::Config for Runtime { type EvmSponsorshipHandler = EvmSponsorshipHandler; type Currency = Balances; - type EvmAddressMapping = HashedAddressMapping; - type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated; } impl pallet_charge_transaction::Config for Runtime { --- a/tests/README.md +++ b/tests/README.md @@ -20,7 +20,7 @@ git clone https://github.com/paritytech/polkadot-launch && cd polkadot-launch ``` -5. Run launch-test-env.sh from the root of this project +5. Run launch-testnet.sh from the root of this project ## How to run tests --- a/tests/package.json +++ b/tests/package.json @@ -67,6 +67,7 @@ "testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts", "testBlockProduction": "mocha --timeout 9999999 -r ts-node/register ./**/block-production.test.ts", "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts", + "testLimits": "mocha --timeout 9999999 -r ts-node/register ./**/limits.test.ts", "polkadot-types-fetch-metadata": "curl -H 'Content-Type: application/json' -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > src/interfaces/metadata.json", "polkadot-types-from-defs": "echo 'export default {}' > src/interfaces/lookup.ts && ts-node ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .", "polkadot-types-from-chain": "ts-node ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .", --- a/tests/src/eth/base.test.ts +++ b/tests/src/eth/base.test.ts @@ -34,7 +34,8 @@ const userB = createEthAccount(web3); const cost = await recordEthFee(api, userA, () => web3.eth.sendTransaction({from: userA, to: userB, value: '1000000', ...GAS_ARGS})); - expect(cost - await ethBalanceViaSub(api, userB) < BigInt(0.2 * Number(UNIQUE))).to.be.true; + const balanceB = await ethBalanceViaSub(api, userB); + expect(cost - balanceB < BigInt(0.2 * Number(UNIQUE))).to.be.true; }); itWeb3('NFT transfer is close to 0.15 UNQ', async ({web3, api}) => { --- a/tests/src/eth/contractSponsoring.test.ts +++ b/tests/src/eth/contractSponsoring.test.ts @@ -24,7 +24,24 @@ itWeb3, SponsoringMode, createEthAccount, + collectionIdToAddress, + GAS_ARGS, + normalizeEvents, + subToEth, + executeEthTxOnSub, } from './util/helpers'; +import { + addCollectionAdminExpectSuccess, + createCollectionExpectSuccess, + getCreateCollectionResult, + transferBalanceTo, +} from '../util/helpers'; +import nonFungibleAbi from './nonFungibleAbi.json'; +import { + submitTransactionAsync, +} from '../substrate/substrate-api'; +import getBalance from '../substrate/get-balance'; +import {alicesPublicKey} from '../accounts'; describe('Sponsoring EVM contracts', () => { itWeb3('Sponsoring can be set by the address that has deployed the contract', async ({api, web3}) => { @@ -199,4 +216,115 @@ const helpers = contractHelpers(web3, owner); expect(await helpers.methods.getSponsoringRateLimit(flipper.options.address).call()).to.be.equals('7200'); }); + + itWeb3('Sponsoring evm address from substrate collection', async ({api, web3}) => { + const owner = privateKey('//Alice'); + const userEth = createEthAccount(web3); + const collectionId = await createCollectionExpectSuccess(); + + { + const tx = api.tx.unique.setCollectionSponsor(collectionId, owner.address); + const events = await submitTransactionAsync(owner, tx); + const result = getCreateCollectionResult(events); + expect(result.success).to.be.true; + } + { + const tx = api.tx.unique.confirmSponsorship(collectionId); + const events = await submitTransactionAsync(owner, tx); + const result = getCreateCollectionResult(events); + expect(result.success).to.be.true; + } + + const address = collectionIdToAddress(collectionId); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: userEth, ...GAS_ARGS}); + + { // This part should fail, because user not in access list and user have no money + const nextTokenId = await contract.methods.nextTokenId().call(); + expect(nextTokenId).to.be.equal('1'); + await expect(contract.methods.mintWithTokenURI( + userEth, + nextTokenId, + 'Test URI', + ).call({from: userEth})).to.be.rejectedWith(/PublicMintingNotAllowed/); + } + + { + const tx = api.tx.unique.setPublicAccessMode(collectionId, 'AllowList'); + const events = await submitTransactionAsync(owner, tx); + const result = getCreateCollectionResult(events); + expect(result.success).to.be.true; + } + { + const tx = api.tx.unique.addToAllowList(collectionId, {Ethereum: userEth}); + const events = await submitTransactionAsync(owner, tx); + const result = getCreateCollectionResult(events); + expect(result.success).to.be.true; + } + { + const tx = api.tx.unique.setMintPermission(collectionId, true); + const events = await submitTransactionAsync(owner, tx); + const result = getCreateCollectionResult(events); + expect(result.success).to.be.true; + } + + const [alicesBalanceBefore] = await getBalance(api, [alicesPublicKey]); + + { + const nextTokenId = await contract.methods.nextTokenId().call(); + expect(nextTokenId).to.be.equal('1'); + const result = await contract.methods.mintWithTokenURI( + userEth, + nextTokenId, + 'Test URI', + ).send({from: userEth}); + const events = normalizeEvents(result.events); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: '0x0000000000000000000000000000000000000000', + to: userEth, + tokenId: nextTokenId, + }, + }, + ]); + + expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI'); + } + + const [alicesBalanceAfter] = await getBalance(api, [alicesPublicKey]); + expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true; + }); + + + itWeb3('Check that transaction via EVM spend money from substrate address', async ({api, web3}) => { + const owner = privateKey('//Alice'); + const user = privateKey(`//User/${Date.now()}`); + const userEth = subToEth(user.address); + const collectionId = await createCollectionExpectSuccess(); + await addCollectionAdminExpectSuccess(owner, collectionId, {Ethereum: userEth}); + await transferBalanceTo(api, owner, user.address); + + const address = collectionIdToAddress(collectionId); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: userEth, ...GAS_ARGS}); + + const [userBalanceBefore] = await getBalance(api, [user.address]); + + { + const nextTokenId = await contract.methods.nextTokenId().call(); + expect(nextTokenId).to.be.equal('1'); + await executeEthTxOnSub(web3, api, user, contract, m => m.mintWithTokenURI( + userEth, + nextTokenId, + 'Test URI', + )); + + expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI'); + } + + const [userBalanceAfter] = await getBalance(api, [user.address]); + expect(userBalanceAfter < userBalanceBefore).to.be.true; + }); }); --- a/tests/src/eth/marketplace/marketplace.test.ts +++ b/tests/src/eth/marketplace/marketplace.test.ts @@ -15,13 +15,24 @@ // along with Unique Network. If not, see . import {readFile} from 'fs/promises'; -import {getBalanceSingle, transferBalanceExpectSuccess} from '../../substrate/get-balance'; +import {getBalanceSingle} from '../../substrate/get-balance'; import privateKey from '../../substrate/privateKey'; -import {addToAllowListExpectSuccess, confirmSponsorshipExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, getTokenOwner, setCollectionLimitsExpectSuccess, setCollectionSponsorExpectSuccess, transferExpectSuccess, transferFromExpectSuccess} from '../../util/helpers'; +import { + addToAllowListExpectSuccess, + confirmSponsorshipExpectSuccess, + createCollectionExpectSuccess, + createItemExpectSuccess, + getTokenOwner, + setCollectionLimitsExpectSuccess, + setCollectionSponsorExpectSuccess, + transferExpectSuccess, + transferFromExpectSuccess, + transferBalanceTo, +} from '../../util/helpers'; import {collectionIdToAddress, contractHelpers, createEthAccountWithBalance, executeEthTxOnSub, GAS_ARGS, itWeb3, SponsoringMode, subToEth, subToEthLowercase, transferBalanceToEth} from '../util/helpers'; import {evmToAddress} from '@polkadot/util-crypto'; import nonFungibleAbi from '../nonFungibleAbi.json'; -import fungibleAbi from '../fungibleAbi.json'; + import {expect} from 'chai'; const PRICE = 2000n; @@ -87,32 +98,39 @@ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Substrate: alice.address}); }); - // selling for custom tokens excluded from release - itWeb3.skip('With custom ERC20', async ({api, web3}) => { + + itWeb3('With escrow', async ({api, web3}) => { const alice = privateKey('//Alice'); const matcherOwner = await createEthAccountWithBalance(api, web3); + const escrow = await createEthAccountWithBalance(api, web3); const matcherContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlace.abi`)).toString()), undefined, { from: matcherOwner, ...GAS_ARGS, }); - const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments: [matcherOwner]}).send({from: matcherOwner}); + const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments: [matcherOwner]}).send({from: matcherOwner, gas: 10000000}); + await matcher.methods.setEscrow(escrow).send({from: matcherOwner}); + const helpers = contractHelpers(web3, matcherOwner); + await helpers.methods.setSponsoringMode(matcher.options.address, SponsoringMode.Allowlisted).send({from: matcherOwner}); + await helpers.methods.setSponsoringRateLimit(matcher.options.address, 1).send({from: matcherOwner}); + await transferBalanceToEth(api, alice, matcher.options.address); const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}}); + await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorApproveTimeout: 1}); const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collectionId), {from: matcherOwner}); + await setCollectionSponsorExpectSuccess(collectionId, alice.address); + await transferBalanceToEth(api, alice, subToEth(alice.address)); + await confirmSponsorshipExpectSuccess(collectionId); - const fungibleId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}}); - const evmFungible = new web3.eth.Contract(fungibleAbi as any, collectionIdToAddress(fungibleId), {from: matcherOwner, ...GAS_ARGS}); - await createFungibleItemExpectSuccess(alice, fungibleId, {Value: PRICE}, {Ethereum: subToEth(alice.address)}); + await helpers.methods.toggleAllowed(matcher.options.address, subToEth(alice.address), true).send({from: matcherOwner}); + await addToAllowListExpectSuccess(alice, collectionId, evmToAddress(subToEth(alice.address))); - const seller = privateKey('//Bob'); + const seller = privateKey(`//Seller/${Date.now()}`); + await helpers.methods.toggleAllowed(matcher.options.address, subToEth(seller.address), true).send({from: matcherOwner}); const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', seller.address); // To transfer item to matcher it first needs to be transfered to EVM account of bob await transferExpectSuccess(collectionId, tokenId, seller, {Ethereum: subToEth(seller.address)}); - // Fees will be paid from EVM account, so we should have some balance here - await transferBalanceExpectSuccess(api, seller, evmToAddress(subToEth(seller.address)), 10n ** 18n); - await transferBalanceExpectSuccess(api, alice, evmToAddress(subToEth(alice.address)), 10n ** 18n); // Token is owned by seller initially expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: subToEthLowercase(seller.address)}); @@ -120,66 +138,55 @@ // Ask { await executeEthTxOnSub(web3, api, seller, evmCollection, m => m.approve(matcher.options.address, tokenId)); - await executeEthTxOnSub(web3, api, seller, matcher, m => m.addAsk(PRICE, evmFungible.options.address, evmCollection.options.address, tokenId, 1)); + await executeEthTxOnSub(web3, api, seller, matcher, m => m.addAsk(PRICE, '0x0000000000000000000000000000000000000001', evmCollection.options.address, tokenId)); } // Token is transferred to matcher expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: matcher.options.address.toLowerCase()}); + // Give buyer KSM + await matcher.methods.depositKSM(PRICE, subToEth(alice.address)).send({from: escrow}); + // Buy { - const sellerBalanceBeforePurchase = BigInt(await evmFungible.methods.balanceOf(subToEth(seller.address)).call()); - const buyerBalanceBeforePurchase = BigInt(await evmFungible.methods.balanceOf(subToEth(alice.address)).call()); + expect(await matcher.methods.balanceKSM(subToEth(seller.address)).call()).to.be.equal('0'); + expect(await matcher.methods.balanceKSM(subToEth(alice.address)).call()).to.be.equal(PRICE.toString()); - await executeEthTxOnSub(web3, api, alice, evmFungible, m => m.approve(matcher.options.address, PRICE)); - // There is two functions named 'buy', so we should provide full signature - await executeEthTxOnSub(web3, api, alice, matcher, m => - m['buy(address,uint256,address,uint256)'](evmCollection.options.address, tokenId, evmFungible.options.address, PRICE)); + await executeEthTxOnSub(web3, api, alice, matcher, m => m.buyKSM(evmCollection.options.address, tokenId, subToEth(alice.address), subToEth(alice.address))); - // Approved price is removed from buyer balance, and added to seller - expect(BigInt(await evmFungible.methods.balanceOf(subToEth(seller.address)).call()) - sellerBalanceBeforePurchase === PRICE); - expect(buyerBalanceBeforePurchase - BigInt(await evmFungible.methods.balanceOf(subToEth(alice.address)).call()) === PRICE); + // Price is removed from buyer balance, and added to seller + expect(await matcher.methods.balanceKSM(subToEth(alice.address)).call()).to.be.equal('0'); + expect(await matcher.methods.balanceKSM(subToEth(seller.address)).call()).to.be.equal(PRICE.toString()); } // Token is transferred to evm account of alice expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: subToEthLowercase(alice.address)}); - // Transfer token to substrate side of alice await transferFromExpectSuccess(collectionId, tokenId, alice, {Ethereum: subToEth(alice.address)}, {Substrate: alice.address}); - // Token is transferred to substrate account of alice + // Token is transferred to substrate account of alice, seller received funds expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Substrate: alice.address}); }); - itWeb3('With escrow', async ({api, web3}) => { + + itWeb3('Sell tokens from substrate user via EVM contract', async ({api, web3}) => { const alice = privateKey('//Alice'); const matcherOwner = await createEthAccountWithBalance(api, web3); - const escrow = await createEthAccountWithBalance(api, web3); const matcherContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlace.abi`)).toString()), undefined, { from: matcherOwner, ...GAS_ARGS, }); - const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments: [matcherOwner]}).send({from: matcherOwner, gas: 10000000}); - await matcher.methods.setEscrow(escrow).send({from: matcherOwner}); - const helpers = contractHelpers(web3, matcherOwner); - await helpers.methods.setSponsoringMode(matcher.options.address, SponsoringMode.Allowlisted).send({from: matcherOwner}); - await helpers.methods.setSponsoringRateLimit(matcher.options.address, 1).send({from: matcherOwner}); + const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments:[matcherOwner]}).send({from: matcherOwner}); await transferBalanceToEth(api, alice, matcher.options.address); const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}}); await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorApproveTimeout: 1}); const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collectionId), {from: matcherOwner}); - await setCollectionSponsorExpectSuccess(collectionId, alice.address); - await transferBalanceToEth(api, alice, subToEth(alice.address)); - await confirmSponsorshipExpectSuccess(collectionId); - - await helpers.methods.toggleAllowed(matcher.options.address, subToEth(alice.address), true).send({from: matcherOwner}); - await addToAllowListExpectSuccess(alice, collectionId, evmToAddress(subToEth(alice.address))); const seller = privateKey(`//Seller/${Date.now()}`); - await helpers.methods.toggleAllowed(matcher.options.address, subToEth(seller.address), true).send({from: matcherOwner}); - + await transferBalanceTo(api, alice, seller.address); + const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', seller.address); // To transfer item to matcher it first needs to be transfered to EVM account of bob @@ -197,19 +204,11 @@ // Token is transferred to matcher expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: matcher.options.address.toLowerCase()}); - // Give buyer KSM - await matcher.methods.depositKSM(PRICE, subToEth(alice.address)).send({from: escrow}); - // Buy { - expect(await matcher.methods.balanceKSM(subToEth(seller.address)).call()).to.be.equal('0'); - expect(await matcher.methods.balanceKSM(subToEth(alice.address)).call()).to.be.equal(PRICE.toString()); - - await executeEthTxOnSub(web3, api, alice, matcher, m => m.buyKSM(evmCollection.options.address, tokenId, subToEth(alice.address), subToEth(alice.address))); - - // Price is removed from buyer balance, and added to seller - expect(await matcher.methods.balanceKSM(subToEth(alice.address)).call()).to.be.equal('0'); - expect(await matcher.methods.balanceKSM(subToEth(seller.address)).call()).to.be.equal(PRICE.toString()); + const sellerBalanceBeforePurchase = await getBalanceSingle(api, seller.address); + await executeEthTxOnSub(web3, api, alice, matcher, m => m.buy(evmCollection.options.address, tokenId), {value: PRICE}); + expect(await getBalanceSingle(api, seller.address) - sellerBalanceBeforePurchase === PRICE); } // Token is transferred to evm account of alice --- a/tests/src/eth/util/helpers.ts +++ b/tests/src/eth/util/helpers.ts @@ -29,6 +29,7 @@ import privateKey from '../../substrate/privateKey'; import contractHelpersAbi from './contractHelpersAbi.json'; import getBalance from '../../substrate/get-balance'; +import waitNewBlocks from '../../substrate/wait-new-blocks'; export const GAS_ARGS = {gas: 2500000}; @@ -241,6 +242,12 @@ return collector; } +/** + * pallet evm_contract_helpers + * @param web3 + * @param caller - eth address + * @returns + */ export function contractHelpers(web3: Web3, caller: string) { return new web3.eth.Contract(contractHelpersAbi as any, '0x842899ECF380553E8a4de75bF534cdf6fBF64049', {from: caller, ...GAS_ARGS}); } @@ -287,6 +294,8 @@ await call(); + // In dev mode, the transaction might not finish processing in time + await waitNewBlocks(api, 1); const after = await ethBalanceViaSub(api, user); // Can't use .to.be.less, because chai doesn't supports bigint --- a/tests/src/interfaces/augment-api-errors.ts +++ b/tests/src/interfaces/augment-api-errors.ts @@ -105,6 +105,10 @@ **/ NoPermission: AugmentedError; /** + * Not sufficient founds to perform action + **/ + NotSufficientFounds: AugmentedError; + /** * Tried to enable permissions which are only permitted to be disabled **/ OwnerPermissionsCantBeReverted: AugmentedError; --- a/tests/src/interfaces/augment-api-events.ts +++ b/tests/src/interfaces/augment-api-events.ts @@ -4,7 +4,7 @@ import type { ApiTypes } from '@polkadot/api-base/types'; import type { Null, Option, Result, U256, U8aFixed, u128, u32, u64, u8 } from '@polkadot/types-codec'; import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime'; -import type { EthereumLog, EvmCoreErrorExitReason, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchInfo, OrmlVestingVestingSchedule, PalletCommonAccountBasicCrossAccountIdRepr, SpRuntimeDispatchError, UpDataStructsAccessMode, XcmV1MultiLocation, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; +import type { EthereumLog, EvmCoreErrorExitReason, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchInfo, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, SpRuntimeDispatchError, UpDataStructsAccessMode, XcmV1MultiLocation, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; declare module '@polkadot/api-base/types/events' { export interface AugmentedEvents { @@ -68,7 +68,7 @@ * * * amount **/ - Approved: AugmentedEvent; + Approved: AugmentedEvent; /** * New collection was created * @@ -102,7 +102,7 @@ * * * amount: Always 1 for NFT **/ - ItemCreated: AugmentedEvent; + ItemCreated: AugmentedEvent; /** * Collection item was burned. * @@ -116,7 +116,7 @@ * * * amount: Always 1 for NFT **/ - ItemDestroyed: AugmentedEvent; + ItemDestroyed: AugmentedEvent; /** * Item was transferred * @@ -130,7 +130,7 @@ * * * amount: Always 1 for NFT **/ - Transfer: AugmentedEvent; + Transfer: AugmentedEvent; /** * Generic event **/ @@ -483,7 +483,7 @@ * * * user: Address. **/ - AllowListAddressAdded: AugmentedEvent; + AllowListAddressAdded: AugmentedEvent; /** * Address was remove from allow list * @@ -493,7 +493,7 @@ * * * user: Address. **/ - AllowListAddressRemoved: AugmentedEvent; + AllowListAddressRemoved: AugmentedEvent; /** * Collection admin was added * @@ -503,7 +503,7 @@ * * * admin: Admin address. **/ - CollectionAdminAdded: AugmentedEvent; + CollectionAdminAdded: AugmentedEvent; /** * Collection admin was removed * @@ -513,7 +513,7 @@ * * * admin: Admin address. **/ - CollectionAdminRemoved: AugmentedEvent; + CollectionAdminRemoved: AugmentedEvent; /** * Collection limits was set * --- 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, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV1AbridgedHostConfiguration, PolkadotPrimitivesV1PersistedValidationData, PolkadotPrimitivesV1UpgradeRestriction, SpRuntimeDigest, UpDataStructsCollection, UpDataStructsCollectionStats } from '@polkadot/types/lookup'; +import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV1AbridgedHostConfiguration, PolkadotPrimitivesV1PersistedValidationData, PolkadotPrimitivesV1UpgradeRestriction, SpRuntimeDigest, UpDataStructsCollection, UpDataStructsCollectionStats } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; declare module '@polkadot/api-base/types/storage' { @@ -73,7 +73,7 @@ /** * Allowlisted collection users **/ - allowlist: AugmentedQuery Observable, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; + allowlist: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; /** * Collection info **/ @@ -87,7 +87,7 @@ /** * List of collection admins **/ - isAdmin: AugmentedQuery Observable, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; + isAdmin: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; /** * Generic query **/ @@ -173,8 +173,8 @@ [key: string]: QueryableStorageEntry; }; fungible: { - allowance: AugmentedQuery Observable, [u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; - balance: AugmentedQuery Observable, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; + allowance: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; + balance: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; totalSupply: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; /** * Generic query @@ -208,12 +208,12 @@ [key: string]: QueryableStorageEntry; }; nonfungible: { - accountBalance: AugmentedQuery Observable, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; - allowance: AugmentedQuery Observable>, [u32, u32]> & QueryableStorageEntry; + accountBalance: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; + allowance: AugmentedQuery Observable>, [u32, u32]> & QueryableStorageEntry; /** * Used to enumerate tokens owned by account **/ - owned: AugmentedQuery Observable, [u32, PalletCommonAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry; + owned: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry; tokenData: AugmentedQuery Observable>, [u32, u32]> & QueryableStorageEntry; tokensBurnt: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; tokensMinted: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; @@ -371,13 +371,13 @@ [key: string]: QueryableStorageEntry; }; refungible: { - accountBalance: AugmentedQuery Observable, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; - allowance: AugmentedQuery Observable, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; - balance: AugmentedQuery Observable, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; + accountBalance: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; + allowance: AugmentedQuery Observable, [u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; + balance: AugmentedQuery Observable, [u32, u32, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; /** * Used to enumerate tokens owned by account **/ - owned: AugmentedQuery Observable, [u32, PalletCommonAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry; + owned: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry; tokenData: AugmentedQuery Observable, [u32, u32]> & QueryableStorageEntry; tokensBurnt: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; tokensMinted: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; --- 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 { PalletCommonAccountBasicCrossAccountIdRepr, UpDataStructsCollection, UpDataStructsCollectionStats } from './unique'; +import type { PalletEvmAccountBasicCrossAccountIdRepr, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsCollectionLimits } 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'; @@ -562,31 +562,31 @@ /** * Get amount of different user tokens **/ - accountBalance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; + accountBalance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; /** * Get tokens owned by account **/ - accountTokens: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; + accountTokens: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; /** * Get admin list **/ - adminlist: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; + adminlist: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; /** * Get allowed amount **/ - allowance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, sender: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, spender: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; + allowance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, sender: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, spender: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; /** * Check if user is allowed to use collection **/ - allowed: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; + allowed: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; /** * Get allowlist **/ - allowlist: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; + allowlist: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; /** * Get amount of specific account token **/ - balance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; + balance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; /** * Get collection by specified id **/ @@ -604,6 +604,10 @@ **/ constMetadata: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; /** + * Get effective collection limits + **/ + effectiveCollectionLimits: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; + /** * Get last token id **/ lastTokenId: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; @@ -614,7 +618,7 @@ /** * Get token owner **/ - tokenOwner: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; + tokenOwner: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; /** * Get token variable metadata **/ --- a/tests/src/interfaces/augment-api-tx.ts +++ b/tests/src/interfaces/augment-api-tx.ts @@ -5,7 +5,7 @@ import type { Bytes, Compact, Option, U256, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H160, H256, MultiAddress, Perbill } from '@polkadot/types/interfaces/runtime'; -import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, OrmlVestingVestingSchedule, PalletCommonAccountBasicCrossAccountIdRepr, UpDataStructsAccessMode, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsMetaUpdatePermission, UpDataStructsSchemaVersion, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, UpDataStructsAccessMode, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsMetaUpdatePermission, UpDataStructsSchemaVersion, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; declare module '@polkadot/api-base/types/submittable' { export interface AugmentedSubmittables { @@ -551,7 +551,7 @@ * * * new_admin_id: Address of new admin to add. **/ - addCollectionAdmin: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newAdminId: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + addCollectionAdmin: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newAdminId: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletEvmAccountBasicCrossAccountIdRepr]>; /** * Add an address to allow list. * @@ -566,7 +566,7 @@ * * * address. **/ - addToAllowList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + addToAllowList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletEvmAccountBasicCrossAccountIdRepr]>; /** * Set, change, or remove approved address to transfer the ownership of the NFT. * @@ -584,7 +584,7 @@ * * * item_id: ID of the item. **/ - approve: AugmentedSubmittable<(spender: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletCommonAccountBasicCrossAccountIdRepr, u32, u32, u128]>; + approve: AugmentedSubmittable<(spender: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletEvmAccountBasicCrossAccountIdRepr, u32, u32, u128]>; /** * Destroys a concrete instance of NFT on behalf of the owner * See also: [`approve`] @@ -603,7 +603,7 @@ * * * from: owner of item **/ - burnFrom: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, from: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, PalletCommonAccountBasicCrossAccountIdRepr, u32, u128]>; + burnFrom: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, from: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32, u128]>; /** * Destroys a concrete instance of NFT. * @@ -688,7 +688,7 @@ * * * data: Token data to store on chain. **/ - createItem: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, owner: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, data: UpDataStructsCreateItemData | { NFT: any } | { Fungible: any } | { ReFungible: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletCommonAccountBasicCrossAccountIdRepr, UpDataStructsCreateItemData]>; + createItem: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, owner: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, data: UpDataStructsCreateItemData | { NFT: any } | { Fungible: any } | { ReFungible: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletEvmAccountBasicCrossAccountIdRepr, UpDataStructsCreateItemData]>; /** * This method creates multiple items in a collection created with CreateCollection method. * @@ -709,7 +709,7 @@ * * * owner: Address, initial owner of the NFT. **/ - createMultipleItems: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, owner: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, itemsData: Vec | (UpDataStructsCreateItemData | { NFT: any } | { Fungible: any } | { ReFungible: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [u32, PalletCommonAccountBasicCrossAccountIdRepr, Vec]>; + createMultipleItems: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, owner: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, itemsData: Vec | (UpDataStructsCreateItemData | { NFT: any } | { Fungible: any } | { ReFungible: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [u32, PalletEvmAccountBasicCrossAccountIdRepr, Vec]>; createMultipleItemsEx: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, data: UpDataStructsCreateItemExData | { NFT: any } | { Fungible: any } | { RefungibleMultipleItems: any } | { RefungibleMultipleOwners: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, UpDataStructsCreateItemExData]>; /** * **DANGEROUS**: Destroys collection and all NFTs within this collection. Users irrecoverably lose their assets and may lose real money. @@ -737,7 +737,7 @@ * * * account_id: Address of admin to remove. **/ - removeCollectionAdmin: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, accountId: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + removeCollectionAdmin: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, accountId: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletEvmAccountBasicCrossAccountIdRepr]>; /** * Switch back to pay-per-own-transaction model. * @@ -764,7 +764,7 @@ * * * address. **/ - removeFromAllowList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + removeFromAllowList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, PalletEvmAccountBasicCrossAccountIdRepr]>; setCollectionLimits: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newLimit: UpDataStructsCollectionLimits | { accountTokenOwnershipLimit?: any; sponsoredDataSize?: any; sponsoredDataRateLimit?: any; tokenLimit?: any; sponsorTransferTimeout?: any; sponsorApproveTimeout?: any; ownerCanTransfer?: any; ownerCanDestroy?: any; transfersEnabled?: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, UpDataStructsCollectionLimits]>; /** * # Permissions @@ -938,7 +938,7 @@ * * Fungible Mode: Must specify transferred amount * * Re-Fungible Mode: Must specify transferred portion (between 0 and 1) **/ - transfer: AugmentedSubmittable<(recipient: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletCommonAccountBasicCrossAccountIdRepr, u32, u32, u128]>; + transfer: AugmentedSubmittable<(recipient: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletEvmAccountBasicCrossAccountIdRepr, u32, u32, u128]>; /** * Change ownership of a NFT on behalf of the owner. See Approve method for additional information. After this method executes, the approval is removed so that the approved address will not be able to transfer this NFT again from this owner. * @@ -960,7 +960,7 @@ * * * value: Amount to transfer. **/ - transferFrom: AugmentedSubmittable<(from: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, recipient: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr, u32, u32, u128]>; + transferFrom: AugmentedSubmittable<(from: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, recipient: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u32, u32, u128]>; /** * Generic tx **/ --- a/tests/src/interfaces/augment-types.ts +++ b/tests/src/interfaces/augment-types.ts @@ -1,7 +1,7 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, 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, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV1AbridgedHostConfiguration, PolkadotPrimitivesV1AbridgedHrmpChannel, PolkadotPrimitivesV1PersistedValidationData, PolkadotPrimitivesV1UpgradeRestriction, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpTrieStorageProof, SpVersionRuntimeVersion, UniqueRuntimeRuntime, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsMetaUpdatePermission, UpDataStructsSchemaVersion, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, 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, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV1AbridgedHostConfiguration, PolkadotPrimitivesV1AbridgedHrmpChannel, PolkadotPrimitivesV1PersistedValidationData, PolkadotPrimitivesV1UpgradeRestriction, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsMetaUpdatePermission, UpDataStructsSchemaVersion, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, 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'; @@ -18,7 +18,7 @@ import type { StatementKind } from '@polkadot/types/interfaces/claims'; import type { CollectiveOrigin, MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective'; import type { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus'; -import type { AliveContractInfo, CodeHash, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultErr, ContractExecResultErrModule, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateReturnValue, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts'; +import type { AliveContractInfo, CodeHash, CodeSource, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultErr, ContractExecResultErrModule, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractInstantiateResultTo299, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateRequestV1, InstantiateRequestV2, InstantiateReturnValue, InstantiateReturnValueOk, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts'; import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi'; import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan'; import type { ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus'; @@ -198,6 +198,7 @@ ClassMetadata: ClassMetadata; CodecHash: CodecHash; CodeHash: CodeHash; + CodeSource: CodeSource; CodeUploadRequest: CodeUploadRequest; CodeUploadResult: CodeUploadResult; CodeUploadResultValue: CodeUploadResultValue; @@ -250,6 +251,7 @@ ContractInfo: ContractInfo; ContractInstantiateResult: ContractInstantiateResult; ContractInstantiateResultTo267: ContractInstantiateResultTo267; + ContractInstantiateResultTo299: ContractInstantiateResultTo299; ContractLayoutArray: ContractLayoutArray; ContractLayoutCell: ContractLayoutCell; ContractLayoutEnum: ContractLayoutEnum; @@ -591,7 +593,10 @@ InstanceId: InstanceId; InstanceMetadata: InstanceMetadata; InstantiateRequest: InstantiateRequest; + InstantiateRequestV1: InstantiateRequestV1; + InstantiateRequestV2: InstantiateRequestV2; InstantiateReturnValue: InstantiateReturnValue; + InstantiateReturnValueOk: InstantiateReturnValueOk; InstantiateReturnValueTo267: InstantiateReturnValueTo267; InstructionV2: InstructionV2; InstructionWeights: InstructionWeights; @@ -707,6 +712,7 @@ OffchainAccuracyCompact: OffchainAccuracyCompact; OffenceDetails: OffenceDetails; Offender: Offender; + OpalRuntimeRuntime: OpalRuntimeRuntime; OpaqueCall: OpaqueCall; OpaqueMultiaddr: OpaqueMultiaddr; OpaqueNetworkState: OpaqueNetworkState; @@ -746,7 +752,6 @@ PalletBalancesReserveData: PalletBalancesReserveData; PalletCallMetadataLatest: PalletCallMetadataLatest; PalletCallMetadataV14: PalletCallMetadataV14; - PalletCommonAccountBasicCrossAccountIdRepr: PalletCommonAccountBasicCrossAccountIdRepr; PalletCommonError: PalletCommonError; PalletCommonEvent: PalletCommonEvent; PalletConstantMetadataLatest: PalletConstantMetadataLatest; @@ -758,6 +763,7 @@ PalletEthereumEvent: PalletEthereumEvent; PalletEventMetadataLatest: PalletEventMetadataLatest; PalletEventMetadataV14: PalletEventMetadataV14; + PalletEvmAccountBasicCrossAccountIdRepr: PalletEvmAccountBasicCrossAccountIdRepr; PalletEvmCall: PalletEvmCall; PalletEvmCoderSubstrateError: PalletEvmCoderSubstrateError; PalletEvmContractHelpersError: PalletEvmContractHelpersError; @@ -1146,7 +1152,6 @@ UnappliedSlash: UnappliedSlash; UnappliedSlashOther: UnappliedSlashOther; UncleEntryItem: UncleEntryItem; - UniqueRuntimeRuntime: UniqueRuntimeRuntime; UnknownTransaction: UnknownTransaction; UnlockChunk: UnlockChunk; UnrewardedRelayer: UnrewardedRelayer; --- a/tests/src/interfaces/lookup.ts +++ b/tests/src/interfaces/lookup.ts @@ -1254,11 +1254,11 @@ }, add_to_allow_list: { collectionId: 'u32', - address: 'PalletCommonAccountBasicCrossAccountIdRepr', + address: 'PalletEvmAccountBasicCrossAccountIdRepr', }, remove_from_allow_list: { collectionId: 'u32', - address: 'PalletCommonAccountBasicCrossAccountIdRepr', + address: 'PalletEvmAccountBasicCrossAccountIdRepr', }, set_public_access_mode: { collectionId: 'u32', @@ -1274,11 +1274,11 @@ }, add_collection_admin: { collectionId: 'u32', - newAdminId: 'PalletCommonAccountBasicCrossAccountIdRepr', + newAdminId: 'PalletEvmAccountBasicCrossAccountIdRepr', }, remove_collection_admin: { collectionId: 'u32', - accountId: 'PalletCommonAccountBasicCrossAccountIdRepr', + accountId: 'PalletEvmAccountBasicCrossAccountIdRepr', }, set_collection_sponsor: { collectionId: 'u32', @@ -1292,12 +1292,12 @@ }, create_item: { collectionId: 'u32', - owner: 'PalletCommonAccountBasicCrossAccountIdRepr', + owner: 'PalletEvmAccountBasicCrossAccountIdRepr', data: 'UpDataStructsCreateItemData', }, create_multiple_items: { collectionId: 'u32', - owner: 'PalletCommonAccountBasicCrossAccountIdRepr', + owner: 'PalletEvmAccountBasicCrossAccountIdRepr', itemsData: 'Vec', }, create_multiple_items_ex: { @@ -1315,25 +1315,25 @@ }, burn_from: { collectionId: 'u32', - from: 'PalletCommonAccountBasicCrossAccountIdRepr', + from: 'PalletEvmAccountBasicCrossAccountIdRepr', itemId: 'u32', value: 'u128', }, transfer: { - recipient: 'PalletCommonAccountBasicCrossAccountIdRepr', + recipient: 'PalletEvmAccountBasicCrossAccountIdRepr', collectionId: 'u32', itemId: 'u32', value: 'u128', }, approve: { - spender: 'PalletCommonAccountBasicCrossAccountIdRepr', + spender: 'PalletEvmAccountBasicCrossAccountIdRepr', collectionId: 'u32', itemId: 'u32', amount: 'u128', }, transfer_from: { - from: 'PalletCommonAccountBasicCrossAccountIdRepr', - recipient: 'PalletCommonAccountBasicCrossAccountIdRepr', + from: 'PalletEvmAccountBasicCrossAccountIdRepr', + recipient: 'PalletEvmAccountBasicCrossAccountIdRepr', collectionId: 'u32', itemId: 'u32', value: 'u128', @@ -1438,9 +1438,9 @@ _enum: ['ItemOwner', 'Admin', 'None'] }, /** - * Lookup172: pallet_common::account::BasicCrossAccountIdRepr + * Lookup172: pallet_evm::account::BasicCrossAccountIdRepr **/ - PalletCommonAccountBasicCrossAccountIdRepr: { + PalletEvmAccountBasicCrossAccountIdRepr: { _enum: { Substrate: 'AccountId32', Ethereum: 'H160' @@ -1478,31 +1478,31 @@ pieces: 'u128' }, /** - * Lookup180: up_data_structs::CreateItemExData> + * Lookup180: up_data_structs::CreateItemExData> **/ UpDataStructsCreateItemExData: { _enum: { NFT: 'Vec', - Fungible: 'BTreeMap', + Fungible: 'BTreeMap', RefungibleMultipleItems: 'Vec', RefungibleMultipleOwners: 'UpDataStructsCreateRefungibleExData' } }, /** - * Lookup182: up_data_structs::CreateNftExData> + * Lookup182: up_data_structs::CreateNftExData> **/ UpDataStructsCreateNftExData: { constData: 'Bytes', variableData: 'Bytes', - owner: 'PalletCommonAccountBasicCrossAccountIdRepr' + owner: 'PalletEvmAccountBasicCrossAccountIdRepr' }, /** - * Lookup189: up_data_structs::CreateRefungibleExData> + * Lookup189: up_data_structs::CreateRefungibleExData> **/ UpDataStructsCreateRefungibleExData: { constData: 'Bytes', variableData: 'Bytes', - users: 'BTreeMap' + users: 'BTreeMap' }, /** * Lookup192: pallet_template_transaction_payment::Call @@ -1756,7 +1756,7 @@ } }, /** - * Lookup225: frame_system::EventRecord + * Lookup225: frame_system::EventRecord **/ FrameSystemEventRecord: { phase: 'FrameSystemPhase', @@ -1902,19 +1902,19 @@ } }, /** - * Lookup238: pallet_unique::RawEvent> + * Lookup238: pallet_unique::RawEvent> **/ PalletUniqueRawEvent: { _enum: { CollectionSponsorRemoved: 'u32', - CollectionAdminAdded: '(u32,PalletCommonAccountBasicCrossAccountIdRepr)', + CollectionAdminAdded: '(u32,PalletEvmAccountBasicCrossAccountIdRepr)', CollectionOwnedChanged: '(u32,AccountId32)', CollectionSponsorSet: '(u32,AccountId32)', ConstOnChainSchemaSet: 'u32', SponsorshipConfirmed: '(u32,AccountId32)', - CollectionAdminRemoved: '(u32,PalletCommonAccountBasicCrossAccountIdRepr)', - AllowListAddressRemoved: '(u32,PalletCommonAccountBasicCrossAccountIdRepr)', - AllowListAddressAdded: '(u32,PalletCommonAccountBasicCrossAccountIdRepr)', + CollectionAdminRemoved: '(u32,PalletEvmAccountBasicCrossAccountIdRepr)', + AllowListAddressRemoved: '(u32,PalletEvmAccountBasicCrossAccountIdRepr)', + AllowListAddressAdded: '(u32,PalletEvmAccountBasicCrossAccountIdRepr)', CollectionLimitSet: 'u32', MintPermissionSet: 'u32', OffchainSchemaSet: 'u32', @@ -1930,10 +1930,10 @@ _enum: { CollectionCreated: '(u32,u8,AccountId32)', CollectionDestroyed: 'u32', - ItemCreated: '(u32,u32,PalletCommonAccountBasicCrossAccountIdRepr,u128)', - ItemDestroyed: '(u32,u32,PalletCommonAccountBasicCrossAccountIdRepr,u128)', - Transfer: '(u32,u32,PalletCommonAccountBasicCrossAccountIdRepr,PalletCommonAccountBasicCrossAccountIdRepr,u128)', - Approved: '(u32,u32,PalletCommonAccountBasicCrossAccountIdRepr,PalletCommonAccountBasicCrossAccountIdRepr,u128)' + ItemCreated: '(u32,u32,PalletEvmAccountBasicCrossAccountIdRepr,u128)', + ItemDestroyed: '(u32,u32,PalletEvmAccountBasicCrossAccountIdRepr,u128)', + Transfer: '(u32,u32,PalletEvmAccountBasicCrossAccountIdRepr,PalletEvmAccountBasicCrossAccountIdRepr,u128)', + Approved: '(u32,u32,PalletEvmAccountBasicCrossAccountIdRepr,PalletEvmAccountBasicCrossAccountIdRepr,u128)' } }, /** @@ -2240,7 +2240,7 @@ * Lookup297: pallet_common::pallet::Error **/ PalletCommonError: { - _enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'TokenVariableDataLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsZero', 'UnsupportedOperation'] + _enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'TokenVariableDataLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsZero', 'UnsupportedOperation', 'NotSufficientFounds'] }, /** * Lookup299: pallet_fungible::pallet::Error @@ -2262,12 +2262,12 @@ _enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces'] }, /** - * Lookup305: pallet_nonfungible::ItemData> + * Lookup305: pallet_nonfungible::ItemData> **/ PalletNonfungibleItemData: { constData: 'Bytes', variableData: 'Bytes', - owner: 'PalletCommonAccountBasicCrossAccountIdRepr' + owner: 'PalletEvmAccountBasicCrossAccountIdRepr' }, /** * Lookup306: pallet_nonfungible::pallet::Error @@ -2417,11 +2417,11 @@ **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup345: pallet_template_transaction_payment::ChargeTransactionPayment + * Lookup345: pallet_template_transaction_payment::ChargeTransactionPayment **/ PalletTemplateTransactionPaymentChargeTransactionPayment: 'Compact', /** - * Lookup346: unique_runtime::Runtime + * Lookup346: opal_runtime::Runtime **/ - UniqueRuntimeRuntime: 'Null' + OpalRuntimeRuntime: 'Null' }; --- a/tests/src/interfaces/types-lookup.ts +++ b/tests/src/interfaces/types-lookup.ts @@ -1364,12 +1364,12 @@ readonly isAddToAllowList: boolean; readonly asAddToAllowList: { readonly collectionId: u32; - readonly address: PalletCommonAccountBasicCrossAccountIdRepr; + readonly address: PalletEvmAccountBasicCrossAccountIdRepr; } & Struct; readonly isRemoveFromAllowList: boolean; readonly asRemoveFromAllowList: { readonly collectionId: u32; - readonly address: PalletCommonAccountBasicCrossAccountIdRepr; + readonly address: PalletEvmAccountBasicCrossAccountIdRepr; } & Struct; readonly isSetPublicAccessMode: boolean; readonly asSetPublicAccessMode: { @@ -1389,12 +1389,12 @@ readonly isAddCollectionAdmin: boolean; readonly asAddCollectionAdmin: { readonly collectionId: u32; - readonly newAdminId: PalletCommonAccountBasicCrossAccountIdRepr; + readonly newAdminId: PalletEvmAccountBasicCrossAccountIdRepr; } & Struct; readonly isRemoveCollectionAdmin: boolean; readonly asRemoveCollectionAdmin: { readonly collectionId: u32; - readonly accountId: PalletCommonAccountBasicCrossAccountIdRepr; + readonly accountId: PalletEvmAccountBasicCrossAccountIdRepr; } & Struct; readonly isSetCollectionSponsor: boolean; readonly asSetCollectionSponsor: { @@ -1412,13 +1412,13 @@ readonly isCreateItem: boolean; readonly asCreateItem: { readonly collectionId: u32; - readonly owner: PalletCommonAccountBasicCrossAccountIdRepr; + readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; readonly data: UpDataStructsCreateItemData; } & Struct; readonly isCreateMultipleItems: boolean; readonly asCreateMultipleItems: { readonly collectionId: u32; - readonly owner: PalletCommonAccountBasicCrossAccountIdRepr; + readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; readonly itemsData: Vec; } & Struct; readonly isCreateMultipleItemsEx: boolean; @@ -1440,28 +1440,28 @@ readonly isBurnFrom: boolean; readonly asBurnFrom: { readonly collectionId: u32; - readonly from: PalletCommonAccountBasicCrossAccountIdRepr; + readonly from: PalletEvmAccountBasicCrossAccountIdRepr; readonly itemId: u32; readonly value: u128; } & Struct; readonly isTransfer: boolean; readonly asTransfer: { - readonly recipient: PalletCommonAccountBasicCrossAccountIdRepr; + readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr; readonly collectionId: u32; readonly itemId: u32; readonly value: u128; } & Struct; readonly isApprove: boolean; readonly asApprove: { - readonly spender: PalletCommonAccountBasicCrossAccountIdRepr; + readonly spender: PalletEvmAccountBasicCrossAccountIdRepr; readonly collectionId: u32; readonly itemId: u32; readonly amount: u128; } & Struct; readonly isTransferFrom: boolean; readonly asTransferFrom: { - readonly from: PalletCommonAccountBasicCrossAccountIdRepr; - readonly recipient: PalletCommonAccountBasicCrossAccountIdRepr; + readonly from: PalletEvmAccountBasicCrossAccountIdRepr; + readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr; readonly collectionId: u32; readonly itemId: u32; readonly value: u128; @@ -1573,8 +1573,8 @@ readonly type: 'ItemOwner' | 'Admin' | 'None'; } - /** @name PalletCommonAccountBasicCrossAccountIdRepr (172) */ - export interface PalletCommonAccountBasicCrossAccountIdRepr extends Enum { + /** @name PalletEvmAccountBasicCrossAccountIdRepr (172) */ + export interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum { readonly isSubstrate: boolean; readonly asSubstrate: AccountId32; readonly isEthereum: boolean; @@ -1616,7 +1616,7 @@ readonly isNft: boolean; readonly asNft: Vec; readonly isFungible: boolean; - readonly asFungible: BTreeMap; + readonly asFungible: BTreeMap; readonly isRefungibleMultipleItems: boolean; readonly asRefungibleMultipleItems: Vec; readonly isRefungibleMultipleOwners: boolean; @@ -1628,14 +1628,14 @@ export interface UpDataStructsCreateNftExData extends Struct { readonly constData: Bytes; readonly variableData: Bytes; - readonly owner: PalletCommonAccountBasicCrossAccountIdRepr; + readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; } /** @name UpDataStructsCreateRefungibleExData (189) */ export interface UpDataStructsCreateRefungibleExData extends Struct { readonly constData: Bytes; readonly variableData: Bytes; - readonly users: BTreeMap; + readonly users: BTreeMap; } /** @name PalletTemplateTransactionPaymentCall (192) */ @@ -2068,7 +2068,7 @@ readonly isCollectionSponsorRemoved: boolean; readonly asCollectionSponsorRemoved: u32; readonly isCollectionAdminAdded: boolean; - readonly asCollectionAdminAdded: ITuple<[u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + readonly asCollectionAdminAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>; readonly isCollectionOwnedChanged: boolean; readonly asCollectionOwnedChanged: ITuple<[u32, AccountId32]>; readonly isCollectionSponsorSet: boolean; @@ -2078,11 +2078,11 @@ readonly isSponsorshipConfirmed: boolean; readonly asSponsorshipConfirmed: ITuple<[u32, AccountId32]>; readonly isCollectionAdminRemoved: boolean; - readonly asCollectionAdminRemoved: ITuple<[u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + readonly asCollectionAdminRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>; readonly isAllowListAddressRemoved: boolean; - readonly asAllowListAddressRemoved: ITuple<[u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + readonly asAllowListAddressRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>; readonly isAllowListAddressAdded: boolean; - readonly asAllowListAddressAdded: ITuple<[u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + readonly asAllowListAddressAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>; readonly isCollectionLimitSet: boolean; readonly asCollectionLimitSet: u32; readonly isMintPermissionSet: boolean; @@ -2105,13 +2105,13 @@ readonly isCollectionDestroyed: boolean; readonly asCollectionDestroyed: u32; readonly isItemCreated: boolean; - readonly asItemCreated: ITuple<[u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, u128]>; + readonly asItemCreated: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>; readonly isItemDestroyed: boolean; - readonly asItemDestroyed: ITuple<[u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, u128]>; + readonly asItemDestroyed: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>; readonly isTransfer: boolean; - readonly asTransfer: ITuple<[u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr, u128]>; + readonly asTransfer: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>; readonly isApproved: boolean; - readonly asApproved: ITuple<[u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr, u128]>; + readonly asApproved: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>; readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved'; } @@ -2462,7 +2462,8 @@ readonly isCantApproveMoreThanOwned: boolean; readonly isAddressIsZero: boolean; readonly isUnsupportedOperation: boolean; - readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'TokenVariableDataLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation'; + readonly isNotSufficientFounds: boolean; + readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'TokenVariableDataLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds'; } /** @name PalletFungibleError (299) */ @@ -2490,7 +2491,7 @@ export interface PalletNonfungibleItemData extends Struct { readonly constData: Bytes; readonly variableData: Bytes; - readonly owner: PalletCommonAccountBasicCrossAccountIdRepr; + readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; } /** @name PalletNonfungibleError (306) */ @@ -2643,7 +2644,7 @@ /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (345) */ export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name UniqueRuntimeRuntime (346) */ - export type UniqueRuntimeRuntime = Null; + /** @name OpalRuntimeRuntime (346) */ + export type OpalRuntimeRuntime = Null; } // declare module --- a/tests/src/interfaces/unique/definitions.ts +++ b/tests/src/interfaces/unique/definitions.ts @@ -22,7 +22,7 @@ isOptional?: true; }; -const CROSS_ACCOUNT_ID_TYPE = 'PalletCommonAccountBasicCrossAccountIdRepr'; +const CROSS_ACCOUNT_ID_TYPE = 'PalletEvmAccountBasicCrossAccountIdRepr'; const collectionParam = {name: 'collection', type: 'u32'}; const tokenParam = {name: 'tokenId', type: 'u32'}; @@ -38,8 +38,8 @@ export default { types, rpc: { - adminlist: fun('Get admin list', [collectionParam], 'Vec'), - allowlist: fun('Get allowlist', [collectionParam], 'Vec'), + adminlist: fun('Get admin list', [collectionParam], 'Vec'), + allowlist: fun('Get allowlist', [collectionParam], 'Vec'), accountTokens: fun('Get tokens owned by account', [collectionParam, crossAccountParam()], 'Vec'), collectionTokens: fun('Get tokens contained in collection', [collectionParam], 'Vec'), @@ -56,5 +56,6 @@ collectionStats: fun('Get collection stats', [], 'UpDataStructsCollectionStats'), allowed: fun('Check if user is allowed to use collection', [collectionParam, crossAccountParam()], 'bool'), nextSponsored: fun('Check if user is allowed to use collection', [collectionParam, crossAccountParam(), tokenParam], 'Option'), + effectiveCollectionLimits: fun('Get effective collection limits', [collectionParam], 'Option'), }, }; --- a/tests/src/interfaces/unique/types.ts +++ b/tests/src/interfaces/unique/types.ts @@ -654,6 +654,9 @@ readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } +/** @name OpalRuntimeRuntime */ +export interface OpalRuntimeRuntime extends Null {} + /** @name OrmlVestingModuleCall */ export interface OrmlVestingModuleCall extends Enum { readonly isClaim: boolean; @@ -858,15 +861,6 @@ readonly amount: u128; } -/** @name PalletCommonAccountBasicCrossAccountIdRepr */ -export interface PalletCommonAccountBasicCrossAccountIdRepr extends Enum { - readonly isSubstrate: boolean; - readonly asSubstrate: AccountId32; - readonly isEthereum: boolean; - readonly asEthereum: H160; - readonly type: 'Substrate' | 'Ethereum'; -} - /** @name PalletCommonError */ export interface PalletCommonError extends Enum { readonly isCollectionNotFound: boolean; @@ -892,7 +886,8 @@ readonly isCantApproveMoreThanOwned: boolean; readonly isAddressIsZero: boolean; readonly isUnsupportedOperation: boolean; - readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'TokenVariableDataLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation'; + readonly isNotSufficientFounds: boolean; + readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'TokenVariableDataLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds'; } /** @name PalletCommonEvent */ @@ -902,13 +897,13 @@ readonly isCollectionDestroyed: boolean; readonly asCollectionDestroyed: u32; readonly isItemCreated: boolean; - readonly asItemCreated: ITuple<[u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, u128]>; + readonly asItemCreated: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>; readonly isItemDestroyed: boolean; - readonly asItemDestroyed: ITuple<[u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, u128]>; + readonly asItemDestroyed: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>; readonly isTransfer: boolean; - readonly asTransfer: ITuple<[u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr, u128]>; + readonly asTransfer: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>; readonly isApproved: boolean; - readonly asApproved: ITuple<[u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr, u128]>; + readonly asApproved: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>; readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved'; } @@ -935,6 +930,15 @@ readonly type: 'Executed'; } +/** @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; @@ -1085,7 +1089,7 @@ export interface PalletNonfungibleItemData extends Struct { readonly constData: Bytes; readonly variableData: Bytes; - readonly owner: PalletCommonAccountBasicCrossAccountIdRepr; + readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; } /** @name PalletRefungibleError */ @@ -1259,12 +1263,12 @@ readonly isAddToAllowList: boolean; readonly asAddToAllowList: { readonly collectionId: u32; - readonly address: PalletCommonAccountBasicCrossAccountIdRepr; + readonly address: PalletEvmAccountBasicCrossAccountIdRepr; } & Struct; readonly isRemoveFromAllowList: boolean; readonly asRemoveFromAllowList: { readonly collectionId: u32; - readonly address: PalletCommonAccountBasicCrossAccountIdRepr; + readonly address: PalletEvmAccountBasicCrossAccountIdRepr; } & Struct; readonly isSetPublicAccessMode: boolean; readonly asSetPublicAccessMode: { @@ -1284,12 +1288,12 @@ readonly isAddCollectionAdmin: boolean; readonly asAddCollectionAdmin: { readonly collectionId: u32; - readonly newAdminId: PalletCommonAccountBasicCrossAccountIdRepr; + readonly newAdminId: PalletEvmAccountBasicCrossAccountIdRepr; } & Struct; readonly isRemoveCollectionAdmin: boolean; readonly asRemoveCollectionAdmin: { readonly collectionId: u32; - readonly accountId: PalletCommonAccountBasicCrossAccountIdRepr; + readonly accountId: PalletEvmAccountBasicCrossAccountIdRepr; } & Struct; readonly isSetCollectionSponsor: boolean; readonly asSetCollectionSponsor: { @@ -1307,13 +1311,13 @@ readonly isCreateItem: boolean; readonly asCreateItem: { readonly collectionId: u32; - readonly owner: PalletCommonAccountBasicCrossAccountIdRepr; + readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; readonly data: UpDataStructsCreateItemData; } & Struct; readonly isCreateMultipleItems: boolean; readonly asCreateMultipleItems: { readonly collectionId: u32; - readonly owner: PalletCommonAccountBasicCrossAccountIdRepr; + readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; readonly itemsData: Vec; } & Struct; readonly isCreateMultipleItemsEx: boolean; @@ -1335,28 +1339,28 @@ readonly isBurnFrom: boolean; readonly asBurnFrom: { readonly collectionId: u32; - readonly from: PalletCommonAccountBasicCrossAccountIdRepr; + readonly from: PalletEvmAccountBasicCrossAccountIdRepr; readonly itemId: u32; readonly value: u128; } & Struct; readonly isTransfer: boolean; readonly asTransfer: { - readonly recipient: PalletCommonAccountBasicCrossAccountIdRepr; + readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr; readonly collectionId: u32; readonly itemId: u32; readonly value: u128; } & Struct; readonly isApprove: boolean; readonly asApprove: { - readonly spender: PalletCommonAccountBasicCrossAccountIdRepr; + readonly spender: PalletEvmAccountBasicCrossAccountIdRepr; readonly collectionId: u32; readonly itemId: u32; readonly amount: u128; } & Struct; readonly isTransferFrom: boolean; readonly asTransferFrom: { - readonly from: PalletCommonAccountBasicCrossAccountIdRepr; - readonly recipient: PalletCommonAccountBasicCrossAccountIdRepr; + readonly from: PalletEvmAccountBasicCrossAccountIdRepr; + readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr; readonly collectionId: u32; readonly itemId: u32; readonly value: u128; @@ -1413,7 +1417,7 @@ readonly isCollectionSponsorRemoved: boolean; readonly asCollectionSponsorRemoved: u32; readonly isCollectionAdminAdded: boolean; - readonly asCollectionAdminAdded: ITuple<[u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + readonly asCollectionAdminAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>; readonly isCollectionOwnedChanged: boolean; readonly asCollectionOwnedChanged: ITuple<[u32, AccountId32]>; readonly isCollectionSponsorSet: boolean; @@ -1423,11 +1427,11 @@ readonly isSponsorshipConfirmed: boolean; readonly asSponsorshipConfirmed: ITuple<[u32, AccountId32]>; readonly isCollectionAdminRemoved: boolean; - readonly asCollectionAdminRemoved: ITuple<[u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + readonly asCollectionAdminRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>; readonly isAllowListAddressRemoved: boolean; - readonly asAllowListAddressRemoved: ITuple<[u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + readonly asAllowListAddressRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>; readonly isAllowListAddressAdded: boolean; - readonly asAllowListAddressAdded: ITuple<[u32, PalletCommonAccountBasicCrossAccountIdRepr]>; + readonly asAllowListAddressAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>; readonly isCollectionLimitSet: boolean; readonly asCollectionLimitSet: u32; readonly isMintPermissionSet: boolean; @@ -1722,9 +1726,6 @@ readonly stateVersion: u8; } -/** @name UniqueRuntimeRuntime */ -export interface UniqueRuntimeRuntime extends Null {} - /** @name UpDataStructsAccessMode */ export interface UpDataStructsAccessMode extends Enum { readonly isNormal: boolean; @@ -1816,7 +1817,7 @@ readonly isNft: boolean; readonly asNft: Vec; readonly isFungible: boolean; - readonly asFungible: BTreeMap; + readonly asFungible: BTreeMap; readonly isRefungibleMultipleItems: boolean; readonly asRefungibleMultipleItems: Vec; readonly isRefungibleMultipleOwners: boolean; @@ -1834,7 +1835,7 @@ export interface UpDataStructsCreateNftExData extends Struct { readonly constData: Bytes; readonly variableData: Bytes; - readonly owner: PalletCommonAccountBasicCrossAccountIdRepr; + readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; } /** @name UpDataStructsCreateReFungibleData */ @@ -1848,7 +1849,7 @@ export interface UpDataStructsCreateRefungibleExData extends Struct { readonly constData: Bytes; readonly variableData: Bytes; - readonly users: BTreeMap; + readonly users: BTreeMap; } /** @name UpDataStructsMetaUpdatePermission */ --- a/tests/src/limits.test.ts +++ b/tests/src/limits.test.ts @@ -395,4 +395,73 @@ expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true; //expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore); }); + + it('Effective collection limits', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}}); + + { // Check that limits is undefined + const collection = await api.rpc.unique.collectionById(collectionId); + expect(collection.isSome).to.be.true; + const limits = collection.unwrap().limits; + expect(limits).to.be.any; + + expect(limits.accountTokenOwnershipLimit.toHuman()).to.be.null; + expect(limits.sponsoredDataSize.toHuman()).to.be.null; + expect(limits.sponsoredDataRateLimit.toHuman()).to.be.null; + expect(limits.tokenLimit.toHuman()).to.be.null; + expect(limits.sponsorTransferTimeout.toHuman()).to.be.null; + expect(limits.sponsorApproveTimeout.toHuman()).to.be.null; + expect(limits.ownerCanTransfer.toHuman()).to.be.null; + expect(limits.ownerCanDestroy.toHuman()).to.be.null; + expect(limits.transfersEnabled.toHuman()).to.be.null; + } + + { // Check that limits is undefined for non-existent collection + const limits = await api.rpc.unique.effectiveCollectionLimits(11111); + expect(limits.toHuman()).to.be.null; + } + + { // Check that default values defined for collection limits + const limitsOpt = await api.rpc.unique.effectiveCollectionLimits(collectionId); + expect(limitsOpt.isNone).to.be.false; + const limits = limitsOpt.unwrap(); + + expect(limits.accountTokenOwnershipLimit.toHuman()).to.be.eq('100,000'); + expect(limits.sponsoredDataSize.toHuman()).to.be.eq('2,048'); + expect(limits.sponsoredDataRateLimit.toHuman()).to.be.eq('SponsoringDisabled'); + expect(limits.tokenLimit.toHuman()).to.be.eq('4,294,967,295'); + expect(limits.sponsorTransferTimeout.toHuman()).to.be.eq('5'); + expect(limits.sponsorApproveTimeout.toHuman()).to.be.eq('5'); + expect(limits.ownerCanTransfer.toHuman()).to.be.true; + expect(limits.ownerCanDestroy.toHuman()).to.be.true; + expect(limits.transfersEnabled.toHuman()).to.be.true; + } + + { //Check the values for collection limits + await setCollectionLimitsExpectSuccess(alice, collectionId, { + accountTokenOwnershipLimit: 99_999, + sponsoredDataSize: 1024, + tokenLimit: 123, + transfersEnabled: false, + }); + + const limitsOpt = await api.rpc.unique.effectiveCollectionLimits(collectionId); + expect(limitsOpt.isNone).to.be.false; + const limits = limitsOpt.unwrap(); + + expect(limits.accountTokenOwnershipLimit.toHuman()).to.be.eq('99,999'); + expect(limits.sponsoredDataSize.toHuman()).to.be.eq('1,024'); + expect(limits.sponsoredDataRateLimit.toHuman()).to.be.eq('SponsoringDisabled'); + expect(limits.tokenLimit.toHuman()).to.be.eq('123'); + expect(limits.sponsorTransferTimeout.toHuman()).to.be.eq('5'); + expect(limits.sponsorApproveTimeout.toHuman()).to.be.eq('5'); + expect(limits.ownerCanTransfer.toHuman()).to.be.true; + expect(limits.ownerCanDestroy.toHuman()).to.be.true; + expect(limits.transfersEnabled.toHuman()).to.be.false; + } + }); + }); }); + + --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -344,15 +344,12 @@ // Run the CreateCollection transaction const alicePrivateKey = privateKey('//Alice'); const tx = api.tx.unique.createCollectionEx({name: strToUTF16(name), description: strToUTF16(description), tokenPrefix: strToUTF16(tokenPrefix), mode: modeprm as any}); - const events = await expect(submitTransactionExpectFailAsync(alicePrivateKey, tx)).to.be.rejected; - const result = getCreateCollectionResult(events); + await expect(submitTransactionExpectFailAsync(alicePrivateKey, tx)).to.be.rejected; // Get number of collections after the transaction const collectionCountAfter = await getCreatedCollectionCount(api); // What to expect - // tslint:disable-next-line:no-unused-expression - expect(result.success).to.be.false; expect(collectionCountAfter).to.be.equal(collectionCountBefore, 'Error: Collection with incorrect data created.'); }); } @@ -839,6 +836,13 @@ return balance; } +export async function transferBalanceTo(api: ApiPromise, source: IKeyringPair, target: string, amount = 1000n * UNIQUE) { + const tx = api.tx.balances.transfer(target, amount); + const events = await submitTransactionAsync(source, tx); + const result = getGenericResult(events); + expect(result.success).to.be.true; +} + export async function scheduleTransferExpectSuccess( collectionId: number, -- gitstuff