git.delta.rocks / unique-network / refs/commits / fc74051a1f7a

difftreelog

test fix for updated frontier payment logic

Yaroslav Bolyukin2023-06-05parent: #59b0444.patch.diff
in: master

9 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -181,9 +181,9 @@
 
 [[package]]
 name = "aho-corasick"
-version = "1.0.1"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
 dependencies = [
  "memchr",
 ]
@@ -195,6 +195,12 @@
 checksum = "4436e0292ab1bb631b42973c61205e704475fe8126af845c8d923c0996328127"
 
 [[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
 name = "android_system_properties"
 version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -450,7 +456,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -461,7 +467,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -553,9 +559,9 @@
 
 [[package]]
 name = "base64"
-version = "0.21.1"
+version = "0.21.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f1e31e207a6b8fb791a38ea3105e6cb541f55e4d029902d3039a4ad07cc4105"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
 
 [[package]]
 name = "base64ct"
@@ -575,7 +581,7 @@
 [[package]]
 name = "binary-merkle-tree"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "hash-db 0.16.0",
  "log",
@@ -796,9 +802,9 @@
 
 [[package]]
 name = "bumpalo"
-version = "3.12.2"
+version = "3.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
 
 [[package]]
 name = "byte-slice-cast"
@@ -950,13 +956,13 @@
 
 [[package]]
 name = "chrono"
-version = "0.4.24"
+version = "0.4.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
 dependencies = [
+ "android-tzdata",
  "iana-time-zone",
  "js-sys",
- "num-integer",
  "num-traits",
  "time 0.1.45",
  "wasm-bindgen",
@@ -1026,9 +1032,9 @@
 
 [[package]]
 name = "clap"
-version = "4.3.0"
+version = "4.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc"
+checksum = "b4ed2379f8603fa2b7509891660e802b88c70a79a6427a70abb5968054de2c28"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -1037,9 +1043,9 @@
 
 [[package]]
 name = "clap_builder"
-version = "4.3.0"
+version = "4.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990"
+checksum = "72394f3339a76daf211e57d4bcb374410f3965dcc606dd0e03738c7888766980"
 dependencies = [
  "anstream",
  "anstyle",
@@ -1050,14 +1056,14 @@
 
 [[package]]
 name = "clap_derive"
-version = "4.3.0"
+version = "4.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b"
+checksum = "59e9ef9a08ee1c0e1f2e162121665ac45ac3783b0f897db7244ae75ad9a8f65b"
 dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -1096,9 +1102,9 @@
 
 [[package]]
 name = "comfy-table"
-version = "6.1.4"
+version = "6.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d"
+checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba"
 dependencies = [
  "strum",
  "strum_macros",
@@ -1683,7 +1689,7 @@
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -1959,9 +1965,9 @@
 
 [[package]]
 name = "cxx"
-version = "1.0.94"
+version = "1.0.95"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+checksum = "109308c20e8445959c2792e81871054c6a17e6976489a93d2769641a2ba5839c"
 dependencies = [
  "cc",
  "cxxbridge-flags",
@@ -1971,9 +1977,9 @@
 
 [[package]]
 name = "cxx-build"
-version = "1.0.94"
+version = "1.0.95"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+checksum = "daf4c6755cdf10798b97510e0e2b3edb9573032bd9379de8fffa59d68165494f"
 dependencies = [
  "cc",
  "codespan-reporting",
@@ -1981,24 +1987,24 @@
  "proc-macro2",
  "quote",
  "scratch",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "cxxbridge-flags"
-version = "1.0.94"
+version = "1.0.95"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+checksum = "882074421238e84fe3b4c65d0081de34e5b323bf64555d3e61991f76eb64a7bb"
 
 [[package]]
 name = "cxxbridge-macro"
-version = "1.0.94"
+version = "1.0.95"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+checksum = "4a076022ece33e7686fb76513518e219cca4fce5750a8ae6d1ce6c0f48fd1af9"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -2262,7 +2268,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -2449,7 +2455,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -2460,7 +2466,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -2719,7 +2725,7 @@
  "fs-err",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -2771,7 +2777,7 @@
 [[package]]
 name = "fc-consensus"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "async-trait",
  "fc-db",
@@ -2788,7 +2794,7 @@
 [[package]]
 name = "fc-db"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "fp-storage",
  "kvdb-rocksdb",
@@ -2807,7 +2813,7 @@
 [[package]]
 name = "fc-mapping-sync"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "fc-db",
  "fc-storage",
@@ -2828,7 +2834,7 @@
 [[package]]
 name = "fc-rpc"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -2877,7 +2883,7 @@
 [[package]]
 name = "fc-rpc-core"
 version = "1.1.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -2890,7 +2896,7 @@
 [[package]]
 name = "fc-storage"
 version = "1.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -3025,16 +3031,16 @@
 [[package]]
 name = "fork-tree"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
 ]
 
 [[package]]
 name = "form_urlencoded"
-version = "1.1.0"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
 dependencies = [
  "percent-encoding",
 ]
@@ -3042,7 +3048,7 @@
 [[package]]
 name = "fp-account"
 version = "1.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "hex",
  "impl-serde",
@@ -3060,7 +3066,7 @@
 [[package]]
 name = "fp-consensus"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "ethereum",
  "parity-scale-codec",
@@ -3072,7 +3078,7 @@
 [[package]]
 name = "fp-ethereum"
 version = "1.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -3086,7 +3092,7 @@
 [[package]]
 name = "fp-evm"
 version = "3.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "evm",
  "frame-support",
@@ -3102,7 +3108,7 @@
 [[package]]
 name = "fp-rpc"
 version = "3.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -3119,7 +3125,7 @@
 [[package]]
 name = "fp-self-contained"
 version = "1.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "frame-support",
  "parity-scale-codec",
@@ -3131,7 +3137,7 @@
 [[package]]
 name = "fp-storage"
 version = "2.0.0"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -3146,7 +3152,7 @@
 [[package]]
 name = "frame-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-support-procedural",
@@ -3171,7 +3177,7 @@
 [[package]]
 name = "frame-benchmarking-cli"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "Inflector",
  "array-bytes 4.2.0",
@@ -3218,18 +3224,18 @@
 [[package]]
 name = "frame-election-provider-solution-type"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "frame-election-provider-support"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-election-provider-solution-type",
  "frame-support",
@@ -3246,7 +3252,7 @@
 [[package]]
 name = "frame-executive"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3275,7 +3281,7 @@
 [[package]]
 name = "frame-remote-externalities"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-recursion",
  "futures",
@@ -3293,7 +3299,7 @@
 [[package]]
 name = "frame-support"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "bitflags",
  "environmental",
@@ -3326,7 +3332,7 @@
 [[package]]
 name = "frame-support-procedural"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "Inflector",
  "cfg-expr",
@@ -3336,35 +3342,35 @@
  "proc-macro-warning",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "frame-support-procedural-tools"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support-procedural-tools-derive",
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "frame-support-procedural-tools-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "frame-system"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "log",
@@ -3382,7 +3388,7 @@
 [[package]]
 name = "frame-system-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3397,7 +3403,7 @@
 [[package]]
 name = "frame-system-rpc-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -3406,7 +3412,7 @@
 [[package]]
 name = "frame-try-runtime"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "parity-scale-codec",
@@ -3433,9 +3439,9 @@
 
 [[package]]
 name = "fs4"
-version = "0.6.4"
+version = "0.6.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7f5b6908aecca5812a4569056285e58c666588c9573ee59765bf1d3692699e2"
+checksum = "7672706608ecb74ab2e055c68327ffc25ae4cac1e12349204fd5fb0f3487cce2"
 dependencies = [
  "rustix 0.37.19",
  "windows-sys 0.48.0",
@@ -3519,7 +3525,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -4010,9 +4016,9 @@
 
 [[package]]
 name = "idna"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
 dependencies = [
  "unicode-bidi",
  "unicode-normalization",
@@ -4150,9 +4156,9 @@
 
 [[package]]
 name = "io-lifetimes"
-version = "1.0.10"
+version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
 dependencies = [
  "hermit-abi 0.3.1",
  "libc",
@@ -4553,9 +4559,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.144"
+version = "0.2.145"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+checksum = "fc86cde3ff845662b8f4ef6cb50ea0e20c524eb3d29ae048287e06a1b3fa6a81"
 
 [[package]]
 name = "libloading"
@@ -5163,12 +5169,9 @@
 
 [[package]]
 name = "log"
-version = "0.4.17"
+version = "0.4.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-dependencies = [
- "cfg-if",
-]
+checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
 
 [[package]]
 name = "lru"
@@ -5372,20 +5375,19 @@
 
 [[package]]
 name = "mio"
-version = "0.8.6"
+version = "0.8.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
 dependencies = [
  "libc",
- "log",
  "wasi 0.11.0+wasi-snapshot-preview1",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "mmr-gadget"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "log",
@@ -5404,7 +5406,7 @@
 [[package]]
 name = "mmr-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "anyhow",
  "jsonrpsee",
@@ -5829,9 +5831,9 @@
 
 [[package]]
 name = "once_cell"
-version = "1.17.1"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
 
 [[package]]
 name = "opal-runtime"
@@ -6151,7 +6153,7 @@
 [[package]]
 name = "pallet-aura"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6167,7 +6169,7 @@
 [[package]]
 name = "pallet-authority-discovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6183,7 +6185,7 @@
 [[package]]
 name = "pallet-authorship"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6197,7 +6199,7 @@
 [[package]]
 name = "pallet-babe"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6221,7 +6223,7 @@
 [[package]]
 name = "pallet-bags-list"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6241,7 +6243,7 @@
 [[package]]
 name = "pallet-balances"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6277,7 +6279,7 @@
 [[package]]
 name = "pallet-base-fee"
 version = "1.0.0"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "fp-evm",
  "frame-support",
@@ -6291,7 +6293,7 @@
 [[package]]
 name = "pallet-beefy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6310,7 +6312,7 @@
 [[package]]
 name = "pallet-beefy-mmr"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "binary-merkle-tree",
@@ -6334,7 +6336,7 @@
 [[package]]
 name = "pallet-bounties"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6352,7 +6354,7 @@
 [[package]]
 name = "pallet-child-bounties"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6398,7 +6400,7 @@
 [[package]]
 name = "pallet-collective"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6452,7 +6454,7 @@
 [[package]]
 name = "pallet-conviction-voting"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "assert_matches",
  "frame-benchmarking",
@@ -6469,7 +6471,7 @@
 [[package]]
 name = "pallet-democracy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6487,7 +6489,7 @@
 [[package]]
 name = "pallet-election-provider-multi-phase"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6510,7 +6512,7 @@
 [[package]]
 name = "pallet-election-provider-support-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6523,7 +6525,7 @@
 [[package]]
 name = "pallet-elections-phragmen"
 version = "5.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6541,7 +6543,7 @@
 [[package]]
 name = "pallet-ethereum"
 version = "4.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -6564,7 +6566,7 @@
 [[package]]
 name = "pallet-evm"
 version = "6.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "environmental",
  "evm",
@@ -6643,7 +6645,7 @@
 [[package]]
 name = "pallet-evm-precompile-simple"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#75ad5b9a49e1942553c4068228f1546ffb1f7246"
+source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.42#4f7a610defd7623aa147d83c83cbc42f907ce8bb"
 dependencies = [
  "fp-evm",
  "ripemd",
@@ -6669,7 +6671,7 @@
 [[package]]
 name = "pallet-fast-unstake"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6729,7 +6731,7 @@
 [[package]]
 name = "pallet-grandpa"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6769,7 +6771,7 @@
 [[package]]
 name = "pallet-identity"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "enumflags2",
  "frame-benchmarking",
@@ -6785,7 +6787,7 @@
 [[package]]
 name = "pallet-im-online"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6805,7 +6807,7 @@
 [[package]]
 name = "pallet-indices"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6851,7 +6853,7 @@
 [[package]]
 name = "pallet-membership"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6868,7 +6870,7 @@
 [[package]]
 name = "pallet-mmr"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6885,7 +6887,7 @@
 [[package]]
 name = "pallet-multisig"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6901,7 +6903,7 @@
 [[package]]
 name = "pallet-nis"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6917,7 +6919,7 @@
 [[package]]
 name = "pallet-nomination-pools"
 version = "1.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6934,7 +6936,7 @@
 [[package]]
 name = "pallet-nomination-pools-benchmarking"
 version = "1.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6954,7 +6956,7 @@
 [[package]]
 name = "pallet-nomination-pools-runtime-api"
 version = "1.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "pallet-nomination-pools",
  "parity-scale-codec",
@@ -6986,7 +6988,7 @@
 [[package]]
 name = "pallet-offences"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -7003,7 +7005,7 @@
 [[package]]
 name = "pallet-offences-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -7027,7 +7029,7 @@
 [[package]]
 name = "pallet-preimage"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7044,7 +7046,7 @@
 [[package]]
 name = "pallet-proxy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7059,7 +7061,7 @@
 [[package]]
 name = "pallet-ranked-collective"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7077,7 +7079,7 @@
 [[package]]
 name = "pallet-recovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7092,7 +7094,7 @@
 [[package]]
 name = "pallet-referenda"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "assert_matches",
  "frame-benchmarking",
@@ -7131,7 +7133,7 @@
 [[package]]
 name = "pallet-scheduler"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7148,7 +7150,7 @@
 [[package]]
 name = "pallet-session"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -7169,7 +7171,7 @@
 [[package]]
 name = "pallet-session-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7185,7 +7187,7 @@
 [[package]]
 name = "pallet-society"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -7199,7 +7201,7 @@
 [[package]]
 name = "pallet-staking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -7222,18 +7224,18 @@
 [[package]]
 name = "pallet-staking-reward-curve"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "pallet-staking-reward-fn"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "log",
  "sp-arithmetic",
@@ -7242,7 +7244,7 @@
 [[package]]
 name = "pallet-staking-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -7251,7 +7253,7 @@
 [[package]]
 name = "pallet-state-trie-migration"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7284,7 +7286,7 @@
 [[package]]
 name = "pallet-sudo"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -7330,7 +7332,7 @@
 [[package]]
 name = "pallet-timestamp"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7348,7 +7350,7 @@
 [[package]]
 name = "pallet-tips"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7367,7 +7369,7 @@
 [[package]]
 name = "pallet-transaction-payment"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -7383,7 +7385,7 @@
 [[package]]
 name = "pallet-transaction-payment-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "jsonrpsee",
  "pallet-transaction-payment-rpc-runtime-api",
@@ -7399,7 +7401,7 @@
 [[package]]
 name = "pallet-transaction-payment-rpc-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "pallet-transaction-payment",
  "parity-scale-codec",
@@ -7411,7 +7413,7 @@
 [[package]]
 name = "pallet-treasury"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7470,7 +7472,7 @@
 [[package]]
 name = "pallet-utility"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7486,7 +7488,7 @@
 [[package]]
 name = "pallet-vesting"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7501,7 +7503,7 @@
 [[package]]
 name = "pallet-whitelist"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -7728,9 +7730,9 @@
 
 [[package]]
 name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
 
 [[package]]
 name = "pest"
@@ -7762,7 +7764,7 @@
  "pest_meta",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -7803,7 +7805,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -9211,14 +9213,14 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.58"
+version = "1.0.59"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8"
+checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
 dependencies = [
  "unicode-ident",
 ]
@@ -9483,9 +9485,9 @@
 
 [[package]]
 name = "quote"
-version = "1.0.27"
+version = "1.0.28"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
 dependencies = [
  "proc-macro2",
 ]
@@ -9688,7 +9690,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -9705,13 +9707,13 @@
 
 [[package]]
 name = "regex"
-version = "1.8.1"
+version = "1.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
 dependencies = [
- "aho-corasick 1.0.1",
+ "aho-corasick 1.0.2",
  "memchr",
- "regex-syntax 0.7.1",
+ "regex-syntax 0.7.2",
 ]
 
 [[package]]
@@ -9731,9 +9733,9 @@
 
 [[package]]
 name = "regex-syntax"
-version = "0.7.1"
+version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
 
 [[package]]
 name = "region"
@@ -10102,7 +10104,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
 dependencies = [
- "base64 0.21.1",
+ "base64 0.21.2",
 ]
 
 [[package]]
@@ -10149,7 +10151,7 @@
 [[package]]
 name = "sc-allocator"
 version = "4.1.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "log",
  "sp-core",
@@ -10160,7 +10162,7 @@
 [[package]]
 name = "sc-authority-discovery"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "futures",
@@ -10188,7 +10190,7 @@
 [[package]]
 name = "sc-basic-authorship"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "futures-timer",
@@ -10211,7 +10213,7 @@
 [[package]]
 name = "sc-block-builder"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "sc-client-api",
@@ -10226,7 +10228,7 @@
 [[package]]
 name = "sc-chain-spec"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "memmap2",
  "sc-chain-spec-derive",
@@ -10245,18 +10247,18 @@
 [[package]]
 name = "sc-chain-spec-derive"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "sc-cli"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "chrono",
@@ -10296,7 +10298,7 @@
 [[package]]
 name = "sc-client-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "fnv",
  "futures",
@@ -10322,7 +10324,7 @@
 [[package]]
 name = "sc-client-db"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "hash-db 0.16.0",
  "kvdb",
@@ -10348,7 +10350,7 @@
 [[package]]
 name = "sc-consensus"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "futures",
@@ -10373,7 +10375,7 @@
 [[package]]
 name = "sc-consensus-aura"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "futures",
@@ -10402,7 +10404,7 @@
 [[package]]
 name = "sc-consensus-babe"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "fork-tree",
@@ -10438,7 +10440,7 @@
 [[package]]
 name = "sc-consensus-babe-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "jsonrpsee",
@@ -10460,7 +10462,7 @@
 [[package]]
 name = "sc-consensus-beefy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "async-trait",
@@ -10495,7 +10497,7 @@
 [[package]]
 name = "sc-consensus-beefy-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "jsonrpsee",
@@ -10514,7 +10516,7 @@
 [[package]]
 name = "sc-consensus-epochs"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "fork-tree",
  "parity-scale-codec",
@@ -10527,7 +10529,7 @@
 [[package]]
 name = "sc-consensus-grandpa"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "ahash 0.8.3",
  "array-bytes 4.2.0",
@@ -10567,7 +10569,7 @@
 [[package]]
 name = "sc-consensus-grandpa-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "finality-grandpa",
  "futures",
@@ -10587,7 +10589,7 @@
 [[package]]
 name = "sc-consensus-manual-seal"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "assert_matches",
  "async-trait",
@@ -10621,7 +10623,7 @@
 [[package]]
 name = "sc-consensus-slots"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "futures",
@@ -10644,7 +10646,7 @@
 [[package]]
 name = "sc-executor"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "lru 0.8.1",
  "parity-scale-codec",
@@ -10668,7 +10670,7 @@
 [[package]]
 name = "sc-executor-common"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "sc-allocator",
  "sp-maybe-compressed-blob",
@@ -10681,7 +10683,7 @@
 [[package]]
 name = "sc-executor-wasmi"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "log",
  "sc-allocator",
@@ -10694,7 +10696,7 @@
 [[package]]
 name = "sc-executor-wasmtime"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "anyhow",
  "cfg-if",
@@ -10712,7 +10714,7 @@
 [[package]]
 name = "sc-informant"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "ansi_term",
  "futures",
@@ -10728,7 +10730,7 @@
 [[package]]
 name = "sc-keystore"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "async-trait",
@@ -10743,7 +10745,7 @@
 [[package]]
 name = "sc-network"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "async-channel",
@@ -10788,7 +10790,7 @@
 [[package]]
 name = "sc-network-bitswap"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "cid",
  "futures",
@@ -10808,7 +10810,7 @@
 [[package]]
 name = "sc-network-common"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "async-trait",
@@ -10836,7 +10838,7 @@
 [[package]]
 name = "sc-network-gossip"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "ahash 0.8.3",
  "futures",
@@ -10855,7 +10857,7 @@
 [[package]]
 name = "sc-network-light"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "futures",
@@ -10877,7 +10879,7 @@
 [[package]]
 name = "sc-network-sync"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "async-trait",
@@ -10911,7 +10913,7 @@
 [[package]]
 name = "sc-network-transactions"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "futures",
@@ -10931,7 +10933,7 @@
 [[package]]
 name = "sc-offchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "bytes",
@@ -10962,7 +10964,7 @@
 [[package]]
 name = "sc-peerset"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "libp2p",
@@ -10975,7 +10977,7 @@
 [[package]]
 name = "sc-proposer-metrics"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "log",
  "substrate-prometheus-endpoint",
@@ -10984,7 +10986,7 @@
 [[package]]
 name = "sc-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "jsonrpsee",
@@ -11014,7 +11016,7 @@
 [[package]]
 name = "sc-rpc-api"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "jsonrpsee",
  "parity-scale-codec",
@@ -11033,7 +11035,7 @@
 [[package]]
 name = "sc-rpc-server"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "http",
  "jsonrpsee",
@@ -11048,7 +11050,7 @@
 [[package]]
 name = "sc-rpc-spec-v2"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "futures",
@@ -11074,7 +11076,7 @@
 [[package]]
 name = "sc-service"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "directories",
@@ -11140,7 +11142,7 @@
 [[package]]
 name = "sc-state-db"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -11151,7 +11153,7 @@
 [[package]]
 name = "sc-storage-monitor"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "clap",
  "fs4",
@@ -11167,7 +11169,7 @@
 [[package]]
 name = "sc-sync-state-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "jsonrpsee",
  "parity-scale-codec",
@@ -11186,7 +11188,7 @@
 [[package]]
 name = "sc-sysinfo"
 version = "6.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "libc",
@@ -11205,7 +11207,7 @@
 [[package]]
 name = "sc-telemetry"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "chrono",
  "futures",
@@ -11224,7 +11226,7 @@
 [[package]]
 name = "sc-tracing"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "ansi_term",
  "atty",
@@ -11255,18 +11257,18 @@
 [[package]]
 name = "sc-tracing-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "sc-transaction-pool"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "futures",
@@ -11293,7 +11295,7 @@
 [[package]]
 name = "sc-transaction-pool-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "futures",
@@ -11307,7 +11309,7 @@
 [[package]]
 name = "sc-utils"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-channel",
  "futures",
@@ -11546,7 +11548,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -11816,7 +11818,7 @@
 [[package]]
 name = "sp-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "hash-db 0.16.0",
  "log",
@@ -11836,7 +11838,7 @@
 [[package]]
 name = "sp-api-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "Inflector",
  "blake2",
@@ -11844,13 +11846,13 @@
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "sp-application-crypto"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
@@ -11863,7 +11865,7 @@
 [[package]]
 name = "sp-arithmetic"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "integer-sqrt",
  "num-traits",
@@ -11877,7 +11879,7 @@
 [[package]]
 name = "sp-authority-discovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
@@ -11890,7 +11892,7 @@
 [[package]]
 name = "sp-block-builder"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -11902,7 +11904,7 @@
 [[package]]
 name = "sp-blockchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "log",
@@ -11920,7 +11922,7 @@
 [[package]]
 name = "sp-consensus"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "futures",
@@ -11935,7 +11937,7 @@
 [[package]]
 name = "sp-consensus-aura"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "parity-scale-codec",
@@ -11953,7 +11955,7 @@
 [[package]]
 name = "sp-consensus-babe"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "parity-scale-codec",
@@ -11974,7 +11976,7 @@
 [[package]]
 name = "sp-consensus-beefy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "lazy_static",
  "parity-scale-codec",
@@ -11993,7 +11995,7 @@
 [[package]]
 name = "sp-consensus-grandpa"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "finality-grandpa",
  "log",
@@ -12011,7 +12013,7 @@
 [[package]]
 name = "sp-consensus-slots"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
@@ -12023,7 +12025,7 @@
 [[package]]
 name = "sp-core"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "array-bytes 4.2.0",
  "bitflags",
@@ -12067,7 +12069,7 @@
 [[package]]
 name = "sp-core-hashing"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "blake2b_simd",
  "byteorder",
@@ -12081,18 +12083,18 @@
 [[package]]
 name = "sp-core-hashing-proc-macro"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "proc-macro2",
  "quote",
  "sp-core-hashing",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "sp-database"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "kvdb",
  "parking_lot 0.12.1",
@@ -12101,17 +12103,17 @@
 [[package]]
 name = "sp-debug-derive"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "sp-externalities"
 version = "0.13.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "environmental",
  "parity-scale-codec",
@@ -12122,7 +12124,7 @@
 [[package]]
 name = "sp-inherents"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "impl-trait-for-tuples",
@@ -12137,7 +12139,7 @@
 [[package]]
 name = "sp-io"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "bytes",
  "ed25519",
@@ -12163,7 +12165,7 @@
 [[package]]
 name = "sp-keyring"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "lazy_static",
  "sp-core",
@@ -12174,7 +12176,7 @@
 [[package]]
 name = "sp-keystore"
 version = "0.13.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "parity-scale-codec",
@@ -12188,7 +12190,7 @@
 [[package]]
 name = "sp-maybe-compressed-blob"
 version = "4.1.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "thiserror",
  "zstd 0.12.3+zstd.1.5.2",
@@ -12197,7 +12199,7 @@
 [[package]]
 name = "sp-metadata-ir"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-metadata",
  "parity-scale-codec",
@@ -12208,7 +12210,7 @@
 [[package]]
 name = "sp-mmr-primitives"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "ckb-merkle-mountain-range",
  "log",
@@ -12226,7 +12228,7 @@
 [[package]]
 name = "sp-npos-elections"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
@@ -12240,7 +12242,7 @@
 [[package]]
 name = "sp-offchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "sp-api",
  "sp-core",
@@ -12250,7 +12252,7 @@
 [[package]]
 name = "sp-panic-handler"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "backtrace",
  "lazy_static",
@@ -12260,7 +12262,7 @@
 [[package]]
 name = "sp-rpc"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "rustc-hash",
  "serde",
@@ -12270,7 +12272,7 @@
 [[package]]
 name = "sp-runtime"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "either",
  "hash256-std-hasher",
@@ -12292,7 +12294,7 @@
 [[package]]
 name = "sp-runtime-interface"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "bytes",
  "impl-trait-for-tuples",
@@ -12310,19 +12312,19 @@
 [[package]]
 name = "sp-runtime-interface-proc-macro"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "Inflector",
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "sp-session"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
@@ -12336,7 +12338,7 @@
 [[package]]
 name = "sp-staking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
@@ -12349,7 +12351,7 @@
 [[package]]
 name = "sp-state-machine"
 version = "0.13.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "hash-db 0.16.0",
  "log",
@@ -12369,12 +12371,12 @@
 [[package]]
 name = "sp-std"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 
 [[package]]
 name = "sp-storage"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "impl-serde",
  "parity-scale-codec",
@@ -12387,7 +12389,7 @@
 [[package]]
 name = "sp-timestamp"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "futures-timer",
@@ -12402,7 +12404,7 @@
 [[package]]
 name = "sp-tracing"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "sp-std",
@@ -12414,7 +12416,7 @@
 [[package]]
 name = "sp-transaction-pool"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "sp-api",
  "sp-runtime",
@@ -12423,7 +12425,7 @@
 [[package]]
 name = "sp-transaction-storage-proof"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "log",
@@ -12439,7 +12441,7 @@
 [[package]]
 name = "sp-trie"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "ahash 0.8.3",
  "hash-db 0.16.0",
@@ -12462,7 +12464,7 @@
 [[package]]
 name = "sp-version"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "impl-serde",
  "parity-scale-codec",
@@ -12479,18 +12481,18 @@
 [[package]]
 name = "sp-version-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "sp-wasm-interface"
 version = "7.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "anyhow",
  "impl-trait-for-tuples",
@@ -12504,7 +12506,7 @@
 [[package]]
 name = "sp-weights"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
@@ -12524,7 +12526,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -12704,7 +12706,7 @@
 [[package]]
 name = "substrate-build-script-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "platforms 2.0.0",
 ]
@@ -12712,7 +12714,7 @@
 [[package]]
 name = "substrate-frame-rpc-system"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "frame-system-rpc-runtime-api",
  "futures",
@@ -12731,7 +12733,7 @@
 [[package]]
 name = "substrate-prometheus-endpoint"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "hyper",
  "log",
@@ -12743,7 +12745,7 @@
 [[package]]
 name = "substrate-rpc-client"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "jsonrpsee",
@@ -12756,7 +12758,7 @@
 [[package]]
 name = "substrate-state-trie-migration-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "jsonrpsee",
  "log",
@@ -12775,7 +12777,7 @@
 [[package]]
 name = "substrate-test-utils"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "futures",
  "substrate-test-utils-derive",
@@ -12785,18 +12787,18 @@
 [[package]]
 name = "substrate-test-utils-derive"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
 name = "substrate-wasm-builder"
 version = "5.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "ansi_term",
  "build-helper",
@@ -12838,9 +12840,9 @@
 
 [[package]]
 name = "syn"
-version = "2.0.16"
+version = "2.0.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
+checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -12969,7 +12971,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -13124,9 +13126,9 @@
 
 [[package]]
 name = "tokio"
-version = "1.28.1"
+version = "1.28.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
+checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2"
 dependencies = [
  "autocfg",
  "bytes",
@@ -13149,7 +13151,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -13222,9 +13224,9 @@
 
 [[package]]
 name = "toml_edit"
-version = "0.19.9"
+version = "0.19.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92d964908cec0d030b812013af25a0e57fddfadb1e066ecc6681d86253129d4f"
+checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739"
 dependencies = [
  "indexmap",
  "serde",
@@ -13295,7 +13297,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -13338,7 +13340,7 @@
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -13484,7 +13486,7 @@
 [[package]]
 name = "try-runtime-cli"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#3bb3882ce094ac211dea93fabfdcd4f902f5a7fd"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b"
 dependencies = [
  "async-trait",
  "clap",
@@ -13621,9 +13623,9 @@
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
 
 [[package]]
 name = "unicode-normalization"
@@ -13962,12 +13964,12 @@
 
 [[package]]
 name = "url"
-version = "2.3.1"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
 dependencies = [
  "form_urlencoded",
- "idna 0.3.0",
+ "idna 0.4.0",
  "percent-encoding",
 ]
 
@@ -14084,7 +14086,7 @@
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
  "wasm-bindgen-shared",
 ]
 
@@ -14118,7 +14120,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -15179,7 +15181,7 @@
  "Inflector",
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
@@ -15222,7 +15224,7 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.16",
+ "syn 2.0.18",
 ]
 
 [[package]]
modifiedtests/src/eth/collectionSponsoring.test.tsdiffbeforeafterboth
before · tests/src/eth/collectionSponsoring.test.ts
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {IKeyringPair} from '@polkadot/types/types';18import {Pallets, requirePalletsOrSkip, usingPlaygrounds} from '../util/index';19import {itEth, expect} from './util';2021describe('evm nft collection sponsoring', () => {22  let donor: IKeyringPair;23  let alice: IKeyringPair;24  let nominal: bigint;2526  before(async () => {27    await usingPlaygrounds(async (helper, privateKey) => {28      donor = await privateKey({url: import.meta.url});29      [alice] = await helper.arrange.createAccounts([100n], donor);30      nominal = helper.balance.getOneTokenNominal();31    });32  });3334  // TODO: move to substrate tests35  itEth('sponsors mint transactions', async ({helper}) => {36    const collection = await helper.nft.mintCollection(alice, {tokenPrefix: 'spnr', permissions: {mintMode: true}});37    await collection.setSponsor(alice, alice.address);38    await collection.confirmSponsorship(alice);3940    const minter = helper.eth.createAccount();41    expect(await helper.balance.getEthereum(minter)).to.equal(0n);4243    const collectionAddress = helper.ethAddress.fromCollectionId(collection.collectionId);44    const contract = await helper.ethNativeContract.collection(collectionAddress, 'nft', minter);4546    await collection.addToAllowList(alice, {Ethereum: minter});4748    const result = await contract.methods.mint(minter).send();4950    const events = helper.eth.normalizeEvents(result.events);51    expect(events).to.be.deep.equal([52      {53        address: collectionAddress,54        event: 'Transfer',55        args: {56          from: '0x0000000000000000000000000000000000000000',57          to: minter,58          tokenId: '1',59        },60      },61    ]);62  });6364  // TODO: Temprorary off. Need refactor65  // itWeb3('Set substrate sponsor', async ({api, web3, privateKeyWrapper}) => {66  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);67  //   const collectionHelpers = evmCollectionHelpers(web3, owner);68  //   let result = await collectionHelpers.methods.createNFTCollection('Sponsor collection', '1', '1').send();69  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);70  //   const sponsor = privateKeyWrapper('//Alice');71  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);7273  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;74  //   result = await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});75  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;7677  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);78  //   await submitTransactionAsync(sponsor, confirmTx);79  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;8081  //   const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});82  //   expect(bigIntToSub(api, BigInt(sponsorTuple[1]))).to.be.eq(sponsor.address);83  // });8485  [86    'setCollectionSponsorCross',87    'setCollectionSponsor', // Soft-deprecated88  ].map(testCase =>89    itEth(`[${testCase}] can remove collection sponsor`, async ({helper}) => {90      const owner = await helper.eth.createAccountWithBalance(donor);91      const collectionHelpers = await helper.ethNativeContract.collectionHelpers(owner);9293      let result = await collectionHelpers.methods.createNFTCollection('Sponsor collection', '1', '1').send({value: Number(2n * nominal)});94      const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);95      const sponsor = await helper.eth.createAccountWithBalance(donor);96      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);97      const collectionEvm = await helper.ethNativeContract.collection(collectionIdAddress, 'nft', owner, testCase === 'setCollectionSponsor');9899      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;100      result = await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsor : sponsorCross).send({from: owner});101      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;102103      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});104      let sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});105      expect(helper.address.restoreCrossAccountFromBigInt(BigInt(sponsorStruct.sub))).to.be.eq(helper.address.ethToSubstrate(sponsor, true));106      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;107108      await collectionEvm.methods.removeCollectionSponsor().send({from: owner});109110      sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});111      expect(sponsorStruct.eth).to.be.eq('0x0000000000000000000000000000000000000000');112    }));113114  [115    'setCollectionSponsorCross',116    'setCollectionSponsor', // Soft-deprecated117  ].map(testCase =>118    itEth(`[${testCase}] Can sponsor from evm address via access list`, async ({helper}) => {119      const owner = await helper.eth.createAccountWithBalance(donor);120      const sponsorEth = await helper.eth.createAccountWithBalance(donor);121      const sponsorCrossEth = helper.ethCrossAccount.fromAddress(sponsorEth);122123      const {collectionId, collectionAddress} = await helper.eth.createERC721MetadataCompatibleNFTCollection(owner, 'Sponsor collection', '1', '1', '');124125      const collectionSub = helper.nft.getCollectionObject(collectionId);126      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner, testCase === 'setCollectionSponsor');127128      // Set collection sponsor:129      await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsorEth : sponsorCrossEth).send({from: owner});130      let sponsorship = (await collectionSub.getData())!.raw.sponsorship;131      expect(sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsorEth, true));132      // Account cannot confirm sponsorship if it is not set as a sponsor133      await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');134135      // Sponsor can confirm sponsorship:136      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsorEth});137      sponsorship = (await collectionSub.getData())!.raw.sponsorship;138      expect(sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsorEth, true));139140      // Create user with no balance:141      const user = helper.eth.createAccount();142      const userCross = helper.ethCrossAccount.fromAddress(user);143      const nextTokenId = await collectionEvm.methods.nextTokenId().call();144      expect(nextTokenId).to.be.equal('1');145146      // Set collection permissions:147      const oldPermissions = (await collectionSub.getData())!.raw.permissions;148      expect(oldPermissions.mintMode).to.be.false;149      expect(oldPermissions.access).to.be.equal('Normal');150151      await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});152      await collectionEvm.methods.addToCollectionAllowListCross(userCross).send({from: owner});153      await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});154155      const newPermissions = (await collectionSub.getData())!.raw.permissions;156      expect(newPermissions.mintMode).to.be.true;157      expect(newPermissions.access).to.be.equal('AllowList');158159      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));160      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));161      const userBalanceBefore =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));162163      // User can mint token without balance:164      {165        const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});166        const event = helper.eth.normalizeEvents(result.events)167          .find(event => event.event === 'Transfer');168169        expect(event).to.be.deep.equal({170          address: collectionAddress,171          event: 'Transfer',172          args: {173            from: '0x0000000000000000000000000000000000000000',174            to: user,175            tokenId: '1',176          },177        });178179        const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));180        const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));181        const userBalanceAfter =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));182183        expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');184        expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);185        expect(userBalanceAfter).to.be.eq(userBalanceBefore);186        expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;187      }188    }));189190  // TODO: Temprorary off. Need refactor191  // itWeb3('Sponsoring collection from substrate address via access list', async ({api, web3, privateKeyWrapper}) => {192  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);193  //   const collectionHelpers = evmCollectionHelpers(web3, owner);194  //   const result = await collectionHelpers.methods.createERC721MetadataCompatibleNFTCollection('Sponsor collection', '1', '1', '').send();195  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);196  //   const sponsor = privateKeyWrapper('//Alice');197  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);198199  //   await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});200201  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);202  //   await submitTransactionAsync(sponsor, confirmTx);203204  //   const user = createEthAccount(web3);205  //   const nextTokenId = await collectionEvm.methods.nextTokenId().call();206  //   expect(nextTokenId).to.be.equal('1');207208  //   await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});209  //   await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});210  //   await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});211212  //   const ownerBalanceBefore = await ethBalanceViaSub(api, owner);213  //   const sponsorBalanceBefore = (await getBalance(api, [sponsor.address]))[0];214215  //   {216  //     const nextTokenId = await collectionEvm.methods.nextTokenId().call();217  //     expect(nextTokenId).to.be.equal('1');218  //     const result = await collectionEvm.methods.mintWithTokenURI(219  //       user,220  //       nextTokenId,221  //       'Test URI',222  //     ).send({from: user});223  //     const events = normalizeEvents(result.events);224225  //     expect(events).to.be.deep.equal([226  //       {227  //         address: collectionIdAddress,228  //         event: 'Transfer',229  //         args: {230  //           from: '0x0000000000000000000000000000000000000000',231  //           to: user,232  //           tokenId: nextTokenId,233  //         },234  //       },235  //     ]);236237  //     const ownerBalanceAfter = await ethBalanceViaSub(api, owner);238  //     const sponsorBalanceAfter = (await getBalance(api, [sponsor.address]))[0];239240  //     expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');241  //     expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);242  //     expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;243  //   }244  // });245246  [247    'setCollectionSponsorCross',248    'setCollectionSponsor', // Soft-deprecated249  ].map(testCase =>250    itEth(`[${testCase}] Check that transaction via EVM spend money from sponsor address`, async ({helper}) => {251      const owner = await helper.eth.createAccountWithBalance(donor);252      const sponsor = await helper.eth.createAccountWithBalance(donor);253      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);254255      const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleNFTCollection(owner,'Sponsor collection', '1', '1', '');256257      const collectionSub = helper.nft.getCollectionObject(collectionId);258      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner, testCase === 'setCollectionSponsor');259      // Set collection sponsor:260      await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsor : sponsorCross).send();261      let collectionData = (await collectionSub.getData())!;262      expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsor, true));263      await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');264265      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});266      collectionData = (await collectionSub.getData())!;267      expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsor, true));268269      const user = helper.eth.createAccount();270      const userCross = helper.ethCrossAccount.fromAddress(user);271      await collectionEvm.methods.addCollectionAdminCross(userCross).send();272273      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));274      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));275276      const mintingResult = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});277      const tokenId = mintingResult.events.Transfer.returnValues.tokenId;278279      const event = helper.eth.normalizeEvents(mintingResult.events)280        .find(event => event.event === 'Transfer');281      const address = helper.ethAddress.fromCollectionId(collectionId);282283      expect(event).to.be.deep.equal({284        address,285        event: 'Transfer',286        args: {287          from: '0x0000000000000000000000000000000000000000',288          to: user,289          tokenId: '1',290        },291      });292      expect(await collectionEvm.methods.tokenURI(tokenId).call({from: user})).to.be.equal('Test URI');293294      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));295      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);296      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));297      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;298    }));299300  itEth('Can reassign collection sponsor', async ({helper}) => {301    const owner = await helper.eth.createAccountWithBalance(donor);302    const sponsorEth = await helper.eth.createAccountWithBalance(donor);303    const sponsorCrossEth = helper.ethCrossAccount.fromAddress(sponsorEth);304    const [sponsorSub] = await helper.arrange.createAccounts([100n], donor);305    const sponsorCrossSub = helper.ethCrossAccount.fromKeyringPair(sponsorSub);306307    const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleNFTCollection(owner,'Sponsor collection', '1', '1', '');308    const collectionSub = helper.nft.getCollectionObject(collectionId);309    const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner);310311    // Set and confirm sponsor:312    await collectionEvm.methods.setCollectionSponsorCross(sponsorCrossEth).send({from: owner});313    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsorEth});314315    // Can reassign sponsor:316    await collectionEvm.methods.setCollectionSponsorCross(sponsorCrossSub).send({from: owner});317    const collectionSponsor = (await collectionSub.getData())?.raw.sponsorship;318    expect(collectionSponsor).to.deep.eq({Unconfirmed: sponsorSub.address});319  });320});321322describe('evm RFT collection sponsoring', () => {323  let donor: IKeyringPair;324  let alice: IKeyringPair;325  let nominal: bigint;326327  before(async function() {328    await usingPlaygrounds(async (helper, privateKey) => {329      requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);330      donor = await privateKey({url: import.meta.url});331      [alice] = await helper.arrange.createAccounts([100n], donor);332      nominal = helper.balance.getOneTokenNominal();333    });334  });335336  [337    'mintCross',338    'mintWithTokenURI',339  ].map(testCase =>340    itEth(`[${testCase}] sponsors mint transactions`, async ({helper}) => {341      const collection = await helper.rft.mintCollection(alice, {tokenPrefix: 'spnr', permissions: {mintMode: true}, tokenPropertyPermissions: [342        {key: 'URI', permission: {tokenOwner: true, mutable: true, collectionAdmin: true}},343      ]});344345      const owner = await helper.eth.createAccountWithBalance(donor);346      await collection.setSponsor(alice, alice.address);347      await collection.confirmSponsorship(alice);348349      const minter = helper.eth.createAccount();350      const minterCross = helper.ethCrossAccount.fromAddress(minter);351      expect(await helper.balance.getEthereum(minter)).to.equal(0n);352353      const collectionAddress = helper.ethAddress.fromCollectionId(collection.collectionId);354      const contract = await helper.ethNativeContract.collection(collectionAddress, 'rft', minter, true);355356      await collection.addToAllowList(alice, {Ethereum: minter});357      await collection.addAdmin(alice, {Ethereum: owner});358      const collectionHelpers = await helper.ethNativeContract.collectionHelpers(owner);359      await collectionHelpers.methods.makeCollectionERC721MetadataCompatible(collectionAddress, 'base/')360        .send();361362      let mintingResult;363      let tokenId;364      switch (testCase) {365        case 'mintCross':366          mintingResult = await contract.methods.mintCross(minterCross, []).send();367          break;368        case 'mintWithTokenURI':369          mintingResult = await contract.methods.mintWithTokenURI(minter, 'Test URI').send();370          tokenId = mintingResult.events.Transfer.returnValues.tokenId;371          expect(await contract.methods.tokenURI(tokenId).call()).to.be.equal('Test URI');372          break;373      }374375      const events = helper.eth.normalizeEvents(mintingResult.events);376      expect(events).to.deep.include({377        address: collectionAddress,378        event: 'Transfer',379        args: {380          from: '0x0000000000000000000000000000000000000000',381          to: minter,382          tokenId: '1',383        },384      });385    }));386387  [388    'setCollectionSponsorCross',389    'setCollectionSponsor', // Soft-deprecated390  ].map(testCase =>391    itEth(`[${testCase}] can remove collection sponsor`, async ({helper}) => {392      const owner = await helper.eth.createAccountWithBalance(donor);393      const collectionHelpers = await helper.ethNativeContract.collectionHelpers(owner);394395      let result = await collectionHelpers.methods.createRFTCollection('Sponsor collection', '1', '1').send({value: Number(2n * nominal)});396      const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);397      const sponsor = await helper.eth.createAccountWithBalance(donor);398      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);399      const collectionEvm = await helper.ethNativeContract.collection(collectionIdAddress, 'rft', owner, testCase === 'setCollectionSponsor');400401      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;402      result = await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsor : sponsorCross).send({from: owner});403      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;404405      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});406      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;407408      await collectionEvm.methods.removeCollectionSponsor().send({from: owner});409410      const sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});411      expect(sponsorStruct.eth).to.be.eq('0x0000000000000000000000000000000000000000');412    }));413414  [415    'setCollectionSponsorCross',416    'setCollectionSponsor', // Soft-deprecated417  ].map(testCase =>418    itEth(`[${testCase}] Can sponsor from evm address via access list`, async ({helper}) => {419      const owner = await helper.eth.createAccountWithBalance(donor);420      const sponsorEth = await helper.eth.createAccountWithBalance(donor);421      const sponsorCrossEth = helper.ethCrossAccount.fromAddress(sponsorEth);422423      const {collectionId, collectionAddress} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner, 'Sponsor collection', '1', '1', '');424425      const collectionSub = helper.rft.getCollectionObject(collectionId);426      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner, testCase === 'setCollectionSponsor');427428      // Set collection sponsor:429      await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsorEth : sponsorCrossEth).send({from: owner});430      let sponsorship = (await collectionSub.getData())!.raw.sponsorship;431      expect(sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsorEth, true));432      // Account cannot confirm sponsorship if it is not set as a sponsor433      await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');434435      // Sponsor can confirm sponsorship:436      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsorEth});437      sponsorship = (await collectionSub.getData())!.raw.sponsorship;438      expect(sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsorEth, true));439440      // Create user with no balance:441      const user = helper.eth.createAccount();442      const userCross = helper.ethCrossAccount.fromAddress(user);443      const nextTokenId = await collectionEvm.methods.nextTokenId().call();444      expect(nextTokenId).to.be.equal('1');445446      // Set collection permissions:447      const oldPermissions = (await collectionSub.getData())!.raw.permissions;448      expect(oldPermissions.mintMode).to.be.false;449      expect(oldPermissions.access).to.be.equal('Normal');450451      await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});452      await collectionEvm.methods.addToCollectionAllowListCross(userCross).send({from: owner});453      await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});454455      const newPermissions = (await collectionSub.getData())!.raw.permissions;456      expect(newPermissions.mintMode).to.be.true;457      expect(newPermissions.access).to.be.equal('AllowList');458459      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));460      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));461      const userBalanceBefore =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));462463      // User can mint token without balance:464      {465        const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});466        const events = helper.eth.normalizeEvents(result.events);467468        expect(events).to.deep.include({469          address: collectionAddress,470          event: 'Transfer',471          args: {472            from: '0x0000000000000000000000000000000000000000',473            to: user,474            tokenId: '1',475          },476        });477478        const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));479        const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));480        const userBalanceAfter =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));481482        expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');483        expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);484        expect(userBalanceAfter).to.be.eq(userBalanceBefore);485        expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;486      }487    }));488489  [490    'setCollectionSponsorCross',491    'setCollectionSponsor', // Soft-deprecated492  ].map(testCase =>493    itEth(`[${testCase}] Check that collection admin EVM transaction spend money from sponsor eth address`, async ({helper}) => {494      const owner = await helper.eth.createAccountWithBalance(donor);495      const sponsor = await helper.eth.createAccountWithBalance(donor);496      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);497498      const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');499500      const collectionSub = helper.rft.getCollectionObject(collectionId);501      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner, testCase === 'setCollectionSponsor');502      // Set collection sponsor:503      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.false;504      await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsor : sponsorCross).send();505      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.true;506      let collectionData = (await collectionSub.getData())!;507      expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsor, true));508      await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');509      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.true;510511      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});512      collectionData = (await collectionSub.getData())!;513      expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsor, true));514      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.false;515      const sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});516      const sponsorSubAddress = helper.address.normalizeSubstrateToChainFormat(helper.address.ethToSubstrate(sponsor));517      const actualSubAddress = helper.address.normalizeSubstrateToChainFormat(helper.address.restoreCrossAccountFromBigInt(BigInt(sponsorStruct.sub)));518      expect(actualSubAddress).to.be.equal(sponsorSubAddress);519520      const user = helper.eth.createAccount();521      const userCross = helper.ethCrossAccount.fromAddress(user);522      await collectionEvm.methods.addCollectionAdminCross(userCross).send();523524      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));525      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));526527      const mintingResult = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});528      const tokenId = mintingResult.events.Transfer.returnValues.tokenId;529530      const events = helper.eth.normalizeEvents(mintingResult.events);531      const address = helper.ethAddress.fromCollectionId(collectionId);532533      expect(events).to.deep.include({534        address,535        event: 'Transfer',536        args: {537          from: '0x0000000000000000000000000000000000000000',538          to: user,539          tokenId: '1',540        },541      });542      expect(await collectionEvm.methods.tokenURI(tokenId).call({from: user})).to.be.equal('Test URI');543544      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));545      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);546      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));547      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;548    }));549550  itEth('Check that collection admin EVM transaction spend money from sponsor sub address', async ({helper}) => {551    const owner = await helper.eth.createAccountWithBalance(donor);552    const sponsor = alice;553    const sponsorCross = helper.ethCrossAccount.fromKeyringPair(sponsor);554555    const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');556557    const collectionSub = helper.rft.getCollectionObject(collectionId);558    const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner, false);559    // Set collection sponsor:560    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.false;561    await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send();562    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.true;563    let collectionData = (await collectionSub.getData())!;564    expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(sponsor.address);565    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');566567    await collectionSub.confirmSponsorship(sponsor);568    collectionData = (await collectionSub.getData())!;569    expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(sponsor.address);570    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.false;571    const sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});572    expect(BigInt(sponsorStruct.sub)).to.be.equal(BigInt('0x' + Buffer.from(sponsor.addressRaw).toString('hex')));573574    const user = helper.eth.createAccount();575    const userCross = helper.ethCrossAccount.fromAddress(user);576    await collectionEvm.methods.addCollectionAdminCross(userCross).send();577578    const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));579    const sponsorBalanceBefore = await helper.balance.getSubstrate(sponsor.address);580581    const mintingResult = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});582    const tokenId = mintingResult.events.Transfer.returnValues.tokenId;583584    const events = helper.eth.normalizeEvents(mintingResult.events);585586    expect(events).to.deep.include({587      address: collectionAddress,588      event: 'Transfer',589      args: {590        from: '0x0000000000000000000000000000000000000000',591        to: user,592        tokenId: '1',593      },594    });595    // FIXME: doesn't work596    expect(await collectionEvm.methods.tokenURI(tokenId).call({from: user})).to.be.equal('Test URI');597598    const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));599    expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);600    const sponsorBalanceAfter = await helper.balance.getSubstrate(sponsor.address);601    expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;602  });603604  itEth('Sponsoring collection from substrate address via access list', async ({helper}) => {605    const owner = await helper.eth.createAccountWithBalance(donor);606    const user = helper.eth.createAccount();607    const userCross =  helper.ethCrossAccount.fromAddress(user);608    const sponsor = alice;609    const sponsorCross = helper.ethCrossAccount.fromKeyringPair(sponsor);610611    const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');612    const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner, false);613614    await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send({from: owner});615616    const collectionSub = helper.rft.getCollectionObject(collectionId);617    await collectionSub.confirmSponsorship(sponsor);618619    const nextTokenId = await collectionEvm.methods.nextTokenId().call();620    expect(nextTokenId).to.be.equal('1');621622    await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});623624    await collectionEvm.methods.addToCollectionAllowListCross(userCross).send({from: owner});625    await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});626627    const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));628    const sponsorBalanceBefore = await helper.balance.getSubstrate(sponsor.address);629    const userBalanceBefore =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));630631    {632      const nextTokenId = await collectionEvm.methods.nextTokenId().call();633      expect(nextTokenId).to.be.equal('1');634      const mintingResult = await collectionEvm.methods.mintWithTokenURI(635        user,636        'Test URI',637      ).send({from: user});638639      const events = helper.eth.normalizeEvents(mintingResult.events);640641642      expect(events).to.deep.include({643        address: collectionAddress,644        event: 'Transfer',645        args: {646          from: '0x0000000000000000000000000000000000000000',647          to: user,648          tokenId: nextTokenId,649        },650      });651652      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));653      const sponsorBalanceAfter = await helper.balance.getSubstrate(sponsor.address);654      const userBalanceAfter =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));655656      expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');657      expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);658      expect(userBalanceAfter).to.be.eq(userBalanceBefore);659      expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;660    }661  });662663  itEth('Can reassign collection sponsor', async ({helper}) => {664    const owner = await helper.eth.createAccountWithBalance(donor);665    const sponsorEth = await helper.eth.createAccountWithBalance(donor);666    const sponsorCrossEth = helper.ethCrossAccount.fromAddress(sponsorEth);667    const [sponsorSub] = await helper.arrange.createAccounts([100n], donor);668    const sponsorCrossSub = helper.ethCrossAccount.fromKeyringPair(sponsorSub);669670    const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');671    const collectionSub = helper.rft.getCollectionObject(collectionId);672    const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner);673674    // Set and confirm sponsor:675    await collectionEvm.methods.setCollectionSponsorCross(sponsorCrossEth).send({from: owner});676    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsorEth});677678    // Can reassign sponsor:679    await collectionEvm.methods.setCollectionSponsorCross(sponsorCrossSub).send({from: owner});680    const collectionSponsor = (await collectionSub.getData())?.raw.sponsorship;681    expect(collectionSponsor).to.deep.eq({Unconfirmed: sponsorSub.address});682  });683684  [685    'transfer',686    'transferCross',687    'transferFrom',688    'transferFromCross',689  ].map(testCase =>690    itEth(`[${testCase}] Check that transfer via EVM spend money from sponsor address`, async ({helper}) => {691      const owner = await helper.eth.createAccountWithBalance(donor);692693      const {collectionAddress} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');694      const sponsor = await helper.eth.createAccountWithBalance(donor);695      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);696      const receiver = await helper.eth.createAccountWithBalance(donor);697      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner);698699      await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send();700      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});701702      const user = await helper.eth.createAccountWithBalance(donor);703      const userCross = helper.ethCrossAccount.fromAddress(user);704      await collectionEvm.methods.addCollectionAdminCross(userCross).send();705706      const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});707      const tokenId = result.events.Transfer.returnValues.tokenId;708709      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));710      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));711      const userBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));712713      switch (testCase) {714        case 'transfer':715          await collectionEvm.methods.transfer(receiver, tokenId).send({from: user});716          break;717        case 'transferCross':718          await collectionEvm.methods.transferCross(helper.ethCrossAccount.fromAddress(receiver), tokenId).send({from: user});719          break;720        case 'transferFrom':721          await collectionEvm.methods.transferFrom(user, receiver, tokenId).send({from: user});722          break;723        case 'transferFromCross':724          await collectionEvm.methods.transferFromCross(helper.ethCrossAccount.fromAddress(user), helper.ethCrossAccount.fromAddress(receiver), tokenId).send({from: user});725          break;726      }727728      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));729      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);730      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));731      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;732      const userBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));733      expect(userBalanceAfter).to.be.eq(userBalanceBefore);734    }));735});736737describe('evm RFT token sponsoring', () => {738  let donor: IKeyringPair;739740  before(async function() {741    await usingPlaygrounds(async (helper, privateKey) => {742      requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);743      donor = await privateKey({url: import.meta.url});744    });745  });746747  [748    'transfer',749    'transferCross',750    'transferFrom',751    'transferFromCross',752  ].map(testCase =>753    itEth(`[${testCase}] Check that token piece transfer via EVM spend money from sponsor address`, async ({helper}) => {754      const owner = await helper.eth.createAccountWithBalance(donor);755756      const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');757      const sponsor = await helper.eth.createAccountWithBalance(donor);758      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);759      const receiver = await helper.eth.createAccountWithBalance(donor);760      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner);761762      await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send();763      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});764765      const user = await helper.eth.createAccountWithBalance(donor);766      const userCross = helper.ethCrossAccount.fromAddress(user);767      await collectionEvm.methods.addCollectionAdminCross(userCross).send();768769      const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});770      const tokenId = result.events.Transfer.returnValues.tokenId;771772      const tokenContract = await helper.ethNativeContract.rftTokenById(collectionId, tokenId, user);773      await tokenContract.methods.repartition(2).send();774775      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));776      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));777      const userBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));778779      switch (testCase) {780        case 'transfer':781          await tokenContract.methods.transfer(receiver, 1).send();782          break;783        case 'transferCross':784          await tokenContract.methods.transferCross(helper.ethCrossAccount.fromAddress(receiver), 1).send();785          break;786        case 'transferFrom':787          await tokenContract.methods.transferFrom(user, receiver, 1).send();788          break;789        case 'transferFromCross':790          await tokenContract.methods.transferFromCross(helper.ethCrossAccount.fromAddress(user), helper.ethCrossAccount.fromAddress(receiver), 1).send();791          break;792      }793794      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));795      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);796      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));797      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;798      const userBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));799      expect(userBalanceAfter).to.be.eq(userBalanceBefore);800    }));801802  [803    'approve',804    'approveCross',805  ].map(testCase =>806    itEth(`[${testCase}] Check that approve via EVM spend money from sponsor address`, async ({helper}) => {807      const owner = await helper.eth.createAccountWithBalance(donor);808809      const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');810      const sponsor = await helper.eth.createAccountWithBalance(donor);811      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);812      const receiver = await helper.eth.createAccountWithBalance(donor);813      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner);814815      await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send();816      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});817818      const user = await helper.eth.createAccountWithBalance(donor);819      const userCross = helper.ethCrossAccount.fromAddress(user);820      await collectionEvm.methods.addCollectionAdminCross(userCross).send();821822      const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});823      const tokenId = result.events.Transfer.returnValues.tokenId;824825      const tokenContract = await helper.ethNativeContract.rftTokenById(collectionId, tokenId, user);826      await tokenContract.methods.repartition(2).send();827828      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));829      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));830      const userBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));831832      switch (testCase) {833        case 'approve':834          await tokenContract.methods.approve(receiver, 1).send();835          break;836        case 'approveCross':837          await tokenContract.methods.approveCross(helper.ethCrossAccount.fromAddress(receiver), 1).send();838          break;839      }840841      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));842      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);843      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));844      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;845      const userBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));846      expect(userBalanceAfter).to.be.eq(userBalanceBefore);847    }));848});849
after · tests/src/eth/collectionSponsoring.test.ts
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {IKeyringPair} from '@polkadot/types/types';18import {Pallets, requirePalletsOrSkip, usingPlaygrounds} from '../util/index';19import {itEth, expect} from './util';2021describe('evm nft collection sponsoring', () => {22  let donor: IKeyringPair;23  let alice: IKeyringPair;24  let nominal: bigint;2526  before(async () => {27    await usingPlaygrounds(async (helper, privateKey) => {28      donor = await privateKey({url: import.meta.url});29      [alice] = await helper.arrange.createAccounts([100n], donor);30      nominal = helper.balance.getOneTokenNominal();31    });32  });3334  // TODO: move to substrate tests35  itEth('sponsors mint transactions', async ({helper}) => {36    const collection = await helper.nft.mintCollection(alice, {tokenPrefix: 'spnr', permissions: {mintMode: true}});37    await collection.setSponsor(alice, alice.address);38    await collection.confirmSponsorship(alice);3940    const minter = helper.eth.createAccount();41    expect(await helper.balance.getEthereum(minter)).to.equal(0n);4243    const collectionAddress = helper.ethAddress.fromCollectionId(collection.collectionId);44    const contract = await helper.ethNativeContract.collection(collectionAddress, 'nft', minter);4546    await collection.addToAllowList(alice, {Ethereum: minter});4748    const result = await contract.methods.mint(minter).send();4950    const events = helper.eth.normalizeEvents(result.events);51    expect(events).to.be.deep.equal([52      {53        address: collectionAddress,54        event: 'Transfer',55        args: {56          from: '0x0000000000000000000000000000000000000000',57          to: minter,58          tokenId: '1',59        },60      },61    ]);62  });6364  // TODO: Temprorary off. Need refactor65  // itWeb3('Set substrate sponsor', async ({api, web3, privateKeyWrapper}) => {66  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);67  //   const collectionHelpers = evmCollectionHelpers(web3, owner);68  //   let result = await collectionHelpers.methods.createNFTCollection('Sponsor collection', '1', '1').send();69  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);70  //   const sponsor = privateKeyWrapper('//Alice');71  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);7273  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;74  //   result = await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});75  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;7677  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);78  //   await submitTransactionAsync(sponsor, confirmTx);79  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;8081  //   const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});82  //   expect(bigIntToSub(api, BigInt(sponsorTuple[1]))).to.be.eq(sponsor.address);83  // });8485  [86    'setCollectionSponsorCross',87    'setCollectionSponsor', // Soft-deprecated88  ].map(testCase =>89    itEth(`[${testCase}] can remove collection sponsor`, async ({helper}) => {90      const owner = await helper.eth.createAccountWithBalance(donor);91      const collectionHelpers = await helper.ethNativeContract.collectionHelpers(owner);9293      let result = await collectionHelpers.methods.createNFTCollection('Sponsor collection', '1', '1').send({value: Number(2n * nominal)});94      const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);95      const sponsor = await helper.eth.createAccountWithBalance(donor);96      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);97      const collectionEvm = await helper.ethNativeContract.collection(collectionIdAddress, 'nft', owner, testCase === 'setCollectionSponsor');9899      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;100      result = await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsor : sponsorCross).send({from: owner});101      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;102103      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});104      let sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});105      expect(helper.address.restoreCrossAccountFromBigInt(BigInt(sponsorStruct.sub))).to.be.eq(helper.address.ethToSubstrate(sponsor, true));106      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;107108      await collectionEvm.methods.removeCollectionSponsor().send({from: owner});109110      sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});111      expect(sponsorStruct.eth).to.be.eq('0x0000000000000000000000000000000000000000');112    }));113114  [115    'setCollectionSponsorCross',116    'setCollectionSponsor', // Soft-deprecated117  ].map(testCase =>118    itEth(`[${testCase}] Can sponsor from evm address via access list`, async ({helper}) => {119      const owner = await helper.eth.createAccountWithBalance(donor);120      const sponsorEth = await helper.eth.createAccountWithBalance(donor);121      const sponsorCrossEth = helper.ethCrossAccount.fromAddress(sponsorEth);122123      const {collectionId, collectionAddress} = await helper.eth.createERC721MetadataCompatibleNFTCollection(owner, 'Sponsor collection', '1', '1', '');124125      const collectionSub = helper.nft.getCollectionObject(collectionId);126      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner, testCase === 'setCollectionSponsor');127128      // Set collection sponsor:129      await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsorEth : sponsorCrossEth).send({from: owner});130      let sponsorship = (await collectionSub.getData())!.raw.sponsorship;131      expect(sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsorEth, true));132      // Account cannot confirm sponsorship if it is not set as a sponsor133      await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');134135      // Sponsor can confirm sponsorship:136      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsorEth});137      sponsorship = (await collectionSub.getData())!.raw.sponsorship;138      expect(sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsorEth, true));139140      // Create user with no balance:141      const user = helper.eth.createAccount();142      const userCross = helper.ethCrossAccount.fromAddress(user);143      const nextTokenId = await collectionEvm.methods.nextTokenId().call();144      expect(nextTokenId).to.be.equal('1');145146      // Set collection permissions:147      const oldPermissions = (await collectionSub.getData())!.raw.permissions;148      expect(oldPermissions.mintMode).to.be.false;149      expect(oldPermissions.access).to.be.equal('Normal');150151      await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});152      await collectionEvm.methods.addToCollectionAllowListCross(userCross).send({from: owner});153      await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});154155      const newPermissions = (await collectionSub.getData())!.raw.permissions;156      expect(newPermissions.mintMode).to.be.true;157      expect(newPermissions.access).to.be.equal('AllowList');158159      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));160      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));161      const userBalanceBefore =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));162163      // User can mint token without balance:164      {165        const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});166        const event = helper.eth.normalizeEvents(result.events)167          .find(event => event.event === 'Transfer');168169        expect(event).to.be.deep.equal({170          address: collectionAddress,171          event: 'Transfer',172          args: {173            from: '0x0000000000000000000000000000000000000000',174            to: user,175            tokenId: '1',176          },177        });178179        const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));180        const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));181        const userBalanceAfter =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));182183        expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');184        expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);185        expect(userBalanceAfter).to.be.eq(userBalanceBefore);186        expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;187      }188    }));189190  // TODO: Temprorary off. Need refactor191  // itWeb3('Sponsoring collection from substrate address via access list', async ({api, web3, privateKeyWrapper}) => {192  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);193  //   const collectionHelpers = evmCollectionHelpers(web3, owner);194  //   const result = await collectionHelpers.methods.createERC721MetadataCompatibleNFTCollection('Sponsor collection', '1', '1', '').send();195  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);196  //   const sponsor = privateKeyWrapper('//Alice');197  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);198199  //   await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});200201  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);202  //   await submitTransactionAsync(sponsor, confirmTx);203204  //   const user = createEthAccount(web3);205  //   const nextTokenId = await collectionEvm.methods.nextTokenId().call();206  //   expect(nextTokenId).to.be.equal('1');207208  //   await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});209  //   await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});210  //   await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});211212  //   const ownerBalanceBefore = await ethBalanceViaSub(api, owner);213  //   const sponsorBalanceBefore = (await getBalance(api, [sponsor.address]))[0];214215  //   {216  //     const nextTokenId = await collectionEvm.methods.nextTokenId().call();217  //     expect(nextTokenId).to.be.equal('1');218  //     const result = await collectionEvm.methods.mintWithTokenURI(219  //       user,220  //       nextTokenId,221  //       'Test URI',222  //     ).send({from: user});223  //     const events = normalizeEvents(result.events);224225  //     expect(events).to.be.deep.equal([226  //       {227  //         address: collectionIdAddress,228  //         event: 'Transfer',229  //         args: {230  //           from: '0x0000000000000000000000000000000000000000',231  //           to: user,232  //           tokenId: nextTokenId,233  //         },234  //       },235  //     ]);236237  //     const ownerBalanceAfter = await ethBalanceViaSub(api, owner);238  //     const sponsorBalanceAfter = (await getBalance(api, [sponsor.address]))[0];239240  //     expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');241  //     expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);242  //     expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;243  //   }244  // });245246  [247    'setCollectionSponsorCross',248    'setCollectionSponsor', // Soft-deprecated249  ].map(testCase =>250    itEth(`[${testCase}] Check that transaction via EVM spend money from sponsor address`, async ({helper}) => {251      const owner = await helper.eth.createAccountWithBalance(donor);252      const sponsor = await helper.eth.createAccountWithBalance(donor);253      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);254255      const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleNFTCollection(owner,'Sponsor collection', '1', '1', '');256257      const collectionSub = helper.nft.getCollectionObject(collectionId);258      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner, testCase === 'setCollectionSponsor');259      // Set collection sponsor:260      await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsor : sponsorCross).send();261      let collectionData = (await collectionSub.getData())!;262      expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsor, true));263      await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');264265      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});266      collectionData = (await collectionSub.getData())!;267      expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsor, true));268269      const user = helper.eth.createAccount();270      const userCross = helper.ethCrossAccount.fromAddress(user);271      await collectionEvm.methods.addCollectionAdminCross(userCross).send();272273      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));274      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));275276      const mintingResult = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});277      const tokenId = mintingResult.events.Transfer.returnValues.tokenId;278279      const event = helper.eth.normalizeEvents(mintingResult.events)280        .find(event => event.event === 'Transfer');281      const address = helper.ethAddress.fromCollectionId(collectionId);282283      expect(event).to.be.deep.equal({284        address,285        event: 'Transfer',286        args: {287          from: '0x0000000000000000000000000000000000000000',288          to: user,289          tokenId: '1',290        },291      });292      expect(await collectionEvm.methods.tokenURI(tokenId).call({from: user})).to.be.equal('Test URI');293294      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));295      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);296      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));297      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;298    }));299300  itEth('Can reassign collection sponsor', async ({helper}) => {301    const owner = await helper.eth.createAccountWithBalance(donor);302    const sponsorEth = await helper.eth.createAccountWithBalance(donor);303    const sponsorCrossEth = helper.ethCrossAccount.fromAddress(sponsorEth);304    const [sponsorSub] = await helper.arrange.createAccounts([100n], donor);305    const sponsorCrossSub = helper.ethCrossAccount.fromKeyringPair(sponsorSub);306307    const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleNFTCollection(owner,'Sponsor collection', '1', '1', '');308    const collectionSub = helper.nft.getCollectionObject(collectionId);309    const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner);310311    // Set and confirm sponsor:312    await collectionEvm.methods.setCollectionSponsorCross(sponsorCrossEth).send({from: owner});313    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsorEth});314315    // Can reassign sponsor:316    await collectionEvm.methods.setCollectionSponsorCross(sponsorCrossSub).send({from: owner});317    const collectionSponsor = (await collectionSub.getData())?.raw.sponsorship;318    expect(collectionSponsor).to.deep.eq({Unconfirmed: sponsorSub.address});319  });320});321322describe('evm RFT collection sponsoring', () => {323  let donor: IKeyringPair;324  let alice: IKeyringPair;325  let nominal: bigint;326327  before(async function() {328    await usingPlaygrounds(async (helper, privateKey) => {329      requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);330      donor = await privateKey({url: import.meta.url});331      [alice] = await helper.arrange.createAccounts([100n], donor);332      nominal = helper.balance.getOneTokenNominal();333    });334  });335336  [337    'mintCross',338    'mintWithTokenURI',339  ].map(testCase =>340    itEth(`[${testCase}] sponsors mint transactions`, async ({helper}) => {341      const collection = await helper.rft.mintCollection(alice, {tokenPrefix: 'spnr', permissions: {mintMode: true}, tokenPropertyPermissions: [342        {key: 'URI', permission: {tokenOwner: true, mutable: true, collectionAdmin: true}},343      ]});344345      const owner = await helper.eth.createAccountWithBalance(donor);346      await collection.setSponsor(alice, alice.address);347      await collection.confirmSponsorship(alice);348349      const minter = helper.eth.createAccount();350      const minterCross = helper.ethCrossAccount.fromAddress(minter);351      expect(await helper.balance.getEthereum(minter)).to.equal(0n);352353      const collectionAddress = helper.ethAddress.fromCollectionId(collection.collectionId);354      const contract = await helper.ethNativeContract.collection(collectionAddress, 'rft', minter, true);355356      await collection.addToAllowList(alice, {Ethereum: minter});357      await collection.addAdmin(alice, {Ethereum: owner});358      const collectionHelpers = await helper.ethNativeContract.collectionHelpers(owner);359      await collectionHelpers.methods.makeCollectionERC721MetadataCompatible(collectionAddress, 'base/')360        .send();361362      let mintingResult;363      let tokenId;364      switch (testCase) {365        case 'mintCross':366          mintingResult = await contract.methods.mintCross(minterCross, []).send();367          break;368        case 'mintWithTokenURI':369          mintingResult = await contract.methods.mintWithTokenURI(minter, 'Test URI').send();370          tokenId = mintingResult.events.Transfer.returnValues.tokenId;371          expect(await contract.methods.tokenURI(tokenId).call()).to.be.equal('Test URI');372          break;373      }374375      const events = helper.eth.normalizeEvents(mintingResult.events);376      expect(events).to.deep.include({377        address: collectionAddress,378        event: 'Transfer',379        args: {380          from: '0x0000000000000000000000000000000000000000',381          to: minter,382          tokenId: '1',383        },384      });385    }));386387  [388    'setCollectionSponsorCross',389    'setCollectionSponsor', // Soft-deprecated390  ].map(testCase =>391    itEth(`[${testCase}] can remove collection sponsor`, async ({helper}) => {392      const owner = await helper.eth.createAccountWithBalance(donor);393      const collectionHelpers = await helper.ethNativeContract.collectionHelpers(owner);394395      let result = await collectionHelpers.methods.createRFTCollection('Sponsor collection', '1', '1').send({value: Number(2n * nominal)});396      const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);397      const sponsor = await helper.eth.createAccountWithBalance(donor);398      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);399      const collectionEvm = await helper.ethNativeContract.collection(collectionIdAddress, 'rft', owner, testCase === 'setCollectionSponsor');400401      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;402      result = await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsor : sponsorCross).send({from: owner});403      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;404405      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});406      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;407408      await collectionEvm.methods.removeCollectionSponsor().send({from: owner});409410      const sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});411      expect(sponsorStruct.eth).to.be.eq('0x0000000000000000000000000000000000000000');412    }));413414  [415    'setCollectionSponsorCross',416    'setCollectionSponsor', // Soft-deprecated417  ].map(testCase =>418    itEth(`[${testCase}] Can sponsor from evm address via access list`, async ({helper}) => {419      const owner = await helper.eth.createAccountWithBalance(donor);420      const sponsorEth = await helper.eth.createAccountWithBalance(donor);421      const sponsorCrossEth = helper.ethCrossAccount.fromAddress(sponsorEth);422423      const {collectionId, collectionAddress} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner, 'Sponsor collection', '1', '1', '');424425      const collectionSub = helper.rft.getCollectionObject(collectionId);426      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner, testCase === 'setCollectionSponsor');427428      // Set collection sponsor:429      await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsorEth : sponsorCrossEth).send({from: owner});430      let sponsorship = (await collectionSub.getData())!.raw.sponsorship;431      expect(sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsorEth, true));432      // Account cannot confirm sponsorship if it is not set as a sponsor433      await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');434435      // Sponsor can confirm sponsorship:436      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsorEth});437      sponsorship = (await collectionSub.getData())!.raw.sponsorship;438      expect(sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsorEth, true));439440      // Create user with no balance:441      const user = helper.eth.createAccount();442      const userCross = helper.ethCrossAccount.fromAddress(user);443      const nextTokenId = await collectionEvm.methods.nextTokenId().call();444      expect(nextTokenId).to.be.equal('1');445446      // Set collection permissions:447      const oldPermissions = (await collectionSub.getData())!.raw.permissions;448      expect(oldPermissions.mintMode).to.be.false;449      expect(oldPermissions.access).to.be.equal('Normal');450451      await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});452      await collectionEvm.methods.addToCollectionAllowListCross(userCross).send({from: owner});453      await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});454455      const newPermissions = (await collectionSub.getData())!.raw.permissions;456      expect(newPermissions.mintMode).to.be.true;457      expect(newPermissions.access).to.be.equal('AllowList');458459      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));460      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));461      const userBalanceBefore =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));462463      // User can mint token without balance:464      {465        const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});466        const events = helper.eth.normalizeEvents(result.events);467468        expect(events).to.deep.include({469          address: collectionAddress,470          event: 'Transfer',471          args: {472            from: '0x0000000000000000000000000000000000000000',473            to: user,474            tokenId: '1',475          },476        });477478        const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));479        const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsorEth));480        const userBalanceAfter =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));481482        expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');483        expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);484        expect(userBalanceAfter).to.be.eq(userBalanceBefore);485        expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;486      }487    }));488489  [490    'setCollectionSponsorCross',491    'setCollectionSponsor', // Soft-deprecated492  ].map(testCase =>493    itEth(`[${testCase}] Check that collection admin EVM transaction spend money from sponsor eth address`, async ({helper}) => {494      const owner = await helper.eth.createAccountWithBalance(donor);495      const sponsor = await helper.eth.createAccountWithBalance(donor);496      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);497498      const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');499500      const collectionSub = helper.rft.getCollectionObject(collectionId);501      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner, testCase === 'setCollectionSponsor');502      // Set collection sponsor:503      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.false;504      await collectionEvm.methods[testCase](testCase === 'setCollectionSponsor' ? sponsor : sponsorCross).send();505      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.true;506      let collectionData = (await collectionSub.getData())!;507      expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsor, true));508      await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');509      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.true;510511      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});512      collectionData = (await collectionSub.getData())!;513      expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsor, true));514      expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.false;515      const sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});516      const sponsorSubAddress = helper.address.normalizeSubstrateToChainFormat(helper.address.ethToSubstrate(sponsor));517      const actualSubAddress = helper.address.normalizeSubstrateToChainFormat(helper.address.restoreCrossAccountFromBigInt(BigInt(sponsorStruct.sub)));518      expect(actualSubAddress).to.be.equal(sponsorSubAddress);519520      const user = helper.eth.createAccount();521      const userCross = helper.ethCrossAccount.fromAddress(user);522      await collectionEvm.methods.addCollectionAdminCross(userCross).send();523524      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));525      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));526527      const mintingResult = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});528      const tokenId = mintingResult.events.Transfer.returnValues.tokenId;529530      const events = helper.eth.normalizeEvents(mintingResult.events);531      const address = helper.ethAddress.fromCollectionId(collectionId);532533      expect(events).to.deep.include({534        address,535        event: 'Transfer',536        args: {537          from: '0x0000000000000000000000000000000000000000',538          to: user,539          tokenId: '1',540        },541      });542      expect(await collectionEvm.methods.tokenURI(tokenId).call({from: user})).to.be.equal('Test URI');543544      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));545      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);546      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));547      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;548    }));549550  itEth('Check that collection admin EVM transaction spend money from sponsor sub address', async ({helper}) => {551    const owner = await helper.eth.createAccountWithBalance(donor);552    const sponsor = alice;553    const sponsorCross = helper.ethCrossAccount.fromKeyringPair(sponsor);554555    const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');556557    const collectionSub = helper.rft.getCollectionObject(collectionId);558    const collectionEvm = helper.ethNativeContract.collection(collectionAddress, 'rft', owner, false);559    // Set collection sponsor:560    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.false;561    await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send();562    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.true;563    let collectionData = (await collectionSub.getData())!;564    expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(sponsor.address);565    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('ConfirmSponsorshipFail');566567    await collectionSub.confirmSponsorship(sponsor);568    collectionData = (await collectionSub.getData())!;569    expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(sponsor.address);570    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call()).to.be.false;571    const sponsorStruct = await collectionEvm.methods.collectionSponsor().call({from: owner});572    expect(BigInt(sponsorStruct.sub)).to.be.equal(BigInt('0x' + Buffer.from(sponsor.addressRaw).toString('hex')));573574    const user = helper.eth.createAccount();575    const userCross = helper.ethCrossAccount.fromAddress(user);576    await collectionEvm.methods.addCollectionAdminCross(userCross).send();577578    const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));579    const sponsorBalanceBefore = await helper.balance.getSubstrate(sponsor.address);580581    const mintingResult = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});582    const tokenId = mintingResult.events.Transfer.returnValues.tokenId;583584    const events = helper.eth.normalizeEvents(mintingResult.events);585586    expect(events).to.deep.include({587      address: collectionAddress,588      event: 'Transfer',589      args: {590        from: '0x0000000000000000000000000000000000000000',591        to: user,592        tokenId: '1',593      },594    });595    expect(await collectionEvm.methods.tokenURI(tokenId).call()).to.be.equal('Test URI');596597    const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));598    expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);599    const sponsorBalanceAfter = await helper.balance.getSubstrate(sponsor.address);600    expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;601  });602603  itEth('Sponsoring collection from substrate address via access list', async ({helper}) => {604    const owner = await helper.eth.createAccountWithBalance(donor);605    const user = helper.eth.createAccount();606    const userCross =  helper.ethCrossAccount.fromAddress(user);607    const sponsor = alice;608    const sponsorCross = helper.ethCrossAccount.fromKeyringPair(sponsor);609610    const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');611    const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner, false);612613    await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send({from: owner});614615    const collectionSub = helper.rft.getCollectionObject(collectionId);616    await collectionSub.confirmSponsorship(sponsor);617618    const nextTokenId = await collectionEvm.methods.nextTokenId().call();619    expect(nextTokenId).to.be.equal('1');620621    await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});622623    await collectionEvm.methods.addToCollectionAllowListCross(userCross).send({from: owner});624    await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});625626    const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));627    const sponsorBalanceBefore = await helper.balance.getSubstrate(sponsor.address);628    const userBalanceBefore =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));629630    {631      const nextTokenId = await collectionEvm.methods.nextTokenId().call();632      expect(nextTokenId).to.be.equal('1');633      const mintingResult = await collectionEvm.methods.mintWithTokenURI(634        user,635        'Test URI',636      ).send({from: user});637638      const events = helper.eth.normalizeEvents(mintingResult.events);639640641      expect(events).to.deep.include({642        address: collectionAddress,643        event: 'Transfer',644        args: {645          from: '0x0000000000000000000000000000000000000000',646          to: user,647          tokenId: nextTokenId,648        },649      });650651      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));652      const sponsorBalanceAfter = await helper.balance.getSubstrate(sponsor.address);653      const userBalanceAfter =  await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));654655      expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');656      expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);657      expect(userBalanceAfter).to.be.eq(userBalanceBefore);658      expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;659    }660  });661662  itEth('Can reassign collection sponsor', async ({helper}) => {663    const owner = await helper.eth.createAccountWithBalance(donor);664    const sponsorEth = await helper.eth.createAccountWithBalance(donor);665    const sponsorCrossEth = helper.ethCrossAccount.fromAddress(sponsorEth);666    const [sponsorSub] = await helper.arrange.createAccounts([100n], donor);667    const sponsorCrossSub = helper.ethCrossAccount.fromKeyringPair(sponsorSub);668669    const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');670    const collectionSub = helper.rft.getCollectionObject(collectionId);671    const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner);672673    // Set and confirm sponsor:674    await collectionEvm.methods.setCollectionSponsorCross(sponsorCrossEth).send({from: owner});675    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsorEth});676677    // Can reassign sponsor:678    await collectionEvm.methods.setCollectionSponsorCross(sponsorCrossSub).send({from: owner});679    const collectionSponsor = (await collectionSub.getData())?.raw.sponsorship;680    expect(collectionSponsor).to.deep.eq({Unconfirmed: sponsorSub.address});681  });682683  [684    'transfer',685    'transferCross',686    'transferFrom',687    'transferFromCross',688  ].map(testCase =>689    itEth(`[${testCase}] Check that transfer via EVM spend money from sponsor address`, async ({helper}) => {690      const owner = await helper.eth.createAccountWithBalance(donor);691692      const {collectionAddress} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');693      const sponsor = await helper.eth.createAccountWithBalance(donor);694      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);695      const receiver = await helper.eth.createAccountWithBalance(donor);696      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner);697698      await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send();699      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});700701      const user = await helper.eth.createAccountWithBalance(donor);702      const userCross = helper.ethCrossAccount.fromAddress(user);703      await collectionEvm.methods.addCollectionAdminCross(userCross).send();704705      const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});706      const tokenId = result.events.Transfer.returnValues.tokenId;707708      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));709      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));710      const userBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));711712      switch (testCase) {713        case 'transfer':714          await collectionEvm.methods.transfer(receiver, tokenId).send({from: user});715          break;716        case 'transferCross':717          await collectionEvm.methods.transferCross(helper.ethCrossAccount.fromAddress(receiver), tokenId).send({from: user});718          break;719        case 'transferFrom':720          await collectionEvm.methods.transferFrom(user, receiver, tokenId).send({from: user});721          break;722        case 'transferFromCross':723          await collectionEvm.methods.transferFromCross(helper.ethCrossAccount.fromAddress(user), helper.ethCrossAccount.fromAddress(receiver), tokenId).send({from: user});724          break;725      }726727      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));728      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);729      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));730      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;731      const userBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));732      expect(userBalanceAfter).to.be.eq(userBalanceBefore);733    }));734});735736describe('evm RFT token sponsoring', () => {737  let donor: IKeyringPair;738739  before(async function() {740    await usingPlaygrounds(async (helper, privateKey) => {741      requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);742      donor = await privateKey({url: import.meta.url});743    });744  });745746  [747    'transfer',748    'transferCross',749    'transferFrom',750    'transferFromCross',751  ].map(testCase =>752    itEth(`[${testCase}] Check that token piece transfer via EVM spend money from sponsor address`, async ({helper}) => {753      const owner = await helper.eth.createAccountWithBalance(donor);754755      const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');756      const sponsor = await helper.eth.createAccountWithBalance(donor);757      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);758      const receiver = await helper.eth.createAccountWithBalance(donor);759      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner);760761      await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send();762      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});763764      const user = await helper.eth.createAccountWithBalance(donor);765      const userCross = helper.ethCrossAccount.fromAddress(user);766      await collectionEvm.methods.addCollectionAdminCross(userCross).send();767768      const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});769      const tokenId = result.events.Transfer.returnValues.tokenId;770771      const tokenContract = await helper.ethNativeContract.rftTokenById(collectionId, tokenId, user);772      await tokenContract.methods.repartition(2).send();773774      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));775      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));776      const userBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));777778      switch (testCase) {779        case 'transfer':780          await tokenContract.methods.transfer(receiver, 1).send();781          break;782        case 'transferCross':783          await tokenContract.methods.transferCross(helper.ethCrossAccount.fromAddress(receiver), 1).send();784          break;785        case 'transferFrom':786          await tokenContract.methods.transferFrom(user, receiver, 1).send();787          break;788        case 'transferFromCross':789          await tokenContract.methods.transferFromCross(helper.ethCrossAccount.fromAddress(user), helper.ethCrossAccount.fromAddress(receiver), 1).send();790          break;791      }792793      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));794      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);795      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));796      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;797      const userBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));798      expect(userBalanceAfter).to.be.eq(userBalanceBefore);799    }));800801  [802    'approve',803    'approveCross',804  ].map(testCase =>805    itEth(`[${testCase}] Check that approve via EVM spend money from sponsor address`, async ({helper}) => {806      const owner = await helper.eth.createAccountWithBalance(donor);807808      const {collectionAddress, collectionId} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner,'Sponsor collection', '1', '1', '');809      const sponsor = await helper.eth.createAccountWithBalance(donor);810      const sponsorCross = helper.ethCrossAccount.fromAddress(sponsor);811      const receiver = await helper.eth.createAccountWithBalance(donor);812      const collectionEvm = await helper.ethNativeContract.collection(collectionAddress, 'rft', owner);813814      await collectionEvm.methods.setCollectionSponsorCross(sponsorCross).send();815      await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});816817      const user = await helper.eth.createAccountWithBalance(donor);818      const userCross = helper.ethCrossAccount.fromAddress(user);819      await collectionEvm.methods.addCollectionAdminCross(userCross).send();820821      const result = await collectionEvm.methods.mintWithTokenURI(user, 'Test URI').send({from: user});822      const tokenId = result.events.Transfer.returnValues.tokenId;823824      const tokenContract = await helper.ethNativeContract.rftTokenById(collectionId, tokenId, user);825      await tokenContract.methods.repartition(2).send();826827      const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));828      const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));829      const userBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));830831      switch (testCase) {832        case 'approve':833          await tokenContract.methods.approve(receiver, 1).send();834          break;835        case 'approveCross':836          await tokenContract.methods.approveCross(helper.ethCrossAccount.fromAddress(receiver), 1).send();837          break;838      }839840      const ownerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));841      expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);842      const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));843      expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;844      const userBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(user));845      expect(userBalanceAfter).to.be.eq(userBalanceBefore);846    }));847});848
modifiedtests/src/eth/createNFTCollection.test.tsdiffbeforeafterboth
--- a/tests/src/eth/createNFTCollection.test.ts
+++ b/tests/src/eth/createNFTCollection.test.ts
@@ -199,10 +199,9 @@
   // Soft-deprecated
   itEth('(!negative test!) [eth] Check owner', async ({helper}) => {
     const owner = await helper.eth.createAccountWithBalance(donor);
-    // FIXME: do not give balance
-    const malfeasant = await helper.eth.createAccountWithBalance(donor);
+    const malfeasant = helper.eth.createAccount();
     const {collectionAddress} = await helper.eth.createNFTCollection(owner, 'Transgressed', 'absolutely anything', 'COR');
-    const malfeasantCollection = await helper.ethNativeContract.collection(collectionAddress, 'nft', malfeasant, true);
+    const malfeasantCollection = helper.ethNativeContract.collection(collectionAddress, 'nft', malfeasant, true);
     const EXPECTED_ERROR = 'NoPermission';
     {
       const sponsor = await helper.eth.createAccountWithBalance(donor);
modifiedtests/src/eth/createRFTCollection.test.tsdiffbeforeafterboth
--- a/tests/src/eth/createRFTCollection.test.ts
+++ b/tests/src/eth/createRFTCollection.test.ts
@@ -63,8 +63,7 @@
     const baseUri = 'BaseURI';
 
     const {collectionId, collectionAddress} = await helper.eth.createERC721MetadataCompatibleRFTCollection(owner, name, description, prefix, baseUri);
-    // FIXME: caller is not needed
-    const contract = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner);
+    const contract = helper.ethNativeContract.collection(collectionAddress, 'nft');
 
     const collection = helper.rft.getCollectionObject(collectionId);
     const data = (await collection.getData())!;
modifiedtests/src/eth/fractionalizer/fractionalizer.test.tsdiffbeforeafterboth
--- a/tests/src/eth/fractionalizer/fractionalizer.test.ts
+++ b/tests/src/eth/fractionalizer/fractionalizer.test.ts
@@ -170,7 +170,7 @@
     const rftTokenAddress = result.events.Fractionalized.returnValues._rftToken;
 
     // FIXME: should work without the caller
-    const rftTokenContract = await helper.ethNativeContract.rftToken(rftTokenAddress, owner);
+    const rftTokenContract = helper.ethNativeContract.rftToken(rftTokenAddress);
     expect(await rftTokenContract.methods.balanceOf(owner).call()).to.equal('100');
   });
 
modifiedtests/src/eth/nativeRpc/estimateGas.test.tsdiffbeforeafterboth
--- a/tests/src/eth/nativeRpc/estimateGas.test.ts
+++ b/tests/src/eth/nativeRpc/estimateGas.test.ts
@@ -28,7 +28,7 @@
     });
   });
 
-  itEth.skip('estimate gas', async ({helper}) => {
+  itEth('estimate gas', async ({helper}) => {
     const BALANCE = 100n;
     const BALANCE_TO_TRANSFER = 90n;
 
@@ -57,6 +57,6 @@
       maxFeePerGas: '0x14c9338c61d',
     });
 
-    expect(estimateGas).to.be.greaterThan(40000).and.to.be.lessThan(60000);
+    expect(estimateGas).to.be.greaterThan(35000).and.to.be.lessThan(50000);
   });
 });
modifiedtests/src/eth/nonFungible.test.tsdiffbeforeafterboth
--- a/tests/src/eth/nonFungible.test.ts
+++ b/tests/src/eth/nonFungible.test.ts
@@ -928,8 +928,7 @@
   });
 
   itEth('Returns collection name', async ({helper}) => {
-    // FIXME: should not have balance to use .call()
-    const caller = await helper.eth.createAccountWithBalance(donor);
+    const caller = helper.eth.createAccount();
     const tokenPropertyPermissions = [{
       key: 'URI',
       permission: {
modifiedtests/src/eth/reFungible.test.tsdiffbeforeafterboth
--- a/tests/src/eth/reFungible.test.ts
+++ b/tests/src/eth/reFungible.test.ts
@@ -679,8 +679,7 @@
   });
 
   itEth('Returns collection name', async ({helper}) => {
-    // FIXME: should not have balance to use .call()
-    const caller = await helper.eth.createAccountWithBalance(alice);
+    const caller = helper.eth.createAccount();
     const tokenPropertyPermissions = [{
       key: 'URI',
       permission: {
modifiedtests/src/eth/tokenProperties.test.tsdiffbeforeafterboth
--- a/tests/src/eth/tokenProperties.test.ts
+++ b/tests/src/eth/tokenProperties.test.ts
@@ -315,8 +315,7 @@
     }));
 
   itEth('Can be read', async({helper}) => {
-    // FIXME: User with no balance should be able to call
-    const caller = await helper.eth.createAccountWithBalance(alice);
+    const caller = helper.eth.createAccount();
     const collection = await helper.nft.mintCollection(alice, {
       tokenPropertyPermissions: [{
         key: 'testKey',