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

difftreelog

Merge pull request #300 from UniqueNetwork/release/opal-v917000

kozyrevdev2022-03-10parents: #e93af88 #8c2fc09.patch.diff
in: master
Release/opal v917000

196 files changed

modified.envdiffbeforeafterboth
--- a/.env
+++ b/.env
@@ -1,6 +1,6 @@
 RUST_TOOLCHAIN=nightly-2021-11-11
 RUST_C=1.58.0-nightly
-POLKA_VERSION=release-v0.9.16
+POLKA_VERSION=release-v0.9.17
 UNIQUE_BRANCH=develop
 USER=***
 PASS=***
modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -188,9 +188,9 @@
 
 [[package]]
 name = "async-global-executor"
-version = "2.0.2"
+version = "2.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6"
+checksum = "c026b7e44f1316b567ee750fea85103f87fcb80792b860e979f221259796ca0a"
 dependencies = [
  "async-channel",
  "async-executor",
@@ -860,9 +860,9 @@
 
 [[package]]
 name = "byte-slice-cast"
-version = "1.2.0"
+version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d30c751592b77c499e7bce34d99d67c2c11bdc0574e9a488ddade14150a4698"
+checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e"
 
 [[package]]
 name = "byte-tools"
@@ -1051,9 +1051,9 @@
 
 [[package]]
 name = "clap"
-version = "3.1.2"
+version = "3.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5177fac1ab67102d8989464efd043c6ff44191b1557ec1ddd489b4f7e1447e77"
+checksum = "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312"
 dependencies = [
  "atty",
  "bitflags",
@@ -1068,9 +1068,9 @@
 
 [[package]]
 name = "clap_derive"
-version = "3.1.2"
+version = "3.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01d42c94ce7c2252681b5fed4d3627cc807b13dfc033246bd05d5b252399000e"
+checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16"
 dependencies = [
  "heck 0.4.0",
  "proc-macro-error",
@@ -2013,9 +2013,9 @@
 
 [[package]]
 name = "ed25519"
-version = "1.3.0"
+version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74e1069e39f1454367eb2de793ed062fac4c35c2934b76a81d90dd9abcd28816"
+checksum = "eed12bbf7b5312f8da1c2722bc06d8c6b12c2d86a7fb35a194c7f3e6fc2bbe39"
 dependencies = [
  "signature",
 ]
@@ -2042,11 +2042,11 @@
 
 [[package]]
 name = "enum-as-inner"
-version = "0.3.3"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595"
+checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4"
 dependencies = [
- "heck 0.3.3",
+ "heck 0.4.0",
  "proc-macro2",
  "quote",
  "syn",
@@ -4403,7 +4403,7 @@
  "libp2p-core",
  "libp2p-swarm",
  "log",
- "lru 0.7.2",
+ "lru 0.7.3",
  "rand 0.7.3",
  "smallvec",
  "unsigned-varint 0.7.1",
@@ -4667,9 +4667,9 @@
 
 [[package]]
 name = "lru"
-version = "0.7.2"
+version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "274353858935c992b13c0ca408752e2121da852d07dec7ce5f108c77dfa14d1f"
+checksum = "fcb87f3080f6d1d69e8c564c0fcfde1d7aa8cc451ce40cae89479111f03bc0eb"
 dependencies = [
  "hashbrown 0.11.2",
 ]
@@ -5189,9 +5189,9 @@
 
 [[package]]
 name = "once_cell"
-version = "1.9.0"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
+checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
 
 [[package]]
 name = "opaque-debug"
@@ -6226,7 +6226,7 @@
 [[package]]
 name = "pallet-template-transaction-payment"
 version = "3.0.0"
-source = "git+https://github.com/UniqueNetwork/pallet-sponsoring?branch=polkadot-v0.9.17#d9553babbc1cfdd44794cb0118dbb1491670e97e"
+source = "git+https://github.com/UniqueNetwork/pallet-sponsoring?branch=polkadot-v0.9.17#28f311f8de67155865d362f6ded1d0d5229f3202"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6479,9 +6479,9 @@
 
 [[package]]
 name = "parity-db"
-version = "0.3.7"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09aa6c5bb8070cf0456d9fc228b3022e900aae9092c48c9c45facf97422efc1d"
+checksum = "865edee5b792f537356d9e55cbc138e7f4718dc881a7ea45a18b37bf61c21e3d"
 dependencies = [
  "blake2-rfc",
  "crc32fast",
@@ -6664,7 +6664,7 @@
  "cfg-if 1.0.0",
  "instant",
  "libc",
- "redox_syscall 0.2.10",
+ "redox_syscall 0.2.11",
  "smallvec",
  "winapi 0.3.9",
 ]
@@ -6677,7 +6677,7 @@
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
- "redox_syscall 0.2.10",
+ "redox_syscall 0.2.11",
  "smallvec",
  "windows-sys",
 ]
@@ -6881,7 +6881,7 @@
 dependencies = [
  "derive_more",
  "futures 0.3.21",
- "lru 0.7.2",
+ "lru 0.7.3",
  "parity-scale-codec",
  "polkadot-erasure-coding",
  "polkadot-node-network-protocol",
@@ -6902,7 +6902,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.17#de0ecd4760b146ecf33f5e867d707d789e21e060"
 dependencies = [
  "futures 0.3.21",
- "lru 0.7.2",
+ "lru 0.7.3",
  "parity-scale-codec",
  "polkadot-erasure-coding",
  "polkadot-node-network-protocol",
@@ -7010,7 +7010,7 @@
 dependencies = [
  "derive_more",
  "futures 0.3.21",
- "lru 0.7.2",
+ "lru 0.7.3",
  "parity-scale-codec",
  "polkadot-erasure-coding",
  "polkadot-node-network-protocol",
@@ -7106,7 +7106,7 @@
  "futures 0.3.21",
  "futures-timer",
  "kvdb",
- "lru 0.7.2",
+ "lru 0.7.3",
  "merlin",
  "parity-scale-codec",
  "polkadot-node-jaeger",
@@ -7234,7 +7234,7 @@
 dependencies = [
  "futures 0.3.21",
  "kvdb",
- "lru 0.7.2",
+ "lru 0.7.3",
  "parity-scale-codec",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -7458,7 +7458,7 @@
  "derive_more",
  "futures 0.3.21",
  "itertools",
- "lru 0.7.2",
+ "lru 0.7.3",
  "metered-channel",
  "parity-scale-codec",
  "pin-project 1.0.10",
@@ -7484,7 +7484,7 @@
 dependencies = [
  "futures 0.3.21",
  "futures-timer",
- "lru 0.7.2",
+ "lru 0.7.3",
  "parity-util-mem",
  "parking_lot 0.11.2",
  "polkadot-node-metrics",
@@ -7830,7 +7830,7 @@
  "kusama-runtime",
  "kvdb",
  "kvdb-rocksdb",
- "lru 0.7.2",
+ "lru 0.7.3",
  "pallet-babe",
  "pallet-im-online",
  "pallet-mmr-primitives",
@@ -8427,9 +8427,9 @@
 
 [[package]]
 name = "redox_syscall"
-version = "0.2.10"
+version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
 dependencies = [
  "bitflags",
 ]
@@ -8441,7 +8441,7 @@
 checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
 dependencies = [
  "getrandom 0.2.5",
- "redox_syscall 0.2.10",
+ "redox_syscall 0.2.11",
 ]
 
 [[package]]
@@ -8564,9 +8564,9 @@
 
 [[package]]
 name = "retain_mut"
-version = "0.1.6"
+version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51dd4445360338dab5116712bee1388dc727991d51969558a8882ab552e6db30"
+checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086"
 
 [[package]]
 name = "ring"
@@ -9438,7 +9438,7 @@
  "linked-hash-map",
  "linked_hash_set",
  "log",
- "lru 0.7.2",
+ "lru 0.7.3",
  "parity-scale-codec",
  "parking_lot 0.11.2",
  "pin-project 1.0.10",
@@ -9475,7 +9475,7 @@
  "futures-timer",
  "libp2p",
  "log",
- "lru 0.7.2",
+ "lru 0.7.3",
  "sc-network",
  "sp-runtime",
  "substrate-prometheus-endpoint",
@@ -10350,7 +10350,7 @@
 dependencies = [
  "futures 0.3.21",
  "log",
- "lru 0.7.2",
+ "lru 0.7.3",
  "parity-scale-codec",
  "parking_lot 0.11.2",
  "sp-api",
@@ -11218,16 +11218,16 @@
  "cfg-if 1.0.0",
  "fastrand",
  "libc",
- "redox_syscall 0.2.10",
+ "redox_syscall 0.2.11",
  "remove_dir_all",
  "winapi 0.3.9",
 ]
 
 [[package]]
 name = "termcolor"
-version = "1.1.2"
+version = "1.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
 dependencies = [
  "winapi-util",
 ]
@@ -11246,9 +11246,9 @@
 
 [[package]]
 name = "textwrap"
-version = "0.14.2"
+version = "0.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
 
 [[package]]
 name = "thiserror"
@@ -11761,7 +11761,7 @@
 
 [[package]]
 name = "unique-node"
-version = "0.9.16"
+version = "0.9.17"
 dependencies = [
  "clap",
  "cumulus-client-cli",
@@ -11884,7 +11884,7 @@
 
 [[package]]
 name = "unique-runtime"
-version = "0.9.16"
+version = "0.9.17"
 dependencies = [
  "cumulus-pallet-aura-ext",
  "cumulus-pallet-dmp-queue",
@@ -12042,7 +12042,7 @@
 [[package]]
 name = "up-sponsorship"
 version = "0.1.0"
-source = "git+https://github.com/UniqueNetwork/pallet-sponsoring?branch=polkadot-v0.9.17#d9553babbc1cfdd44794cb0118dbb1491670e97e"
+source = "git+https://github.com/UniqueNetwork/pallet-sponsoring?branch=polkadot-v0.9.17#28f311f8de67155865d362f6ded1d0d5229f3202"
 dependencies = [
  "impl-trait-for-tuples",
 ]
@@ -12805,9 +12805,9 @@
 
 [[package]]
 name = "zeroize"
-version = "1.5.2"
+version = "1.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c88870063c39ee00ec285a2f8d6a966e5b6fb2becc4e8dac77ed0d370ed6006"
+checksum = "50344758e2f40e3a1fcfc8f6f91aa57b5f8ebd8d27919fe6451f15aaaf9ee608"
 dependencies = [
  "zeroize_derive",
 ]
modifiedLICENSEdiffbeforeafterboth
--- a/LICENSE
+++ b/LICENSE
@@ -1,15 +1,674 @@
-USETECH PROFESSIONAL CONFIDENTIAL
-__________________
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
 
- [2019] - [2021] UseTech Professional LTD. 
- All Rights Reserved.
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
 
-NOTICE:  All information contained herein is, and remains
-the property of UseTech Professional LTD. and its suppliers,
-if any. The intellectual and technical concepts contained
-herein are proprietary to UseTech Professional LTD.
-and its suppliers and may be covered by U.S. and Foreign Patents,
-patents in process, and are protected by trade secret or copyright law.
-Dissemination of this information or reproduction of this material
-is strictly forbidden unless prior written permission is obtained
-from UseTech Professional LTD..
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {one line to give the program's name and a brief idea of what it does.}
+    Copyright (C) {year}  {name of author}
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    {project}  Copyright (C) {year}  {fullname}
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
\ No newline at end of file
modifiedMakefilediffbeforeafterboth
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,7 @@
 	cargo run --release --features runtime-benchmarks -- \
 	benchmark --pallet pallet-$(PALLET) \
 	--wasm-execution compiled --extrinsic '*' \
-	--template .maintain/frame-weight-template.hbs --steps=50 --repeat=20 \
+	--template .maintain/frame-weight-template.hbs --steps=50 --repeat=200 --heap-pages=4096 \
 	--output=./pallets/$(PALLET)/src/weights.rs
 
 .PHONY: bench-evm-migration
modifiedclient/rpc/Cargo.tomldiffbeforeafterboth
--- a/client/rpc/Cargo.toml
+++ b/client/rpc/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "uc-rpc"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies]
modifiedclient/rpc/src/lib.rsdiffbeforeafterboth
--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use std::sync::Arc;
 
 use codec::Decode;
modifiedcrates/evm-coder-macros/Cargo.tomldiffbeforeafterboth
--- a/crates/evm-coder-macros/Cargo.toml
+++ b/crates/evm-coder-macros/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "evm-coder-macros"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [lib]
modifiedcrates/evm-coder-macros/src/lib.rsdiffbeforeafterboth
--- a/crates/evm-coder-macros/src/lib.rs
+++ b/crates/evm-coder-macros/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![allow(dead_code)]
 
 use darling::FromMeta;
modifiedcrates/evm-coder-macros/src/solidity_interface.rsdiffbeforeafterboth
--- a/crates/evm-coder-macros/src/solidity_interface.rs
+++ b/crates/evm-coder-macros/src/solidity_interface.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![allow(dead_code)]
 
 use quote::quote;
modifiedcrates/evm-coder-macros/src/to_log.rsdiffbeforeafterboth
--- a/crates/evm-coder-macros/src/to_log.rs
+++ b/crates/evm-coder-macros/src/to_log.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use inflector::cases;
 use syn::{Data, DeriveInput, Field, Fields, Ident, Variant, spanned::Spanned};
 use std::fmt::Write;
modifiedcrates/evm-coder/Cargo.tomldiffbeforeafterboth
--- a/crates/evm-coder/Cargo.toml
+++ b/crates/evm-coder/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "evm-coder"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies]
modifiedcrates/evm-coder/src/abi.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/abi.rs
+++ b/crates/evm-coder/src/abi.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 //! TODO: I misunterstood therminology, abi IS rlp encoded, so
 //! this module should be replaced with rlp crate
 
modifiedcrates/evm-coder/src/events.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/events.rs
+++ b/crates/evm-coder/src/events.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use ethereum::Log;
 use primitive_types::{H160, H256};
 
modifiedcrates/evm-coder/src/execution.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/execution.rs
+++ b/crates/evm-coder/src/execution.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #[cfg(not(feature = "std"))]
 use alloc::string::{String, ToString};
 use evm_core::{ExitError, ExitFatal};
modifiedcrates/evm-coder/src/lib.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/lib.rs
+++ b/crates/evm-coder/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 #[cfg(not(feature = "std"))]
 extern crate alloc;
modifiedcrates/evm-coder/src/solidity.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/solidity.rs
+++ b/crates/evm-coder/src/solidity.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #[cfg(not(feature = "std"))]
 use alloc::{
 	string::String,
modifiedcrates/evm-coder/tests/generics.rsdiffbeforeafterboth
--- a/crates/evm-coder/tests/generics.rs
+++ b/crates/evm-coder/tests/generics.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use std::marker::PhantomData;
 use evm_coder::{execution::Result, generate_stubgen, solidity_interface, types::*};
 
modifiedcrates/evm-coder/tests/log.rsdiffbeforeafterboth
--- a/crates/evm-coder/tests/log.rs
+++ b/crates/evm-coder/tests/log.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![allow(dead_code)]
 
 use evm_coder::{ToLog, types::*};
modifiedcrates/evm-coder/tests/random.rsdiffbeforeafterboth
--- a/crates/evm-coder/tests/random.rs
+++ b/crates/evm-coder/tests/random.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![allow(dead_code)] // This test only checks that macros is not panicking
 
 use evm_coder::{ToLog, execution::Result, solidity_interface, types::*};
modifiedcrates/evm-coder/tests/solidity_generation.rsdiffbeforeafterboth
--- a/crates/evm-coder/tests/solidity_generation.rs
+++ b/crates/evm-coder/tests/solidity_generation.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use evm_coder::{execution::Result, generate_stubgen, solidity_interface, types::*};
 
 struct ERC20;
modifiednode/cli/Cargo.tomldiffbeforeafterboth
--- a/node/cli/Cargo.toml
+++ b/node/cli/Cargo.toml
@@ -254,10 +254,10 @@
 description = 'Unique Node'
 edition = '2021'
 homepage = 'https://unique.network'
-license = 'All Rights Reserved'
+license = 'GPLv3'
 name = 'unique-node'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.16'
+version = '0.9.17'
 
 [[bin]]
 name = 'unique-collator'
modifiednode/cli/build.rsdiffbeforeafterboth
--- a/node/cli/build.rs
+++ b/node/cli/build.rs
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed};
 
modifiednode/cli/src/chain_spec.rsdiffbeforeafterboth
--- a/node/cli/src/chain_spec.rs
+++ b/node/cli/src/chain_spec.rs
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use cumulus_primitives_core::ParaId;
 use unique_runtime::*;
modifiednode/cli/src/cli.rsdiffbeforeafterboth
--- a/node/cli/src/cli.rs
+++ b/node/cli/src/cli.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use crate::chain_spec;
 use std::path::PathBuf;
 use clap::Parser;
modifiednode/cli/src/command.rsdiffbeforeafterboth
--- a/node/cli/src/command.rs
+++ b/node/cli/src/command.rs
@@ -1,3 +1,20 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+// Original license
 // This file is part of Substrate.
 
 // Copyright (C) 2017-2021 Parity Technologies (UK) Ltd.
modifiednode/cli/src/lib.rsdiffbeforeafterboth
--- a/node/cli/src/lib.rs
+++ b/node/cli/src/lib.rs
@@ -1,2 +1,18 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 pub mod chain_spec;
 pub mod service;
modifiednode/cli/src/main.rsdiffbeforeafterboth
--- a/node/cli/src/main.rs
+++ b/node/cli/src/main.rs
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 mod chain_spec;
 #[macro_use]
modifiednode/cli/src/service.rsdiffbeforeafterboth
--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -1,9 +1,20 @@
-//! Service and ServiceFactory implementation. Specialized wrapper over substrate service.
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
 
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+//! Service and ServiceFactory implementation. Specialized wrapper over substrate service.
 
 // std
 use std::sync::Arc;
modifiednode/rpc/Cargo.tomldiffbeforeafterboth
--- a/node/rpc/Cargo.toml
+++ b/node/rpc/Cargo.toml
@@ -2,7 +2,7 @@
 name = "unique-rpc"
 version = "0.1.0"
 authors = ['Unique Network <support@uniquenetwork.io>']
-license = 'All Rights Reserved'
+license = 'GPLv3'
 edition = "2021"
 description = "Unique chain rpc"
 
modifiednode/rpc/src/lib.rsdiffbeforeafterboth
--- a/node/rpc/src/lib.rs
+++ b/node/rpc/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use sp_runtime::traits::BlakeTwo256;
 use unique_runtime::{Hash, AccountId, CrossAccountId, Index, opaque::Block, BlockNumber, Balance};
 use fc_rpc::{
modifiedpallets/common/Cargo.tomldiffbeforeafterboth
--- a/pallets/common/Cargo.toml
+++ b/pallets/common/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "pallet-common"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies.codec]
modifiedpallets/common/src/account.rsdiffbeforeafterboth
--- a/pallets/common/src/account.rs
+++ b/pallets/common/src/account.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use crate::Config;
 use codec::{Encode, EncodeLike, Decode, MaxEncodedLen};
 use sp_core::H160;
modifiedpallets/common/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/common/src/benchmarking.rs
+++ b/pallets/common/src/benchmarking.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use sp_std::vec::Vec;
 use crate::{Config, CollectionHandle};
 use up_data_structs::{
modifiedpallets/common/src/erc.rsdiffbeforeafterboth
--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 pub use pallet_evm::PrecompileOutput;
 pub use pallet_evm::PrecompileResult;
 use sp_core::{H160, U256};
modifiedpallets/common/src/eth.rsdiffbeforeafterboth
--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use up_data_structs::{CollectionId, TokenId};
 use sp_core::H160;
 
modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use core::ops::{Deref, DerefMut};
modifiedpallets/evm-coder-substrate/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-coder-substrate/Cargo.toml
+++ b/pallets/evm-coder-substrate/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "pallet-evm-coder-substrate"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies]
modifiedpallets/evm-coder-substrate/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/evm-coder-substrate/src/benchmarking.rs
+++ b/pallets/evm-coder-substrate/src/benchmarking.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use super::*;
 
 use frame_benchmarking::benchmarks;
modifiedpallets/evm-coder-substrate/src/lib.rsdiffbeforeafterboth
--- a/pallets/evm-coder-substrate/src/lib.rs
+++ b/pallets/evm-coder-substrate/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 #[cfg(not(feature = "std"))]
modifiedpallets/evm-contract-helpers/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-contract-helpers/Cargo.toml
+++ b/pallets/evm-contract-helpers/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "pallet-evm-contract-helpers"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies]
modifiedpallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth
--- a/pallets/evm-contract-helpers/src/eth.rs
+++ b/pallets/evm-contract-helpers/src/eth.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use core::marker::PhantomData;
 use evm_coder::{abi::AbiWriter, execution::Result, generate_stubgen, solidity_interface, types::*};
 use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder};
modifiedpallets/evm-contract-helpers/src/lib.rsdiffbeforeafterboth
--- a/pallets/evm-contract-helpers/src/lib.rs
+++ b/pallets/evm-contract-helpers/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use codec::{Decode, Encode, MaxEncodedLen};
modifiedpallets/evm-migration/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-migration/Cargo.toml
+++ b/pallets/evm-migration/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "pallet-evm-migration"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies]
modifiedpallets/evm-migration/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/evm-migration/src/benchmarking.rs
+++ b/pallets/evm-migration/src/benchmarking.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use super::{Call, Config, Pallet};
 use frame_benchmarking::benchmarks;
 use frame_system::RawOrigin;
modifiedpallets/evm-migration/src/lib.rsdiffbeforeafterboth
--- a/pallets/evm-migration/src/lib.rs
+++ b/pallets/evm-migration/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 pub use pallet::*;
modifiedpallets/evm-migration/src/weights.rsdiffbeforeafterboth
--- a/pallets/evm-migration/src/weights.rs
+++ b/pallets/evm-migration/src/weights.rs
@@ -2,9 +2,9 @@
 
 //! Autogenerated weights for pallet_evm_migration
 //!
-//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0
-//! DATE: 2021-08-12, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 128
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
@@ -18,10 +18,10 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=20
+// --repeat=200
+// --heap-pages=4096
 // --output=./pallets/evm-migration/src/weights.rs
 
-
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
 #![allow(unused_imports)]
@@ -40,20 +40,29 @@
 /// Weights for pallet_evm_migration using the Substrate node and recommended hardware.
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
+	// Storage: EvmMigration MigrationPending (r:1 w:1)
+	// Storage: System Account (r:1 w:0)
+	// Storage: EVM AccountCodes (r:1 w:0)
 	fn begin() -> Weight {
-		(6_210_000 as Weight)
+		(6_441_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
+	// Storage: EvmMigration MigrationPending (r:1 w:0)
+	// Storage: EVM AccountStorages (r:0 w:1)
 	fn set_data(b: u32, ) -> Weight {
-		(2_926_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((649_000 as Weight).saturating_mul(b as Weight))
+		(3_424_000 as Weight)
+			// Standard Error: 0
+			.saturating_add((973_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
 	}
-	fn finish(_b: u32, ) -> Weight {
-		(4_309_000 as Weight)
+	// Storage: EvmMigration MigrationPending (r:1 w:1)
+	// Storage: EVM AccountCodes (r:0 w:1)
+	fn finish(b: u32, ) -> Weight {
+		(4_702_000 as Weight)
+			// Standard Error: 0
+			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -61,21 +70,30 @@
 
 // For backwards compatibility and tests
 impl WeightInfo for () {
+	// Storage: EvmMigration MigrationPending (r:1 w:1)
+	// Storage: System Account (r:1 w:0)
+	// Storage: EVM AccountCodes (r:1 w:0)
 	fn begin() -> Weight {
-		(6_210_000 as Weight)
+		(6_441_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
+	// Storage: EvmMigration MigrationPending (r:1 w:0)
+	// Storage: EVM AccountStorages (r:0 w:1)
 	fn set_data(b: u32, ) -> Weight {
-		(2_926_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((649_000 as Weight).saturating_mul(b as Weight))
+		(3_424_000 as Weight)
+			// Standard Error: 0
+			.saturating_add((973_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
 	}
-	fn finish(_b: u32, ) -> Weight {
-		(4_309_000 as Weight)
+	// Storage: EvmMigration MigrationPending (r:1 w:1)
+	// Storage: EVM AccountCodes (r:0 w:1)
+	fn finish(b: u32, ) -> Weight {
+		(4_702_000 as Weight)
+			// Standard Error: 0
+			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
-}
\ No newline at end of file
+}
modifiedpallets/evm-transaction-payment/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-transaction-payment/Cargo.toml
+++ b/pallets/evm-transaction-payment/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "pallet-evm-transaction-payment"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies]
modifiedpallets/evm-transaction-payment/src/lib.rsdiffbeforeafterboth
--- a/pallets/evm-transaction-payment/src/lib.rs
+++ b/pallets/evm-transaction-payment/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use core::marker::PhantomData;
modifiedpallets/fungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/fungible/Cargo.toml
+++ b/pallets/fungible/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "pallet-fungible"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies.codec]
modifiedpallets/fungible/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/fungible/src/benchmarking.rs
+++ b/pallets/fungible/src/benchmarking.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use super::*;
 use crate::{Pallet, Config, FungibleHandle};
 
modifiedpallets/fungible/src/common.rsdiffbeforeafterboth
--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use core::marker::PhantomData;
 
 use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight, BoundedVec};
modifiedpallets/fungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use core::char::{REPLACEMENT_CHARACTER, decode_utf16};
 use core::convert::TryInto;
 use evm_coder::{ToLog, execution::*, generate_stubgen, solidity_interface, types::*, weight};
modifiedpallets/fungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/fungible/src/lib.rs
+++ b/pallets/fungible/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use core::ops::Deref;
modifiedpallets/fungible/src/weights.rsdiffbeforeafterboth
--- a/pallets/fungible/src/weights.rs
+++ b/pallets/fungible/src/weights.rs
@@ -3,8 +3,8 @@
 //! Autogenerated weights for pallet_fungible
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2021-10-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 128
+//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
@@ -18,10 +18,10 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=20
+// --repeat=200
+// --heap-pages=4096
 // --output=./pallets/fungible/src/weights.rs
 
-
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
 #![allow(unused_imports)]
@@ -44,19 +44,19 @@
 /// Weights for pallet_fungible using the Substrate node and recommended hardware.
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
+	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
-	// Storage: Fungible TotalSupply (r:0 w:1)
 	fn create_item() -> Weight {
-		(12_069_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
+		(14_407_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:4 w:4)
 	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		(1_055_000 as Weight)
-			// Standard Error: 22_000
-			.saturating_add((5_273_000 as Weight).saturating_mul(b as Weight))
+		(13_030_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((3_779_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -65,27 +65,27 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn burn_item() -> Weight {
-		(14_096_000 as Weight)
+		(15_565_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible Balance (r:2 w:2)
 	fn transfer() -> Weight {
-		(15_436_000 as Weight)
+		(17_713_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible Balance (r:1 w:0)
 	// Storage: Fungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(12_867_000 as Weight)
+		(14_834_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Fungible Allowance (r:1 w:1)
 	// Storage: Fungible Balance (r:2 w:2)
 	fn transfer_from() -> Weight {
-		(21_462_000 as Weight)
+		(25_189_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
@@ -93,7 +93,7 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn burn_from() -> Weight {
-		(55_874_000 as Weight)
+		(24_065_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
@@ -101,19 +101,19 @@
 
 // For backwards compatibility and tests
 impl WeightInfo for () {
+	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
-	// Storage: Fungible TotalSupply (r:0 w:1)
 	fn create_item() -> Weight {
-		(12_069_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
+		(14_407_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:4 w:4)
 	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		(1_055_000 as Weight)
-			// Standard Error: 22_000
-			.saturating_add((5_273_000 as Weight).saturating_mul(b as Weight))
+		(13_030_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((3_779_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
@@ -122,27 +122,27 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn burn_item() -> Weight {
-		(14_096_000 as Weight)
+		(15_565_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible Balance (r:2 w:2)
 	fn transfer() -> Weight {
-		(15_436_000 as Weight)
+		(17_713_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible Balance (r:1 w:0)
 	// Storage: Fungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(12_867_000 as Weight)
+		(14_834_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Fungible Allowance (r:1 w:1)
 	// Storage: Fungible Balance (r:2 w:2)
 	fn transfer_from() -> Weight {
-		(21_462_000 as Weight)
+		(25_189_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
@@ -150,7 +150,7 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn burn_from() -> Weight {
-		(55_874_000 as Weight)
+		(24_065_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
modifiedpallets/inflation/Cargo.tomldiffbeforeafterboth
--- a/pallets/inflation/Cargo.toml
+++ b/pallets/inflation/Cargo.toml
@@ -6,7 +6,7 @@
 description = 'Unique Inflation Pallet'
 edition = '2018'
 homepage = 'https://unique.network'
-license = 'All Rights Reserved'
+license = 'GPLv3'
 name = 'pallet-inflation'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
 version = '0.1.0'
modifiedpallets/inflation/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/inflation/src/benchmarking.rs
+++ b/pallets/inflation/src/benchmarking.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg(feature = "runtime-benchmarks")]
 
 use super::*;
modifiedpallets/inflation/src/lib.rsdiffbeforeafterboth
--- a/pallets/inflation/src/lib.rs
+++ b/pallets/inflation/src/lib.rs
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // #![recursion_limit = "1024"]
 #![cfg_attr(not(feature = "std"), no_std)]
modifiedpallets/inflation/src/tests.rsdiffbeforeafterboth
--- a/pallets/inflation/src/tests.rs
+++ b/pallets/inflation/src/tests.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg(test)]
 #![allow(clippy::from_over_into)]
 use crate as pallet_inflation;
modifiedpallets/nonfungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/nonfungible/Cargo.toml
+++ b/pallets/nonfungible/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "pallet-nonfungible"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies.codec]
modifiedpallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/benchmarking.rs
+++ b/pallets/nonfungible/src/benchmarking.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use super::*;
 use crate::{Pallet, Config, NonfungibleHandle};
 
modifiedpallets/nonfungible/src/common.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use core::marker::PhantomData;
 
 use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight, BoundedVec};
modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use core::{
 	char::{REPLACEMENT_CHARACTER, decode_utf16},
 	convert::TryInto,
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use erc::ERC721Events;
modifiedpallets/nonfungible/src/weights.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/weights.rs
+++ b/pallets/nonfungible/src/weights.rs
@@ -3,8 +3,8 @@
 //! Autogenerated weights for pallet_nonfungible
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2021-10-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 128
+//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
@@ -18,9 +18,9 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=20
+// --repeat=200
+// --heap-pages=4096
 // --output=./pallets/nonfungible/src/weights.rs
-
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
@@ -51,7 +51,7 @@
 	// Storage: Nonfungible TokenData (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(16_902_000 as Weight)
+		(18_450_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -60,9 +60,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:4)
 	// Storage: Nonfungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(15_860_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((3_916_000 as Weight).saturating_mul(b as Weight))
+		(10_228_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((4_392_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(b as Weight)))
@@ -72,9 +72,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:4)
 	// Storage: Nonfungible Owned (r:0 w:4)
 	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		(2_090_000 as Weight)
-			// Standard Error: 10_000
-			.saturating_add((9_230_000 as Weight).saturating_mul(b as Weight))
+		(6_543_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((7_175_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -82,26 +82,27 @@
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn burn_item() -> Weight {
-		(17_966_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(3 as Weight))
-			.saturating_add(T::DbWeight::get().writes(3 as Weight))
+		(24_554_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
 	// Storage: Nonfungible AccountBalance (r:2 w:2)
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn transfer() -> Weight {
-		(23_886_000 as Weight)
+		(28_339_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:0)
 	// Storage: Nonfungible Allowance (r:1 w:1)
 	fn approve() -> Weight {
-		(14_697_000 as Weight)
+		(17_616_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -110,22 +111,23 @@
 	// Storage: Nonfungible AccountBalance (r:2 w:2)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn transfer_from() -> Weight {
-		(28_001_000 as Weight)
+		(32_196_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Nonfungible Allowance (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:1 w:1)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn burn_from() -> Weight {
-		(53_429_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(3 as Weight))
-			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+		(27_580_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
 	fn set_variable_metadata(_b: u32, ) -> Weight {
-		(6_380_000 as Weight)
+		(7_700_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -138,7 +140,7 @@
 	// Storage: Nonfungible TokenData (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(16_902_000 as Weight)
+		(18_450_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -147,9 +149,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:4)
 	// Storage: Nonfungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(15_860_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((3_916_000 as Weight).saturating_mul(b as Weight))
+		(10_228_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((4_392_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(b as Weight)))
@@ -159,9 +161,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:4)
 	// Storage: Nonfungible Owned (r:0 w:4)
 	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		(2_090_000 as Weight)
-			// Standard Error: 10_000
-			.saturating_add((9_230_000 as Weight).saturating_mul(b as Weight))
+		(6_543_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((7_175_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
@@ -169,26 +171,27 @@
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn burn_item() -> Weight {
-		(17_966_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
+		(24_554_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
 	// Storage: Nonfungible AccountBalance (r:2 w:2)
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn transfer() -> Weight {
-		(23_886_000 as Weight)
+		(28_339_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:0)
 	// Storage: Nonfungible Allowance (r:1 w:1)
 	fn approve() -> Weight {
-		(14_697_000 as Weight)
+		(17_616_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -197,22 +200,23 @@
 	// Storage: Nonfungible AccountBalance (r:2 w:2)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn transfer_from() -> Weight {
-		(28_001_000 as Weight)
+		(32_196_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Nonfungible Allowance (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:1 w:1)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn burn_from() -> Weight {
-		(53_429_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+		(27_580_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
 	fn set_variable_metadata(_b: u32, ) -> Weight {
-		(6_380_000 as Weight)
+		(7_700_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
modifiedpallets/refungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/refungible/Cargo.toml
+++ b/pallets/refungible/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "pallet-refungible"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies.codec]
modifiedpallets/refungible/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/refungible/src/benchmarking.rs
+++ b/pallets/refungible/src/benchmarking.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use super::*;
 use crate::{Pallet, Config, RefungibleHandle};
 
modifiedpallets/refungible/src/common.rsdiffbeforeafterboth
--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use core::marker::PhantomData;
 
 use sp_std::collections::btree_map::BTreeMap;
modifiedpallets/refungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use up_data_structs::TokenId;
 use pallet_common::erc::CommonEvmHandler;
 
modifiedpallets/refungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use frame_support::{ensure, BoundedVec};
modifiedpallets/refungible/src/weights.rsdiffbeforeafterboth
--- a/pallets/refungible/src/weights.rs
+++ b/pallets/refungible/src/weights.rs
@@ -3,8 +3,8 @@
 //! Autogenerated weights for pallet_refungible
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2021-10-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 128
+//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
@@ -18,10 +18,10 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=20
+// --repeat=200
+// --heap-pages=4096
 // --output=./pallets/refungible/src/weights.rs
 
-
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
 #![allow(unused_imports)]
@@ -61,7 +61,7 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(18_681_000 as Weight)
+		(21_255_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
@@ -72,9 +72,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(13_869_000 as Weight)
-			// Standard Error: 28_000
-			.saturating_add((5_611_000 as Weight).saturating_mul(b as Weight))
+		(18_052_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((5_549_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
@@ -86,9 +86,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight {
-		(11_953_000 as Weight)
-			// Standard Error: 27_000
-			.saturating_add((10_775_000 as Weight).saturating_mul(b as Weight))
+		(15_766_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((8_187_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -101,9 +101,9 @@
 	// Storage: Refungible Balance (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight {
-		(0 as Weight)
-			// Standard Error: 13_000
-			.saturating_add((8_528_000 as Weight).saturating_mul(b as Weight))
+		(5_675_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((6_315_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
@@ -114,7 +114,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_partial() -> Weight {
-		(21_591_000 as Weight)
+		(23_518_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -125,13 +125,13 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_fully() -> Weight {
-		(29_257_000 as Weight)
+		(32_489_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_normal() -> Weight {
-		(17_733_000 as Weight)
+		(19_766_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -139,7 +139,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_creating() -> Weight {
-		(20_943_000 as Weight)
+		(23_360_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -147,7 +147,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_removing() -> Weight {
-		(22_406_000 as Weight)
+		(25_344_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -155,21 +155,21 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_creating_removing() -> Weight {
-		(24_762_000 as Weight)
+		(28_553_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:1 w:0)
 	// Storage: Refungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(14_109_000 as Weight)
+		(15_356_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Refungible Allowance (r:1 w:1)
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_from_normal() -> Weight {
-		(25_348_000 as Weight)
+		(28_832_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
@@ -178,7 +178,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_creating() -> Weight {
-		(28_647_000 as Weight)
+		(32_132_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -187,7 +187,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_removing() -> Weight {
-		(30_472_000 as Weight)
+		(33_237_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -196,7 +196,7 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_from_creating_removing() -> Weight {
-		(32_362_000 as Weight)
+		(36_399_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(7 as Weight))
 	}
@@ -208,13 +208,13 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_from() -> Weight {
-		(60_903_000 as Weight)
+		(42_043_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(7 as Weight))
 	}
 	// Storage: Refungible TokenData (r:1 w:1)
 	fn set_variable_metadata(_b: u32, ) -> Weight {
-		(6_801_000 as Weight)
+		(7_364_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -229,7 +229,7 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(18_681_000 as Weight)
+		(21_255_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
@@ -240,9 +240,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(13_869_000 as Weight)
-			// Standard Error: 28_000
-			.saturating_add((5_611_000 as Weight).saturating_mul(b as Weight))
+		(18_052_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((5_549_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
@@ -254,9 +254,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight {
-		(11_953_000 as Weight)
-			// Standard Error: 27_000
-			.saturating_add((10_775_000 as Weight).saturating_mul(b as Weight))
+		(15_766_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((8_187_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
@@ -269,9 +269,9 @@
 	// Storage: Refungible Balance (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight {
-		(0 as Weight)
-			// Standard Error: 13_000
-			.saturating_add((8_528_000 as Weight).saturating_mul(b as Weight))
+		(5_675_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((6_315_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
@@ -282,7 +282,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_partial() -> Weight {
-		(21_591_000 as Weight)
+		(23_518_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -293,13 +293,13 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_fully() -> Weight {
-		(29_257_000 as Weight)
+		(32_489_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_normal() -> Weight {
-		(17_733_000 as Weight)
+		(19_766_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -307,7 +307,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_creating() -> Weight {
-		(20_943_000 as Weight)
+		(23_360_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -315,7 +315,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_removing() -> Weight {
-		(22_406_000 as Weight)
+		(25_344_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -323,21 +323,21 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_creating_removing() -> Weight {
-		(24_762_000 as Weight)
+		(28_553_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:1 w:0)
 	// Storage: Refungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(14_109_000 as Weight)
+		(15_356_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Refungible Allowance (r:1 w:1)
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_from_normal() -> Weight {
-		(25_348_000 as Weight)
+		(28_832_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
@@ -346,7 +346,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_creating() -> Weight {
-		(28_647_000 as Weight)
+		(32_132_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -355,7 +355,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_removing() -> Weight {
-		(30_472_000 as Weight)
+		(33_237_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -364,7 +364,7 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_from_creating_removing() -> Weight {
-		(32_362_000 as Weight)
+		(36_399_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(7 as Weight))
 	}
@@ -376,13 +376,13 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_from() -> Weight {
-		(60_903_000 as Weight)
+		(42_043_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(7 as Weight))
 	}
 	// Storage: Refungible TokenData (r:1 w:1)
 	fn set_variable_metadata(_b: u32, ) -> Weight {
-		(6_801_000 as Weight)
+		(7_364_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
modifiedpallets/scheduler/Cargo.tomldiffbeforeafterboth
--- a/pallets/scheduler/Cargo.toml
+++ b/pallets/scheduler/Cargo.toml
@@ -3,7 +3,7 @@
 version = "0.1.0"
 authors = ["Unique Network <support@uniquenetwork.io>"]
 edition = "2021"
-license = "All Rights Reserved"
+license = "GPLv3"
 homepage = "https://unique.network"
 repository = "https://github.com/UniqueNetwork/unique-chain"
 description = "Unique Scheduler pallet"
modifiedpallets/scheduler/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/scheduler/src/benchmarking.rs
+++ b/pallets/scheduler/src/benchmarking.rs
@@ -1,3 +1,20 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+// Original license
 // This file is part of Substrate.
 
 // Copyright (C) 2020-2021 Parity Technologies (UK) Ltd.
modifiedpallets/scheduler/src/lib.rsdiffbeforeafterboth
--- a/pallets/scheduler/src/lib.rs
+++ b/pallets/scheduler/src/lib.rs
@@ -1,3 +1,20 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+// Original license
 // This file is part of Substrate.
 
 // Copyright (C) 2017-2021 Parity Technologies (UK) Ltd.
modifiedpallets/scheduler/src/weights.rsdiffbeforeafterboth
--- a/pallets/scheduler/src/weights.rs
+++ b/pallets/scheduler/src/weights.rs
@@ -1,3 +1,20 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+// Original license
 // This file is part of Substrate.
 
 // Copyright (C) 2020-2021 Parity Technologies (UK) Ltd.
modifiedpallets/unique/Cargo.tomldiffbeforeafterboth
--- a/pallets/unique/Cargo.toml
+++ b/pallets/unique/Cargo.toml
@@ -6,7 +6,7 @@
 description = 'Unique Pallet'
 edition = '2018'
 homepage = 'https://unique.network'
-license = 'All Rights Reserved'
+license = 'GPLv3'
 name = 'pallet-unique'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
 version = '0.1.0'
modifiedpallets/unique/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/unique/src/benchmarking.rs
+++ b/pallets/unique/src/benchmarking.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg(feature = "runtime-benchmarks")]
 
 use super::*;
modifiedpallets/unique/src/common.rsdiffbeforeafterboth
--- a/pallets/unique/src/common.rs
+++ b/pallets/unique/src/common.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use core::marker::PhantomData;
 use frame_support::{weights::Weight};
 use pallet_common::{CommonWeightInfo};
modifiedpallets/unique/src/dispatch.rsdiffbeforeafterboth
--- a/pallets/unique/src/dispatch.rs
+++ b/pallets/unique/src/dispatch.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use frame_support::{
 	dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo},
 	traits::Get,
modifiedpallets/unique/src/eth/mod.rsdiffbeforeafterboth
--- a/pallets/unique/src/eth/mod.rs
+++ b/pallets/unique/src/eth/mod.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 pub mod sponsoring;
 
 use fp_evm::PrecompileResult;
modifiedpallets/unique/src/eth/sponsoring.rsdiffbeforeafterboth
--- a/pallets/unique/src/eth/sponsoring.rs
+++ b/pallets/unique/src/eth/sponsoring.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 //! Implements EVM sponsoring logic via OnChargeEVMTransaction
 
 use crate::{Config, sponsorship::*};
modifiedpallets/unique/src/lib.rsdiffbeforeafterboth
--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 #![recursion_limit = "1024"]
 #![cfg_attr(not(feature = "std"), no_std)]
modifiedpallets/unique/src/mock.rsdiffbeforeafterboth
--- a/pallets/unique/src/mock.rs
+++ b/pallets/unique/src/mock.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![allow(clippy::from_over_into)]
 
 use crate as pallet_template;
modifiedpallets/unique/src/sponsorship.rsdiffbeforeafterboth
--- a/pallets/unique/src/sponsorship.rs
+++ b/pallets/unique/src/sponsorship.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use crate::{
 	Config, Call, CreateItemBasket, VariableMetaDataBasket, ReFungibleTransferBasket,
 	FungibleTransferBasket, NftTransferBasket, CreateItemData, CollectionMode, NftApproveBasket,
modifiedpallets/unique/src/tests.rsdiffbeforeafterboth
--- a/pallets/unique/src/tests.rs
+++ b/pallets/unique/src/tests.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 // Tests to be written here
 use super::*;
 use crate::mock::*;
modifiedpallets/unique/src/weights.rsdiffbeforeafterboth
--- a/pallets/unique/src/weights.rs
+++ b/pallets/unique/src/weights.rs
@@ -3,8 +3,8 @@
 //! Autogenerated weights for pallet_unique
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2021-10-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 128
+//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
@@ -18,9 +18,9 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=20
+// --repeat=200
+// --heap-pages=4096
 // --output=./pallets/unique/src/weights.rs
-
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
@@ -61,7 +61,7 @@
 	// Storage: System Account (r:2 w:2)
 	// Storage: Common CollectionById (r:0 w:1)
 	fn create_collection() -> Weight {
-		(23_803_000 as Weight)
+		(28_929_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -69,116 +69,117 @@
 	// Storage: Common DestroyedCollectionCount (r:1 w:1)
 	// Storage: Nonfungible TokensMinted (r:0 w:1)
 	// Storage: Nonfungible TokensBurnt (r:0 w:1)
+	// Storage: Common AdminAmount (r:0 w:1)
 	fn destroy_collection() -> Weight {
-		(27_831_000 as Weight)
+		(40_303_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
-			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn add_to_allow_list() -> Weight {
-		(6_629_000 as Weight)
+		(15_989_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn remove_from_allow_list() -> Weight {
-		(6_596_000 as Weight)
+		(15_582_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_public_access_mode() -> Weight {
-		(6_338_000 as Weight)
+		(14_846_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_mint_permission() -> Weight {
-		(6_383_000 as Weight)
+		(14_534_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn change_collection_owner() -> Weight {
-		(6_493_000 as Weight)
+		(14_990_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
-	// Storage: Common IsAdmin (r:0 w:1)
+	// Storage: Common IsAdmin (r:1 w:1)
+	// Storage: Common AdminAmount (r:1 w:1)
 	fn add_collection_admin() -> Weight {
-		(6_850_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+		(19_957_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(3 as Weight))
+			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
-	// Storage: Common IsAdmin (r:0 w:1)
+	// Storage: Common IsAdmin (r:1 w:1)
+	// Storage: Common AdminAmount (r:1 w:1)
 	fn remove_collection_admin() -> Weight {
-		(6_615_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+		(21_209_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(3 as Weight))
+			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_sponsor() -> Weight {
-		(6_430_000 as Weight)
+		(14_963_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn confirm_sponsorship() -> Weight {
-		(6_125_000 as Weight)
+		(14_478_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn remove_collection_sponsor() -> Weight {
-		(6_236_000 as Weight)
+		(14_393_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_transfers_enabled_flag() -> Weight {
-		(6_500_000 as Weight)
+		(7_309_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_offchain_schema(_b: u32, ) -> Weight {
-		(6_538_000 as Weight)
+		(15_220_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_const_on_chain_schema(_b: u32, ) -> Weight {
-		(6_542_000 as Weight)
+		(14_984_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
-	fn set_variable_on_chain_schema(b: u32, ) -> Weight {
-		(6_092_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
+	fn set_variable_on_chain_schema(_b: u32, ) -> Weight {
+		(15_196_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_schema_version() -> Weight {
-		(6_470_000 as Weight)
+		(14_596_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_limits() -> Weight {
-		(6_841_000 as Weight)
+		(15_339_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_meta_update_permission_flag() -> Weight {
-		(6_278_000 as Weight)
+		(7_214_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -191,7 +192,7 @@
 	// Storage: System Account (r:2 w:2)
 	// Storage: Common CollectionById (r:0 w:1)
 	fn create_collection() -> Weight {
-		(23_803_000 as Weight)
+		(28_929_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -199,117 +200,118 @@
 	// Storage: Common DestroyedCollectionCount (r:1 w:1)
 	// Storage: Nonfungible TokensMinted (r:0 w:1)
 	// Storage: Nonfungible TokensBurnt (r:0 w:1)
+	// Storage: Common AdminAmount (r:0 w:1)
 	fn destroy_collection() -> Weight {
-		(27_831_000 as Weight)
+		(40_303_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn add_to_allow_list() -> Weight {
-		(6_629_000 as Weight)
+		(15_989_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn remove_from_allow_list() -> Weight {
-		(6_596_000 as Weight)
+		(15_582_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_public_access_mode() -> Weight {
-		(6_338_000 as Weight)
+		(14_846_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_mint_permission() -> Weight {
-		(6_383_000 as Weight)
+		(14_534_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn change_collection_owner() -> Weight {
-		(6_493_000 as Weight)
+		(14_990_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
-	// Storage: Common IsAdmin (r:0 w:1)
+	// Storage: Common IsAdmin (r:1 w:1)
+	// Storage: Common AdminAmount (r:1 w:1)
 	fn add_collection_admin() -> Weight {
-		(6_850_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+		(19_957_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
-	// Storage: Common IsAdmin (r:0 w:1)
+	// Storage: Common IsAdmin (r:1 w:1)
+	// Storage: Common AdminAmount (r:1 w:1)
 	fn remove_collection_admin() -> Weight {
-		(6_615_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+		(21_209_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_sponsor() -> Weight {
-		(6_430_000 as Weight)
+		(14_963_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn confirm_sponsorship() -> Weight {
-		(6_125_000 as Weight)
+		(14_478_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn remove_collection_sponsor() -> Weight {
-		(6_236_000 as Weight)
+		(14_393_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_transfers_enabled_flag() -> Weight {
-		(6_500_000 as Weight)
+		(7_309_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_offchain_schema(_b: u32, ) -> Weight {
-		(6_538_000 as Weight)
+		(15_220_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_const_on_chain_schema(_b: u32, ) -> Weight {
-		(6_542_000 as Weight)
+		(14_984_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
-	fn set_variable_on_chain_schema(b: u32, ) -> Weight {
-		(6_092_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
+	fn set_variable_on_chain_schema(_b: u32, ) -> Weight {
+		(15_196_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_schema_version() -> Weight {
-		(6_470_000 as Weight)
+		(14_596_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_limits() -> Weight {
-		(6_841_000 as Weight)
+		(15_339_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_meta_update_permission_flag() -> Weight {
-		(6_278_000 as Weight)
+		(7_214_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
-}
\ No newline at end of file
+}
modifiedprimitives/data-structs/Cargo.tomldiffbeforeafterboth
--- a/primitives/data-structs/Cargo.toml
+++ b/primitives/data-structs/Cargo.toml
@@ -3,7 +3,7 @@
 authors = ["Unique Network <support@uniquenetwork.io>"]
 description = "Unique data structs definitions"
 edition = "2021"
-license = 'All Rights Reserved'
+license = 'GPLv3'
 homepage = "https://unique.network"
 repository = 'https://github.com/UniqueNetwork/unique-chain'
 version = '0.1.0'
modifiedprimitives/data-structs/src/lib.rsdiffbeforeafterboth
--- a/primitives/data-structs/src/lib.rs
+++ b/primitives/data-structs/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use core::{
modifiedprimitives/data-structs/src/migration.rsdiffbeforeafterboth
--- a/primitives/data-structs/src/migration.rs
+++ b/primitives/data-structs/src/migration.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /// Storage migration is not required for this change, as SponsoringRateLimit has same encoding as Option<u32>
 #[test]
 fn sponsoring_rate_limit_has_same_encoding_as_option_u32() {
modifiedprimitives/evm-mapping/Cargo.tomldiffbeforeafterboth
--- a/primitives/evm-mapping/Cargo.toml
+++ b/primitives/evm-mapping/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "up-evm-mapping"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies]
modifiedprimitives/evm-mapping/src/lib.rsdiffbeforeafterboth
--- a/primitives/evm-mapping/src/lib.rs
+++ b/primitives/evm-mapping/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use frame_support::sp_runtime::AccountId32;
modifiedprimitives/rpc/Cargo.tomldiffbeforeafterboth
--- a/primitives/rpc/Cargo.toml
+++ b/primitives/rpc/Cargo.toml
@@ -1,6 +1,7 @@
 [package]
 name = "up-rpc"
 version = "0.1.0"
+license = "GPLv3"
 edition = "2021"
 
 [dependencies]
modifiedprimitives/rpc/src/lib.rsdiffbeforeafterboth
--- a/primitives/rpc/src/lib.rs
+++ b/primitives/rpc/src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use up_data_structs::{CollectionId, TokenId, Collection, CollectionStats};
modifiedruntime/Cargo.tomldiffbeforeafterboth
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -7,10 +7,10 @@
 description = 'Unique Runtime'
 edition = '2021'
 homepage = 'https://unique.network'
-license = 'All Rights Reserved'
+license = 'GPLv3'
 name = 'unique-runtime'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.16'
+version = '0.9.17'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
modifiedruntime/build.rsdiffbeforeafterboth
--- a/runtime/build.rs
+++ b/runtime/build.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 use substrate_wasm_builder::WasmBuilder;
 
 fn main() {
modifiedruntime/src/lib.rsdiffbeforeafterboth
before · runtime/src/lib.rs
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56//! The Substrate Node Template runtime. This can be compiled with `#[no_std]`, ready for Wasm.78#![cfg_attr(not(feature = "std"), no_std)]9// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256.10#![recursion_limit = "1024"]11#![allow(clippy::from_over_into, clippy::identity_op)]12#![allow(clippy::fn_to_numeric_cast_with_truncation)]13// Make the WASM binary available.14#[cfg(feature = "std")]15include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));1617use sp_api::impl_runtime_apis;18use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H256, U256, H160};19use sp_runtime::DispatchError;20// #[cfg(any(feature = "std", test))]21// pub use sp_runtime::BuildStorage;2223use sp_runtime::{24	Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys,25	traits::{26		AccountIdLookup, BlakeTwo256, Block as BlockT, IdentifyAccount, Verify,27		AccountIdConversion, Zero,28	},29	transaction_validity::{TransactionSource, TransactionValidity},30	ApplyExtrinsicResult, MultiSignature, RuntimeAppPublic,31};3233use sp_std::prelude::*;3435#[cfg(feature = "std")]36use sp_version::NativeVersion;37use sp_version::RuntimeVersion;38pub use pallet_transaction_payment::{39	Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo,40};41// A few exports that help ease life for downstream crates.42pub use pallet_balances::Call as BalancesCall;43pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner};44pub use frame_support::{45	construct_runtime, match_type,46	dispatch::DispatchResult,47	PalletId, parameter_types, StorageValue, ConsensusEngineId,48	traits::{49		tokens::currency::Currency as CurrencyT, OnUnbalanced as OnUnbalancedT, Everything,50		Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem, LockIdentifier,51		OnUnbalanced, Randomness, FindAuthor,52	},53	weights::{54		constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},55		DispatchClass, DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,56		WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients,57	},58};59use up_data_structs::*;60// use pallet_contracts::weights::WeightInfo;61// #[cfg(any(feature = "std", test))]62use frame_system::{63	self as frame_system, EnsureRoot, EnsureSigned,64	limits::{BlockWeights, BlockLength},65};66use sp_arithmetic::{67	traits::{BaseArithmetic, Unsigned},68};69use smallvec::smallvec;70use codec::{Encode, Decode};71use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, OnMethodCall};72use fp_rpc::TransactionStatus;73use sp_runtime::{74	traits::{BlockNumberProvider, Dispatchable, PostDispatchInfoOf, Saturating},75	transaction_validity::TransactionValidityError,76	SaturatedConversion,77};7879// pub use pallet_timestamp::Call as TimestampCall;80pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;8182// Polkadot imports83use pallet_xcm::XcmPassthrough;84use polkadot_parachain::primitives::Sibling;85use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};86use xcm_builder::{87	AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,88	EnsureXcmOrigin, FixedWeightBounds, LocationInverter, NativeAsset, ParentAsSuperuser,89	RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,90	SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit,91	ParentIsPreset,92};93use xcm_executor::{Config, XcmExecutor, Assets};94use sp_std::{marker::PhantomData};9596use xcm::latest::{97	//	Xcm,98	AssetId::{Concrete},99	Fungibility::Fungible as XcmFungible,100	MultiAsset,101	Error as XcmError,102};103use xcm_executor::traits::{MatchesFungible, WeightTrader};104//use xcm_executor::traits::MatchesFungible;105use sp_runtime::traits::CheckedConversion;106107// mod chain_extension;108// use crate::chain_extension::{NFTExtension, Imbalance};109110/// An index to a block.111pub type BlockNumber = u32;112113/// Alias to 512-bit hash when used in the context of a transaction signature on the chain.114pub type Signature = MultiSignature;115116/// Some way of identifying an account on the chain. We intentionally make it equivalent117/// to the public key of our transaction signing scheme.118pub type AccountId = <<Signature as Verify>::Signer as IdentifyAccount>::AccountId;119120pub type CrossAccountId = pallet_common::account::BasicCrossAccountId<Runtime>;121122/// The type for looking up accounts. We don't expect more than 4 billion of them, but you123/// never know...124pub type AccountIndex = u32;125126/// Balance of an account.127pub type Balance = u128;128129/// Index of a transaction in the chain.130pub type Index = u32;131132/// A hash of some data used by the chain.133pub type Hash = sp_core::H256;134135/// Digest item type.136pub type DigestItem = generic::DigestItem;137138/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know139/// the specifics of the runtime. They can then be made to be agnostic over specific formats140/// of data like extrinsics, allowing for them to continue syncing the network through upgrades141/// to even the core data structures.142pub mod opaque {143	use super::*;144145	pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;146147	/// Opaque block type.148	pub type Block = generic::Block<Header, UncheckedExtrinsic>;149150	pub type SessionHandlers = ();151152	impl_opaque_keys! {153		pub struct SessionKeys {154			pub aura: Aura,155		}156	}157}158159/// This runtime version.160pub const VERSION: RuntimeVersion = RuntimeVersion {161	spec_name: create_runtime_str!("opal"),162	impl_name: create_runtime_str!("opal"),163	authoring_version: 1,164	spec_version: 916010,165	impl_version: 0,166	apis: RUNTIME_API_VERSIONS,167	transaction_version: 1,168	state_version: 0,169};170171pub const MILLISECS_PER_BLOCK: u64 = 12000;172173pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;174175// These time units are defined in number of blocks.176pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber);177pub const HOURS: BlockNumber = MINUTES * 60;178pub const DAYS: BlockNumber = HOURS * 24;179180parameter_types! {181	pub const DefaultSponsoringRateLimit: BlockNumber = 1 * DAYS;182}183184#[derive(codec::Encode, codec::Decode)]185pub enum XCMPMessage<XAccountId, XBalance> {186	/// Transfer tokens to the given account from the Parachain account.187	TransferToken(XAccountId, XBalance),188}189190/// The version information used to identify this runtime when compiled natively.191#[cfg(feature = "std")]192pub fn native_version() -> NativeVersion {193	NativeVersion {194		runtime_version: VERSION,195		can_author_with: Default::default(),196	}197}198199type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;200201pub struct DealWithFees;202impl OnUnbalanced<NegativeImbalance> for DealWithFees {203	fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item = NegativeImbalance>) {204		if let Some(fees) = fees_then_tips.next() {205			// for fees, 100% to treasury206			let mut split = fees.ration(100, 0);207			if let Some(tips) = fees_then_tips.next() {208				// for tips, if any, 100% to treasury209				tips.ration_merge_into(100, 0, &mut split);210			}211			Treasury::on_unbalanced(split.0);212			// Author::on_unbalanced(split.1);213		}214	}215}216217/// We assume that ~10% of the block weight is consumed by `on_initalize` handlers.218/// This is used to limit the maximal weight of a single extrinsic.219const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10);220/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used221/// by  Operational  extrinsics.222const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75);223/// We allow for 2 seconds of compute with a 6 second average block time.224const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2;225226parameter_types! {227	pub const BlockHashCount: BlockNumber = 2400;228	pub RuntimeBlockLength: BlockLength =229		BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);230	pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);231	pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;232	pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()233		.base_block(BlockExecutionWeight::get())234		.for_class(DispatchClass::all(), |weights| {235			weights.base_extrinsic = ExtrinsicBaseWeight::get();236		})237		.for_class(DispatchClass::Normal, |weights| {238			weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);239		})240		.for_class(DispatchClass::Operational, |weights| {241			weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);242			// Operational transactions have some extra reserved space, so that they243			// are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.244			weights.reserved = Some(245				MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT246			);247		})248		.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)249		.build_or_panic();250	pub const Version: RuntimeVersion = VERSION;251	pub const SS58Prefix: u8 = 42;252}253254/*2558880 - Unique2568881 - Quartz2578882 - Opal258*/259parameter_types! {260	pub const ChainId: u64 = 8882;261}262263pub struct FixedFee;264impl FeeCalculator for FixedFee {265	fn min_gas_price() -> U256 {266		// Targeting 0.15 UNQ per transfer267		1_024_947_215_000u64.into()268	}269}270271// Assuming slowest ethereum opcode is SSTORE, with gas price of 20000 as our worst case272// (contract, which only writes a lot of data),273// approximating on top of our real store write weight274parameter_types! {275	pub const WritesPerSecond: u64 = WEIGHT_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().write;276	pub const GasPerSecond: u64 = WritesPerSecond::get() * 20000;277	pub const WeightPerGas: u64 = WEIGHT_PER_SECOND / GasPerSecond::get();278}279280/// Limiting EVM execution to 50% of block for substrate users and management tasks281/// EVM transaction consumes more weight than substrate's, so we can't rely on them being282/// scheduled fairly283const EVM_DISPATCH_RATIO: Perbill = Perbill::from_percent(50);284parameter_types! {285	pub BlockGasLimit: U256 = U256::from(NORMAL_DISPATCH_RATIO * EVM_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT / WeightPerGas::get());286}287288pub enum FixedGasWeightMapping {}289impl GasWeightMapping for FixedGasWeightMapping {290	fn gas_to_weight(gas: u64) -> Weight {291		gas.saturating_mul(WeightPerGas::get())292	}293	fn weight_to_gas(weight: Weight) -> u64 {294		weight / WeightPerGas::get()295	}296}297298impl pallet_evm::Config for Runtime {299	type BlockGasLimit = BlockGasLimit;300	type FeeCalculator = FixedFee;301	type GasWeightMapping = FixedGasWeightMapping;302	type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;303	type CallOrigin = EnsureAddressTruncated;304	type WithdrawOrigin = EnsureAddressTruncated;305	type AddressMapping = HashedAddressMapping<Self::Hashing>;306	type PrecompilesType = ();307	type PrecompilesValue = ();308	type Currency = Balances;309	type Event = Event;310	type OnMethodCall = (311		pallet_evm_migration::OnMethodCall<Self>,312		pallet_unique::UniqueErcSupport<Self>,313		pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,314	);315	type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;316	type ChainId = ChainId;317	type Runner = pallet_evm::runner::stack::Runner<Self>;318	type OnChargeTransaction = pallet_evm_transaction_payment::OnChargeTransaction<Self>;319	type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;320	type FindAuthor = EthereumFindAuthor<Aura>;321}322323impl pallet_evm_migration::Config for Runtime {324	type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;325}326327pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);328impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {329	fn find_author<'a, I>(digests: I) -> Option<H160>330	where331		I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,332	{333		if let Some(author_index) = F::find_author(digests) {334			let authority_id = Aura::authorities()[author_index as usize].clone();335			return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));336		}337		None338	}339}340341impl pallet_ethereum::Config for Runtime {342	type Event = Event;343	type StateRoot = pallet_ethereum::IntermediateStateRoot;344}345346impl pallet_randomness_collective_flip::Config for Runtime {}347348impl frame_system::Config for Runtime {349	/// The data to be stored in an account.350	type AccountData = pallet_balances::AccountData<Balance>;351	/// The identifier used to distinguish between accounts.352	type AccountId = AccountId;353	/// The basic call filter to use in dispatchable.354	type BaseCallFilter = Everything;355	/// Maximum number of block number to block hash mappings to keep (oldest pruned first).356	type BlockHashCount = BlockHashCount;357	/// The maximum length of a block (in bytes).358	type BlockLength = RuntimeBlockLength;359	/// The index type for blocks.360	type BlockNumber = BlockNumber;361	/// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.362	type BlockWeights = RuntimeBlockWeights;363	/// The aggregated dispatch type that is available for extrinsics.364	type Call = Call;365	/// The weight of database operations that the runtime can invoke.366	type DbWeight = RocksDbWeight;367	/// The ubiquitous event type.368	type Event = Event;369	/// The type for hashing blocks and tries.370	type Hash = Hash;371	/// The hashing algorithm used.372	type Hashing = BlakeTwo256;373	/// The header type.374	type Header = generic::Header<BlockNumber, BlakeTwo256>;375	/// The index type for storing how many extrinsics an account has signed.376	type Index = Index;377	/// The lookup mechanism to get account ID from whatever is passed in dispatchers.378	type Lookup = AccountIdLookup<AccountId, ()>;379	/// What to do if an account is fully reaped from the system.380	type OnKilledAccount = ();381	/// What to do if a new account is created.382	type OnNewAccount = ();383	type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;384	/// The ubiquitous origin type.385	type Origin = Origin;386	/// This type is being generated by `construct_runtime!`.387	type PalletInfo = PalletInfo;388	/// This is used as an identifier of the chain. 42 is the generic substrate prefix.389	type SS58Prefix = SS58Prefix;390	/// Weight information for the extrinsics of this pallet.391	type SystemWeightInfo = frame_system::weights::SubstrateWeight<Self>;392	/// Version of the runtime.393	type Version = Version;394	type MaxConsumers = ConstU32<16>;395}396397parameter_types! {398	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;399}400401impl pallet_timestamp::Config for Runtime {402	/// A timestamp: milliseconds since the unix epoch.403	type Moment = u64;404	type OnTimestampSet = ();405	type MinimumPeriod = MinimumPeriod;406	type WeightInfo = ();407}408409parameter_types! {410	// pub const ExistentialDeposit: u128 = 500;411	pub const ExistentialDeposit: u128 = 0;412	pub const MaxLocks: u32 = 50;413}414415impl pallet_balances::Config for Runtime {416	type MaxLocks = MaxLocks;417	type MaxReserves = ();418	type ReserveIdentifier = [u8; 8];419	/// The type for recording an account's balance.420	type Balance = Balance;421	/// The ubiquitous event type.422	type Event = Event;423	type DustRemoval = Treasury;424	type ExistentialDeposit = ExistentialDeposit;425	type AccountStore = System;426	type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;427}428429pub const MICROUNIQUE: Balance = 1_000_000_000_000;430pub const MILLIUNIQUE: Balance = 1_000 * MICROUNIQUE;431pub const CENTIUNIQUE: Balance = 10 * MILLIUNIQUE;432pub const UNIQUE: Balance = 100 * CENTIUNIQUE;433434pub const fn deposit(items: u32, bytes: u32) -> Balance {435	items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE436}437438/*439parameter_types! {440	pub TombstoneDeposit: Balance = deposit(441		1,442		sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,443	);444	pub DepositPerContract: Balance = TombstoneDeposit::get();445	pub const DepositPerStorageByte: Balance = deposit(0, 1);446	pub const DepositPerStorageItem: Balance = deposit(1, 0);447	pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);448	pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;449	pub const SignedClaimHandicap: u32 = 2;450	pub const MaxDepth: u32 = 32;451	pub const MaxValueSize: u32 = 16 * 1024;452	pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb453	// The lazy deletion runs inside on_initialize.454	pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *455		RuntimeBlockWeights::get().max_block;456	// The weight needed for decoding the queue should be less or equal than a fifth457	// of the overall weight dedicated to the lazy deletion.458	pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (459			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -460			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)461		)) / 5) as u32;462	pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();463}464465impl pallet_contracts::Config for Runtime {466	type Time = Timestamp;467	type Randomness = RandomnessCollectiveFlip;468	type Currency = Balances;469	type Event = Event;470	type RentPayment = ();471	type SignedClaimHandicap = SignedClaimHandicap;472	type TombstoneDeposit = TombstoneDeposit;473	type DepositPerContract = DepositPerContract;474	type DepositPerStorageByte = DepositPerStorageByte;475	type DepositPerStorageItem = DepositPerStorageItem;476	type RentFraction = RentFraction;477	type SurchargeReward = SurchargeReward;478	type WeightPrice = pallet_transaction_payment::Pallet<Self>;479	type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;480	type ChainExtension = NFTExtension;481	type DeletionQueueDepth = DeletionQueueDepth;482	type DeletionWeightLimit = DeletionWeightLimit;483	type Schedule = Schedule;484	type CallStack = [pallet_contracts::Frame<Self>; 31];485}486*/487488parameter_types! {489	pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer490	/// This value increases the priority of `Operational` transactions by adding491	/// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.492	pub const OperationalFeeMultiplier: u8 = 5;493}494495/// Linear implementor of `WeightToFeePolynomial`496pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);497498impl<T> WeightToFeePolynomial for LinearFee<T>499where500	T: BaseArithmetic + From<u32> + Copy + Unsigned,501{502	type Balance = T;503504	fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {505		smallvec!(WeightToFeeCoefficient {506			// Targeting 0.1 Unique per NFT transfer507			coeff_integer: 142_688_000u32.into(),508			coeff_frac: Perbill::zero(),509			negative: false,510			degree: 1,511		})512	}513}514515impl pallet_transaction_payment::Config for Runtime {516	type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;517	type TransactionByteFee = TransactionByteFee;518	type OperationalFeeMultiplier = OperationalFeeMultiplier;519	type WeightToFee = LinearFee<Balance>;520	type FeeMultiplierUpdate = ();521}522523parameter_types! {524	pub const ProposalBond: Permill = Permill::from_percent(5);525	pub const ProposalBondMinimum: Balance = 1 * UNIQUE;526	pub const ProposalBondMaximum: Balance = 1000 * UNIQUE;527	pub const SpendPeriod: BlockNumber = 5 * MINUTES;528	pub const Burn: Permill = Permill::from_percent(0);529	pub const TipCountdown: BlockNumber = 1 * DAYS;530	pub const TipFindersFee: Percent = Percent::from_percent(20);531	pub const TipReportDepositBase: Balance = 1 * UNIQUE;532	pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;533	pub const BountyDepositBase: Balance = 1 * UNIQUE;534	pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;535	pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");536	pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;537	pub const MaximumReasonLength: u32 = 16384;538	pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);539	pub const BountyValueMinimum: Balance = 5 * UNIQUE;540	pub const MaxApprovals: u32 = 100;541}542543impl pallet_treasury::Config for Runtime {544	type PalletId = TreasuryModuleId;545	type Currency = Balances;546	type ApproveOrigin = EnsureRoot<AccountId>;547	type RejectOrigin = EnsureRoot<AccountId>;548	type Event = Event;549	type OnSlash = ();550	type ProposalBond = ProposalBond;551	type ProposalBondMinimum = ProposalBondMinimum;552	type ProposalBondMaximum = ProposalBondMaximum;553	type SpendPeriod = SpendPeriod;554	type Burn = Burn;555	type BurnDestination = ();556	type SpendFunds = ();557	type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;558	type MaxApprovals = MaxApprovals;559}560561impl pallet_sudo::Config for Runtime {562	type Event = Event;563	type Call = Call;564}565566pub struct RelayChainBlockNumberProvider<T>(sp_std::marker::PhantomData<T>);567568impl<T: cumulus_pallet_parachain_system::Config> BlockNumberProvider569	for RelayChainBlockNumberProvider<T>570{571	type BlockNumber = BlockNumber;572573	fn current_block_number() -> Self::BlockNumber {574		cumulus_pallet_parachain_system::Pallet::<T>::validation_data()575			.map(|d| d.relay_parent_number)576			.unwrap_or_default()577	}578}579580parameter_types! {581	pub const MinVestedTransfer: Balance = 10 * UNIQUE;582	pub const MaxVestingSchedules: u32 = 28;583}584585impl orml_vesting::Config for Runtime {586	type Event = Event;587	type Currency = pallet_balances::Pallet<Runtime>;588	type MinVestedTransfer = MinVestedTransfer;589	type VestedTransferOrigin = EnsureSigned<AccountId>;590	type WeightInfo = ();591	type MaxVestingSchedules = MaxVestingSchedules;592	type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;593}594595parameter_types! {596	pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;597	pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;598}599600impl cumulus_pallet_parachain_system::Config for Runtime {601	type Event = Event;602	type SelfParaId = parachain_info::Pallet<Self>;603	type OnSystemEvent = ();604	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<605	// 	MaxDownwardMessageWeight,606	// 	XcmExecutor<XcmConfig>,607	// 	Call,608	// >;609	type OutboundXcmpMessageSource = XcmpQueue;610	type DmpMessageHandler = DmpQueue;611	type ReservedDmpWeight = ReservedDmpWeight;612	type ReservedXcmpWeight = ReservedXcmpWeight;613	type XcmpMessageHandler = XcmpQueue;614}615616impl parachain_info::Config for Runtime {}617618impl cumulus_pallet_aura_ext::Config for Runtime {}619620parameter_types! {621	pub const RelayLocation: MultiLocation = MultiLocation::parent();622	pub const RelayNetwork: NetworkId = NetworkId::Polkadot;623	pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();624	pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();625}626627/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used628/// when determining ownership of accounts for asset transacting and when attempting to use XCM629/// `Transact` in order to determine the dispatch Origin.630pub type LocationToAccountId = (631	// The parent (Relay-chain) origin converts to the default `AccountId`.632	ParentIsPreset<AccountId>,633	// Sibling parachain origins convert to AccountId via the `ParaId::into`.634	SiblingParachainConvertsVia<Sibling, AccountId>,635	// Straight up local `AccountId32` origins just alias directly to `AccountId`.636	AccountId32Aliases<RelayNetwork, AccountId>,637);638639pub struct OnlySelfCurrency;640impl<B: TryFrom<u128>> MatchesFungible<B> for OnlySelfCurrency {641	fn matches_fungible(a: &MultiAsset) -> Option<B> {642		match (&a.id, &a.fun) {643			(Concrete(_), XcmFungible(ref amount)) => CheckedConversion::checked_from(*amount),644			_ => None,645		}646	}647}648649/// Means for transacting assets on this chain.650pub type LocalAssetTransactor = CurrencyAdapter<651	// Use this currency:652	Balances,653	// Use this currency when it is a fungible asset matching the given location or name:654	OnlySelfCurrency,655	// Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:656	LocationToAccountId,657	// Our chain's account ID type (we can't get away without mentioning it explicitly):658	AccountId,659	// We don't track any teleports.660	(),661>;662663/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance,664/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can665/// biases the kind of local `Origin` it will become.666pub type XcmOriginToTransactDispatchOrigin = (667	// Sovereign account converter; this attempts to derive an `AccountId` from the origin location668	// using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for669	// foreign chains who want to have a local sovereign account on this chain which they control.670	SovereignSignedViaLocation<LocationToAccountId, Origin>,671	// Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when672	// recognised.673	RelayChainAsNative<RelayOrigin, Origin>,674	// Native converter for sibling Parachains; will convert to a `SiblingPara` origin when675	// recognised.676	SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,677	// Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a678	// transaction from the Root origin.679	ParentAsSuperuser<Origin>,680	// Native signed account converter; this just converts an `AccountId32` origin into a normal681	// `Origin::Signed` origin of the same 32-byte value.682	SignedAccountId32AsNative<RelayNetwork, Origin>,683	// Xcm origins can be represented natively under the Xcm pallet's Xcm origin.684	XcmPassthrough<Origin>,685);686687parameter_types! {688	// One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.689	pub UnitWeightCost: Weight = 1_000_000;690	// 1200 UNIQUEs buy 1 second of weight.691	pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), 1_200 * UNIQUE);692	pub const MaxInstructions: u32 = 100;693	pub const MaxAuthorities: u32 = 100_000;694}695696match_type! {697	pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {698		MultiLocation { parents: 1, interior: Here } |699		MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Unit, .. }) }700	};701}702703pub type Barrier = (704	TakeWeightCredit,705	AllowTopLevelPaidExecutionFrom<Everything>,706	AllowUnpaidExecutionFrom<ParentOrParentsUnitPlurality>,707	// ^^^ Parent & its unit plurality gets free execution708);709710pub struct UsingOnlySelfCurrencyComponents<711	WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,712	AssetId: Get<MultiLocation>,713	AccountId,714	Currency: CurrencyT<AccountId>,715	OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,716>(717	Weight,718	Currency::Balance,719	PhantomData<(WeightToFee, AssetId, AccountId, Currency, OnUnbalanced)>,720);721impl<722		WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,723		AssetId: Get<MultiLocation>,724		AccountId,725		Currency: CurrencyT<AccountId>,726		OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,727	> WeightTrader728	for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>729{730	fn new() -> Self {731		Self(0, Zero::zero(), PhantomData)732	}733734	fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError> {735		let amount = WeightToFee::calc(&weight);736		let u128_amount: u128 = amount.try_into().map_err(|_| XcmError::Overflow)?;737738		// location to this parachain through relay chain739		let option1: xcm::v1::AssetId = Concrete(MultiLocation {740			parents: 1,741			interior: X1(Parachain(ParachainInfo::parachain_id().into())),742		});743		// direct location744		let option2: xcm::v1::AssetId = Concrete(MultiLocation {745			parents: 0,746			interior: Here,747		});748749		let required = if payment.fungible.contains_key(&option1) {750			(option1, u128_amount).into()751		} else if payment.fungible.contains_key(&option2) {752			(option2, u128_amount).into()753		} else {754			(Concrete(MultiLocation::default()), u128_amount).into()755		};756757		let unused = payment758			.checked_sub(required)759			.map_err(|_| XcmError::TooExpensive)?;760		self.0 = self.0.saturating_add(weight);761		self.1 = self.1.saturating_add(amount);762		Ok(unused)763	}764765	fn refund_weight(&mut self, weight: Weight) -> Option<MultiAsset> {766		let weight = weight.min(self.0);767		let amount = WeightToFee::calc(&weight);768		self.0 -= weight;769		self.1 = self.1.saturating_sub(amount);770		let amount: u128 = amount.saturated_into();771		if amount > 0 {772			Some((AssetId::get(), amount).into())773		} else {774			None775		}776	}777}778impl<779		WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,780		AssetId: Get<MultiLocation>,781		AccountId,782		Currency: CurrencyT<AccountId>,783		OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,784	> Drop785	for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>786{787	fn drop(&mut self) {788		OnUnbalanced::on_unbalanced(Currency::issue(self.1));789	}790}791792pub struct XcmConfig;793impl Config for XcmConfig {794	type Call = Call;795	type XcmSender = XcmRouter;796	// How to withdraw and deposit an asset.797	type AssetTransactor = LocalAssetTransactor;798	type OriginConverter = XcmOriginToTransactDispatchOrigin;799	type IsReserve = NativeAsset;800	type IsTeleporter = (); // Teleportation is disabled801	type LocationInverter = LocationInverter<Ancestry>;802	type Barrier = Barrier;803	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;804	type Trader = UsingOnlySelfCurrencyComponents<805		IdentityFee<Balance>,806		RelayLocation,807		AccountId,808		Balances,809		(),810	>;811	type ResponseHandler = (); // Don't handle responses for now.812	type SubscriptionService = PolkadotXcm;813814	type AssetTrap = PolkadotXcm;815	type AssetClaims = PolkadotXcm;816}817818// parameter_types! {819// 	pub const MaxDownwardMessageWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 10;820// }821822/// No local origins on this chain are allowed to dispatch XCM sends/executions.823pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);824825/// The means for routing XCM messages which are not for local execution into the right message826/// queues.827pub type XcmRouter = (828	// Two routers - use UMP to communicate with the relay chain:829	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,830	// ..and XCMP to communicate with the sibling chains.831	XcmpQueue,832);833834impl pallet_evm_coder_substrate::Config for Runtime {835	type EthereumTransactionSender = pallet_ethereum::Pallet<Self>;836	type GasWeightMapping = FixedGasWeightMapping;837}838839impl pallet_xcm::Config for Runtime {840	type Event = Event;841	type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;842	type XcmRouter = XcmRouter;843	type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;844	type XcmExecuteFilter = Everything;845	type XcmExecutor = XcmExecutor<XcmConfig>;846	type XcmTeleportFilter = Everything;847	type XcmReserveTransferFilter = Everything;848	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;849	type LocationInverter = LocationInverter<Ancestry>;850	type Origin = Origin;851	type Call = Call;852	const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;853	type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;854}855856impl cumulus_pallet_xcm::Config for Runtime {857	type Event = Event;858	type XcmExecutor = XcmExecutor<XcmConfig>;859}860861impl cumulus_pallet_xcmp_queue::Config for Runtime {862	type Event = Event;863	type XcmExecutor = XcmExecutor<XcmConfig>;864	type ChannelInfo = ParachainSystem;865	type VersionWrapper = ();866	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;867	type ControllerOrigin = EnsureRoot<AccountId>;868	type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin;869}870871impl cumulus_pallet_dmp_queue::Config for Runtime {872	type Event = Event;873	type XcmExecutor = XcmExecutor<XcmConfig>;874	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;875}876877impl pallet_aura::Config for Runtime {878	type AuthorityId = AuraId;879	type DisabledValidators = ();880	type MaxAuthorities = MaxAuthorities;881}882883parameter_types! {884	pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account();885	pub const CollectionCreationPrice: Balance = 2 * UNIQUE;886}887888impl pallet_common::Config for Runtime {889	type Event = Event;890	type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated;891	type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;892	type CrossAccountId = pallet_common::account::BasicCrossAccountId<Self>;893894	type Currency = Balances;895	type CollectionCreationPrice = CollectionCreationPrice;896	type TreasuryAccountId = TreasuryAccountId;897}898899impl pallet_fungible::Config for Runtime {900	type WeightInfo = pallet_fungible::weights::SubstrateWeight<Self>;901}902impl pallet_refungible::Config for Runtime {903	type WeightInfo = pallet_refungible::weights::SubstrateWeight<Self>;904}905impl pallet_nonfungible::Config for Runtime {906	type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;907}908909impl pallet_unique::Config for Runtime {910	type Event = Event;911	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;912}913914parameter_types! {915	pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied916}917918/// Used for the pallet inflation919impl pallet_inflation::Config for Runtime {920	type Currency = Balances;921	type TreasuryAccountId = TreasuryAccountId;922	type InflationBlockInterval = InflationBlockInterval;923	type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;924}925926// parameter_types! {927// 	pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *928// 		RuntimeBlockWeights::get().max_block;929// 	pub const MaxScheduledPerBlock: u32 = 50;930// }931932type EvmSponsorshipHandler = (933	pallet_unique::UniqueEthSponsorshipHandler<Runtime>,934	pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,935);936type SponsorshipHandler = (937	pallet_unique::UniqueSponsorshipHandler<Runtime>,938	//pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,939	pallet_evm_transaction_payment::BridgeSponsorshipHandler<Runtime>,940);941942// impl pallet_unq_scheduler::Config for Runtime {943// 	type Event = Event;944// 	type Origin = Origin;945// 	type PalletsOrigin = OriginCaller;946// 	type Call = Call;947// 	type MaximumWeight = MaximumSchedulerWeight;948// 	type ScheduleOrigin = EnsureSigned<AccountId>;949// 	type MaxScheduledPerBlock = MaxScheduledPerBlock;950// 	type SponsorshipHandler = SponsorshipHandler;951// 	type WeightInfo = ();952// }953954impl pallet_evm_transaction_payment::Config for Runtime {955	type EvmSponsorshipHandler = EvmSponsorshipHandler;956	type Currency = Balances;957	type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;958	type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated;959}960961impl pallet_charge_transaction::Config for Runtime {962	type SponsorshipHandler = SponsorshipHandler;963}964965// impl pallet_contract_helpers::Config for Runtime {966//	 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;967// }968969parameter_types! {970	// 0x842899ECF380553E8a4de75bF534cdf6fBF64049971	pub const HelpersContractAddress: H160 = H160([972		0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,973	]);974}975976impl pallet_evm_contract_helpers::Config for Runtime {977	type ContractAddress = HelpersContractAddress;978	type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;979}980981construct_runtime!(982	pub enum Runtime where983		Block = Block,984		NodeBlock = opaque::Block,985		UncheckedExtrinsic = UncheckedExtrinsic986	{987		ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,988		ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,989990		Aura: pallet_aura::{Pallet, Config<T>} = 22,991		AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,992993		Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,994		RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,995		Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,996		TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,997		Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,998		Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,999		System: frame_system::{Pallet, Call, Storage, Config, Event<T>} = 36,1000		Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,1001		// Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,1002		// Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,10031004		// XCM helpers.1005		XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,1006		PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,1007		CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,1008		DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,10091010		// Unique Pallets1011		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,1012		Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,1013		// Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,1014		// free = 631015		Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,1016		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,1017		Common: pallet_common::{Pallet, Storage, Event<T>} = 66,1018		Fungible: pallet_fungible::{Pallet, Storage} = 67,1019		Refungible: pallet_refungible::{Pallet, Storage} = 68,1020		Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,10211022		// Frontier1023		EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,1024		Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,10251026		EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,1027		EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,1028		EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,1029		EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,1030	}1031);10321033pub struct TransactionConverter;10341035impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {1036	fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {1037		UncheckedExtrinsic::new_unsigned(1038			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1039		)1040	}1041}10421043impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {1044	fn convert_transaction(1045		&self,1046		transaction: pallet_ethereum::Transaction,1047	) -> opaque::UncheckedExtrinsic {1048		let extrinsic = UncheckedExtrinsic::new_unsigned(1049			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1050		);1051		let encoded = extrinsic.encode();1052		opaque::UncheckedExtrinsic::decode(&mut &encoded[..])1053			.expect("Encoded extrinsic is always valid")1054	}1055}10561057/// The address format for describing accounts.1058pub type Address = sp_runtime::MultiAddress<AccountId, ()>;1059/// Block header type as expected by this runtime.1060pub type Header = generic::Header<BlockNumber, BlakeTwo256>;1061/// Block type as expected by this runtime.1062pub type Block = generic::Block<Header, UncheckedExtrinsic>;1063/// A Block signed with a Justification1064pub type SignedBlock = generic::SignedBlock<Block>;1065/// BlockId type as expected by this runtime.1066pub type BlockId = generic::BlockId<Block>;1067/// The SignedExtension to the basic transaction logic.1068pub type SignedExtra = (1069	frame_system::CheckSpecVersion<Runtime>,1070	// system::CheckTxVersion<Runtime>,1071	frame_system::CheckGenesis<Runtime>,1072	frame_system::CheckEra<Runtime>,1073	frame_system::CheckNonce<Runtime>,1074	frame_system::CheckWeight<Runtime>,1075	pallet_charge_transaction::ChargeTransactionPayment<Runtime>,1076	//pallet_contract_helpers::ContractHelpersExtension<Runtime>,1077);1078/// Unchecked extrinsic type as expected by this runtime.1079pub type UncheckedExtrinsic =1080	fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;1081/// Extrinsic type that has already been checked.1082pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;1083/// Executive: handles dispatch to the various modules.1084pub type Executive = frame_executive::Executive<1085	Runtime,1086	Block,1087	frame_system::ChainContext<Runtime>,1088	Runtime,1089	AllPalletsReversedWithSystemFirst,1090>;10911092impl_opaque_keys! {1093	pub struct SessionKeys {1094		pub aura: Aura,1095	}1096}10971098impl fp_self_contained::SelfContainedCall for Call {1099	type SignedInfo = H160;11001101	fn is_self_contained(&self) -> bool {1102		match self {1103			Call::Ethereum(call) => call.is_self_contained(),1104			_ => false,1105		}1106	}11071108	fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {1109		match self {1110			Call::Ethereum(call) => call.check_self_contained(),1111			_ => None,1112		}1113	}11141115	fn validate_self_contained(&self, info: &Self::SignedInfo) -> Option<TransactionValidity> {1116		match self {1117			Call::Ethereum(call) => call.validate_self_contained(info),1118			_ => None,1119		}1120	}11211122	fn pre_dispatch_self_contained(1123		&self,1124		info: &Self::SignedInfo,1125	) -> Option<Result<(), TransactionValidityError>> {1126		match self {1127			Call::Ethereum(call) => call.pre_dispatch_self_contained(info),1128			_ => None,1129		}1130	}11311132	fn apply_self_contained(1133		self,1134		info: Self::SignedInfo,1135	) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {1136		match self {1137			call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(1138				Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),1139			)),1140			_ => None,1141		}1142	}1143}11441145macro_rules! dispatch_unique_runtime {1146	($collection:ident.$method:ident($($name:ident),*)) => {{1147		use pallet_unique::dispatch::Dispatched;11481149		let collection = Dispatched::dispatch(<pallet_common::CollectionHandle<Runtime>>::try_get($collection)?);1150		let dispatch = collection.as_dyn();11511152		Ok(dispatch.$method($($name),*))1153	}};1154}1155impl_runtime_apis! {1156	impl up_rpc::UniqueApi<Block, CrossAccountId, AccountId>1157		for Runtime1158	{1159		fn account_tokens(collection: CollectionId, account: CrossAccountId) -> Result<Vec<TokenId>, DispatchError> {1160			dispatch_unique_runtime!(collection.account_tokens(account))1161		}1162		fn token_exists(collection: CollectionId, token: TokenId) -> Result<bool, DispatchError> {1163			dispatch_unique_runtime!(collection.token_exists(token))1164		}11651166		fn token_owner(collection: CollectionId, token: TokenId) -> Result<Option<CrossAccountId>, DispatchError> {1167			dispatch_unique_runtime!(collection.token_owner(token))1168		}1169		fn const_metadata(collection: CollectionId, token: TokenId) -> Result<Vec<u8>, DispatchError> {1170			dispatch_unique_runtime!(collection.const_metadata(token))1171		}1172		fn variable_metadata(collection: CollectionId, token: TokenId) -> Result<Vec<u8>, DispatchError> {1173			dispatch_unique_runtime!(collection.variable_metadata(token))1174		}11751176		fn collection_tokens(collection: CollectionId) -> Result<u32, DispatchError> {1177			dispatch_unique_runtime!(collection.collection_tokens())1178		}1179		fn account_balance(collection: CollectionId, account: CrossAccountId) -> Result<u32, DispatchError> {1180			dispatch_unique_runtime!(collection.account_balance(account))1181		}1182		fn balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Result<u128, DispatchError> {1183			dispatch_unique_runtime!(collection.balance(account, token))1184		}1185		fn allowance(1186			collection: CollectionId,1187			sender: CrossAccountId,1188			spender: CrossAccountId,1189			token: TokenId,1190		) -> Result<u128, DispatchError> {1191			dispatch_unique_runtime!(collection.allowance(sender, spender, token))1192		}11931194		fn eth_contract_code(account: H160) -> Option<Vec<u8>> {1195			<pallet_unique::UniqueErcSupport<Runtime>>::get_code(&account)1196				.or_else(|| <pallet_evm_migration::OnMethodCall<Runtime>>::get_code(&account))1197				.or_else(|| <pallet_evm_contract_helpers::HelpersOnMethodCall<Self>>::get_code(&account))1198		}1199		fn adminlist(collection: CollectionId) -> Result<Vec<CrossAccountId>, DispatchError> {1200			Ok(<pallet_common::Pallet<Runtime>>::adminlist(collection))1201		}1202		fn allowlist(collection: CollectionId) -> Result<Vec<CrossAccountId>, DispatchError> {1203			Ok(<pallet_common::Pallet<Runtime>>::allowlist(collection))1204		}1205		fn allowed(collection: CollectionId, user: CrossAccountId) -> Result<bool, DispatchError> {1206			Ok(<pallet_common::Pallet<Runtime>>::allowed(collection, user))1207		}1208		fn last_token_id(collection: CollectionId) -> Result<TokenId, DispatchError> {1209			dispatch_unique_runtime!(collection.last_token_id())1210		}1211		fn collection_by_id(collection: CollectionId) -> Result<Option<Collection<AccountId>>, DispatchError> {1212			Ok(<pallet_common::CollectionById<Runtime>>::get(collection))1213		}1214		fn collection_stats() -> Result<CollectionStats, DispatchError> {1215			Ok(<pallet_common::Pallet<Runtime>>::collection_stats())1216		}1217	}12181219	impl sp_api::Core<Block> for Runtime {1220		fn version() -> RuntimeVersion {1221			VERSION1222		}12231224		fn execute_block(block: Block) {1225			Executive::execute_block(block)1226		}12271228		fn initialize_block(header: &<Block as BlockT>::Header) {1229			Executive::initialize_block(header)1230		}1231	}12321233	impl sp_api::Metadata<Block> for Runtime {1234		fn metadata() -> OpaqueMetadata {1235			OpaqueMetadata::new(Runtime::metadata().into())1236		}1237	}12381239	impl sp_block_builder::BlockBuilder<Block> for Runtime {1240		fn apply_extrinsic(extrinsic: <Block as BlockT>::Extrinsic) -> ApplyExtrinsicResult {1241			Executive::apply_extrinsic(extrinsic)1242		}12431244		fn finalize_block() -> <Block as BlockT>::Header {1245			Executive::finalize_block()1246		}12471248		fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<<Block as BlockT>::Extrinsic> {1249			data.create_extrinsics()1250		}12511252		fn check_inherents(1253			block: Block,1254			data: sp_inherents::InherentData,1255		) -> sp_inherents::CheckInherentsResult {1256			data.check_extrinsics(&block)1257		}12581259		// fn random_seed() -> <Block as BlockT>::Hash {1260		//     RandomnessCollectiveFlip::random_seed().01261		// }1262	}12631264	impl sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block> for Runtime {1265		fn validate_transaction(1266			source: TransactionSource,1267			tx: <Block as BlockT>::Extrinsic,1268			hash: <Block as BlockT>::Hash,1269		) -> TransactionValidity {1270			Executive::validate_transaction(source, tx, hash)1271		}1272	}12731274	impl sp_offchain::OffchainWorkerApi<Block> for Runtime {1275		fn offchain_worker(header: &<Block as BlockT>::Header) {1276			Executive::offchain_worker(header)1277		}1278	}12791280	impl fp_rpc::EthereumRuntimeRPCApi<Block> for Runtime {1281		fn chain_id() -> u64 {1282			<Runtime as pallet_evm::Config>::ChainId::get()1283		}12841285		fn account_basic(address: H160) -> EVMAccount {1286			EVM::account_basic(&address)1287		}12881289		fn gas_price() -> U256 {1290			<Runtime as pallet_evm::Config>::FeeCalculator::min_gas_price()1291		}12921293		fn account_code_at(address: H160) -> Vec<u8> {1294			EVM::account_codes(address)1295		}12961297		fn author() -> H160 {1298			<pallet_evm::Pallet<Runtime>>::find_author()1299		}13001301		fn storage_at(address: H160, index: U256) -> H256 {1302			let mut tmp = [0u8; 32];1303			index.to_big_endian(&mut tmp);1304			EVM::account_storages(address, H256::from_slice(&tmp[..]))1305		}13061307		#[allow(clippy::redundant_closure)]1308		fn call(1309			from: H160,1310			to: H160,1311			data: Vec<u8>,1312			value: U256,1313			gas_limit: U256,1314			max_fee_per_gas: Option<U256>,1315			max_priority_fee_per_gas: Option<U256>,1316			nonce: Option<U256>,1317			estimate: bool,1318			access_list: Option<Vec<(H160, Vec<H256>)>>,1319		) -> Result<pallet_evm::CallInfo, sp_runtime::DispatchError> {1320			let config = if estimate {1321				let mut config = <Runtime as pallet_evm::Config>::config().clone();1322				config.estimate = true;1323				Some(config)1324			} else {1325				None1326			};13271328			<Runtime as pallet_evm::Config>::Runner::call(1329				from,1330				to,1331				data,1332				value,1333				gas_limit.low_u64(),1334				max_fee_per_gas,1335				max_priority_fee_per_gas,1336				nonce,1337				access_list.unwrap_or_default(),1338				config.as_ref().unwrap_or_else(|| <Runtime as pallet_evm::Config>::config()),1339			).map_err(|err| err.into())1340		}13411342		#[allow(clippy::redundant_closure)]1343		fn create(1344			from: H160,1345			data: Vec<u8>,1346			value: U256,1347			gas_limit: U256,1348			max_fee_per_gas: Option<U256>,1349			max_priority_fee_per_gas: Option<U256>,1350			nonce: Option<U256>,1351			estimate: bool,1352			access_list: Option<Vec<(H160, Vec<H256>)>>,1353		) -> Result<pallet_evm::CreateInfo, sp_runtime::DispatchError> {1354			let config = if estimate {1355				let mut config = <Runtime as pallet_evm::Config>::config().clone();1356				config.estimate = true;1357				Some(config)1358			} else {1359				None1360			};13611362			<Runtime as pallet_evm::Config>::Runner::create(1363				from,1364				data,1365				value,1366				gas_limit.low_u64(),1367				max_fee_per_gas,1368				max_priority_fee_per_gas,1369				nonce,1370				access_list.unwrap_or_default(),1371				config.as_ref().unwrap_or_else(|| <Runtime as pallet_evm::Config>::config()),1372			).map_err(|err| err.into())1373		}13741375		fn current_transaction_statuses() -> Option<Vec<TransactionStatus>> {1376			Ethereum::current_transaction_statuses()1377		}13781379		fn current_block() -> Option<pallet_ethereum::Block> {1380			Ethereum::current_block()1381		}13821383		fn current_receipts() -> Option<Vec<pallet_ethereum::Receipt>> {1384			Ethereum::current_receipts()1385		}13861387		fn current_all() -> (1388			Option<pallet_ethereum::Block>,1389			Option<Vec<pallet_ethereum::Receipt>>,1390			Option<Vec<TransactionStatus>>1391		) {1392			(1393				Ethereum::current_block(),1394				Ethereum::current_receipts(),1395				Ethereum::current_transaction_statuses()1396			)1397		}13981399		fn extrinsic_filter(xts: Vec<<Block as sp_api::BlockT>::Extrinsic>) -> Vec<pallet_ethereum::Transaction> {1400			xts.into_iter().filter_map(|xt| match xt.0.function {1401				Call::Ethereum(pallet_ethereum::Call::transact { transaction }) => Some(transaction),1402				_ => None1403			}).collect()1404		}14051406		fn elasticity() -> Option<Permill> {1407			None1408		}1409	}14101411	impl sp_session::SessionKeys<Block> for Runtime {1412		fn decode_session_keys(1413			encoded: Vec<u8>,1414		) -> Option<Vec<(Vec<u8>, KeyTypeId)>> {1415			SessionKeys::decode_into_raw_public_keys(&encoded)1416		}14171418		fn generate_session_keys(seed: Option<Vec<u8>>) -> Vec<u8> {1419			SessionKeys::generate(seed)1420		}1421	}14221423	impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {1424		fn slot_duration() -> sp_consensus_aura::SlotDuration {1425			sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration())1426		}14271428		fn authorities() -> Vec<AuraId> {1429			Aura::authorities().to_vec()1430		}1431	}14321433	impl cumulus_primitives_core::CollectCollationInfo<Block> for Runtime {1434		fn collect_collation_info(header: &<Block as BlockT>::Header) -> cumulus_primitives_core::CollationInfo {1435			ParachainSystem::collect_collation_info(header)1436		}1437	}14381439	impl frame_system_rpc_runtime_api::AccountNonceApi<Block, AccountId, Index> for Runtime {1440		fn account_nonce(account: AccountId) -> Index {1441			System::account_nonce(account)1442		}1443	}14441445	impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance> for Runtime {1446		fn query_info(uxt: <Block as BlockT>::Extrinsic, len: u32) -> RuntimeDispatchInfo<Balance> {1447			TransactionPayment::query_info(uxt, len)1448		}1449		fn query_fee_details(uxt: <Block as BlockT>::Extrinsic, len: u32) -> FeeDetails<Balance> {1450			TransactionPayment::query_fee_details(uxt, len)1451		}1452	}14531454	/*1455	impl pallet_contracts_rpc_runtime_api::ContractsApi<Block, AccountId, Balance, BlockNumber, Hash>1456		for Runtime1457	{1458		fn call(1459			origin: AccountId,1460			dest: AccountId,1461			value: Balance,1462			gas_limit: u64,1463			input_data: Vec<u8>,1464		) -> pallet_contracts_primitives::ContractExecResult {1465			Contracts::bare_call(origin, dest, value, gas_limit, input_data, false)1466		}14671468		fn instantiate(1469			origin: AccountId,1470			endowment: Balance,1471			gas_limit: u64,1472			code: pallet_contracts_primitives::Code<Hash>,1473			data: Vec<u8>,1474			salt: Vec<u8>,1475		) -> pallet_contracts_primitives::ContractInstantiateResult<AccountId, BlockNumber>1476		{1477			Contracts::bare_instantiate(origin, endowment, gas_limit, code, data, salt, true, false)1478		}14791480		fn get_storage(1481			address: AccountId,1482			key: [u8; 32],1483		) -> pallet_contracts_primitives::GetStorageResult {1484			Contracts::get_storage(address, key)1485		}14861487		fn rent_projection(1488			address: AccountId,1489		) -> pallet_contracts_primitives::RentProjectionResult<BlockNumber> {1490			Contracts::rent_projection(address)1491		}1492	}1493	*/14941495	#[cfg(feature = "runtime-benchmarks")]1496	impl frame_benchmarking::Benchmark<Block> for Runtime {1497		fn benchmark_metadata(extra: bool) -> (1498			Vec<frame_benchmarking::BenchmarkList>,1499			Vec<frame_support::traits::StorageInfo>,1500		) {1501			use frame_benchmarking::{list_benchmark, Benchmarking, BenchmarkList};1502			use frame_support::traits::StorageInfoTrait;15031504			let mut list = Vec::<BenchmarkList>::new();15051506			list_benchmark!(list, extra, pallet_evm_migration, EvmMigration);1507			list_benchmark!(list, extra, pallet_unique, Unique);1508			list_benchmark!(list, extra, pallet_inflation, Inflation);1509			list_benchmark!(list, extra, pallet_fungible, Fungible);1510			list_benchmark!(list, extra, pallet_refungible, Refungible);1511			list_benchmark!(list, extra, pallet_nonfungible, Nonfungible);1512			// list_benchmark!(list, extra, pallet_evm_coder_substrate, EvmCoderSubstrate);15131514			let storage_info = AllPalletsReversedWithSystemFirst::storage_info();15151516			return (list, storage_info)1517		}15181519		fn dispatch_benchmark(1520			config: frame_benchmarking::BenchmarkConfig1521		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {1522			use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark, TrackedStorageKey};15231524			let allowlist: Vec<TrackedStorageKey> = vec![1525				// Block Number1526				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(),1527				// Total Issuance1528				hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(),1529				// Execution Phase1530				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(),1531				// Event Count1532				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(),1533				// System Events1534				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(),1535			];15361537			let mut batches = Vec::<BenchmarkBatch>::new();1538			let params = (&config, &allowlist);15391540			add_benchmark!(params, batches, pallet_evm_migration, EvmMigration);1541			add_benchmark!(params, batches, pallet_unique, Unique);1542			add_benchmark!(params, batches, pallet_inflation, Inflation);1543			add_benchmark!(params, batches, pallet_fungible, Fungible);1544			add_benchmark!(params, batches, pallet_refungible, Refungible);1545			add_benchmark!(params, batches, pallet_nonfungible, Nonfungible);1546			// add_benchmark!(params, batches, pallet_evm_coder_substrate, EvmCoderSubstrate);15471548			if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }1549			Ok(batches)1550		}1551	}1552}15531554struct CheckInherents;15551556impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {1557	fn check_inherents(1558		block: &Block,1559		relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,1560	) -> sp_inherents::CheckInherentsResult {1561		let relay_chain_slot = relay_state_proof1562			.read_slot()1563			.expect("Could not read the relay chain slot from the proof");15641565		let inherent_data =1566			cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration(1567				relay_chain_slot,1568				sp_std::time::Duration::from_secs(6),1569			)1570			.create_inherent_data()1571			.expect("Could not create the timestamp inherent data");15721573		inherent_data.check_extrinsics(block)1574	}1575}15761577cumulus_pallet_parachain_system::register_validate_block!(1578	Runtime = Runtime,1579	BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,1580	CheckInherents = CheckInherents,1581);
after · runtime/src/lib.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! The Substrate Node Template runtime. This can be compiled with `#[no_std]`, ready for Wasm.1819#![cfg_attr(not(feature = "std"), no_std)]20// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256.21#![recursion_limit = "1024"]22#![allow(clippy::from_over_into, clippy::identity_op)]23#![allow(clippy::fn_to_numeric_cast_with_truncation)]24// Make the WASM binary available.25#[cfg(feature = "std")]26include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));2728use sp_api::impl_runtime_apis;29use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H256, U256, H160};30use sp_runtime::DispatchError;31// #[cfg(any(feature = "std", test))]32// pub use sp_runtime::BuildStorage;3334use sp_runtime::{35	Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys,36	traits::{37		AccountIdLookup, BlakeTwo256, Block as BlockT, IdentifyAccount, Verify,38		AccountIdConversion, Zero,39	},40	transaction_validity::{TransactionSource, TransactionValidity},41	ApplyExtrinsicResult, MultiSignature, RuntimeAppPublic,42};4344use sp_std::prelude::*;4546#[cfg(feature = "std")]47use sp_version::NativeVersion;48use sp_version::RuntimeVersion;49pub use pallet_transaction_payment::{50	Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo,51};52// A few exports that help ease life for downstream crates.53pub use pallet_balances::Call as BalancesCall;54pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner};55pub use frame_support::{56	construct_runtime, match_type,57	dispatch::DispatchResult,58	PalletId, parameter_types, StorageValue, ConsensusEngineId,59	traits::{60		tokens::currency::Currency as CurrencyT, OnUnbalanced as OnUnbalancedT, Everything,61		Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem, LockIdentifier,62		OnUnbalanced, Randomness, FindAuthor,63	},64	weights::{65		constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},66		DispatchClass, DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,67		WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients,68	},69};70use up_data_structs::*;71// use pallet_contracts::weights::WeightInfo;72// #[cfg(any(feature = "std", test))]73use frame_system::{74	self as frame_system, EnsureRoot, EnsureSigned,75	limits::{BlockWeights, BlockLength},76};77use sp_arithmetic::{78	traits::{BaseArithmetic, Unsigned},79};80use smallvec::smallvec;81use codec::{Encode, Decode};82use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, OnMethodCall};83use fp_rpc::TransactionStatus;84use sp_runtime::{85	traits::{BlockNumberProvider, Dispatchable, PostDispatchInfoOf, Saturating},86	transaction_validity::TransactionValidityError,87	SaturatedConversion,88};8990// pub use pallet_timestamp::Call as TimestampCall;91pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;9293// Polkadot imports94use pallet_xcm::XcmPassthrough;95use polkadot_parachain::primitives::Sibling;96use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};97use xcm_builder::{98	AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,99	EnsureXcmOrigin, FixedWeightBounds, LocationInverter, NativeAsset, ParentAsSuperuser,100	RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,101	SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit,102	ParentIsPreset,103};104use xcm_executor::{Config, XcmExecutor, Assets};105use sp_std::{marker::PhantomData};106107use xcm::latest::{108	//	Xcm,109	AssetId::{Concrete},110	Fungibility::Fungible as XcmFungible,111	MultiAsset,112	Error as XcmError,113};114use xcm_executor::traits::{MatchesFungible, WeightTrader};115//use xcm_executor::traits::MatchesFungible;116use sp_runtime::traits::CheckedConversion;117118// mod chain_extension;119// use crate::chain_extension::{NFTExtension, Imbalance};120121/// An index to a block.122pub type BlockNumber = u32;123124/// Alias to 512-bit hash when used in the context of a transaction signature on the chain.125pub type Signature = MultiSignature;126127/// Some way of identifying an account on the chain. We intentionally make it equivalent128/// to the public key of our transaction signing scheme.129pub type AccountId = <<Signature as Verify>::Signer as IdentifyAccount>::AccountId;130131pub type CrossAccountId = pallet_common::account::BasicCrossAccountId<Runtime>;132133/// The type for looking up accounts. We don't expect more than 4 billion of them, but you134/// never know...135pub type AccountIndex = u32;136137/// Balance of an account.138pub type Balance = u128;139140/// Index of a transaction in the chain.141pub type Index = u32;142143/// A hash of some data used by the chain.144pub type Hash = sp_core::H256;145146/// Digest item type.147pub type DigestItem = generic::DigestItem;148149/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know150/// the specifics of the runtime. They can then be made to be agnostic over specific formats151/// of data like extrinsics, allowing for them to continue syncing the network through upgrades152/// to even the core data structures.153pub mod opaque {154	use super::*;155156	pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;157158	/// Opaque block type.159	pub type Block = generic::Block<Header, UncheckedExtrinsic>;160161	pub type SessionHandlers = ();162163	impl_opaque_keys! {164		pub struct SessionKeys {165			pub aura: Aura,166		}167	}168}169170/// This runtime version.171pub const VERSION: RuntimeVersion = RuntimeVersion {172	spec_name: create_runtime_str!("opal"),173	impl_name: create_runtime_str!("opal"),174	authoring_version: 1,175	spec_version: 917004,176	impl_version: 0,177	apis: RUNTIME_API_VERSIONS,178	transaction_version: 1,179	state_version: 0,180};181182pub const MILLISECS_PER_BLOCK: u64 = 12000;183184pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;185186// These time units are defined in number of blocks.187pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber);188pub const HOURS: BlockNumber = MINUTES * 60;189pub const DAYS: BlockNumber = HOURS * 24;190191parameter_types! {192	pub const DefaultSponsoringRateLimit: BlockNumber = 1 * DAYS;193}194195#[derive(codec::Encode, codec::Decode)]196pub enum XCMPMessage<XAccountId, XBalance> {197	/// Transfer tokens to the given account from the Parachain account.198	TransferToken(XAccountId, XBalance),199}200201/// The version information used to identify this runtime when compiled natively.202#[cfg(feature = "std")]203pub fn native_version() -> NativeVersion {204	NativeVersion {205		runtime_version: VERSION,206		can_author_with: Default::default(),207	}208}209210type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;211212pub struct DealWithFees;213impl OnUnbalanced<NegativeImbalance> for DealWithFees {214	fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item = NegativeImbalance>) {215		if let Some(fees) = fees_then_tips.next() {216			// for fees, 100% to treasury217			let mut split = fees.ration(100, 0);218			if let Some(tips) = fees_then_tips.next() {219				// for tips, if any, 100% to treasury220				tips.ration_merge_into(100, 0, &mut split);221			}222			Treasury::on_unbalanced(split.0);223			// Author::on_unbalanced(split.1);224		}225	}226}227228/// We assume that ~10% of the block weight is consumed by `on_initalize` handlers.229/// This is used to limit the maximal weight of a single extrinsic.230const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10);231/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used232/// by  Operational  extrinsics.233const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75);234/// We allow for 2 seconds of compute with a 6 second average block time.235const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2;236237parameter_types! {238	pub const BlockHashCount: BlockNumber = 2400;239	pub RuntimeBlockLength: BlockLength =240		BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);241	pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);242	pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;243	pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()244		.base_block(BlockExecutionWeight::get())245		.for_class(DispatchClass::all(), |weights| {246			weights.base_extrinsic = ExtrinsicBaseWeight::get();247		})248		.for_class(DispatchClass::Normal, |weights| {249			weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);250		})251		.for_class(DispatchClass::Operational, |weights| {252			weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);253			// Operational transactions have some extra reserved space, so that they254			// are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.255			weights.reserved = Some(256				MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT257			);258		})259		.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)260		.build_or_panic();261	pub const Version: RuntimeVersion = VERSION;262	pub const SS58Prefix: u8 = 42;263}264265/*2668880 - Unique2678881 - Quartz2688882 - Opal269*/270parameter_types! {271	pub const ChainId: u64 = 8882;272}273274pub struct FixedFee;275impl FeeCalculator for FixedFee {276	fn min_gas_price() -> U256 {277		// Targeting 0.15 UNQ per transfer278		1_018_751_825_264u64.into()279	}280}281282// Assuming slowest ethereum opcode is SSTORE, with gas price of 20000 as our worst case283// (contract, which only writes a lot of data),284// approximating on top of our real store write weight285parameter_types! {286	pub const WritesPerSecond: u64 = WEIGHT_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().write;287	pub const GasPerSecond: u64 = WritesPerSecond::get() * 20000;288	pub const WeightPerGas: u64 = WEIGHT_PER_SECOND / GasPerSecond::get();289}290291/// Limiting EVM execution to 50% of block for substrate users and management tasks292/// EVM transaction consumes more weight than substrate's, so we can't rely on them being293/// scheduled fairly294const EVM_DISPATCH_RATIO: Perbill = Perbill::from_percent(50);295parameter_types! {296	pub BlockGasLimit: U256 = U256::from(NORMAL_DISPATCH_RATIO * EVM_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT / WeightPerGas::get());297}298299pub enum FixedGasWeightMapping {}300impl GasWeightMapping for FixedGasWeightMapping {301	fn gas_to_weight(gas: u64) -> Weight {302		gas.saturating_mul(WeightPerGas::get())303	}304	fn weight_to_gas(weight: Weight) -> u64 {305		weight / WeightPerGas::get()306	}307}308309impl pallet_evm::Config for Runtime {310	type BlockGasLimit = BlockGasLimit;311	type FeeCalculator = FixedFee;312	type GasWeightMapping = FixedGasWeightMapping;313	type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;314	type CallOrigin = EnsureAddressTruncated;315	type WithdrawOrigin = EnsureAddressTruncated;316	type AddressMapping = HashedAddressMapping<Self::Hashing>;317	type PrecompilesType = ();318	type PrecompilesValue = ();319	type Currency = Balances;320	type Event = Event;321	type OnMethodCall = (322		pallet_evm_migration::OnMethodCall<Self>,323		pallet_unique::UniqueErcSupport<Self>,324		pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,325	);326	type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;327	type ChainId = ChainId;328	type Runner = pallet_evm::runner::stack::Runner<Self>;329	type OnChargeTransaction = pallet_evm_transaction_payment::OnChargeTransaction<Self>;330	type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;331	type FindAuthor = EthereumFindAuthor<Aura>;332}333334impl pallet_evm_migration::Config for Runtime {335	type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;336}337338pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);339impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {340	fn find_author<'a, I>(digests: I) -> Option<H160>341	where342		I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,343	{344		if let Some(author_index) = F::find_author(digests) {345			let authority_id = Aura::authorities()[author_index as usize].clone();346			return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));347		}348		None349	}350}351352impl pallet_ethereum::Config for Runtime {353	type Event = Event;354	type StateRoot = pallet_ethereum::IntermediateStateRoot;355}356357impl pallet_randomness_collective_flip::Config for Runtime {}358359impl frame_system::Config for Runtime {360	/// The data to be stored in an account.361	type AccountData = pallet_balances::AccountData<Balance>;362	/// The identifier used to distinguish between accounts.363	type AccountId = AccountId;364	/// The basic call filter to use in dispatchable.365	type BaseCallFilter = Everything;366	/// Maximum number of block number to block hash mappings to keep (oldest pruned first).367	type BlockHashCount = BlockHashCount;368	/// The maximum length of a block (in bytes).369	type BlockLength = RuntimeBlockLength;370	/// The index type for blocks.371	type BlockNumber = BlockNumber;372	/// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.373	type BlockWeights = RuntimeBlockWeights;374	/// The aggregated dispatch type that is available for extrinsics.375	type Call = Call;376	/// The weight of database operations that the runtime can invoke.377	type DbWeight = RocksDbWeight;378	/// The ubiquitous event type.379	type Event = Event;380	/// The type for hashing blocks and tries.381	type Hash = Hash;382	/// The hashing algorithm used.383	type Hashing = BlakeTwo256;384	/// The header type.385	type Header = generic::Header<BlockNumber, BlakeTwo256>;386	/// The index type for storing how many extrinsics an account has signed.387	type Index = Index;388	/// The lookup mechanism to get account ID from whatever is passed in dispatchers.389	type Lookup = AccountIdLookup<AccountId, ()>;390	/// What to do if an account is fully reaped from the system.391	type OnKilledAccount = ();392	/// What to do if a new account is created.393	type OnNewAccount = ();394	type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;395	/// The ubiquitous origin type.396	type Origin = Origin;397	/// This type is being generated by `construct_runtime!`.398	type PalletInfo = PalletInfo;399	/// This is used as an identifier of the chain. 42 is the generic substrate prefix.400	type SS58Prefix = SS58Prefix;401	/// Weight information for the extrinsics of this pallet.402	type SystemWeightInfo = frame_system::weights::SubstrateWeight<Self>;403	/// Version of the runtime.404	type Version = Version;405	type MaxConsumers = ConstU32<16>;406}407408parameter_types! {409	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;410}411412impl pallet_timestamp::Config for Runtime {413	/// A timestamp: milliseconds since the unix epoch.414	type Moment = u64;415	type OnTimestampSet = ();416	type MinimumPeriod = MinimumPeriod;417	type WeightInfo = ();418}419420parameter_types! {421	// pub const ExistentialDeposit: u128 = 500;422	pub const ExistentialDeposit: u128 = 0;423	pub const MaxLocks: u32 = 50;424}425426impl pallet_balances::Config for Runtime {427	type MaxLocks = MaxLocks;428	type MaxReserves = ();429	type ReserveIdentifier = [u8; 8];430	/// The type for recording an account's balance.431	type Balance = Balance;432	/// The ubiquitous event type.433	type Event = Event;434	type DustRemoval = Treasury;435	type ExistentialDeposit = ExistentialDeposit;436	type AccountStore = System;437	type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;438}439440pub const MICROUNIQUE: Balance = 1_000_000_000_000;441pub const MILLIUNIQUE: Balance = 1_000 * MICROUNIQUE;442pub const CENTIUNIQUE: Balance = 10 * MILLIUNIQUE;443pub const UNIQUE: Balance = 100 * CENTIUNIQUE;444445pub const fn deposit(items: u32, bytes: u32) -> Balance {446	items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE447}448449/*450parameter_types! {451	pub TombstoneDeposit: Balance = deposit(452		1,453		sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,454	);455	pub DepositPerContract: Balance = TombstoneDeposit::get();456	pub const DepositPerStorageByte: Balance = deposit(0, 1);457	pub const DepositPerStorageItem: Balance = deposit(1, 0);458	pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);459	pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;460	pub const SignedClaimHandicap: u32 = 2;461	pub const MaxDepth: u32 = 32;462	pub const MaxValueSize: u32 = 16 * 1024;463	pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb464	// The lazy deletion runs inside on_initialize.465	pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *466		RuntimeBlockWeights::get().max_block;467	// The weight needed for decoding the queue should be less or equal than a fifth468	// of the overall weight dedicated to the lazy deletion.469	pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (470			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -471			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)472		)) / 5) as u32;473	pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();474}475476impl pallet_contracts::Config for Runtime {477	type Time = Timestamp;478	type Randomness = RandomnessCollectiveFlip;479	type Currency = Balances;480	type Event = Event;481	type RentPayment = ();482	type SignedClaimHandicap = SignedClaimHandicap;483	type TombstoneDeposit = TombstoneDeposit;484	type DepositPerContract = DepositPerContract;485	type DepositPerStorageByte = DepositPerStorageByte;486	type DepositPerStorageItem = DepositPerStorageItem;487	type RentFraction = RentFraction;488	type SurchargeReward = SurchargeReward;489	type WeightPrice = pallet_transaction_payment::Pallet<Self>;490	type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;491	type ChainExtension = NFTExtension;492	type DeletionQueueDepth = DeletionQueueDepth;493	type DeletionWeightLimit = DeletionWeightLimit;494	type Schedule = Schedule;495	type CallStack = [pallet_contracts::Frame<Self>; 31];496}497*/498499parameter_types! {500	pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer501	/// This value increases the priority of `Operational` transactions by adding502	/// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.503	pub const OperationalFeeMultiplier: u8 = 5;504}505506/// Linear implementor of `WeightToFeePolynomial`507pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);508509impl<T> WeightToFeePolynomial for LinearFee<T>510where511	T: BaseArithmetic + From<u32> + Copy + Unsigned,512{513	type Balance = T;514515	fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {516		smallvec!(WeightToFeeCoefficient {517			// Targeting 0.1 Unique per NFT transfer518			coeff_integer: 142_688_000u32.into(),519			coeff_frac: Perbill::zero(),520			negative: false,521			degree: 1,522		})523	}524}525526impl pallet_transaction_payment::Config for Runtime {527	type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;528	type TransactionByteFee = TransactionByteFee;529	type OperationalFeeMultiplier = OperationalFeeMultiplier;530	type WeightToFee = LinearFee<Balance>;531	type FeeMultiplierUpdate = ();532}533534parameter_types! {535	pub const ProposalBond: Permill = Permill::from_percent(5);536	pub const ProposalBondMinimum: Balance = 1 * UNIQUE;537	pub const ProposalBondMaximum: Balance = 1000 * UNIQUE;538	pub const SpendPeriod: BlockNumber = 5 * MINUTES;539	pub const Burn: Permill = Permill::from_percent(0);540	pub const TipCountdown: BlockNumber = 1 * DAYS;541	pub const TipFindersFee: Percent = Percent::from_percent(20);542	pub const TipReportDepositBase: Balance = 1 * UNIQUE;543	pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;544	pub const BountyDepositBase: Balance = 1 * UNIQUE;545	pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;546	pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");547	pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;548	pub const MaximumReasonLength: u32 = 16384;549	pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);550	pub const BountyValueMinimum: Balance = 5 * UNIQUE;551	pub const MaxApprovals: u32 = 100;552}553554impl pallet_treasury::Config for Runtime {555	type PalletId = TreasuryModuleId;556	type Currency = Balances;557	type ApproveOrigin = EnsureRoot<AccountId>;558	type RejectOrigin = EnsureRoot<AccountId>;559	type Event = Event;560	type OnSlash = ();561	type ProposalBond = ProposalBond;562	type ProposalBondMinimum = ProposalBondMinimum;563	type ProposalBondMaximum = ProposalBondMaximum;564	type SpendPeriod = SpendPeriod;565	type Burn = Burn;566	type BurnDestination = ();567	type SpendFunds = ();568	type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;569	type MaxApprovals = MaxApprovals;570}571572impl pallet_sudo::Config for Runtime {573	type Event = Event;574	type Call = Call;575}576577pub struct RelayChainBlockNumberProvider<T>(sp_std::marker::PhantomData<T>);578579impl<T: cumulus_pallet_parachain_system::Config> BlockNumberProvider580	for RelayChainBlockNumberProvider<T>581{582	type BlockNumber = BlockNumber;583584	fn current_block_number() -> Self::BlockNumber {585		cumulus_pallet_parachain_system::Pallet::<T>::validation_data()586			.map(|d| d.relay_parent_number)587			.unwrap_or_default()588	}589}590591parameter_types! {592	pub const MinVestedTransfer: Balance = 10 * UNIQUE;593	pub const MaxVestingSchedules: u32 = 28;594}595596impl orml_vesting::Config for Runtime {597	type Event = Event;598	type Currency = pallet_balances::Pallet<Runtime>;599	type MinVestedTransfer = MinVestedTransfer;600	type VestedTransferOrigin = EnsureSigned<AccountId>;601	type WeightInfo = ();602	type MaxVestingSchedules = MaxVestingSchedules;603	type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;604}605606parameter_types! {607	pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;608	pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;609}610611impl cumulus_pallet_parachain_system::Config for Runtime {612	type Event = Event;613	type SelfParaId = parachain_info::Pallet<Self>;614	type OnSystemEvent = ();615	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<616	// 	MaxDownwardMessageWeight,617	// 	XcmExecutor<XcmConfig>,618	// 	Call,619	// >;620	type OutboundXcmpMessageSource = XcmpQueue;621	type DmpMessageHandler = DmpQueue;622	type ReservedDmpWeight = ReservedDmpWeight;623	type ReservedXcmpWeight = ReservedXcmpWeight;624	type XcmpMessageHandler = XcmpQueue;625}626627impl parachain_info::Config for Runtime {}628629impl cumulus_pallet_aura_ext::Config for Runtime {}630631parameter_types! {632	pub const RelayLocation: MultiLocation = MultiLocation::parent();633	pub const RelayNetwork: NetworkId = NetworkId::Polkadot;634	pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();635	pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();636}637638/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used639/// when determining ownership of accounts for asset transacting and when attempting to use XCM640/// `Transact` in order to determine the dispatch Origin.641pub type LocationToAccountId = (642	// The parent (Relay-chain) origin converts to the default `AccountId`.643	ParentIsPreset<AccountId>,644	// Sibling parachain origins convert to AccountId via the `ParaId::into`.645	SiblingParachainConvertsVia<Sibling, AccountId>,646	// Straight up local `AccountId32` origins just alias directly to `AccountId`.647	AccountId32Aliases<RelayNetwork, AccountId>,648);649650pub struct OnlySelfCurrency;651impl<B: TryFrom<u128>> MatchesFungible<B> for OnlySelfCurrency {652	fn matches_fungible(a: &MultiAsset) -> Option<B> {653		match (&a.id, &a.fun) {654			(Concrete(_), XcmFungible(ref amount)) => CheckedConversion::checked_from(*amount),655			_ => None,656		}657	}658}659660/// Means for transacting assets on this chain.661pub type LocalAssetTransactor = CurrencyAdapter<662	// Use this currency:663	Balances,664	// Use this currency when it is a fungible asset matching the given location or name:665	OnlySelfCurrency,666	// Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:667	LocationToAccountId,668	// Our chain's account ID type (we can't get away without mentioning it explicitly):669	AccountId,670	// We don't track any teleports.671	(),672>;673674/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance,675/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can676/// biases the kind of local `Origin` it will become.677pub type XcmOriginToTransactDispatchOrigin = (678	// Sovereign account converter; this attempts to derive an `AccountId` from the origin location679	// using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for680	// foreign chains who want to have a local sovereign account on this chain which they control.681	SovereignSignedViaLocation<LocationToAccountId, Origin>,682	// Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when683	// recognised.684	RelayChainAsNative<RelayOrigin, Origin>,685	// Native converter for sibling Parachains; will convert to a `SiblingPara` origin when686	// recognised.687	SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,688	// Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a689	// transaction from the Root origin.690	ParentAsSuperuser<Origin>,691	// Native signed account converter; this just converts an `AccountId32` origin into a normal692	// `Origin::Signed` origin of the same 32-byte value.693	SignedAccountId32AsNative<RelayNetwork, Origin>,694	// Xcm origins can be represented natively under the Xcm pallet's Xcm origin.695	XcmPassthrough<Origin>,696);697698parameter_types! {699	// One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.700	pub UnitWeightCost: Weight = 1_000_000;701	// 1200 UNIQUEs buy 1 second of weight.702	pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), 1_200 * UNIQUE);703	pub const MaxInstructions: u32 = 100;704	pub const MaxAuthorities: u32 = 100_000;705}706707match_type! {708	pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {709		MultiLocation { parents: 1, interior: Here } |710		MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Unit, .. }) }711	};712}713714pub type Barrier = (715	TakeWeightCredit,716	AllowTopLevelPaidExecutionFrom<Everything>,717	AllowUnpaidExecutionFrom<ParentOrParentsUnitPlurality>,718	// ^^^ Parent & its unit plurality gets free execution719);720721pub struct UsingOnlySelfCurrencyComponents<722	WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,723	AssetId: Get<MultiLocation>,724	AccountId,725	Currency: CurrencyT<AccountId>,726	OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,727>(728	Weight,729	Currency::Balance,730	PhantomData<(WeightToFee, AssetId, AccountId, Currency, OnUnbalanced)>,731);732impl<733		WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,734		AssetId: Get<MultiLocation>,735		AccountId,736		Currency: CurrencyT<AccountId>,737		OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,738	> WeightTrader739	for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>740{741	fn new() -> Self {742		Self(0, Zero::zero(), PhantomData)743	}744745	fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError> {746		let amount = WeightToFee::calc(&weight);747		let u128_amount: u128 = amount.try_into().map_err(|_| XcmError::Overflow)?;748749		// location to this parachain through relay chain750		let option1: xcm::v1::AssetId = Concrete(MultiLocation {751			parents: 1,752			interior: X1(Parachain(ParachainInfo::parachain_id().into())),753		});754		// direct location755		let option2: xcm::v1::AssetId = Concrete(MultiLocation {756			parents: 0,757			interior: Here,758		});759760		let required = if payment.fungible.contains_key(&option1) {761			(option1, u128_amount).into()762		} else if payment.fungible.contains_key(&option2) {763			(option2, u128_amount).into()764		} else {765			(Concrete(MultiLocation::default()), u128_amount).into()766		};767768		let unused = payment769			.checked_sub(required)770			.map_err(|_| XcmError::TooExpensive)?;771		self.0 = self.0.saturating_add(weight);772		self.1 = self.1.saturating_add(amount);773		Ok(unused)774	}775776	fn refund_weight(&mut self, weight: Weight) -> Option<MultiAsset> {777		let weight = weight.min(self.0);778		let amount = WeightToFee::calc(&weight);779		self.0 -= weight;780		self.1 = self.1.saturating_sub(amount);781		let amount: u128 = amount.saturated_into();782		if amount > 0 {783			Some((AssetId::get(), amount).into())784		} else {785			None786		}787	}788}789impl<790		WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,791		AssetId: Get<MultiLocation>,792		AccountId,793		Currency: CurrencyT<AccountId>,794		OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,795	> Drop796	for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>797{798	fn drop(&mut self) {799		OnUnbalanced::on_unbalanced(Currency::issue(self.1));800	}801}802803pub struct XcmConfig;804impl Config for XcmConfig {805	type Call = Call;806	type XcmSender = XcmRouter;807	// How to withdraw and deposit an asset.808	type AssetTransactor = LocalAssetTransactor;809	type OriginConverter = XcmOriginToTransactDispatchOrigin;810	type IsReserve = NativeAsset;811	type IsTeleporter = (); // Teleportation is disabled812	type LocationInverter = LocationInverter<Ancestry>;813	type Barrier = Barrier;814	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;815	type Trader = UsingOnlySelfCurrencyComponents<816		IdentityFee<Balance>,817		RelayLocation,818		AccountId,819		Balances,820		(),821	>;822	type ResponseHandler = (); // Don't handle responses for now.823	type SubscriptionService = PolkadotXcm;824825	type AssetTrap = PolkadotXcm;826	type AssetClaims = PolkadotXcm;827}828829// parameter_types! {830// 	pub const MaxDownwardMessageWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 10;831// }832833/// No local origins on this chain are allowed to dispatch XCM sends/executions.834pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);835836/// The means for routing XCM messages which are not for local execution into the right message837/// queues.838pub type XcmRouter = (839	// Two routers - use UMP to communicate with the relay chain:840	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,841	// ..and XCMP to communicate with the sibling chains.842	XcmpQueue,843);844845impl pallet_evm_coder_substrate::Config for Runtime {846	type EthereumTransactionSender = pallet_ethereum::Pallet<Self>;847	type GasWeightMapping = FixedGasWeightMapping;848}849850impl pallet_xcm::Config for Runtime {851	type Event = Event;852	type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;853	type XcmRouter = XcmRouter;854	type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;855	type XcmExecuteFilter = Everything;856	type XcmExecutor = XcmExecutor<XcmConfig>;857	type XcmTeleportFilter = Everything;858	type XcmReserveTransferFilter = Everything;859	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;860	type LocationInverter = LocationInverter<Ancestry>;861	type Origin = Origin;862	type Call = Call;863	const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;864	type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;865}866867impl cumulus_pallet_xcm::Config for Runtime {868	type Event = Event;869	type XcmExecutor = XcmExecutor<XcmConfig>;870}871872impl cumulus_pallet_xcmp_queue::Config for Runtime {873	type Event = Event;874	type XcmExecutor = XcmExecutor<XcmConfig>;875	type ChannelInfo = ParachainSystem;876	type VersionWrapper = ();877	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;878	type ControllerOrigin = EnsureRoot<AccountId>;879	type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin;880}881882impl cumulus_pallet_dmp_queue::Config for Runtime {883	type Event = Event;884	type XcmExecutor = XcmExecutor<XcmConfig>;885	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;886}887888impl pallet_aura::Config for Runtime {889	type AuthorityId = AuraId;890	type DisabledValidators = ();891	type MaxAuthorities = MaxAuthorities;892}893894parameter_types! {895	pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account();896	pub const CollectionCreationPrice: Balance = 2 * UNIQUE;897}898899impl pallet_common::Config for Runtime {900	type Event = Event;901	type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated;902	type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;903	type CrossAccountId = pallet_common::account::BasicCrossAccountId<Self>;904905	type Currency = Balances;906	type CollectionCreationPrice = CollectionCreationPrice;907	type TreasuryAccountId = TreasuryAccountId;908}909910impl pallet_fungible::Config for Runtime {911	type WeightInfo = pallet_fungible::weights::SubstrateWeight<Self>;912}913impl pallet_refungible::Config for Runtime {914	type WeightInfo = pallet_refungible::weights::SubstrateWeight<Self>;915}916impl pallet_nonfungible::Config for Runtime {917	type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;918}919920impl pallet_unique::Config for Runtime {921	type Event = Event;922	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;923}924925parameter_types! {926	pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied927}928929/// Used for the pallet inflation930impl pallet_inflation::Config for Runtime {931	type Currency = Balances;932	type TreasuryAccountId = TreasuryAccountId;933	type InflationBlockInterval = InflationBlockInterval;934	type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;935}936937// parameter_types! {938// 	pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *939// 		RuntimeBlockWeights::get().max_block;940// 	pub const MaxScheduledPerBlock: u32 = 50;941// }942943type EvmSponsorshipHandler = (944	pallet_unique::UniqueEthSponsorshipHandler<Runtime>,945	pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,946);947type SponsorshipHandler = (948	pallet_unique::UniqueSponsorshipHandler<Runtime>,949	//pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,950	pallet_evm_transaction_payment::BridgeSponsorshipHandler<Runtime>,951);952953// impl pallet_unq_scheduler::Config for Runtime {954// 	type Event = Event;955// 	type Origin = Origin;956// 	type PalletsOrigin = OriginCaller;957// 	type Call = Call;958// 	type MaximumWeight = MaximumSchedulerWeight;959// 	type ScheduleOrigin = EnsureSigned<AccountId>;960// 	type MaxScheduledPerBlock = MaxScheduledPerBlock;961// 	type SponsorshipHandler = SponsorshipHandler;962// 	type WeightInfo = ();963// }964965impl pallet_evm_transaction_payment::Config for Runtime {966	type EvmSponsorshipHandler = EvmSponsorshipHandler;967	type Currency = Balances;968	type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;969	type EvmBackwardsAddressMapping = up_evm_mapping::MapBackwardsAddressTruncated;970}971972impl pallet_charge_transaction::Config for Runtime {973	type SponsorshipHandler = SponsorshipHandler;974}975976// impl pallet_contract_helpers::Config for Runtime {977//	 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;978// }979980parameter_types! {981	// 0x842899ECF380553E8a4de75bF534cdf6fBF64049982	pub const HelpersContractAddress: H160 = H160([983		0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,984	]);985}986987impl pallet_evm_contract_helpers::Config for Runtime {988	type ContractAddress = HelpersContractAddress;989	type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;990}991992construct_runtime!(993	pub enum Runtime where994		Block = Block,995		NodeBlock = opaque::Block,996		UncheckedExtrinsic = UncheckedExtrinsic997	{998		ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,999		ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,10001001		Aura: pallet_aura::{Pallet, Config<T>} = 22,1002		AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,10031004		Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,1005		RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,1006		Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,1007		TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,1008		Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,1009		Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,1010		System: frame_system::{Pallet, Call, Storage, Config, Event<T>} = 36,1011		Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,1012		// Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,1013		// Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,10141015		// XCM helpers.1016		XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,1017		PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,1018		CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,1019		DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,10201021		// Unique Pallets1022		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,1023		Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,1024		// Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,1025		// free = 631026		Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,1027		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,1028		Common: pallet_common::{Pallet, Storage, Event<T>} = 66,1029		Fungible: pallet_fungible::{Pallet, Storage} = 67,1030		Refungible: pallet_refungible::{Pallet, Storage} = 68,1031		Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,10321033		// Frontier1034		EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,1035		Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,10361037		EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,1038		EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,1039		EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,1040		EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,1041	}1042);10431044pub struct TransactionConverter;10451046impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {1047	fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {1048		UncheckedExtrinsic::new_unsigned(1049			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1050		)1051	}1052}10531054impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {1055	fn convert_transaction(1056		&self,1057		transaction: pallet_ethereum::Transaction,1058	) -> opaque::UncheckedExtrinsic {1059		let extrinsic = UncheckedExtrinsic::new_unsigned(1060			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1061		);1062		let encoded = extrinsic.encode();1063		opaque::UncheckedExtrinsic::decode(&mut &encoded[..])1064			.expect("Encoded extrinsic is always valid")1065	}1066}10671068/// The address format for describing accounts.1069pub type Address = sp_runtime::MultiAddress<AccountId, ()>;1070/// Block header type as expected by this runtime.1071pub type Header = generic::Header<BlockNumber, BlakeTwo256>;1072/// Block type as expected by this runtime.1073pub type Block = generic::Block<Header, UncheckedExtrinsic>;1074/// A Block signed with a Justification1075pub type SignedBlock = generic::SignedBlock<Block>;1076/// BlockId type as expected by this runtime.1077pub type BlockId = generic::BlockId<Block>;1078/// The SignedExtension to the basic transaction logic.1079pub type SignedExtra = (1080	frame_system::CheckSpecVersion<Runtime>,1081	// system::CheckTxVersion<Runtime>,1082	frame_system::CheckGenesis<Runtime>,1083	frame_system::CheckEra<Runtime>,1084	frame_system::CheckNonce<Runtime>,1085	frame_system::CheckWeight<Runtime>,1086	pallet_charge_transaction::ChargeTransactionPayment<Runtime>,1087	//pallet_contract_helpers::ContractHelpersExtension<Runtime>,1088);1089/// Unchecked extrinsic type as expected by this runtime.1090pub type UncheckedExtrinsic =1091	fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;1092/// Extrinsic type that has already been checked.1093pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;1094/// Executive: handles dispatch to the various modules.1095pub type Executive = frame_executive::Executive<1096	Runtime,1097	Block,1098	frame_system::ChainContext<Runtime>,1099	Runtime,1100	AllPalletsReversedWithSystemFirst,1101>;11021103impl_opaque_keys! {1104	pub struct SessionKeys {1105		pub aura: Aura,1106	}1107}11081109impl fp_self_contained::SelfContainedCall for Call {1110	type SignedInfo = H160;11111112	fn is_self_contained(&self) -> bool {1113		match self {1114			Call::Ethereum(call) => call.is_self_contained(),1115			_ => false,1116		}1117	}11181119	fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {1120		match self {1121			Call::Ethereum(call) => call.check_self_contained(),1122			_ => None,1123		}1124	}11251126	fn validate_self_contained(&self, info: &Self::SignedInfo) -> Option<TransactionValidity> {1127		match self {1128			Call::Ethereum(call) => call.validate_self_contained(info),1129			_ => None,1130		}1131	}11321133	fn pre_dispatch_self_contained(1134		&self,1135		info: &Self::SignedInfo,1136	) -> Option<Result<(), TransactionValidityError>> {1137		match self {1138			Call::Ethereum(call) => call.pre_dispatch_self_contained(info),1139			_ => None,1140		}1141	}11421143	fn apply_self_contained(1144		self,1145		info: Self::SignedInfo,1146	) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {1147		match self {1148			call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(1149				Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),1150			)),1151			_ => None,1152		}1153	}1154}11551156macro_rules! dispatch_unique_runtime {1157	($collection:ident.$method:ident($($name:ident),*)) => {{1158		use pallet_unique::dispatch::Dispatched;11591160		let collection = Dispatched::dispatch(<pallet_common::CollectionHandle<Runtime>>::try_get($collection)?);1161		let dispatch = collection.as_dyn();11621163		Ok(dispatch.$method($($name),*))1164	}};1165}1166impl_runtime_apis! {1167	impl up_rpc::UniqueApi<Block, CrossAccountId, AccountId>1168		for Runtime1169	{1170		fn account_tokens(collection: CollectionId, account: CrossAccountId) -> Result<Vec<TokenId>, DispatchError> {1171			dispatch_unique_runtime!(collection.account_tokens(account))1172		}1173		fn token_exists(collection: CollectionId, token: TokenId) -> Result<bool, DispatchError> {1174			dispatch_unique_runtime!(collection.token_exists(token))1175		}11761177		fn token_owner(collection: CollectionId, token: TokenId) -> Result<Option<CrossAccountId>, DispatchError> {1178			dispatch_unique_runtime!(collection.token_owner(token))1179		}1180		fn const_metadata(collection: CollectionId, token: TokenId) -> Result<Vec<u8>, DispatchError> {1181			dispatch_unique_runtime!(collection.const_metadata(token))1182		}1183		fn variable_metadata(collection: CollectionId, token: TokenId) -> Result<Vec<u8>, DispatchError> {1184			dispatch_unique_runtime!(collection.variable_metadata(token))1185		}11861187		fn collection_tokens(collection: CollectionId) -> Result<u32, DispatchError> {1188			dispatch_unique_runtime!(collection.collection_tokens())1189		}1190		fn account_balance(collection: CollectionId, account: CrossAccountId) -> Result<u32, DispatchError> {1191			dispatch_unique_runtime!(collection.account_balance(account))1192		}1193		fn balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Result<u128, DispatchError> {1194			dispatch_unique_runtime!(collection.balance(account, token))1195		}1196		fn allowance(1197			collection: CollectionId,1198			sender: CrossAccountId,1199			spender: CrossAccountId,1200			token: TokenId,1201		) -> Result<u128, DispatchError> {1202			dispatch_unique_runtime!(collection.allowance(sender, spender, token))1203		}12041205		fn eth_contract_code(account: H160) -> Option<Vec<u8>> {1206			<pallet_unique::UniqueErcSupport<Runtime>>::get_code(&account)1207				.or_else(|| <pallet_evm_migration::OnMethodCall<Runtime>>::get_code(&account))1208				.or_else(|| <pallet_evm_contract_helpers::HelpersOnMethodCall<Self>>::get_code(&account))1209		}1210		fn adminlist(collection: CollectionId) -> Result<Vec<CrossAccountId>, DispatchError> {1211			Ok(<pallet_common::Pallet<Runtime>>::adminlist(collection))1212		}1213		fn allowlist(collection: CollectionId) -> Result<Vec<CrossAccountId>, DispatchError> {1214			Ok(<pallet_common::Pallet<Runtime>>::allowlist(collection))1215		}1216		fn allowed(collection: CollectionId, user: CrossAccountId) -> Result<bool, DispatchError> {1217			Ok(<pallet_common::Pallet<Runtime>>::allowed(collection, user))1218		}1219		fn last_token_id(collection: CollectionId) -> Result<TokenId, DispatchError> {1220			dispatch_unique_runtime!(collection.last_token_id())1221		}1222		fn collection_by_id(collection: CollectionId) -> Result<Option<Collection<AccountId>>, DispatchError> {1223			Ok(<pallet_common::CollectionById<Runtime>>::get(collection))1224		}1225		fn collection_stats() -> Result<CollectionStats, DispatchError> {1226			Ok(<pallet_common::Pallet<Runtime>>::collection_stats())1227		}1228	}12291230	impl sp_api::Core<Block> for Runtime {1231		fn version() -> RuntimeVersion {1232			VERSION1233		}12341235		fn execute_block(block: Block) {1236			Executive::execute_block(block)1237		}12381239		fn initialize_block(header: &<Block as BlockT>::Header) {1240			Executive::initialize_block(header)1241		}1242	}12431244	impl sp_api::Metadata<Block> for Runtime {1245		fn metadata() -> OpaqueMetadata {1246			OpaqueMetadata::new(Runtime::metadata().into())1247		}1248	}12491250	impl sp_block_builder::BlockBuilder<Block> for Runtime {1251		fn apply_extrinsic(extrinsic: <Block as BlockT>::Extrinsic) -> ApplyExtrinsicResult {1252			Executive::apply_extrinsic(extrinsic)1253		}12541255		fn finalize_block() -> <Block as BlockT>::Header {1256			Executive::finalize_block()1257		}12581259		fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<<Block as BlockT>::Extrinsic> {1260			data.create_extrinsics()1261		}12621263		fn check_inherents(1264			block: Block,1265			data: sp_inherents::InherentData,1266		) -> sp_inherents::CheckInherentsResult {1267			data.check_extrinsics(&block)1268		}12691270		// fn random_seed() -> <Block as BlockT>::Hash {1271		//     RandomnessCollectiveFlip::random_seed().01272		// }1273	}12741275	impl sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block> for Runtime {1276		fn validate_transaction(1277			source: TransactionSource,1278			tx: <Block as BlockT>::Extrinsic,1279			hash: <Block as BlockT>::Hash,1280		) -> TransactionValidity {1281			Executive::validate_transaction(source, tx, hash)1282		}1283	}12841285	impl sp_offchain::OffchainWorkerApi<Block> for Runtime {1286		fn offchain_worker(header: &<Block as BlockT>::Header) {1287			Executive::offchain_worker(header)1288		}1289	}12901291	impl fp_rpc::EthereumRuntimeRPCApi<Block> for Runtime {1292		fn chain_id() -> u64 {1293			<Runtime as pallet_evm::Config>::ChainId::get()1294		}12951296		fn account_basic(address: H160) -> EVMAccount {1297			EVM::account_basic(&address)1298		}12991300		fn gas_price() -> U256 {1301			<Runtime as pallet_evm::Config>::FeeCalculator::min_gas_price()1302		}13031304		fn account_code_at(address: H160) -> Vec<u8> {1305			EVM::account_codes(address)1306		}13071308		fn author() -> H160 {1309			<pallet_evm::Pallet<Runtime>>::find_author()1310		}13111312		fn storage_at(address: H160, index: U256) -> H256 {1313			let mut tmp = [0u8; 32];1314			index.to_big_endian(&mut tmp);1315			EVM::account_storages(address, H256::from_slice(&tmp[..]))1316		}13171318		#[allow(clippy::redundant_closure)]1319		fn call(1320			from: H160,1321			to: H160,1322			data: Vec<u8>,1323			value: U256,1324			gas_limit: U256,1325			max_fee_per_gas: Option<U256>,1326			max_priority_fee_per_gas: Option<U256>,1327			nonce: Option<U256>,1328			estimate: bool,1329			access_list: Option<Vec<(H160, Vec<H256>)>>,1330		) -> Result<pallet_evm::CallInfo, sp_runtime::DispatchError> {1331			let config = if estimate {1332				let mut config = <Runtime as pallet_evm::Config>::config().clone();1333				config.estimate = true;1334				Some(config)1335			} else {1336				None1337			};13381339			<Runtime as pallet_evm::Config>::Runner::call(1340				from,1341				to,1342				data,1343				value,1344				gas_limit.low_u64(),1345				max_fee_per_gas,1346				max_priority_fee_per_gas,1347				nonce,1348				access_list.unwrap_or_default(),1349				config.as_ref().unwrap_or_else(|| <Runtime as pallet_evm::Config>::config()),1350			).map_err(|err| err.into())1351		}13521353		#[allow(clippy::redundant_closure)]1354		fn create(1355			from: H160,1356			data: Vec<u8>,1357			value: U256,1358			gas_limit: U256,1359			max_fee_per_gas: Option<U256>,1360			max_priority_fee_per_gas: Option<U256>,1361			nonce: Option<U256>,1362			estimate: bool,1363			access_list: Option<Vec<(H160, Vec<H256>)>>,1364		) -> Result<pallet_evm::CreateInfo, sp_runtime::DispatchError> {1365			let config = if estimate {1366				let mut config = <Runtime as pallet_evm::Config>::config().clone();1367				config.estimate = true;1368				Some(config)1369			} else {1370				None1371			};13721373			<Runtime as pallet_evm::Config>::Runner::create(1374				from,1375				data,1376				value,1377				gas_limit.low_u64(),1378				max_fee_per_gas,1379				max_priority_fee_per_gas,1380				nonce,1381				access_list.unwrap_or_default(),1382				config.as_ref().unwrap_or_else(|| <Runtime as pallet_evm::Config>::config()),1383			).map_err(|err| err.into())1384		}13851386		fn current_transaction_statuses() -> Option<Vec<TransactionStatus>> {1387			Ethereum::current_transaction_statuses()1388		}13891390		fn current_block() -> Option<pallet_ethereum::Block> {1391			Ethereum::current_block()1392		}13931394		fn current_receipts() -> Option<Vec<pallet_ethereum::Receipt>> {1395			Ethereum::current_receipts()1396		}13971398		fn current_all() -> (1399			Option<pallet_ethereum::Block>,1400			Option<Vec<pallet_ethereum::Receipt>>,1401			Option<Vec<TransactionStatus>>1402		) {1403			(1404				Ethereum::current_block(),1405				Ethereum::current_receipts(),1406				Ethereum::current_transaction_statuses()1407			)1408		}14091410		fn extrinsic_filter(xts: Vec<<Block as sp_api::BlockT>::Extrinsic>) -> Vec<pallet_ethereum::Transaction> {1411			xts.into_iter().filter_map(|xt| match xt.0.function {1412				Call::Ethereum(pallet_ethereum::Call::transact { transaction }) => Some(transaction),1413				_ => None1414			}).collect()1415		}14161417		fn elasticity() -> Option<Permill> {1418			None1419		}1420	}14211422	impl sp_session::SessionKeys<Block> for Runtime {1423		fn decode_session_keys(1424			encoded: Vec<u8>,1425		) -> Option<Vec<(Vec<u8>, KeyTypeId)>> {1426			SessionKeys::decode_into_raw_public_keys(&encoded)1427		}14281429		fn generate_session_keys(seed: Option<Vec<u8>>) -> Vec<u8> {1430			SessionKeys::generate(seed)1431		}1432	}14331434	impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {1435		fn slot_duration() -> sp_consensus_aura::SlotDuration {1436			sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration())1437		}14381439		fn authorities() -> Vec<AuraId> {1440			Aura::authorities().to_vec()1441		}1442	}14431444	impl cumulus_primitives_core::CollectCollationInfo<Block> for Runtime {1445		fn collect_collation_info(header: &<Block as BlockT>::Header) -> cumulus_primitives_core::CollationInfo {1446			ParachainSystem::collect_collation_info(header)1447		}1448	}14491450	impl frame_system_rpc_runtime_api::AccountNonceApi<Block, AccountId, Index> for Runtime {1451		fn account_nonce(account: AccountId) -> Index {1452			System::account_nonce(account)1453		}1454	}14551456	impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance> for Runtime {1457		fn query_info(uxt: <Block as BlockT>::Extrinsic, len: u32) -> RuntimeDispatchInfo<Balance> {1458			TransactionPayment::query_info(uxt, len)1459		}1460		fn query_fee_details(uxt: <Block as BlockT>::Extrinsic, len: u32) -> FeeDetails<Balance> {1461			TransactionPayment::query_fee_details(uxt, len)1462		}1463	}14641465	/*1466	impl pallet_contracts_rpc_runtime_api::ContractsApi<Block, AccountId, Balance, BlockNumber, Hash>1467		for Runtime1468	{1469		fn call(1470			origin: AccountId,1471			dest: AccountId,1472			value: Balance,1473			gas_limit: u64,1474			input_data: Vec<u8>,1475		) -> pallet_contracts_primitives::ContractExecResult {1476			Contracts::bare_call(origin, dest, value, gas_limit, input_data, false)1477		}14781479		fn instantiate(1480			origin: AccountId,1481			endowment: Balance,1482			gas_limit: u64,1483			code: pallet_contracts_primitives::Code<Hash>,1484			data: Vec<u8>,1485			salt: Vec<u8>,1486		) -> pallet_contracts_primitives::ContractInstantiateResult<AccountId, BlockNumber>1487		{1488			Contracts::bare_instantiate(origin, endowment, gas_limit, code, data, salt, true, false)1489		}14901491		fn get_storage(1492			address: AccountId,1493			key: [u8; 32],1494		) -> pallet_contracts_primitives::GetStorageResult {1495			Contracts::get_storage(address, key)1496		}14971498		fn rent_projection(1499			address: AccountId,1500		) -> pallet_contracts_primitives::RentProjectionResult<BlockNumber> {1501			Contracts::rent_projection(address)1502		}1503	}1504	*/15051506	#[cfg(feature = "runtime-benchmarks")]1507	impl frame_benchmarking::Benchmark<Block> for Runtime {1508		fn benchmark_metadata(extra: bool) -> (1509			Vec<frame_benchmarking::BenchmarkList>,1510			Vec<frame_support::traits::StorageInfo>,1511		) {1512			use frame_benchmarking::{list_benchmark, Benchmarking, BenchmarkList};1513			use frame_support::traits::StorageInfoTrait;15141515			let mut list = Vec::<BenchmarkList>::new();15161517			list_benchmark!(list, extra, pallet_evm_migration, EvmMigration);1518			list_benchmark!(list, extra, pallet_unique, Unique);1519			list_benchmark!(list, extra, pallet_inflation, Inflation);1520			list_benchmark!(list, extra, pallet_fungible, Fungible);1521			list_benchmark!(list, extra, pallet_refungible, Refungible);1522			list_benchmark!(list, extra, pallet_nonfungible, Nonfungible);1523			// list_benchmark!(list, extra, pallet_evm_coder_substrate, EvmCoderSubstrate);15241525			let storage_info = AllPalletsReversedWithSystemFirst::storage_info();15261527			return (list, storage_info)1528		}15291530		fn dispatch_benchmark(1531			config: frame_benchmarking::BenchmarkConfig1532		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {1533			use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark, TrackedStorageKey};15341535			let allowlist: Vec<TrackedStorageKey> = vec![1536				// Block Number1537				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(),1538				// Total Issuance1539				hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(),1540				// Execution Phase1541				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(),1542				// Event Count1543				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(),1544				// System Events1545				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(),1546			];15471548			let mut batches = Vec::<BenchmarkBatch>::new();1549			let params = (&config, &allowlist);15501551			add_benchmark!(params, batches, pallet_evm_migration, EvmMigration);1552			add_benchmark!(params, batches, pallet_unique, Unique);1553			add_benchmark!(params, batches, pallet_inflation, Inflation);1554			add_benchmark!(params, batches, pallet_fungible, Fungible);1555			add_benchmark!(params, batches, pallet_refungible, Refungible);1556			add_benchmark!(params, batches, pallet_nonfungible, Nonfungible);1557			// add_benchmark!(params, batches, pallet_evm_coder_substrate, EvmCoderSubstrate);15581559			if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }1560			Ok(batches)1561		}1562	}1563}15641565struct CheckInherents;15661567impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {1568	fn check_inherents(1569		block: &Block,1570		relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,1571	) -> sp_inherents::CheckInherentsResult {1572		let relay_chain_slot = relay_state_proof1573			.read_slot()1574			.expect("Could not read the relay chain slot from the proof");15751576		let inherent_data =1577			cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration(1578				relay_chain_slot,1579				sp_std::time::Duration::from_secs(6),1580			)1581			.create_inherent_data()1582			.expect("Could not create the timestamp inherent data");15831584		inherent_data.check_extrinsics(block)1585	}1586}15871588cumulus_pallet_parachain_system::register_validate_block!(1589	Runtime = Runtime,1590	BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,1591	CheckInherents = CheckInherents,1592);
modifiedsmart_contracs/transfer/lib.rsdiffbeforeafterboth
--- a/smart_contracs/transfer/lib.rs
+++ b/smart_contracs/transfer/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 extern crate alloc;
 use alloc::vec::Vec;
modifiedtests/flipper-src/lib.rsdiffbeforeafterboth
--- a/tests/flipper-src/lib.rs
+++ b/tests/flipper-src/lib.rs
@@ -1,3 +1,20 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+// Original license
 // Copyright 2018-2020 Parity Technologies (UK) Ltd.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
modifiedtests/ink-types-node-runtime/examples/calls/.ink/abi_gen/main.rsdiffbeforeafterboth
--- a/tests/ink-types-node-runtime/examples/calls/.ink/abi_gen/main.rs
+++ b/tests/ink-types-node-runtime/examples/calls/.ink/abi_gen/main.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 fn main() -> Result<(), std::io::Error> {
     let abi = <contract::Calls as ink_lang::GenerateAbi>::generate_abi();
     let contents = serde_json::to_string_pretty(&abi)?;
modifiedtests/ink-types-node-runtime/examples/calls/lib.rsdiffbeforeafterboth
--- a/tests/ink-types-node-runtime/examples/calls/lib.rs
+++ b/tests/ink-types-node-runtime/examples/calls/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use ink_lang as ink;
modifiedtests/ink-types-node-runtime/src/calls.rsdiffbeforeafterboth
--- a/tests/ink-types-node-runtime/src/calls.rs
+++ b/tests/ink-types-node-runtime/src/calls.rs
@@ -1,3 +1,20 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+// Original license
 // Copyright 2019 Parity Technologies (UK) Ltd.
 // This file is part of ink!.
 //
modifiedtests/ink-types-node-runtime/src/lib.rsdiffbeforeafterboth
--- a/tests/ink-types-node-runtime/src/lib.rs
+++ b/tests/ink-types-node-runtime/src/lib.rs
@@ -1,3 +1,20 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+// Original license
 // Copyright 2018-2019 Parity Technologies (UK) Ltd.
 // This file is part of ink!.
 //
modifiedtests/loadtester-src/lib.rsdiffbeforeafterboth
--- a/tests/loadtester-src/lib.rs
+++ b/tests/loadtester-src/lib.rs
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use ink_lang as ink;
modifiedtests/src/accounts.tsdiffbeforeafterboth
--- a/tests/src/accounts.ts
+++ b/tests/src/accounts.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 export const bobsPublicKey = '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty';
 export const alicesPublicKey = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY';
modifiedtests/src/addCollectionAdmin.test.tsdiffbeforeafterboth
--- a/tests/src/addCollectionAdmin.test.ts
+++ b/tests/src/addCollectionAdmin.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {ApiPromise} from '@polkadot/api';
 import chai from 'chai';
modifiedtests/src/addToAllowList.test.tsdiffbeforeafterboth
--- a/tests/src/addToAllowList.test.ts
+++ b/tests/src/addToAllowList.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/addToContractAllowList.test.tsdiffbeforeafterboth
--- a/tests/src/addToContractAllowList.test.ts
+++ b/tests/src/addToContractAllowList.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/allowLists.test.tsdiffbeforeafterboth
--- a/tests/src/allowLists.test.ts
+++ b/tests/src/allowLists.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/approve.test.tsdiffbeforeafterboth
--- a/tests/src/approve.test.ts
+++ b/tests/src/approve.test.ts
@@ -1,7 +1,19 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {IKeyringPair} from '@polkadot/types/types';
 import {ApiPromise} from '@polkadot/api';
 import chai from 'chai';
modifiedtests/src/block-production.test.tsdiffbeforeafterboth
--- a/tests/src/block-production.test.ts
+++ b/tests/src/block-production.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import usingApi from './substrate/substrate-api';
 import {expect} from 'chai';
modifiedtests/src/burnItem.test.tsdiffbeforeafterboth
--- a/tests/src/burnItem.test.ts
+++ b/tests/src/burnItem.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
 import {Keyring} from '@polkadot/api';
modifiedtests/src/change-collection-owner.test.tsdiffbeforeafterboth
--- a/tests/src/change-collection-owner.test.ts
+++ b/tests/src/change-collection-owner.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/check-event/burnItemEvent.test.tsdiffbeforeafterboth
--- a/tests/src/check-event/burnItemEvent.test.ts
+++ b/tests/src/check-event/burnItemEvent.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
 import {ApiPromise} from '@polkadot/api';
modifiedtests/src/check-event/createCollectionEvent.test.tsdiffbeforeafterboth
--- a/tests/src/check-event/createCollectionEvent.test.ts
+++ b/tests/src/check-event/createCollectionEvent.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
 import {ApiPromise} from '@polkadot/api';
modifiedtests/src/check-event/createItemEvent.test.tsdiffbeforeafterboth
--- a/tests/src/check-event/createItemEvent.test.ts
+++ b/tests/src/check-event/createItemEvent.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
 import {ApiPromise} from '@polkadot/api';
modifiedtests/src/check-event/createMultipleItemsEvent.test.tsdiffbeforeafterboth
--- a/tests/src/check-event/createMultipleItemsEvent.test.ts
+++ b/tests/src/check-event/createMultipleItemsEvent.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
 import {ApiPromise} from '@polkadot/api';
modifiedtests/src/check-event/destroyCollectionEvent.test.tsdiffbeforeafterboth
--- a/tests/src/check-event/destroyCollectionEvent.test.ts
+++ b/tests/src/check-event/destroyCollectionEvent.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
 import {ApiPromise} from '@polkadot/api';
modifiedtests/src/check-event/transferEvent.test.tsdiffbeforeafterboth
--- a/tests/src/check-event/transferEvent.test.ts
+++ b/tests/src/check-event/transferEvent.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
 import {ApiPromise} from '@polkadot/api';
modifiedtests/src/check-event/transferFromEvent.test.tsdiffbeforeafterboth
--- a/tests/src/check-event/transferFromEvent.test.ts
+++ b/tests/src/check-event/transferFromEvent.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
 import {ApiPromise} from '@polkadot/api';
modifiedtests/src/collision-tests/admVsOwnerChanges.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/admVsOwnerChanges.test.ts
+++ b/tests/src/collision-tests/admVsOwnerChanges.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/admVsOwnerData.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/admVsOwnerData.test.ts
+++ b/tests/src/collision-tests/admVsOwnerData.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/admVsOwnerTake.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/admVsOwnerTake.test.ts
+++ b/tests/src/collision-tests/admVsOwnerTake.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/adminDestroyCollection.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/adminDestroyCollection.test.ts
+++ b/tests/src/collision-tests/adminDestroyCollection.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/adminLimitsOff.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/adminLimitsOff.test.ts
+++ b/tests/src/collision-tests/adminLimitsOff.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/adminRightsOff.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/adminRightsOff.test.ts
+++ b/tests/src/collision-tests/adminRightsOff.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/setSponsorNewOwner.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/setSponsorNewOwner.test.ts
+++ b/tests/src/collision-tests/setSponsorNewOwner.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/sponsorPayments.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/sponsorPayments.test.ts
+++ b/tests/src/collision-tests/sponsorPayments.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/tokenLimitsOff.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/tokenLimitsOff.test.ts
+++ b/tests/src/collision-tests/tokenLimitsOff.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/collision-tests/turnsOffMinting.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/turnsOffMinting.test.ts
+++ b/tests/src/collision-tests/turnsOffMinting.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 /* broken by design
 // substrate transactions are sequential, not parallel
 // the order of execution is indeterminate
modifiedtests/src/config.tsdiffbeforeafterboth
--- a/tests/src/config.ts
+++ b/tests/src/config.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import process from 'process';
 
modifiedtests/src/config_docker.tsdiffbeforeafterboth
--- a/tests/src/config_docker.ts
+++ b/tests/src/config_docker.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import process from 'process';
 
modifiedtests/src/confirmSponsorship.test.tsdiffbeforeafterboth
--- a/tests/src/confirmSponsorship.test.ts
+++ b/tests/src/confirmSponsorship.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/connection.test.tsdiffbeforeafterboth
--- a/tests/src/connection.test.ts
+++ b/tests/src/connection.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import usingApi from './substrate/substrate-api';
 import {WsProvider} from '@polkadot/api';
modifiedtests/src/contracts.test.tsdiffbeforeafterboth
--- a/tests/src/contracts.test.ts
+++ b/tests/src/contracts.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/createCollection.test.tsdiffbeforeafterboth
--- a/tests/src/createCollection.test.ts
+++ b/tests/src/createCollection.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {expect} from 'chai';
 import privateKey from './substrate/privateKey';
modifiedtests/src/createItem.test.tsdiffbeforeafterboth
--- a/tests/src/createItem.test.ts
+++ b/tests/src/createItem.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {default as usingApi} from './substrate/substrate-api';
 import chai from 'chai';
modifiedtests/src/createMultipleItems.test.tsdiffbeforeafterboth
--- a/tests/src/createMultipleItems.test.ts
+++ b/tests/src/createMultipleItems.test.ts
@@ -1,7 +1,19 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {ApiPromise} from '@polkadot/api';
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/createMultipleItemsEx.test.tsdiffbeforeafterboth
--- a/tests/src/createMultipleItemsEx.test.ts
+++ b/tests/src/createMultipleItemsEx.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {expect} from 'chai';
 import privateKey from './substrate/privateKey';
 import usingApi, {executeTransaction} from './substrate/substrate-api';
modifiedtests/src/creditFeesToTreasury.test.tsdiffbeforeafterboth
--- a/tests/src/creditFeesToTreasury.test.ts
+++ b/tests/src/creditFeesToTreasury.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import './interfaces/augment-api-consts';
 import chai from 'chai';
modifiedtests/src/destroyCollection.test.tsdiffbeforeafterboth
--- a/tests/src/destroyCollection.test.ts
+++ b/tests/src/destroyCollection.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/enableContractSponsoring.test.tsdiffbeforeafterboth
--- a/tests/src/enableContractSponsoring.test.ts
+++ b/tests/src/enableContractSponsoring.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/enableDisableTransfer.test.tsdiffbeforeafterboth
--- a/tests/src/enableDisableTransfer.test.ts
+++ b/tests/src/enableDisableTransfer.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/eth/allowlist.test.tsdiffbeforeafterboth
--- a/tests/src/eth/allowlist.test.ts
+++ b/tests/src/eth/allowlist.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {expect} from 'chai';
 import {contractHelpers, createEthAccountWithBalance, deployFlipper, itWeb3} from './util/helpers';
 
modifiedtests/src/eth/base.test.tsdiffbeforeafterboth
--- a/tests/src/eth/base.test.ts
+++ b/tests/src/eth/base.test.ts
@@ -1,4 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
 
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {collectionIdToAddress, createEthAccount, createEthAccountWithBalance, deployFlipper, ethBalanceViaSub, GAS_ARGS, itWeb3, recordEthFee} from './util/helpers';
 import {expect} from 'chai';
 import {createCollectionExpectSuccess, createItemExpectSuccess, UNIQUE} from '../util/helpers';
@@ -39,7 +54,7 @@
 
     const fee = Number(cost) / Number(UNIQUE);
     const expectedFee = 0.15;
-    const tolerance = 0.00001;
+    const tolerance = 0.00002;
 
     expect(Math.abs(fee - expectedFee)).to.be.lessThan(tolerance);
   });
modifiedtests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth
--- a/tests/src/eth/contractSponsoring.test.ts
+++ b/tests/src/eth/contractSponsoring.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import privateKey from '../substrate/privateKey';
 import {expect} from 'chai';
modifiedtests/src/eth/crossTransfer.test.tsdiffbeforeafterboth
--- a/tests/src/eth/crossTransfer.test.ts
+++ b/tests/src/eth/crossTransfer.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import privateKey from '../substrate/privateKey';
 import {createCollectionExpectSuccess,
modifiedtests/src/eth/fungible.test.tsdiffbeforeafterboth
--- a/tests/src/eth/fungible.test.ts
+++ b/tests/src/eth/fungible.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import privateKey from '../substrate/privateKey';
 import {approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess, UNIQUE} from '../util/helpers';
modifiedtests/src/eth/helpersSmoke.test.tsdiffbeforeafterboth
--- a/tests/src/eth/helpersSmoke.test.ts
+++ b/tests/src/eth/helpersSmoke.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {expect} from 'chai';
 import {createEthAccountWithBalance, deployFlipper, itWeb3, contractHelpers} from './util/helpers';
 
modifiedtests/src/eth/marketplace/marketplace.test.tsdiffbeforeafterboth
--- a/tests/src/eth/marketplace/marketplace.test.ts
+++ b/tests/src/eth/marketplace/marketplace.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {readFile} from 'fs/promises';
 import {getBalanceSingle, transferBalanceExpectSuccess} from '../../substrate/get-balance';
 import privateKey from '../../substrate/privateKey';
modifiedtests/src/eth/metadata.test.tsdiffbeforeafterboth
--- a/tests/src/eth/metadata.test.ts
+++ b/tests/src/eth/metadata.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {expect} from 'chai';
 import {createCollectionExpectSuccess} from '../util/helpers';
modifiedtests/src/eth/migration.test.tsdiffbeforeafterboth
--- a/tests/src/eth/migration.test.ts
+++ b/tests/src/eth/migration.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {expect} from 'chai';
 import privateKey from '../substrate/privateKey';
 import {submitTransactionAsync} from '../substrate/substrate-api';
modifiedtests/src/eth/nonFungible.test.tsdiffbeforeafterboth
--- a/tests/src/eth/nonFungible.test.ts
+++ b/tests/src/eth/nonFungible.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import privateKey from '../substrate/privateKey';
 import {approveExpectSuccess, burnItemExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, setVariableMetaDataExpectSuccess, transferExpectSuccess, transferFromExpectSuccess, UNIQUE, setMetadataUpdatePermissionFlagExpectSuccess} from '../util/helpers';
modifiedtests/src/eth/payable.test.tsdiffbeforeafterboth
--- a/tests/src/eth/payable.test.ts
+++ b/tests/src/eth/payable.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {expect} from 'chai';
 import privateKey from '../substrate/privateKey';
 import {submitTransactionAsync} from '../substrate/substrate-api';
modifiedtests/src/eth/proxy/fungibleProxy.test.tsdiffbeforeafterboth
--- a/tests/src/eth/proxy/fungibleProxy.test.ts
+++ b/tests/src/eth/proxy/fungibleProxy.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import privateKey from '../../substrate/privateKey';
 import {createCollectionExpectSuccess, createFungibleItemExpectSuccess} from '../../util/helpers';
modifiedtests/src/eth/proxy/nonFungibleProxy.test.tsdiffbeforeafterboth
--- a/tests/src/eth/proxy/nonFungibleProxy.test.ts
+++ b/tests/src/eth/proxy/nonFungibleProxy.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import privateKey from '../../substrate/privateKey';
 import {createCollectionExpectSuccess, createItemExpectSuccess, setVariableMetaDataExpectSuccess, setMetadataUpdatePermissionFlagExpectSuccess} from '../../util/helpers';
modifiedtests/src/eth/sponsoring.test.tsdiffbeforeafterboth
--- a/tests/src/eth/sponsoring.test.ts
+++ b/tests/src/eth/sponsoring.test.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {expect} from 'chai';
 import privateKey from '../substrate/privateKey';
 import {contractHelpers, createEthAccount, createEthAccountWithBalance, deployCollector, deployFlipper, itWeb3, SponsoringMode, transferBalanceToEth} from './util/helpers';
modifiedtests/src/eth/util/helpers.d.tsdiffbeforeafterboth
--- a/tests/src/eth/util/helpers.d.ts
+++ b/tests/src/eth/util/helpers.d.ts
@@ -1 +1,17 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 declare module 'solc';
\ No newline at end of file
modifiedtests/src/eth/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/eth/util/helpers.ts
+++ b/tests/src/eth/util/helpers.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // eslint-disable-next-line @typescript-eslint/triple-slash-reference
 /// <reference path="helpers.d.ts" />
modifiedtests/src/inflation.test.tsdiffbeforeafterboth
--- a/tests/src/inflation.test.ts
+++ b/tests/src/inflation.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/interfaces/definitions.tsdiffbeforeafterboth
--- a/tests/src/interfaces/definitions.ts
+++ b/tests/src/interfaces/definitions.ts
@@ -1 +1,17 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 export {default as unique} from './unique/definitions';
modifiedtests/src/interfaces/unique/definitions.tsdiffbeforeafterboth
--- a/tests/src/interfaces/unique/definitions.ts
+++ b/tests/src/interfaces/unique/definitions.ts
@@ -1,3 +1,19 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import types from '../lookup';
 
 type RpcParam = {
modifiedtests/src/limits.test.tsdiffbeforeafterboth
--- a/tests/src/limits.test.ts
+++ b/tests/src/limits.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import privateKey from './substrate/privateKey';
modifiedtests/src/metadataUpdate.test.tsdiffbeforeafterboth
--- a/tests/src/metadataUpdate.test.ts
+++ b/tests/src/metadataUpdate.test.ts
@@ -1,8 +1,18 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
 
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/mintModes.test.tsdiffbeforeafterboth
--- a/tests/src/mintModes.test.ts
+++ b/tests/src/mintModes.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import privateKey from './substrate/privateKey';
modifiedtests/src/overflow.test.tsdiffbeforeafterboth
--- a/tests/src/overflow.test.ts
+++ b/tests/src/overflow.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/pallet-presence.test.tsdiffbeforeafterboth
--- a/tests/src/pallet-presence.test.ts
+++ b/tests/src/pallet-presence.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {ApiPromise} from '@polkadot/api';
 import {expect} from 'chai';
modifiedtests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth
--- a/tests/src/removeCollectionAdmin.test.ts
+++ b/tests/src/removeCollectionAdmin.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {ApiPromise} from '@polkadot/api';
 import chai from 'chai';
modifiedtests/src/removeCollectionSponsor.test.tsdiffbeforeafterboth
--- a/tests/src/removeCollectionSponsor.test.ts
+++ b/tests/src/removeCollectionSponsor.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/removeFromAllowList.test.tsdiffbeforeafterboth
--- a/tests/src/removeFromAllowList.test.ts
+++ b/tests/src/removeFromAllowList.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/removeFromContractAllowList.test.tsdiffbeforeafterboth
--- a/tests/src/removeFromContractAllowList.test.ts
+++ b/tests/src/removeFromContractAllowList.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import privateKey from './substrate/privateKey';
 import usingApi from './substrate/substrate-api';
modifiedtests/src/rpc.load.tsdiffbeforeafterboth
--- a/tests/src/rpc.load.ts
+++ b/tests/src/rpc.load.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import usingApi, {submitTransactionAsync} from './substrate/substrate-api';
 import {IKeyringPair} from '@polkadot/types/types';
modifiedtests/src/scheduler.test.tsdiffbeforeafterboth
--- a/tests/src/scheduler.test.ts
+++ b/tests/src/scheduler.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/setChainLimits.test.tsdiffbeforeafterboth
--- a/tests/src/setChainLimits.test.ts
+++ b/tests/src/setChainLimits.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import privateKey from './substrate/privateKey';
modifiedtests/src/setCollectionLimits.test.tsdiffbeforeafterboth
--- a/tests/src/setCollectionLimits.test.ts
+++ b/tests/src/setCollectionLimits.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
 import {ApiPromise, Keyring} from '@polkadot/api';
modifiedtests/src/setCollectionSponsor.test.tsdiffbeforeafterboth
--- a/tests/src/setCollectionSponsor.test.ts
+++ b/tests/src/setCollectionSponsor.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/setConstOnChainSchema.test.tsdiffbeforeafterboth
--- a/tests/src/setConstOnChainSchema.test.ts
+++ b/tests/src/setConstOnChainSchema.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {Keyring} from '@polkadot/api';
 import {IKeyringPair} from '@polkadot/types/types';
modifiedtests/src/setContractSponsoringRateLimit.test.tsdiffbeforeafterboth
--- a/tests/src/setContractSponsoringRateLimit.test.ts
+++ b/tests/src/setContractSponsoringRateLimit.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import privateKey from './substrate/privateKey';
modifiedtests/src/setMintPermission.test.tsdiffbeforeafterboth
--- a/tests/src/setMintPermission.test.ts
+++ b/tests/src/setMintPermission.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import privateKey from './substrate/privateKey';
modifiedtests/src/setOffchainSchema.test.tsdiffbeforeafterboth
--- a/tests/src/setOffchainSchema.test.ts
+++ b/tests/src/setOffchainSchema.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/setPublicAccessMode.test.tsdiffbeforeafterboth
--- a/tests/src/setPublicAccessMode.test.ts
+++ b/tests/src/setPublicAccessMode.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion
 import {ApiPromise} from '@polkadot/api';
modifiedtests/src/setSchemaVersion.test.tsdiffbeforeafterboth
--- a/tests/src/setSchemaVersion.test.ts
+++ b/tests/src/setSchemaVersion.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 // https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion
 import {ApiPromise, Keyring} from '@polkadot/api';
modifiedtests/src/setVariableMetaData.test.tsdiffbeforeafterboth
--- a/tests/src/setVariableMetaData.test.ts
+++ b/tests/src/setVariableMetaData.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/setVariableMetadataSponsoringRateLimit.test.tsdiffbeforeafterboth
--- a/tests/src/setVariableMetadataSponsoringRateLimit.test.ts
+++ b/tests/src/setVariableMetadataSponsoringRateLimit.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {IKeyringPair} from '@polkadot/types/types';
 import {expect} from 'chai';
modifiedtests/src/setVariableOnChainSchema.test.tsdiffbeforeafterboth
--- a/tests/src/setVariableOnChainSchema.test.ts
+++ b/tests/src/setVariableOnChainSchema.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {Keyring} from '@polkadot/api';
 import {IKeyringPair} from '@polkadot/types/types';
modifiedtests/src/substrate/get-balance.tsdiffbeforeafterboth
--- a/tests/src/substrate/get-balance.ts
+++ b/tests/src/substrate/get-balance.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {ApiPromise} from '@polkadot/api';
 import {AccountInfo} from '@polkadot/types/interfaces/system';
modifiedtests/src/substrate/privateKey.tsdiffbeforeafterboth
--- a/tests/src/substrate/privateKey.ts
+++ b/tests/src/substrate/privateKey.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {Keyring} from '@polkadot/api';
 import {IKeyringPair} from '@polkadot/types/types';
modifiedtests/src/substrate/promisify-substrate.tsdiffbeforeafterboth
--- a/tests/src/substrate/promisify-substrate.ts
+++ b/tests/src/substrate/promisify-substrate.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {ApiPromise} from '@polkadot/api';
 
modifiedtests/src/substrate/substrate-api.tsdiffbeforeafterboth
--- a/tests/src/substrate/substrate-api.ts
+++ b/tests/src/substrate/substrate-api.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import '../interfaces/augment-api-events';
 import {WsProvider, ApiPromise} from '@polkadot/api';
modifiedtests/src/substrate/wait-new-blocks.tsdiffbeforeafterboth
--- a/tests/src/substrate/wait-new-blocks.ts
+++ b/tests/src/substrate/wait-new-blocks.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {ApiPromise} from '@polkadot/api';
 
modifiedtests/src/toggleContractAllowList.test.tsdiffbeforeafterboth
--- a/tests/src/toggleContractAllowList.test.ts
+++ b/tests/src/toggleContractAllowList.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/transfer.nload.tsdiffbeforeafterboth
--- a/tests/src/transfer.nload.ts
+++ b/tests/src/transfer.nload.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {ApiPromise} from '@polkadot/api';
 import {IKeyringPair} from '@polkadot/types/types';
modifiedtests/src/transfer.test.tsdiffbeforeafterboth
--- a/tests/src/transfer.test.ts
+++ b/tests/src/transfer.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import {ApiPromise} from '@polkadot/api';
 import {IKeyringPair} from '@polkadot/types/types';
@@ -325,7 +336,7 @@
     expect(balanceAliceBefore).to.be.eq(balanceAliceAfter);
   });
 
-  itWeb3.only('Transfers to self. In case of inside substrate-evm', async ({api}) => {
+  itWeb3('Transfers to self. In case of inside substrate-evm', async ({api}) => {
     const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
     const alice = privateKey('//Alice');
     const tokenId = await createItemExpectSuccess(alice, collectionId, 'Fungible', {Substrate: alice.address});
modifiedtests/src/transferFrom.test.tsdiffbeforeafterboth
--- a/tests/src/transferFrom.test.ts
+++ b/tests/src/transferFrom.test.ts
@@ -1,7 +1,19 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
 import {ApiPromise} from '@polkadot/api';
 import {IKeyringPair} from '@polkadot/types/types';
 import chai from 'chai';
modifiedtests/src/util/contracthelpers.tsdiffbeforeafterboth
--- a/tests/src/util/contracthelpers.ts
+++ b/tests/src/util/contracthelpers.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import '../interfaces/augment-api-rpc';
 import '../interfaces/augment-api-query';
modifiedtests/src/util/util.tsdiffbeforeafterboth
--- a/tests/src/util/util.ts
+++ b/tests/src/util/util.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 export function strToUTF16(str: string): any {
   const buf: number[] = [];
modifiedtests/src/xcmTransfer.test.tsdiffbeforeafterboth
--- a/tests/src/xcmTransfer.test.ts
+++ b/tests/src/xcmTransfer.test.ts
@@ -1,7 +1,18 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';