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

difftreelog

Merge branch 'develop' into fix/tests

Igor Kozyrev2021-11-16parents: #497a133 #516bf2b.patch.diff
in: master

49 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5114,7 +5114,7 @@
  "pallet-randomness-collective-flip",
  "pallet-refungible",
  "pallet-sudo",
- "pallet-template-charge-transaction",
+ "pallet-template-transaction-payment",
  "pallet-timestamp",
  "pallet-transaction-payment",
  "pallet-transaction-payment-rpc-runtime-api",
@@ -6350,9 +6350,9 @@
 ]
 
 [[package]]
-name = "pallet-template-charge-transaction"
+name = "pallet-template-transaction-payment"
 version = "3.0.0"
-source = "git+https://github.com/UniqueNetwork/pallet-sponsoring#e5d3354ab68face1b2ef709dc7f629803f56598d"
+source = "git+https://github.com/UniqueNetwork/pallet-sponsoring#ab8b91e9350a31133f3a3e4f52a84c6de4108e95"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -11696,7 +11696,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1f559b464de2e2bdabcac6a210d12e9b5a5973c251e102c44c585c71d51bd78e"
 dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
  "rand 0.8.4",
  "static_assertions",
 ]
@@ -11847,7 +11847,7 @@
 [[package]]
 name = "up-sponsorship"
 version = "0.1.0"
-source = "git+https://github.com/UniqueNetwork/pallet-sponsoring#e5d3354ab68face1b2ef709dc7f629803f56598d"
+source = "git+https://github.com/UniqueNetwork/pallet-sponsoring#ab8b91e9350a31133f3a3e4f52a84c6de4108e95"
 dependencies = [
  "impl-trait-for-tuples 0.2.1",
 ]
modifiedREADME.mddiffbeforeafterboth
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@
     -   Re-Fungible Token Mode
     -   Off-Chain Schema to store token image URLs
     -   Alternative economic model
-    -   White Lists and Public Mint Permission
+    -   Allow Lists and Public Mint Permission
 -   Use example: [SubstraPunks Game](https://github.com/usetech-llc/substrapunks), fully hosted on IPFS and NFT Testnet
     Blockchain.
 
modifieddoc/builders_walk_through.mddiffbeforeafterboth
--- a/doc/builders_walk_through.md
+++ b/doc/builders_walk_through.md
@@ -173,11 +173,11 @@
 6. Now select your "ZERO BALANCE" address in the drop-down list and repeat searching and adding the collection for this address.
 7. Transfer token back to your main address. Observe that despite the zero balance, the transfer is successful.
 
-### White Lists and Public Mint Permission
+### Allow Lists and Public Mint Permission
 
-We did not complete these features in time by Hackusama deadline, but because they are important for security of the network, we completed them after the deadline anyway. They can be seen in branch [feature/white_list](https://github.com/usetech-llc/nft_parachain/tree/feature/white_list). Here are the permalinks to essential functions:
+We did not complete these features in time by Hackusama deadline, but because they are important for security of the network, we completed them after the deadline anyway. They can be seen in branch [feature/allow_list](https://github.com/usetech-llc/nft_parachain/tree/feature/allow_list). Here are the permalinks to essential functions:
 
-[white_lists](https://github.com/usetech-llc/nft_parachain/blob/b7c59f0085ed2bc1922e937adf68ef4174a8ba36/pallets/nft/src/lib.rs#L659)
+[allow_lists](https://github.com/usetech-llc/nft_parachain/blob/b7c59f0085ed2bc1922e937adf68ef4174a8ba36/pallets/nft/src/lib.rs#L659)
 
 [mint_permission](https://github.com/usetech-llc/nft_parachain/blob/b7c59f0085ed2bc1922e937adf68ef4174a8ba36/pallets/nft/src/lib.rs#L373)
 
modifieddoc/economic_model.mddiffbeforeafterboth
--- a/doc/economic_model.md
+++ b/doc/economic_model.md
@@ -40,7 +40,7 @@
 
 Set the collection sponsor address. The sponsorship needs to be confirmed by sending a ConfirmSponsorship transaction
 from that address. Also, the protection measures need to be in place so that sponsor account cannot be depleted by
-malicious users. White listing is one of the measured. It can be enabled with SetPublicAccessMode method.
+malicious users. Allow listing is one of the measured. It can be enabled with SetPublicAccessMode method.
 
 ##### List of transactions
 
@@ -67,7 +67,7 @@
     Further, the logic is similar to limiting by token as above. If only one of the limits (by token or by address)
     indicates that fee should be paid by the user, the fee is paid by the user.
 -   A pallet method (SetCollectionRateLimits) will be added to set these parameters and enable rate limiting.
--   One idea to consider is deposits that must be made by an address in order to become white listed (instead of admin
+-   One idea to consider is deposits that must be made by an address in order to become allow listed (instead of admin
     review).
 
 #### Permissions
@@ -173,12 +173,12 @@
 
 #### Description
 
-Toggle between normal and white list access for the methods with access for “Anyone”. If White List mode is enabled,
-AddToWhiteList and RemoveFromWhiteList methods can be called to add to and remove addresses from the white list.
+Toggle between normal and allow list access for the methods with access for “Anyone”. If Allow List mode is enabled,
+AddToAllowList and RemoveFromAllowList methods can be called to add to and remove addresses from the allow list.
 
-White list mode is the property of collection. If it is turned on, all public operations such as token transfers, for
-example, which normally have “Anyone” permission, become white listed, i.e. are only available to collection owner,
-admins, and addresses from the white list. White lists can be helpful for rate limiting of transfers when collection
+Allow list mode is the property of collection. If it is turned on, all public operations such as token transfers, for
+example, which normally have “Anyone” permission, become allow listed, i.e. are only available to collection owner,
+admins, and addresses from the allow list. Allow lists can be helpful for rate limiting of transfers when collection
 sponsoring is enabled.
 
 #### Permissions
@@ -190,13 +190,13 @@
 -   CollectionID: ID of the Collection to set access mode for
 -   Mode
     -   0 = Normal
-    -   1 = White list
+    -   1 = Allow list
 
-### AddToWhiteList
+### AddToAllowList
 
 #### Description
 
-Add an address to white list.
+Add an address to allow list.
 
 #### Permissions
 
@@ -208,11 +208,11 @@
 -   CollectionID: ID of the Collection
 -   Address
 
-### RemoveFromWhiteList
+### RemoveFromAllowList
 
 #### Description
 
-Remove an address from white list.
+Remove an address from allow list.
 
 #### Permissions
 
modifieddoc/hackusama_walk_through.mddiffbeforeafterboth
--- a/doc/hackusama_walk_through.md
+++ b/doc/hackusama_walk_through.md
@@ -187,14 +187,14 @@
    address.
 7. Transfer token back to your main address. Observe that despite the zero balance, the transfer is successful.
 
-### White Lists and Public Mint Permission
+### Allow Lists and Public Mint Permission
 
 We did not complete these features in time by Hackusama deadline, but because they are important for security of the
 network, we completed them after the deadline anyway. They can be seen in branch
-[feature/white_list](https://github.com/usetech-llc/nft_parachain/tree/feature/white_list). Here are the permalinks to
+[feature/allow_list](https://github.com/usetech-llc/nft_parachain/tree/feature/allow_list). Here are the permalinks to
 essential functions:
 
-[white_lists](https://github.com/usetech-llc/nft_parachain/blob/b7c59f0085ed2bc1922e937adf68ef4174a8ba36/pallets/nft/src/lib.rs#L659)
+[allow_lists](https://github.com/usetech-llc/nft_parachain/blob/b7c59f0085ed2bc1922e937adf68ef4174a8ba36/pallets/nft/src/lib.rs#L659)
 
 [mint_permission](https://github.com/usetech-llc/nft_parachain/blob/b7c59f0085ed2bc1922e937adf68ef4174a8ba36/pallets/nft/src/lib.rs#L373)
 
modifieddoc/milestone_1.mddiffbeforeafterboth
--- a/doc/milestone_1.md
+++ b/doc/milestone_1.md
@@ -1,38 +1,38 @@
 ## Milestone 1
 
-**User Paid Fees and Sponsored. Finish/Debug white listing and spam/DOS protection**
+**User Paid Fees and Sponsored. Finish/Debug allow listing and spam/DOS protection**
 
 Implementation of two models 
 If collection sponsor is set and confirmed for collection instance that means Sponsored Economic Model has chosen. Otherwise default economic model User Paid Fees is set.
-For Sponsored Economic Model exists timeouts for token transactions. For every NFT type timeouts defined separately. Timeouts and white list limits together prevented spam and malicious actions.
+For Sponsored Economic Model exists timeouts for token transactions. For every NFT type timeouts defined separately. Timeouts and allow list limits together prevented spam and malicious actions.
 
 Set sponsor
 `nft`.`set_collection_sponsor`
 Confirm sponsor
 `nft`.`confirm_sponsorship`
 
-A white list mode presented by collection property `access` and can be enabled with `set_public_access_mode`. Rules provide spam/DOS protection
-While collection in the white list mode rules below are active:
-Owner can add address to white list
-Admin can add address to white list
-Non-privileged user cannot add address to white list
-Owner can remove address from white list
-Admin can remove address from white list
-Non-privileged user cannot remove address from white list
-If Public Access mode is set to WhiteList, tokens can’t be transferred from a non-whitelisted address with transfer or transferFrom
-If Public Access mode is set to WhiteList, tokens can’t be transferred to a non-whitelisted address with transfer or transferFrom
-If Public Access mode is set to WhiteList, tokens can’t be destroyed by a non-whitelisted address (even if it owned them before enabling WhiteList mode)
-If Public Access mode is set to WhiteList, token transfers can’t be Approved by a non-whitelisted address (see Approve method).
-If Public Access mode is set to WhiteList, tokens can be transferred to a whitelisted address with transfer or transferFrom
-If Public Access mode is set to WhiteList, tokens can be transferred from a whitelisted address with transfer or transferFrom 
-If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by owner.
-If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by admin.
-If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and white listed address.
-If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-white listed address.
-If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by owner.
-If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by admin.
-If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-white listed address.
-If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by non-privileged and white listed address.
+A allow list mode presented by collection property `access` and can be enabled with `set_public_access_mode`. Rules provide spam/DOS protection
+While collection in the allow list mode rules below are active:
+Owner can add address to allow list
+Admin can add address to allow list
+Non-privileged user cannot add address to allow list
+Owner can remove address from allow list
+Admin can remove address from allow list
+Non-privileged user cannot remove address from allow list
+If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom
+If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom
+If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)
+If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method).
+If Public Access mode is set to AllowList, tokens can be transferred to a allowlisted address with transfer or transferFrom
+If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer or transferFrom 
+If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner.
+If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin.
+If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow listed address.
+If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address.
+If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner.
+If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin.
+If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address.
+If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address.
 
 **Add missing custom types (CollectionMode, FungibleItemType, ReFungibleItemType)**
 
modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -260,7 +260,7 @@
 		NoPermission,
 		/// Collection is not in mint mode.
 		PublicMintingNotAllowed,
-		/// Address is not in white list.
+		/// Address is not in allow list.
 		AddressNotInAllowlist,
 
 		/// Collection name can not be longer than 63 char.
modifiedpallets/fungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/fungible/src/lib.rs
+++ b/pallets/fungible/src/lib.rs
@@ -123,7 +123,7 @@
 			.checked_sub(amount)
 			.ok_or(<CommonError<T>>::TokenValueTooLow)?;
 
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			collection.check_allowlist(owner)?;
 		}
 
@@ -161,7 +161,7 @@
 			<CommonError<T>>::TransferNotAllowed,
 		);
 
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			collection.check_allowlist(from)?;
 			collection.check_allowlist(to)?;
 		}
@@ -307,7 +307,7 @@
 		spender: &T::CrossAccountId,
 		amount: u128,
 	) -> DispatchResult {
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			collection.check_allowlist(&owner)?;
 			collection.check_allowlist(&spender)?;
 		}
@@ -335,7 +335,7 @@
 		if spender.conv_eq(from) {
 			return Self::transfer(collection, from, to, amount);
 		}
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			// `from`, `to` checked in [`transfer`]
 			collection.check_allowlist(spender)?;
 		}
@@ -366,7 +366,7 @@
 		if spender.conv_eq(from) {
 			return Self::burn(collection, from, amount);
 		}
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			// `from` checked in [`burn`]
 			collection.check_allowlist(spender)?;
 		}
modifiedpallets/nft/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/nft/src/benchmarking.rs
+++ b/pallets/nft/src/benchmarking.rs
@@ -55,23 +55,23 @@
 		let collection = create_nft_collection::<T>(caller.clone())?;
 	}: _(RawOrigin::Signed(caller.clone()), collection)
 
-	add_to_white_list {
+	add_to_allow_list {
 		let caller: T::AccountId = account("caller", 0, SEED);
-		let whitelist_account: T::AccountId = account("admin", 0, SEED);
+		let allowlist_account: T::AccountId = account("admin", 0, SEED);
 		let collection = create_nft_collection::<T>(caller.clone())?;
-	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(whitelist_account))
+	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))
 
-	remove_from_white_list {
+	remove_from_allow_list {
 		let caller: T::AccountId = account("caller", 0, SEED);
-		let whitelist_account: T::AccountId = account("admin", 0, SEED);
+		let allowlist_account: T::AccountId = account("admin", 0, SEED);
 		let collection = create_nft_collection::<T>(caller.clone())?;
-		<Pallet<T>>::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(whitelist_account.clone()))?;
-	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(whitelist_account))
+		<Pallet<T>>::add_to_allow_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(allowlist_account.clone()))?;
+	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))
 
 	set_public_access_mode {
 		let caller: T::AccountId = account("caller", 0, SEED);
 		let collection = create_nft_collection::<T>(caller.clone())?;
-	}: _(RawOrigin::Signed(caller.clone()), collection, AccessMode::WhiteList)
+	}: _(RawOrigin::Signed(caller.clone()), collection, AccessMode::AllowList)
 
 	set_mint_permission {
 		let caller: T::AccountId = account("caller", 0, SEED);
modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -256,7 +256,7 @@
 			Ok(())
 		}
 
-		/// Add an address to white list.
+		/// Add an address to allow list.
 		///
 		/// # Permissions
 		///
@@ -268,9 +268,9 @@
 		/// * collection_id.
 		///
 		/// * address.
-		#[weight = <SelfWeightOf<T>>::add_to_white_list()]
+		#[weight = <SelfWeightOf<T>>::add_to_allow_list()]
 		#[transactional]
-		pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{
+		pub fn add_to_allow_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{
 
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
 			let collection = <CollectionHandle<T>>::try_get(collection_id)?;
@@ -285,7 +285,7 @@
 			Ok(())
 		}
 
-		/// Remove an address from white list.
+		/// Remove an address from allow list.
 		///
 		/// # Permissions
 		///
@@ -297,9 +297,9 @@
 		/// * collection_id.
 		///
 		/// * address.
-		#[weight = <SelfWeightOf<T>>::remove_from_white_list()]
+		#[weight = <SelfWeightOf<T>>::remove_from_allow_list()]
 		#[transactional]
-		pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{
+		pub fn remove_from_allow_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{
 
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
 			let collection = <CollectionHandle<T>>::try_get(collection_id)?;
@@ -314,7 +314,7 @@
 			Ok(())
 		}
 
-		/// Toggle between normal and white list access for the methods with access for `Anyone`.
+		/// Toggle between normal and allow list access for the methods with access for `Anyone`.
 		///
 		/// # Permissions
 		///
@@ -339,8 +339,8 @@
 		}
 
 		/// Allows Anyone to create tokens if:
-		/// * White List is enabled, and
-		/// * Address is added to white list, and
+		/// * Allow List is enabled, and
+		/// * Address is added to allow list, and
 		/// * This method was called with True parameter
 		///
 		/// # Permissions
@@ -502,8 +502,8 @@
 		/// * Collection Owner.
 		/// * Collection Admin.
 		/// * Anyone if
-		///     * White List is enabled, and
-		///     * Address is added to white list, and
+		///     * Allow List is enabled, and
+		///     * Address is added to allow list, and
 		///     * MintPermission is enabled (see SetMintPermission method)
 		///
 		/// # Arguments
@@ -528,8 +528,8 @@
 		/// * Collection Owner.
 		/// * Collection Admin.
 		/// * Anyone if
-		///     * White List is enabled, and
-		///     * Address is added to white list, and
+		///     * Allow List is enabled, and
+		///     * Address is added to allow list, and
 		///     * MintPermission is enabled (see SetMintPermission method)
 		///
 		/// # Arguments
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
--- a/pallets/nft/src/tests.rs
+++ b/pallets/nft/src/tests.rs
@@ -460,7 +460,7 @@
 }
 
 #[test]
-fn nft_approve_and_transfer_from_white_list() {
+fn nft_approve_and_transfer_from_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -485,19 +485,19 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			1,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(1)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(2)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(3)
@@ -549,19 +549,19 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			1,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(1)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(2)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(3)
@@ -609,19 +609,19 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			1,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(1)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(2)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(3)
@@ -765,9 +765,9 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(1)
@@ -952,19 +952,19 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			1,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(1)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(2)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(origin1, 1, account(3)));
+		assert_ok!(TemplateModule::add_to_allow_list(origin1, 1, account(3)));
 
 		assert_ok!(TemplateModule::transfer_from(
 			origin2,
@@ -987,22 +987,22 @@
 // #region
 
 #[test]
-fn owner_can_add_address_to_white_list() {
+fn owner_can_add_address_to_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
 		let origin1 = Origin::signed(1);
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1,
 			collection_id,
 			account(2)
 		));
-		assert!(TemplateModule::white_list(collection_id, 2));
+		assert!(TemplateModule::allow_list(collection_id, 2));
 	});
 }
 
 #[test]
-fn admin_can_add_address_to_white_list() {
+fn admin_can_add_address_to_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 		let origin1 = Origin::signed(1);
@@ -1013,42 +1013,42 @@
 			collection_id,
 			account(2)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin2,
 			collection_id,
 			account(3)
 		));
-		assert!(TemplateModule::white_list(collection_id, 3));
+		assert!(TemplateModule::allow_list(collection_id, 3));
 	});
 }
 
 #[test]
-fn nonprivileged_user_cannot_add_address_to_white_list() {
+fn nonprivileged_user_cannot_add_address_to_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
 		let origin2 = Origin::signed(2);
 		assert_noop!(
-			TemplateModule::add_to_white_list(origin2, collection_id, account(3)),
+			TemplateModule::add_to_allow_list(origin2, collection_id, account(3)),
 			Error::<Test>::NoPermission
 		);
 	});
 }
 
 #[test]
-fn nobody_can_add_address_to_white_list_of_nonexisting_collection() {
+fn nobody_can_add_address_to_allow_list_of_nonexisting_collection() {
 	new_test_ext().execute_with(|| {
 		let origin1 = Origin::signed(1);
 
 		assert_noop!(
-			TemplateModule::add_to_white_list(origin1, 1, account(2)),
+			TemplateModule::add_to_allow_list(origin1, 1, account(2)),
 			Error::<Test>::CollectionNotFound
 		);
 	});
 }
 
 #[test]
-fn nobody_can_add_address_to_white_list_of_deleted_collection() {
+fn nobody_can_add_address_to_allow_list_of_deleted_collection() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1058,55 +1058,55 @@
 			collection_id
 		));
 		assert_noop!(
-			TemplateModule::add_to_white_list(origin1, collection_id, account(2)),
+			TemplateModule::add_to_allow_list(origin1, collection_id, account(2)),
 			Error::<Test>::CollectionNotFound
 		);
 	});
 }
 
-// If address is already added to white list, nothing happens
+// If address is already added to allow list, nothing happens
 #[test]
-fn address_is_already_added_to_white_list() {
+fn address_is_already_added_to_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 		let origin1 = Origin::signed(1);
 
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1,
 			collection_id,
 			account(2)
 		));
-		assert!(TemplateModule::white_list(collection_id, 2));
+		assert!(TemplateModule::allow_list(collection_id, 2));
 	});
 }
 
 #[test]
-fn owner_can_remove_address_from_white_list() {
+fn owner_can_remove_address_from_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
 		let origin1 = Origin::signed(1);
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
 		));
-		assert_ok!(TemplateModule::remove_from_white_list(
+		assert_ok!(TemplateModule::remove_from_allow_list(
 			origin1,
 			collection_id,
 			account(2)
 		));
-		assert!(!TemplateModule::white_list(collection_id, 2));
+		assert!(!TemplateModule::allow_list(collection_id, 2));
 	});
 }
 
 #[test]
-fn admin_can_remove_address_from_white_list() {
+fn admin_can_remove_address_from_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 		let origin1 = Origin::signed(1);
@@ -1118,102 +1118,102 @@
 			account(2)
 		));
 
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1,
 			collection_id,
 			account(3)
 		));
-		assert_ok!(TemplateModule::remove_from_white_list(
+		assert_ok!(TemplateModule::remove_from_allow_list(
 			origin2,
 			collection_id,
 			account(3)
 		));
-		assert!(!TemplateModule::white_list(collection_id, 3));
+		assert!(!TemplateModule::allow_list(collection_id, 3));
 	});
 }
 
 #[test]
-fn nonprivileged_user_cannot_remove_address_from_white_list() {
+fn nonprivileged_user_cannot_remove_address_from_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 		let origin1 = Origin::signed(1);
 		let origin2 = Origin::signed(2);
 
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1,
 			collection_id,
 			account(2)
 		));
 		assert_noop!(
-			TemplateModule::remove_from_white_list(origin2, collection_id, account(2)),
+			TemplateModule::remove_from_allow_list(origin2, collection_id, account(2)),
 			Error::<Test>::NoPermission
 		);
-		assert!(TemplateModule::white_list(collection_id, 2));
+		assert!(TemplateModule::allow_list(collection_id, 2));
 	});
 }
 
 #[test]
-fn nobody_can_remove_address_from_white_list_of_nonexisting_collection() {
+fn nobody_can_remove_address_from_allow_list_of_nonexisting_collection() {
 	new_test_ext().execute_with(|| {
 		let origin1 = Origin::signed(1);
 
 		assert_noop!(
-			TemplateModule::remove_from_white_list(origin1, 1, account(2)),
+			TemplateModule::remove_from_allow_list(origin1, 1, account(2)),
 			Error::<Test>::CollectionNotFound
 		);
 	});
 }
 
 #[test]
-fn nobody_can_remove_address_from_white_list_of_deleted_collection() {
+fn nobody_can_remove_address_from_allow_list_of_deleted_collection() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 		let origin1 = Origin::signed(1);
 		let origin2 = Origin::signed(2);
 
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
 		));
 		assert_ok!(TemplateModule::destroy_collection(origin1, collection_id));
 		assert_noop!(
-			TemplateModule::remove_from_white_list(origin2, collection_id, account(2)),
+			TemplateModule::remove_from_allow_list(origin2, collection_id, account(2)),
 			Error::<Test>::CollectionNotFound
 		);
-		assert!(!TemplateModule::white_list(collection_id, 2));
+		assert!(!TemplateModule::allow_list(collection_id, 2));
 	});
 }
 
-// If address is already removed from white list, nothing happens
+// If address is already removed from allow list, nothing happens
 #[test]
-fn address_is_already_removed_from_white_list() {
+fn address_is_already_removed_from_allow_list() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 		let origin1 = Origin::signed(1);
 
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
 		));
-		assert_ok!(TemplateModule::remove_from_white_list(
+		assert_ok!(TemplateModule::remove_from_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
 		));
-		assert_ok!(TemplateModule::remove_from_white_list(
+		assert_ok!(TemplateModule::remove_from_allow_list(
 			origin1,
 			collection_id,
 			account(2)
 		));
-		assert!(!TemplateModule::white_list(collection_id, 2));
+		assert!(!TemplateModule::allow_list(collection_id, 2));
 	});
 }
 
-// If Public Access mode is set to WhiteList, tokens can’t be transferred from a non-whitelisted address with transfer or transferFrom (2 tests)
+// If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom (2 tests)
 #[test]
-fn white_list_test_1() {
+fn allow_list_test_1() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1225,9 +1225,9 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
@@ -1235,13 +1235,13 @@
 
 		assert_noop!(
 			TemplateModule::transfer(origin1, account(3), 1, 1, 1),
-			Error::<Test>::AddresNotInWhiteList
+			Error::<Test>::AddresNotInAllowList
 		);
 	});
 }
 
 #[test]
-fn white_list_test_2() {
+fn allow_list_test_2() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 		let origin1 = Origin::signed(1);
@@ -1252,14 +1252,14 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(1)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(2)
@@ -1275,7 +1275,7 @@
 		));
 		assert_eq!(TemplateModule::approved(1, (1, 1, 1)), 1);
 
-		assert_ok!(TemplateModule::remove_from_white_list(
+		assert_ok!(TemplateModule::remove_from_allow_list(
 			origin1.clone(),
 			1,
 			account(1)
@@ -1283,14 +1283,14 @@
 
 		assert_noop!(
 			TemplateModule::transfer_from(origin1, account(1), account(3), 1, 1, 1),
-			Error::<Test>::AddresNotInWhiteList
+			Error::<Test>::AddresNotInAllowList
 		);
 	});
 }
 
-// If Public Access mode is set to WhiteList, tokens can’t be transferred to a non-whitelisted address with transfer or transferFrom (2 tests)
+// If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom (2 tests)
 #[test]
-fn white_list_test_3() {
+fn allow_list_test_3() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1302,9 +1302,9 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			1,
 			account(1)
@@ -1312,13 +1312,13 @@
 
 		assert_noop!(
 			TemplateModule::transfer(origin1, account(3), 1, 1, 1),
-			Error::<Test>::AddresNotInWhiteList
+			Error::<Test>::AddresNotInAllowList
 		);
 	});
 }
 
 #[test]
-fn white_list_test_4() {
+fn allow_list_test_4() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1330,14 +1330,14 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(1)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
@@ -1353,7 +1353,7 @@
 		));
 		assert_eq!(TemplateModule::approved(1, (1, 1, 1)), 1);
 
-		assert_ok!(TemplateModule::remove_from_white_list(
+		assert_ok!(TemplateModule::remove_from_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
@@ -1361,14 +1361,14 @@
 
 		assert_noop!(
 			TemplateModule::transfer_from(origin1, account(1), account(3), 1, 1, 1),
-			Error::<Test>::AddresNotInWhiteList
+			Error::<Test>::AddresNotInAllowList
 		);
 	});
 }
 
-// If Public Access mode is set to WhiteList, tokens can’t be destroyed by a non-whitelisted address (even if it owned them before enabling WhiteList mode)
+// If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)
 #[test]
-fn white_list_test_5() {
+fn allow_list_test_5() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1380,18 +1380,18 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_noop!(
 			TemplateModule::burn_item(origin1.clone(), 1, 1, 5),
-			Error::<Test>::AddresNotInWhiteList
+			Error::<Test>::AddresNotInAllowList
 		);
 	});
 }
 
-// If Public Access mode is set to WhiteList, token transfers can’t be Approved by a non-whitelisted address (see Approve method).
+// If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method).
 #[test]
-fn white_list_test_6() {
+fn allow_list_test_6() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1403,21 +1403,21 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 
 		// do approve
 		assert_noop!(
 			TemplateModule::approve(origin1, account(1), 1, 1, 5),
-			Error::<Test>::AddresNotInWhiteList
+			Error::<Test>::AddresNotInAllowList
 		);
 	});
 }
 
-// If Public Access mode is set to WhiteList, tokens can be transferred from a whitelisted address with transfer or transferFrom (2 tests) and
-//          tokens can be transferred from a whitelisted address with transfer or transferFrom (2 tests)
+// If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests) and
+//          tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests)
 #[test]
-fn white_list_test_7() {
+fn allow_list_test_7() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1429,14 +1429,14 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(1)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
@@ -1447,7 +1447,7 @@
 }
 
 #[test]
-fn white_list_test_8() {
+fn allow_list_test_8() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1459,14 +1459,14 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(1)
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(2)
@@ -1493,9 +1493,9 @@
 	});
 }
 
-// If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by owner.
+// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner.
 #[test]
-fn white_list_test_9() {
+fn allow_list_test_9() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 		let origin1 = Origin::signed(1);
@@ -1503,7 +1503,7 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_ok!(TemplateModule::set_mint_permission(
 			origin1,
@@ -1516,9 +1516,9 @@
 	});
 }
 
-// If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by admin.
+// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin.
 #[test]
-fn white_list_test_10() {
+fn allow_list_test_10() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1528,7 +1528,7 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_ok!(TemplateModule::set_mint_permission(
 			origin1.clone(),
@@ -1551,9 +1551,9 @@
 	});
 }
 
-// If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and white listed address.
+// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow listed address.
 #[test]
-fn white_list_test_11() {
+fn allow_list_test_11() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1563,14 +1563,14 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_ok!(TemplateModule::set_mint_permission(
 			origin1.clone(),
 			collection_id,
 			false
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1,
 			collection_id,
 			account(2)
@@ -1583,9 +1583,9 @@
 	});
 }
 
-// If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-white listed address.
+// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address.
 #[test]
-fn white_list_test_12() {
+fn allow_list_test_12() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1595,7 +1595,7 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_ok!(TemplateModule::set_mint_permission(
 			origin1,
@@ -1610,9 +1610,9 @@
 	});
 }
 
-// If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by owner.
+// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner.
 #[test]
-fn white_list_test_13() {
+fn allow_list_test_13() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1621,7 +1621,7 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_ok!(TemplateModule::set_mint_permission(
 			origin1,
@@ -1634,9 +1634,9 @@
 	});
 }
 
-// If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by admin.
+// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin.
 #[test]
-fn white_list_test_14() {
+fn allow_list_test_14() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1646,7 +1646,7 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_ok!(TemplateModule::set_mint_permission(
 			origin1.clone(),
@@ -1669,9 +1669,9 @@
 	});
 }
 
-// If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-white listed address.
+// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address.
 #[test]
-fn white_list_test_15() {
+fn allow_list_test_15() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1681,7 +1681,7 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_ok!(TemplateModule::set_mint_permission(
 			origin1,
@@ -1691,14 +1691,14 @@
 
 		assert_noop!(
 			TemplateModule::create_item(origin2, 1, account(2), default_nft_data().into()),
-			Error::<Test>::AddresNotInWhiteList
+			Error::<Test>::AddresNotInAllowList
 		);
 	});
 }
 
-// If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by non-privileged and white listed address.
+// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address.
 #[test]
-fn white_list_test_16() {
+fn allow_list_test_16() {
 	new_test_ext().execute_with(|| {
 		let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
@@ -1708,14 +1708,14 @@
 		assert_ok!(TemplateModule::set_public_access_mode(
 			origin1.clone(),
 			collection_id,
-			AccessMode::WhiteList
+			AccessMode::AllowList
 		));
 		assert_ok!(TemplateModule::set_mint_permission(
 			origin1.clone(),
 			collection_id,
 			true
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1,
 			collection_id,
 			account(2)
@@ -2056,7 +2056,7 @@
 			collection_id,
 			true
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin1.clone(),
 			collection_id,
 			account(1)
@@ -2124,7 +2124,7 @@
 			collection_id,
 			true
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin2.clone(),
 			collection_id,
 			account(1)
@@ -2177,7 +2177,7 @@
 			collection_id,
 			true
 		));
-		assert_ok!(TemplateModule::add_to_white_list(
+		assert_ok!(TemplateModule::add_to_allow_list(
 			origin2.clone(),
 			collection_id,
 			account(1)
modifiedpallets/nft/src/weights.rsdiffbeforeafterboth
--- a/pallets/nft/src/weights.rs
+++ b/pallets/nft/src/weights.rs
@@ -33,8 +33,8 @@
 pub trait WeightInfo {
 	fn create_collection() -> Weight;
 	fn destroy_collection() -> Weight;
-	fn add_to_white_list() -> Weight;
-	fn remove_from_white_list() -> Weight;
+	fn add_to_allow_list() -> Weight;
+	fn remove_from_allow_list() -> Weight;
 	fn set_public_access_mode() -> Weight;
 	fn set_mint_permission() -> Weight;
 	fn change_collection_owner() -> Weight;
@@ -75,14 +75,14 @@
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
-	fn add_to_white_list() -> Weight {
+	fn add_to_allow_list() -> Weight {
 		(6_629_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_white_list() -> Weight {
+	fn remove_from_allow_list() -> Weight {
 		(6_596_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -205,14 +205,14 @@
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
-	fn add_to_white_list() -> Weight {
+	fn add_to_allow_list() -> Weight {
 		(6_629_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_white_list() -> Weight {
+	fn remove_from_allow_list() -> Weight {
 		(6_596_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -169,7 +169,7 @@
 			<CommonError<T>>::NoPermission
 		);
 
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			collection.check_allowlist(sender)?;
 		}
 
@@ -228,7 +228,7 @@
 			<CommonError<T>>::NoPermission
 		);
 
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			collection.check_allowlist(from)?;
 			collection.check_allowlist(to)?;
 		}
@@ -449,7 +449,7 @@
 		token: TokenId,
 		spender: Option<&T::CrossAccountId>,
 	) -> DispatchResult {
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			collection.check_allowlist(&sender)?;
 			if let Some(spender) = spender {
 				collection.check_allowlist(&spender)?;
@@ -484,7 +484,7 @@
 		if spender.conv_eq(from) {
 			return Self::transfer(collection, from, to, token);
 		}
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			// `from`, `to` checked in [`transfer`]
 			collection.check_allowlist(spender)?;
 		}
@@ -512,7 +512,7 @@
 		if spender.conv_eq(from) {
 			return Self::burn(collection, from, token);
 		}
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			// `from` checked in [`burn`]
 			collection.check_allowlist(spender)?;
 		}
modifiedpallets/refungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -272,7 +272,7 @@
 			<CommonError<T>>::TransferNotAllowed
 		);
 
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			collection.check_allowlist(from)?;
 			collection.check_allowlist(to)?;
 		}
@@ -483,7 +483,7 @@
 		token: TokenId,
 		amount: u128,
 	) -> DispatchResult {
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			collection.check_allowlist(&sender)?;
 			collection.check_allowlist(&spender)?;
 		}
@@ -514,7 +514,7 @@
 		if spender.conv_eq(from) {
 			return Self::transfer(collection, from, to, token, amount);
 		}
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			// `from`, `to` checked in [`transfer`]
 			collection.check_allowlist(spender)?;
 		}
@@ -547,7 +547,7 @@
 		if spender.conv_eq(from) {
 			return Self::burn(collection, from, token, amount);
 		}
-		if collection.access == AccessMode::WhiteList {
+		if collection.access == AccessMode::AllowList {
 			// `from` checked in [`burn`]
 			collection.check_allowlist(spender)?;
 		}
modifiedprimitives/nft/src/lib.rsdiffbeforeafterboth
--- a/primitives/nft/src/lib.rs
+++ b/primitives/nft/src/lib.rs
@@ -142,7 +142,7 @@
 #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
 pub enum AccessMode {
 	Normal,
-	WhiteList,
+	AllowList,
 }
 impl Default for AccessMode {
 	fn default() -> Self {
modifiedruntime/src/chain_extension.rsdiffbeforeafterboth
--- a/runtime/src/chain_extension.rs
+++ b/runtime/src/chain_extension.rs
@@ -75,10 +75,10 @@
 }
 
 #[derive(Debug, PartialEq, Encode, Decode, MaxEncodedLen)]
-pub struct NFTExtToggleWhiteList<AccountId> {
+pub struct NFTExtToggleAllowList<AccountId> {
 	pub collection_id: u32,
 	pub address: AccountId,
-	pub whitelisted: bool,
+	pub allowlisted: bool,
 }
 
 /// The chain Extension of NFT pallet
@@ -211,18 +211,18 @@
 				Ok(RetVal::Converging(0))
 			}
 			6 => {
-				// Toggle whitelist
+				// Toggle allowlist
 				let mut env = env.buf_in_buf_out();
-				let input: NFTExtToggleWhiteList<AccountIdOf<C>> = env.read_as()?;
-				env.charge_weight(NftWeightInfoOf::<C>::add_to_white_list())?;
+				let input: NFTExtToggleAllowList<AccountIdOf<C>> = env.read_as()?;
+				env.charge_weight(NftWeightInfoOf::<C>::add_to_allow_list())?;
 
 				let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
 
-				pallet_nft::Module::<C>::toggle_white_list_internal(
+				pallet_nft::Module::<C>::toggle_allow_list_internal(
 					&C::CrossAccountId::from_sub(env.ext().address().clone()),
 					&collection,
 					&C::CrossAccountId::from_sub(input.address),
-					input.whitelisted,
+					input.allowlisted,
 				)?;
 
 				collection.submit_logs()?;
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};19// #[cfg(any(feature = "std", test))]20// pub use sp_runtime::BuildStorage;2122use sp_runtime::{23	Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys,24	traits::{25		AccountIdLookup, ConvertInto, BlakeTwo256, Block as BlockT, IdentifyAccount, Verify,26		AccountIdConversion,27	},28	transaction_validity::{TransactionSource, TransactionValidity},29	ApplyExtrinsicResult, MultiSignature,30};3132use sp_std::prelude::*;3334#[cfg(feature = "std")]35use sp_version::NativeVersion;36use sp_version::RuntimeVersion;37pub use pallet_transaction_payment::{38	Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo,39};40// A few exports that help ease life for downstream crates.41pub use pallet_balances::Call as BalancesCall;42pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner};43pub use frame_support::{44	construct_runtime, match_type,45	dispatch::DispatchResult,46	PalletId, parameter_types, StorageValue, ConsensusEngineId,47	traits::{48		Everything, Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem,49		LockIdentifier, OnUnbalanced, Randomness, FindAuthor,50	},51	weights::{52		constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},53		DispatchClass, DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,54		WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients,55	},56};57use nft_data_structs::*;58// use pallet_contracts::weights::WeightInfo;59// #[cfg(any(feature = "std", test))]60use frame_system::{61	self as system, EnsureRoot, EnsureSigned,62	limits::{BlockWeights, BlockLength},63};64use sp_arithmetic::{65	traits::{BaseArithmetic, Unsigned},66};67use smallvec::smallvec;68use codec::{Encode, Decode};69use pallet_evm::{Account as EVMAccount, FeeCalculator, OnMethodCall};70use fp_rpc::TransactionStatus;71use sp_core::crypto::Public;72use sp_runtime::{73	traits::{Dispatchable, PostDispatchInfoOf},74	transaction_validity::TransactionValidityError,75};7677// pub use pallet_timestamp::Call as TimestampCall;78pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;7980// Polkadot imports81use pallet_xcm::XcmPassthrough;82use polkadot_parachain::primitives::Sibling;83use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};84use xcm_builder::{85	AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,86	EnsureXcmOrigin, FixedWeightBounds, IsConcrete, LocationInverter, NativeAsset,87	ParentAsSuperuser, ParentIsDefault, RelayChainAsNative, SiblingParachainAsNative,88	SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32,89	SovereignSignedViaLocation, TakeWeightCredit, UsingComponents,90};91use xcm_executor::{Config, XcmExecutor};9293// mod chain_extension;94// use crate::chain_extension::{NFTExtension, Imbalance};9596/// An index to a block.97pub type BlockNumber = u32;9899/// Alias to 512-bit hash when used in the context of a transaction signature on the chain.100pub type Signature = MultiSignature;101102/// Some way of identifying an account on the chain. We intentionally make it equivalent103/// to the public key of our transaction signing scheme.104pub type AccountId = <<Signature as Verify>::Signer as IdentifyAccount>::AccountId;105106pub type CrossAccountId = pallet_common::account::BasicCrossAccountId<Runtime>;107108/// The type for looking up accounts. We don't expect more than 4 billion of them, but you109/// never know...110pub type AccountIndex = u32;111112/// Balance of an account.113pub type Balance = u128;114115/// Index of a transaction in the chain.116pub type Index = u32;117118/// A hash of some data used by the chain.119pub type Hash = sp_core::H256;120121/// Digest item type.122pub type DigestItem = generic::DigestItem<Hash>;123124/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know125/// the specifics of the runtime. They can then be made to be agnostic over specific formats126/// of data like extrinsics, allowing for them to continue syncing the network through upgrades127/// to even the core data structures.128pub mod opaque {129	use super::*;130131	pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;132133	/// Opaque block type.134	pub type Block = generic::Block<Header, UncheckedExtrinsic>;135136	pub type SessionHandlers = ();137138	impl_opaque_keys! {139		pub struct SessionKeys {140			pub aura: Aura,141		}142	}143}144145/// This runtime version.146pub const VERSION: RuntimeVersion = RuntimeVersion {147	spec_name: create_runtime_str!("opal"),148	impl_name: create_runtime_str!("opal"),149	authoring_version: 1,150	spec_version: 912202,151	impl_version: 1,152	apis: RUNTIME_API_VERSIONS,153	transaction_version: 1,154};155156pub const MILLISECS_PER_BLOCK: u64 = 12000;157158pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;159160// These time units are defined in number of blocks.161pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber);162pub const HOURS: BlockNumber = MINUTES * 60;163pub const DAYS: BlockNumber = HOURS * 24;164165parameter_types! {166	pub const DefaultSponsoringRateLimit: BlockNumber = 1 * DAYS;167}168169#[derive(codec::Encode, codec::Decode)]170pub enum XCMPMessage<XAccountId, XBalance> {171	/// Transfer tokens to the given account from the Parachain account.172	TransferToken(XAccountId, XBalance),173}174175/// The version information used to identify this runtime when compiled natively.176#[cfg(feature = "std")]177pub fn native_version() -> NativeVersion {178	NativeVersion {179		runtime_version: VERSION,180		can_author_with: Default::default(),181	}182}183184type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;185186pub struct DealWithFees;187impl OnUnbalanced<NegativeImbalance> for DealWithFees {188	fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item = NegativeImbalance>) {189		if let Some(fees) = fees_then_tips.next() {190			// for fees, 100% to treasury191			let mut split = fees.ration(100, 0);192			if let Some(tips) = fees_then_tips.next() {193				// for tips, if any, 100% to treasury194				tips.ration_merge_into(100, 0, &mut split);195			}196			Treasury::on_unbalanced(split.0);197			// Author::on_unbalanced(split.1);198		}199	}200}201202/// We assume that ~10% of the block weight is consumed by `on_initalize` handlers.203/// This is used to limit the maximal weight of a single extrinsic.204const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10);205/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used206/// by  Operational  extrinsics.207const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75);208/// We allow for 2 seconds of compute with a 6 second average block time.209const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2;210211parameter_types! {212	pub const BlockHashCount: BlockNumber = 2400;213	pub RuntimeBlockLength: BlockLength =214		BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);215	pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);216	pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;217	pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()218		.base_block(BlockExecutionWeight::get())219		.for_class(DispatchClass::all(), |weights| {220			weights.base_extrinsic = ExtrinsicBaseWeight::get();221		})222		.for_class(DispatchClass::Normal, |weights| {223			weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);224		})225		.for_class(DispatchClass::Operational, |weights| {226			weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);227			// Operational transactions have some extra reserved space, so that they228			// are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.229			weights.reserved = Some(230				MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT231			);232		})233		.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)234		.build_or_panic();235	pub const Version: RuntimeVersion = VERSION;236	pub const SS58Prefix: u8 = 42;237}238239parameter_types! {240	pub const ChainId: u64 = 8888;241}242243pub struct FixedFee;244impl FeeCalculator for FixedFee {245	fn min_gas_price() -> U256 {246		1.into()247	}248}249250impl pallet_evm::Config for Runtime {251	type BlockGasLimit = BlockGasLimit;252	type FeeCalculator = FixedFee;253	type GasWeightMapping = ();254	type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;255	type CallOrigin = EnsureAddressTruncated;256	type WithdrawOrigin = EnsureAddressTruncated;257	type AddressMapping = HashedAddressMapping<Self::Hashing>;258	type Precompiles = ();259	type Currency = Balances;260	type Event = Event;261	type OnMethodCall = (262		pallet_evm_migration::OnMethodCall<Self>,263		pallet_nft::NftErcSupport<Self>,264		pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,265	);266	type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;267	type ChainId = ChainId;268	type Runner = pallet_evm::runner::stack::Runner<Self>;269	type OnChargeTransaction = pallet_evm_transaction_payment::OnChargeTransaction<Self>;270	type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;271	type FindAuthor = EthereumFindAuthor<Aura>;272}273274impl pallet_evm_migration::Config for Runtime {275	type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;276}277278pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);279impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {280	fn find_author<'a, I>(digests: I) -> Option<H160>281	where282		I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,283	{284		if let Some(author_index) = F::find_author(digests) {285			let authority_id = Aura::authorities()[author_index as usize].clone();286			return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));287		}288		None289	}290}291292parameter_types! {293	pub BlockGasLimit: U256 = U256::from(u32::max_value());294}295296impl pallet_ethereum::Config for Runtime {297	type Event = Event;298	type StateRoot = pallet_ethereum::IntermediateStateRoot;299	type EvmSubmitLog = pallet_evm::Pallet<Self>;300}301302impl pallet_randomness_collective_flip::Config for Runtime {}303304impl system::Config for Runtime {305	/// The data to be stored in an account.306	type AccountData = pallet_balances::AccountData<Balance>;307	/// The identifier used to distinguish between accounts.308	type AccountId = AccountId;309	/// The basic call filter to use in dispatchable.310	type BaseCallFilter = Everything;311	/// Maximum number of block number to block hash mappings to keep (oldest pruned first).312	type BlockHashCount = BlockHashCount;313	/// The maximum length of a block (in bytes).314	type BlockLength = RuntimeBlockLength;315	/// The index type for blocks.316	type BlockNumber = BlockNumber;317	/// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.318	type BlockWeights = RuntimeBlockWeights;319	/// The aggregated dispatch type that is available for extrinsics.320	type Call = Call;321	/// The weight of database operations that the runtime can invoke.322	type DbWeight = RocksDbWeight;323	/// The ubiquitous event type.324	type Event = Event;325	/// The type for hashing blocks and tries.326	type Hash = Hash;327	/// The hashing algorithm used.328	type Hashing = BlakeTwo256;329	/// The header type.330	type Header = generic::Header<BlockNumber, BlakeTwo256>;331	/// The index type for storing how many extrinsics an account has signed.332	type Index = Index;333	/// The lookup mechanism to get account ID from whatever is passed in dispatchers.334	type Lookup = AccountIdLookup<AccountId, ()>;335	/// What to do if an account is fully reaped from the system.336	type OnKilledAccount = ();337	/// What to do if a new account is created.338	type OnNewAccount = ();339	type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;340	/// The ubiquitous origin type.341	type Origin = Origin;342	/// This type is being generated by `construct_runtime!`.343	type PalletInfo = PalletInfo;344	/// This is used as an identifier of the chain. 42 is the generic substrate prefix.345	type SS58Prefix = SS58Prefix;346	/// Weight information for the extrinsics of this pallet.347	type SystemWeightInfo = system::weights::SubstrateWeight<Self>;348	/// Version of the runtime.349	type Version = Version;350}351352parameter_types! {353	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;354}355356impl pallet_timestamp::Config for Runtime {357	/// A timestamp: milliseconds since the unix epoch.358	type Moment = u64;359	type OnTimestampSet = ();360	type MinimumPeriod = MinimumPeriod;361	type WeightInfo = ();362}363364parameter_types! {365	// pub const ExistentialDeposit: u128 = 500;366	pub const ExistentialDeposit: u128 = 0;367	pub const MaxLocks: u32 = 50;368}369370impl pallet_balances::Config for Runtime {371	type MaxLocks = MaxLocks;372	type MaxReserves = ();373	type ReserveIdentifier = [u8; 8];374	/// The type for recording an account's balance.375	type Balance = Balance;376	/// The ubiquitous event type.377	type Event = Event;378	type DustRemoval = Treasury;379	type ExistentialDeposit = ExistentialDeposit;380	type AccountStore = System;381	type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;382}383384pub const MICROUNIQUE: Balance = 1_000_000_000;385pub const MILLIUNIQUE: Balance = 1_000 * MICROUNIQUE;386pub const CENTIUNIQUE: Balance = 10 * MILLIUNIQUE;387pub const UNIQUE: Balance = 100 * CENTIUNIQUE;388389pub const fn deposit(items: u32, bytes: u32) -> Balance {390	items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE391}392393/*394parameter_types! {395	pub TombstoneDeposit: Balance = deposit(396		1,397		sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,398	);399	pub DepositPerContract: Balance = TombstoneDeposit::get();400	pub const DepositPerStorageByte: Balance = deposit(0, 1);401	pub const DepositPerStorageItem: Balance = deposit(1, 0);402	pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);403	pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;404	pub const SignedClaimHandicap: u32 = 2;405	pub const MaxDepth: u32 = 32;406	pub const MaxValueSize: u32 = 16 * 1024;407	pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb408	// The lazy deletion runs inside on_initialize.409	pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *410		RuntimeBlockWeights::get().max_block;411	// The weight needed for decoding the queue should be less or equal than a fifth412	// of the overall weight dedicated to the lazy deletion.413	pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (414			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -415			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)416		)) / 5) as u32;417	pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();418}419420impl pallet_contracts::Config for Runtime {421	type Time = Timestamp;422	type Randomness = RandomnessCollectiveFlip;423	type Currency = Balances;424	type Event = Event;425	type RentPayment = ();426	type SignedClaimHandicap = SignedClaimHandicap;427	type TombstoneDeposit = TombstoneDeposit;428	type DepositPerContract = DepositPerContract;429	type DepositPerStorageByte = DepositPerStorageByte;430	type DepositPerStorageItem = DepositPerStorageItem;431	type RentFraction = RentFraction;432	type SurchargeReward = SurchargeReward;433	type WeightPrice = pallet_transaction_payment::Pallet<Self>;434	type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;435	type ChainExtension = NFTExtension;436	type DeletionQueueDepth = DeletionQueueDepth;437	type DeletionWeightLimit = DeletionWeightLimit;438	type Schedule = Schedule;439	type CallStack = [pallet_contracts::Frame<Self>; 31];440}441*/442443parameter_types! {444	pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer445	/// This value increases the priority of `Operational` transactions by adding446	/// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.447	pub const OperationalFeeMultiplier: u8 = 5;448}449450/// Linear implementor of `WeightToFeePolynomial`451pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);452453impl<T> WeightToFeePolynomial for LinearFee<T>454where455	T: BaseArithmetic + From<u32> + Copy + Unsigned,456{457	type Balance = T;458459	fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {460		smallvec!(WeightToFeeCoefficient {461			coeff_integer: 146_700u32.into(), // Targeting 0.1 Unique per NFT transfer462			coeff_frac: Perbill::zero(),463			negative: false,464			degree: 1,465		})466	}467}468469impl pallet_transaction_payment::Config for Runtime {470	type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;471	type TransactionByteFee = TransactionByteFee;472	type OperationalFeeMultiplier = OperationalFeeMultiplier;473	type WeightToFee = LinearFee<Balance>;474	type FeeMultiplierUpdate = ();475}476477parameter_types! {478	pub const ProposalBond: Permill = Permill::from_percent(5);479	pub const ProposalBondMinimum: Balance = 1 * UNIQUE;480	pub const SpendPeriod: BlockNumber = 5 * MINUTES;481	pub const Burn: Permill = Permill::from_percent(0);482	pub const TipCountdown: BlockNumber = 1 * DAYS;483	pub const TipFindersFee: Percent = Percent::from_percent(20);484	pub const TipReportDepositBase: Balance = 1 * UNIQUE;485	pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;486	pub const BountyDepositBase: Balance = 1 * UNIQUE;487	pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;488	pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");489	pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;490	pub const MaximumReasonLength: u32 = 16384;491	pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);492	pub const BountyValueMinimum: Balance = 5 * UNIQUE;493	pub const MaxApprovals: u32 = 100;494}495496impl pallet_treasury::Config for Runtime {497	type PalletId = TreasuryModuleId;498	type Currency = Balances;499	type ApproveOrigin = EnsureRoot<AccountId>;500	type RejectOrigin = EnsureRoot<AccountId>;501	type Event = Event;502	type OnSlash = ();503	type ProposalBond = ProposalBond;504	type ProposalBondMinimum = ProposalBondMinimum;505	type SpendPeriod = SpendPeriod;506	type Burn = Burn;507	type BurnDestination = ();508	type SpendFunds = ();509	type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;510	type MaxApprovals = MaxApprovals;511}512513impl pallet_sudo::Config for Runtime {514	type Event = Event;515	type Call = Call;516}517518parameter_types! {519	pub const MinVestedTransfer: Balance = 10 * UNIQUE;520}521522impl pallet_vesting::Config for Runtime {523	type Event = Event;524	type Currency = Balances;525	type BlockNumberToBalance = ConvertInto;526	type MinVestedTransfer = MinVestedTransfer;527	type WeightInfo = ();528	const MAX_VESTING_SCHEDULES: u32 = 28;529}530531parameter_types! {532	pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;533	pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;534}535536impl cumulus_pallet_parachain_system::Config for Runtime {537	type Event = Event;538	type OnValidationData = ();539	type SelfParaId = parachain_info::Pallet<Self>;540	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<541	// 	MaxDownwardMessageWeight,542	// 	XcmExecutor<XcmConfig>,543	// 	Call,544	// >;545	type OutboundXcmpMessageSource = XcmpQueue;546	type DmpMessageHandler = DmpQueue;547	type ReservedDmpWeight = ReservedDmpWeight;548	type ReservedXcmpWeight = ReservedXcmpWeight;549	type XcmpMessageHandler = XcmpQueue;550}551552impl parachain_info::Config for Runtime {}553554impl cumulus_pallet_aura_ext::Config for Runtime {}555556parameter_types! {557	pub const RelayLocation: MultiLocation = MultiLocation::parent();558	pub const RelayNetwork: NetworkId = NetworkId::Polkadot;559	pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();560	pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();561}562563/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used564/// when determining ownership of accounts for asset transacting and when attempting to use XCM565/// `Transact` in order to determine the dispatch Origin.566pub type LocationToAccountId = (567	// The parent (Relay-chain) origin converts to the default `AccountId`.568	ParentIsDefault<AccountId>,569	// Sibling parachain origins convert to AccountId via the `ParaId::into`.570	SiblingParachainConvertsVia<Sibling, AccountId>,571	// Straight up local `AccountId32` origins just alias directly to `AccountId`.572	AccountId32Aliases<RelayNetwork, AccountId>,573);574575/// Means for transacting assets on this chain.576pub type LocalAssetTransactor = CurrencyAdapter<577	// Use this currency:578	Balances,579	// Use this currency when it is a fungible asset matching the given location or name:580	IsConcrete<RelayLocation>,581	// Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:582	LocationToAccountId,583	// Our chain's account ID type (we can't get away without mentioning it explicitly):584	AccountId,585	// We don't track any teleports.586	(),587>;588589/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance,590/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can591/// biases the kind of local `Origin` it will become.592pub type XcmOriginToTransactDispatchOrigin = (593	// Sovereign account converter; this attempts to derive an `AccountId` from the origin location594	// using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for595	// foreign chains who want to have a local sovereign account on this chain which they control.596	SovereignSignedViaLocation<LocationToAccountId, Origin>,597	// Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when598	// recognised.599	RelayChainAsNative<RelayOrigin, Origin>,600	// Native converter for sibling Parachains; will convert to a `SiblingPara` origin when601	// recognised.602	SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,603	// Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a604	// transaction from the Root origin.605	ParentAsSuperuser<Origin>,606	// Native signed account converter; this just converts an `AccountId32` origin into a normal607	// `Origin::Signed` origin of the same 32-byte value.608	SignedAccountId32AsNative<RelayNetwork, Origin>,609	// Xcm origins can be represented natively under the Xcm pallet's Xcm origin.610	XcmPassthrough<Origin>,611);612613parameter_types! {614	// One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.615	pub UnitWeightCost: Weight = 1_000_000;616	// 1200 UNIQUEs buy 1 second of weight.617	pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), 1_200 * UNIQUE);618	pub const MaxInstructions: u32 = 100;619	pub const MaxAuthorities: u32 = 100_000;620}621622match_type! {623	pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {624		MultiLocation { parents: 1, interior: Here } |625		MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Unit, .. }) }626	};627}628629pub type Barrier = (630	TakeWeightCredit,631	AllowTopLevelPaidExecutionFrom<Everything>,632	AllowUnpaidExecutionFrom<ParentOrParentsUnitPlurality>,633	// ^^^ Parent & its unit plurality gets free execution634);635636pub struct XcmConfig;637impl Config for XcmConfig {638	type Call = Call;639	type XcmSender = XcmRouter;640	// How to withdraw and deposit an asset.641	type AssetTransactor = LocalAssetTransactor;642	type OriginConverter = XcmOriginToTransactDispatchOrigin;643	type IsReserve = NativeAsset;644	type IsTeleporter = (); // Teleportation is disabled645	type LocationInverter = LocationInverter<Ancestry>;646	type Barrier = Barrier;647	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;648	type Trader = UsingComponents<IdentityFee<Balance>, RelayLocation, AccountId, Balances, ()>;649	type ResponseHandler = (); // Don't handle responses for now.650	type SubscriptionService = PolkadotXcm;651652	type AssetTrap = PolkadotXcm;653	type AssetClaims = PolkadotXcm;654}655656// parameter_types! {657// 	pub const MaxDownwardMessageWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 10;658// }659660/// No local origins on this chain are allowed to dispatch XCM sends/executions.661pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);662663/// The means for routing XCM messages which are not for local execution into the right message664/// queues.665pub type XcmRouter = (666	// Two routers - use UMP to communicate with the relay chain:667	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,668	// ..and XCMP to communicate with the sibling chains.669	XcmpQueue,670);671672impl pallet_evm_coder_substrate::Config for Runtime {673	type EthereumTransactionSender = pallet_ethereum::Pallet<Self>;674}675676impl pallet_xcm::Config for Runtime {677	type Event = Event;678	type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;679	type XcmRouter = XcmRouter;680	type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;681	type XcmExecuteFilter = Everything;682	type XcmExecutor = XcmExecutor<XcmConfig>;683	type XcmTeleportFilter = Everything;684	type XcmReserveTransferFilter = Everything;685	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;686	type LocationInverter = LocationInverter<Ancestry>;687	type Origin = Origin;688	type Call = Call;689	const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;690	type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;691}692693impl cumulus_pallet_xcm::Config for Runtime {694	type Event = Event;695	type XcmExecutor = XcmExecutor<XcmConfig>;696}697698impl cumulus_pallet_xcmp_queue::Config for Runtime {699	type Event = Event;700	type XcmExecutor = XcmExecutor<XcmConfig>;701	type ChannelInfo = ParachainSystem;702	type VersionWrapper = ();703}704705impl cumulus_pallet_dmp_queue::Config for Runtime {706	type Event = Event;707	type XcmExecutor = XcmExecutor<XcmConfig>;708	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;709}710711impl pallet_aura::Config for Runtime {712	type AuthorityId = AuraId;713	type DisabledValidators = ();714	type MaxAuthorities = MaxAuthorities;715}716717parameter_types! {718	pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account();719	pub const CollectionCreationPrice: Balance = 100 * UNIQUE;720}721722impl pallet_common::Config for Runtime {723	type Event = Event;724	type EvmBackwardsAddressMapping = pallet_common::account::MapBackwardsAddressTruncated;725	type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;726	type CrossAccountId = pallet_common::account::BasicCrossAccountId<Self>;727728	type Currency = Balances;729	type CollectionCreationPrice = CollectionCreationPrice;730	type TreasuryAccountId = TreasuryAccountId;731}732733impl pallet_fungible::Config for Runtime {734	type WeightInfo = pallet_fungible::weights::SubstrateWeight<Self>;735}736impl pallet_refungible::Config for Runtime {737	type WeightInfo = pallet_refungible::weights::SubstrateWeight<Self>;738}739impl pallet_nonfungible::Config for Runtime {740	type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;741}742743/// Used for the pallet nft in `./nft.rs`744impl pallet_nft::Config for Runtime {745	type WeightInfo = pallet_nft::weights::SubstrateWeight<Self>;746}747748parameter_types! {749	pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied750}751752/// Used for the pallet inflation753impl pallet_inflation::Config for Runtime {754	type Currency = Balances;755	type TreasuryAccountId = TreasuryAccountId;756	type InflationBlockInterval = InflationBlockInterval;757}758759parameter_types! {760	pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *761		RuntimeBlockWeights::get().max_block;762	pub const MaxScheduledPerBlock: u32 = 50;763}764765pub struct Sponsoring;766impl SponsoringResolve<AccountId, Call> for Sponsoring {767	fn resolve(who: &AccountId, call: &Call) -> Option<AccountId>768	where769		Call: Dispatchable<Info = DispatchInfo>,770		AccountId: AsRef<[u8]>,771	{772		pallet_nft_transaction_payment::Module::<Runtime>::withdraw_type(who, call)773	}774}775776type SponsorshipHandler = (777	pallet_nft::NftSponsorshipHandler<Runtime>,778	//pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,779);780781impl pallet_unq_scheduler::Config for Runtime {782	type Event = Event;783	type Origin = Origin;784	type PalletsOrigin = OriginCaller;785	type Call = Call;786	type MaximumWeight = MaximumSchedulerWeight;787	type ScheduleOrigin = EnsureSigned<AccountId>;788	type MaxScheduledPerBlock = MaxScheduledPerBlock;789	type SponsorshipHandler = SponsorshipHandler;790	type WeightInfo = ();791}792793impl pallet_nft_transaction_payment::Config for Runtime {794	type SponsorshipHandler = SponsorshipHandler;795}796797impl pallet_evm_transaction_payment::Config for Runtime {798	type SponsorshipHandler = (799		pallet_nft::NftEthSponsorshipHandler<Self>,800		pallet_evm_contract_helpers::HelpersContractSponsoring<Self>,801	);802	type Currency = Balances;803}804805impl pallet_nft_charge_transaction::Config for Runtime {806	type SponsorshipHandler = pallet_nft::NftSponsorshipHandler<Runtime>;807}808809// impl pallet_contract_helpers::Config for Runtime {810//	 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;811// }812813parameter_types! {814	// 0x842899ECF380553E8a4de75bF534cdf6fBF64049815	pub const HelpersContractAddress: H160 = H160([816		0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,817	]);818}819820impl pallet_evm_contract_helpers::Config for Runtime {821	type ContractAddress = HelpersContractAddress;822	type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;823}824825construct_runtime!(826	pub enum Runtime where827		Block = Block,828		NodeBlock = opaque::Block,829		UncheckedExtrinsic = UncheckedExtrinsic830	{831		ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,832		ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,833834		Aura: pallet_aura::{Pallet, Config<T>} = 22,835		AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,836837		Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,838		RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,839		Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,840		TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,841		Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,842		Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,843		System: system::{Pallet, Call, Storage, Config, Event<T>} = 36,844		Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,845		// Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,846847		// XCM helpers.848		XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,849		PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,850		CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,851		DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,852853		// Unique Pallets854		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,855		Nft: pallet_nft::{Pallet, Call, Storage} = 61,856		Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,857		NftPayment: pallet_nft_transaction_payment::{Pallet, Call, Storage} = 63,858		Charging: pallet_nft_charge_transaction::{Pallet, Call, Storage } = 64,859		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,860		Common: pallet_common::{Pallet, Storage, Event<T>} = 66,861		Fungible: pallet_fungible::{Pallet, Storage} = 67,862		Refungible: pallet_refungible::{Pallet, Storage} = 68,863		Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,864865		// Frontier866		EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,867		Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,868869		EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,870		EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,871		EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,872		EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,873	}874);875876pub struct TransactionConverter;877878impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {879	fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {880		UncheckedExtrinsic::new_unsigned(881			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),882		)883	}884}885886impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {887	fn convert_transaction(888		&self,889		transaction: pallet_ethereum::Transaction,890	) -> opaque::UncheckedExtrinsic {891		let extrinsic = UncheckedExtrinsic::new_unsigned(892			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),893		);894		let encoded = extrinsic.encode();895		opaque::UncheckedExtrinsic::decode(&mut &encoded[..])896			.expect("Encoded extrinsic is always valid")897	}898}899900/// The address format for describing accounts.901pub type Address = sp_runtime::MultiAddress<AccountId, ()>;902/// Block header type as expected by this runtime.903pub type Header = generic::Header<BlockNumber, BlakeTwo256>;904/// Block type as expected by this runtime.905pub type Block = generic::Block<Header, UncheckedExtrinsic>;906/// A Block signed with a Justification907pub type SignedBlock = generic::SignedBlock<Block>;908/// BlockId type as expected by this runtime.909pub type BlockId = generic::BlockId<Block>;910/// The SignedExtension to the basic transaction logic.911pub type SignedExtra = (912	system::CheckSpecVersion<Runtime>,913	// system::CheckTxVersion<Runtime>,914	system::CheckGenesis<Runtime>,915	system::CheckEra<Runtime>,916	system::CheckNonce<Runtime>,917	system::CheckWeight<Runtime>,918	pallet_nft_charge_transaction::ChargeTransactionPayment<Runtime>,919	//pallet_contract_helpers::ContractHelpersExtension<Runtime>,920);921/// Unchecked extrinsic type as expected by this runtime.922pub type UncheckedExtrinsic =923	fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;924/// Extrinsic type that has already been checked.925pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;926/// Executive: handles dispatch to the various modules.927pub type Executive = frame_executive::Executive<928	Runtime,929	Block,930	frame_system::ChainContext<Runtime>,931	Runtime,932	AllPallets,933>;934935impl_opaque_keys! {936	pub struct SessionKeys {937		pub aura: Aura,938	}939}940941impl fp_self_contained::SelfContainedCall for Call {942	type SignedInfo = H160;943944	fn is_self_contained(&self) -> bool {945		match self {946			Call::Ethereum(call) => call.is_self_contained(),947			_ => false,948		}949	}950951	fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {952		match self {953			Call::Ethereum(call) => call.check_self_contained(),954			_ => None,955		}956	}957958	fn validate_self_contained(&self, info: &Self::SignedInfo) -> Option<TransactionValidity> {959		match self {960			Call::Ethereum(call) => call.validate_self_contained(info),961			_ => None,962		}963	}964965	fn pre_dispatch_self_contained(966		&self,967		info: &Self::SignedInfo,968	) -> Option<Result<(), TransactionValidityError>> {969		match self {970			Call::Ethereum(call) => call.pre_dispatch_self_contained(info),971			_ => None,972		}973	}974975	fn apply_self_contained(976		self,977		info: Self::SignedInfo,978	) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {979		match self {980			call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(981				Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),982			)),983			_ => None,984		}985	}986}987988macro_rules! dispatch_nft_runtime {989	($collection:ident.$method:ident($($name:ident),*)) => {{990		use pallet_nft::dispatch::Dispatched;991992		let collection = Dispatched::dispatch(<pallet_common::CollectionHandle<Runtime>>::new($collection).unwrap());993		let dispatch = collection.as_dyn();994995		dispatch.$method($($name),*)996	}};997}998impl_runtime_apis! {999	impl up_rpc::NftApi<Block, CrossAccountId, AccountId>1000		for Runtime1001	{1002		fn account_tokens(collection: CollectionId, account: CrossAccountId) -> Vec<TokenId> {1003			dispatch_nft_runtime!(collection.account_tokens(account))1004		}1005		fn token_exists(collection: CollectionId, token: TokenId) -> bool {1006			dispatch_nft_runtime!(collection.token_exists(token))1007		}10081009		fn token_owner(collection: CollectionId, token: TokenId) -> CrossAccountId {1010			dispatch_nft_runtime!(collection.token_owner(token))1011		}1012		fn const_metadata(collection: CollectionId, token: TokenId) -> Vec<u8> {1013			dispatch_nft_runtime!(collection.const_metadata(token))1014		}1015		fn variable_metadata(collection: CollectionId, token: TokenId) -> Vec<u8> {1016			dispatch_nft_runtime!(collection.variable_metadata(token))1017		}10181019		fn collection_tokens(collection: CollectionId) -> u32 {1020			dispatch_nft_runtime!(collection.collection_tokens())1021		}1022		fn account_balance(collection: CollectionId, account: CrossAccountId) -> u32 {1023			dispatch_nft_runtime!(collection.account_balance(account))1024		}1025		fn balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> u128 {1026			dispatch_nft_runtime!(collection.balance(account, token))1027		}1028		fn allowance(1029			collection: CollectionId,1030			sender: CrossAccountId,1031			spender: CrossAccountId,1032			token: TokenId,1033		) -> u128 {1034			dispatch_nft_runtime!(collection.allowance(sender, spender, token))1035		}10361037		fn eth_contract_code(account: H160) -> Option<Vec<u8>> {1038			<pallet_nft::NftErcSupport<Runtime>>::get_code(&account)1039				.or_else(|| <pallet_evm_migration::OnMethodCall<Runtime>>::get_code(&account))1040				.or_else(|| <pallet_evm_contract_helpers::HelpersOnMethodCall<Self>>::get_code(&account))1041		}1042		fn adminlist(collection: CollectionId) -> Vec<CrossAccountId> {1043			<pallet_nft::Pallet<Runtime>>::adminlist(collection)1044		}1045		fn allowlist(collection: CollectionId) -> Vec<CrossAccountId> {1046			<pallet_nft::Pallet<Runtime>>::allowlist(collection)1047		}1048		fn last_token_id(collection: CollectionId) -> TokenId {1049			dispatch_nft_runtime!(collection.last_token_id())1050		}1051	}10521053	impl sp_api::Core<Block> for Runtime {1054		fn version() -> RuntimeVersion {1055			VERSION1056		}10571058		fn execute_block(block: Block) {1059			Executive::execute_block(block)1060		}10611062		fn initialize_block(header: &<Block as BlockT>::Header) {1063			Executive::initialize_block(header)1064		}1065	}10661067	impl sp_api::Metadata<Block> for Runtime {1068		fn metadata() -> OpaqueMetadata {1069			OpaqueMetadata::new(Runtime::metadata().into())1070		}1071	}10721073	impl sp_block_builder::BlockBuilder<Block> for Runtime {1074		fn apply_extrinsic(extrinsic: <Block as BlockT>::Extrinsic) -> ApplyExtrinsicResult {1075			Executive::apply_extrinsic(extrinsic)1076		}10771078		fn finalize_block() -> <Block as BlockT>::Header {1079			Executive::finalize_block()1080		}10811082		fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<<Block as BlockT>::Extrinsic> {1083			data.create_extrinsics()1084		}10851086		fn check_inherents(1087			block: Block,1088			data: sp_inherents::InherentData,1089		) -> sp_inherents::CheckInherentsResult {1090			data.check_extrinsics(&block)1091		}10921093		// fn random_seed() -> <Block as BlockT>::Hash {1094		//     RandomnessCollectiveFlip::random_seed().01095		// }1096	}10971098	impl sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block> for Runtime {1099		fn validate_transaction(1100			source: TransactionSource,1101			tx: <Block as BlockT>::Extrinsic,1102			hash: <Block as BlockT>::Hash,1103		) -> TransactionValidity {1104			Executive::validate_transaction(source, tx, hash)1105		}1106	}11071108	impl sp_offchain::OffchainWorkerApi<Block> for Runtime {1109		fn offchain_worker(header: &<Block as BlockT>::Header) {1110			Executive::offchain_worker(header)1111		}1112	}11131114	impl fp_rpc::EthereumRuntimeRPCApi<Block> for Runtime {1115		fn chain_id() -> u64 {1116			<Runtime as pallet_evm::Config>::ChainId::get()1117		}11181119		fn account_basic(address: H160) -> EVMAccount {1120			EVM::account_basic(&address)1121		}11221123		fn gas_price() -> U256 {1124			<Runtime as pallet_evm::Config>::FeeCalculator::min_gas_price()1125		}11261127		fn account_code_at(address: H160) -> Vec<u8> {1128			EVM::account_codes(address)1129		}11301131		fn author() -> H160 {1132			<pallet_evm::Pallet<Runtime>>::find_author()1133		}11341135		fn storage_at(address: H160, index: U256) -> H256 {1136			let mut tmp = [0u8; 32];1137			index.to_big_endian(&mut tmp);1138			EVM::account_storages(address, H256::from_slice(&tmp[..]))1139		}11401141		fn call(1142			from: H160,1143			to: H160,1144			data: Vec<u8>,1145			value: U256,1146			gas_limit: U256,1147			gas_price: Option<U256>,1148			nonce: Option<U256>,1149			estimate: bool,1150		) -> Result<pallet_evm::CallInfo, sp_runtime::DispatchError> {1151			let config = if estimate {1152				let mut config = <Runtime as pallet_evm::Config>::config().clone();1153				config.estimate = true;1154				Some(config)1155			} else {1156				None1157			};11581159			<Runtime as pallet_evm::Config>::Runner::call(1160				from,1161				to,1162				data,1163				value,1164				gas_limit.low_u64(),1165				gas_price,1166				nonce,1167				config.as_ref().unwrap_or_else(|| <Runtime as pallet_evm::Config>::config()),1168			).map_err(|err| err.into())1169		}11701171		fn create(1172			from: H160,1173			data: Vec<u8>,1174			value: U256,1175			gas_limit: U256,1176			gas_price: Option<U256>,1177			nonce: Option<U256>,1178			estimate: bool,1179		) -> Result<pallet_evm::CreateInfo, sp_runtime::DispatchError> {1180			let config = if estimate {1181				let mut config = <Runtime as pallet_evm::Config>::config().clone();1182				config.estimate = true;1183				Some(config)1184			} else {1185				None1186			};11871188			<Runtime as pallet_evm::Config>::Runner::create(1189				from,1190				data,1191				value,1192				gas_limit.low_u64(),1193				gas_price,1194				nonce,1195				config.as_ref().unwrap_or_else(|| <Runtime as pallet_evm::Config>::config()),1196			).map_err(|err| err.into())1197		}11981199		fn current_transaction_statuses() -> Option<Vec<TransactionStatus>> {1200			Ethereum::current_transaction_statuses()1201		}12021203		fn current_block() -> Option<pallet_ethereum::Block> {1204			Ethereum::current_block()1205		}12061207		fn current_receipts() -> Option<Vec<pallet_ethereum::Receipt>> {1208			Ethereum::current_receipts()1209		}12101211		fn current_all() -> (1212			Option<pallet_ethereum::Block>,1213			Option<Vec<pallet_ethereum::Receipt>>,1214			Option<Vec<TransactionStatus>>1215		) {1216			(1217				Ethereum::current_block(),1218				Ethereum::current_receipts(),1219				Ethereum::current_transaction_statuses()1220			)1221		}12221223		fn extrinsic_filter(xts: Vec<<Block as sp_api::BlockT>::Extrinsic>) -> Vec<pallet_ethereum::Transaction> {1224			xts.into_iter().filter_map(|xt| match xt.0.function {1225				Call::Ethereum(pallet_ethereum::Call::transact { transaction }) => Some(transaction),1226				_ => None1227			}).collect()1228		}1229	}12301231	impl sp_session::SessionKeys<Block> for Runtime {1232		fn decode_session_keys(1233			encoded: Vec<u8>,1234		) -> Option<Vec<(Vec<u8>, KeyTypeId)>> {1235			SessionKeys::decode_into_raw_public_keys(&encoded)1236		}12371238		fn generate_session_keys(seed: Option<Vec<u8>>) -> Vec<u8> {1239			SessionKeys::generate(seed)1240		}1241	}12421243	impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {1244		fn slot_duration() -> sp_consensus_aura::SlotDuration {1245			sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration())1246		}12471248		fn authorities() -> Vec<AuraId> {1249			Aura::authorities().to_vec()1250		}1251	}12521253	impl cumulus_primitives_core::CollectCollationInfo<Block> for Runtime {1254		fn collect_collation_info() -> cumulus_primitives_core::CollationInfo {1255			ParachainSystem::collect_collation_info()1256		}1257	}12581259	impl frame_system_rpc_runtime_api::AccountNonceApi<Block, AccountId, Index> for Runtime {1260		fn account_nonce(account: AccountId) -> Index {1261			System::account_nonce(account)1262		}1263	}12641265	impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance> for Runtime {1266		fn query_info(uxt: <Block as BlockT>::Extrinsic, len: u32) -> RuntimeDispatchInfo<Balance> {1267			TransactionPayment::query_info(uxt, len)1268		}1269		fn query_fee_details(uxt: <Block as BlockT>::Extrinsic, len: u32) -> FeeDetails<Balance> {1270			TransactionPayment::query_fee_details(uxt, len)1271		}1272	}12731274	/*1275	impl pallet_contracts_rpc_runtime_api::ContractsApi<Block, AccountId, Balance, BlockNumber, Hash>1276		for Runtime1277	{1278		fn call(1279			origin: AccountId,1280			dest: AccountId,1281			value: Balance,1282			gas_limit: u64,1283			input_data: Vec<u8>,1284		) -> pallet_contracts_primitives::ContractExecResult {1285			Contracts::bare_call(origin, dest, value, gas_limit, input_data, false)1286		}12871288		fn instantiate(1289			origin: AccountId,1290			endowment: Balance,1291			gas_limit: u64,1292			code: pallet_contracts_primitives::Code<Hash>,1293			data: Vec<u8>,1294			salt: Vec<u8>,1295		) -> pallet_contracts_primitives::ContractInstantiateResult<AccountId, BlockNumber>1296		{1297			Contracts::bare_instantiate(origin, endowment, gas_limit, code, data, salt, true, false)1298		}12991300		fn get_storage(1301			address: AccountId,1302			key: [u8; 32],1303		) -> pallet_contracts_primitives::GetStorageResult {1304			Contracts::get_storage(address, key)1305		}13061307		fn rent_projection(1308			address: AccountId,1309		) -> pallet_contracts_primitives::RentProjectionResult<BlockNumber> {1310			Contracts::rent_projection(address)1311		}1312	}1313	*/13141315	#[cfg(feature = "runtime-benchmarks")]1316	impl frame_benchmarking::Benchmark<Block> for Runtime {1317		fn benchmark_metadata(extra: bool) -> (1318			Vec<frame_benchmarking::BenchmarkList>,1319			Vec<frame_support::traits::StorageInfo>,1320		) {1321			use frame_benchmarking::{list_benchmark, Benchmarking, BenchmarkList};1322			use frame_support::traits::StorageInfoTrait;13231324			let mut list = Vec::<BenchmarkList>::new();13251326			list_benchmark!(list, extra, pallet_evm_migration, EvmMigration);1327			list_benchmark!(list, extra, pallet_nft, Nft);1328			list_benchmark!(list, extra, pallet_inflation, Inflation);1329			list_benchmark!(list, extra, pallet_fungible, Fungible);1330			list_benchmark!(list, extra, pallet_refungible, Refungible);1331			list_benchmark!(list, extra, pallet_nonfungible, Nonfungible);13321333			let storage_info = AllPalletsWithSystem::storage_info();13341335			return (list, storage_info)1336		}13371338		fn dispatch_benchmark(1339			config: frame_benchmarking::BenchmarkConfig1340		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {1341			use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark, TrackedStorageKey};13421343			let whitelist: Vec<TrackedStorageKey> = vec![1344				// Block Number1345				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(),1346				// Total Issuance1347				hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(),1348				// Execution Phase1349				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(),1350				// Event Count1351				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(),1352				// System Events1353				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(),1354			];13551356			let mut batches = Vec::<BenchmarkBatch>::new();1357			let params = (&config, &whitelist);13581359			add_benchmark!(params, batches, pallet_evm_migration, EvmMigration);1360			add_benchmark!(params, batches, pallet_nft, Nft);1361			add_benchmark!(params, batches, pallet_inflation, Inflation);1362			add_benchmark!(params, batches, pallet_fungible, Fungible);1363			add_benchmark!(params, batches, pallet_refungible, Refungible);1364			add_benchmark!(params, batches, pallet_nonfungible, Nonfungible);13651366			if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }1367			Ok(batches)1368		}1369	}1370}13711372struct CheckInherents;13731374impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {1375	fn check_inherents(1376		block: &Block,1377		relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,1378	) -> sp_inherents::CheckInherentsResult {1379		let relay_chain_slot = relay_state_proof1380			.read_slot()1381			.expect("Could not read the relay chain slot from the proof");13821383		let inherent_data =1384			cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration(1385				relay_chain_slot,1386				sp_std::time::Duration::from_secs(6),1387			)1388			.create_inherent_data()1389			.expect("Could not create the timestamp inherent data");13901391		inherent_data.check_extrinsics(block)1392	}1393}13941395cumulus_pallet_parachain_system::register_validate_block!(1396	Runtime = Runtime,1397	BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,1398	CheckInherents = CheckInherents,1399);
after · 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};19// #[cfg(any(feature = "std", test))]20// pub use sp_runtime::BuildStorage;2122use sp_runtime::{23	Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys,24	traits::{25		AccountIdLookup, ConvertInto, BlakeTwo256, Block as BlockT, IdentifyAccount, Verify,26		AccountIdConversion,27	},28	transaction_validity::{TransactionSource, TransactionValidity},29	ApplyExtrinsicResult, MultiSignature,30};3132use sp_std::prelude::*;3334#[cfg(feature = "std")]35use sp_version::NativeVersion;36use sp_version::RuntimeVersion;37pub use pallet_transaction_payment::{38	Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo,39};40// A few exports that help ease life for downstream crates.41pub use pallet_balances::Call as BalancesCall;42pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner};43pub use frame_support::{44	construct_runtime, match_type,45	dispatch::DispatchResult,46	PalletId, parameter_types, StorageValue, ConsensusEngineId,47	traits::{48		Everything, Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem,49		LockIdentifier, OnUnbalanced, Randomness, FindAuthor,50	},51	weights::{52		constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},53		DispatchClass, DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,54		WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients,55	},56};57use nft_data_structs::*;58// use pallet_contracts::weights::WeightInfo;59// #[cfg(any(feature = "std", test))]60use frame_system::{61	self as system, EnsureRoot, EnsureSigned,62	limits::{BlockWeights, BlockLength},63};64use sp_arithmetic::{65	traits::{BaseArithmetic, Unsigned},66};67use smallvec::smallvec;68use codec::{Encode, Decode};69use pallet_evm::{Account as EVMAccount, FeeCalculator, OnMethodCall};70use fp_rpc::TransactionStatus;71use sp_core::crypto::Public;72use sp_runtime::{73	traits::{Dispatchable, PostDispatchInfoOf},74	transaction_validity::TransactionValidityError,75};7677// pub use pallet_timestamp::Call as TimestampCall;78pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;7980// Polkadot imports81use pallet_xcm::XcmPassthrough;82use polkadot_parachain::primitives::Sibling;83use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};84use xcm_builder::{85	AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,86	EnsureXcmOrigin, FixedWeightBounds, IsConcrete, LocationInverter, NativeAsset,87	ParentAsSuperuser, ParentIsDefault, RelayChainAsNative, SiblingParachainAsNative,88	SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32,89	SovereignSignedViaLocation, TakeWeightCredit, UsingComponents,90};91use xcm_executor::{Config, XcmExecutor};9293// mod chain_extension;94// use crate::chain_extension::{NFTExtension, Imbalance};9596/// An index to a block.97pub type BlockNumber = u32;9899/// Alias to 512-bit hash when used in the context of a transaction signature on the chain.100pub type Signature = MultiSignature;101102/// Some way of identifying an account on the chain. We intentionally make it equivalent103/// to the public key of our transaction signing scheme.104pub type AccountId = <<Signature as Verify>::Signer as IdentifyAccount>::AccountId;105106pub type CrossAccountId = pallet_common::account::BasicCrossAccountId<Runtime>;107108/// The type for looking up accounts. We don't expect more than 4 billion of them, but you109/// never know...110pub type AccountIndex = u32;111112/// Balance of an account.113pub type Balance = u128;114115/// Index of a transaction in the chain.116pub type Index = u32;117118/// A hash of some data used by the chain.119pub type Hash = sp_core::H256;120121/// Digest item type.122pub type DigestItem = generic::DigestItem<Hash>;123124/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know125/// the specifics of the runtime. They can then be made to be agnostic over specific formats126/// of data like extrinsics, allowing for them to continue syncing the network through upgrades127/// to even the core data structures.128pub mod opaque {129	use super::*;130131	pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;132133	/// Opaque block type.134	pub type Block = generic::Block<Header, UncheckedExtrinsic>;135136	pub type SessionHandlers = ();137138	impl_opaque_keys! {139		pub struct SessionKeys {140			pub aura: Aura,141		}142	}143}144145/// This runtime version.146pub const VERSION: RuntimeVersion = RuntimeVersion {147	spec_name: create_runtime_str!("opal"),148	impl_name: create_runtime_str!("opal"),149	authoring_version: 1,150	spec_version: 912202,151	impl_version: 1,152	apis: RUNTIME_API_VERSIONS,153	transaction_version: 1,154};155156pub const MILLISECS_PER_BLOCK: u64 = 12000;157158pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;159160// These time units are defined in number of blocks.161pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber);162pub const HOURS: BlockNumber = MINUTES * 60;163pub const DAYS: BlockNumber = HOURS * 24;164165parameter_types! {166	pub const DefaultSponsoringRateLimit: BlockNumber = 1 * DAYS;167}168169#[derive(codec::Encode, codec::Decode)]170pub enum XCMPMessage<XAccountId, XBalance> {171	/// Transfer tokens to the given account from the Parachain account.172	TransferToken(XAccountId, XBalance),173}174175/// The version information used to identify this runtime when compiled natively.176#[cfg(feature = "std")]177pub fn native_version() -> NativeVersion {178	NativeVersion {179		runtime_version: VERSION,180		can_author_with: Default::default(),181	}182}183184type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;185186pub struct DealWithFees;187impl OnUnbalanced<NegativeImbalance> for DealWithFees {188	fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item = NegativeImbalance>) {189		if let Some(fees) = fees_then_tips.next() {190			// for fees, 100% to treasury191			let mut split = fees.ration(100, 0);192			if let Some(tips) = fees_then_tips.next() {193				// for tips, if any, 100% to treasury194				tips.ration_merge_into(100, 0, &mut split);195			}196			Treasury::on_unbalanced(split.0);197			// Author::on_unbalanced(split.1);198		}199	}200}201202/// We assume that ~10% of the block weight is consumed by `on_initalize` handlers.203/// This is used to limit the maximal weight of a single extrinsic.204const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10);205/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used206/// by  Operational  extrinsics.207const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75);208/// We allow for 2 seconds of compute with a 6 second average block time.209const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2;210211parameter_types! {212	pub const BlockHashCount: BlockNumber = 2400;213	pub RuntimeBlockLength: BlockLength =214		BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);215	pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);216	pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;217	pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()218		.base_block(BlockExecutionWeight::get())219		.for_class(DispatchClass::all(), |weights| {220			weights.base_extrinsic = ExtrinsicBaseWeight::get();221		})222		.for_class(DispatchClass::Normal, |weights| {223			weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);224		})225		.for_class(DispatchClass::Operational, |weights| {226			weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);227			// Operational transactions have some extra reserved space, so that they228			// are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.229			weights.reserved = Some(230				MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT231			);232		})233		.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)234		.build_or_panic();235	pub const Version: RuntimeVersion = VERSION;236	pub const SS58Prefix: u8 = 42;237}238239parameter_types! {240	pub const ChainId: u64 = 8888;241}242243pub struct FixedFee;244impl FeeCalculator for FixedFee {245	fn min_gas_price() -> U256 {246		1.into()247	}248}249250impl pallet_evm::Config for Runtime {251	type BlockGasLimit = BlockGasLimit;252	type FeeCalculator = FixedFee;253	type GasWeightMapping = ();254	type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;255	type CallOrigin = EnsureAddressTruncated;256	type WithdrawOrigin = EnsureAddressTruncated;257	type AddressMapping = HashedAddressMapping<Self::Hashing>;258	type Precompiles = ();259	type Currency = Balances;260	type Event = Event;261	type OnMethodCall = (262		pallet_evm_migration::OnMethodCall<Self>,263		pallet_nft::NftErcSupport<Self>,264		pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,265	);266	type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;267	type ChainId = ChainId;268	type Runner = pallet_evm::runner::stack::Runner<Self>;269	type OnChargeTransaction = pallet_evm_transaction_payment::OnChargeTransaction<Self>;270	type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;271	type FindAuthor = EthereumFindAuthor<Aura>;272}273274impl pallet_evm_migration::Config for Runtime {275	type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;276}277278pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);279impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {280	fn find_author<'a, I>(digests: I) -> Option<H160>281	where282		I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,283	{284		if let Some(author_index) = F::find_author(digests) {285			let authority_id = Aura::authorities()[author_index as usize].clone();286			return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));287		}288		None289	}290}291292parameter_types! {293	pub BlockGasLimit: U256 = U256::from(u32::max_value());294}295296impl pallet_ethereum::Config for Runtime {297	type Event = Event;298	type StateRoot = pallet_ethereum::IntermediateStateRoot;299	type EvmSubmitLog = pallet_evm::Pallet<Self>;300}301302impl pallet_randomness_collective_flip::Config for Runtime {}303304impl system::Config for Runtime {305	/// The data to be stored in an account.306	type AccountData = pallet_balances::AccountData<Balance>;307	/// The identifier used to distinguish between accounts.308	type AccountId = AccountId;309	/// The basic call filter to use in dispatchable.310	type BaseCallFilter = Everything;311	/// Maximum number of block number to block hash mappings to keep (oldest pruned first).312	type BlockHashCount = BlockHashCount;313	/// The maximum length of a block (in bytes).314	type BlockLength = RuntimeBlockLength;315	/// The index type for blocks.316	type BlockNumber = BlockNumber;317	/// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.318	type BlockWeights = RuntimeBlockWeights;319	/// The aggregated dispatch type that is available for extrinsics.320	type Call = Call;321	/// The weight of database operations that the runtime can invoke.322	type DbWeight = RocksDbWeight;323	/// The ubiquitous event type.324	type Event = Event;325	/// The type for hashing blocks and tries.326	type Hash = Hash;327	/// The hashing algorithm used.328	type Hashing = BlakeTwo256;329	/// The header type.330	type Header = generic::Header<BlockNumber, BlakeTwo256>;331	/// The index type for storing how many extrinsics an account has signed.332	type Index = Index;333	/// The lookup mechanism to get account ID from whatever is passed in dispatchers.334	type Lookup = AccountIdLookup<AccountId, ()>;335	/// What to do if an account is fully reaped from the system.336	type OnKilledAccount = ();337	/// What to do if a new account is created.338	type OnNewAccount = ();339	type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;340	/// The ubiquitous origin type.341	type Origin = Origin;342	/// This type is being generated by `construct_runtime!`.343	type PalletInfo = PalletInfo;344	/// This is used as an identifier of the chain. 42 is the generic substrate prefix.345	type SS58Prefix = SS58Prefix;346	/// Weight information for the extrinsics of this pallet.347	type SystemWeightInfo = system::weights::SubstrateWeight<Self>;348	/// Version of the runtime.349	type Version = Version;350}351352parameter_types! {353	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;354}355356impl pallet_timestamp::Config for Runtime {357	/// A timestamp: milliseconds since the unix epoch.358	type Moment = u64;359	type OnTimestampSet = ();360	type MinimumPeriod = MinimumPeriod;361	type WeightInfo = ();362}363364parameter_types! {365	// pub const ExistentialDeposit: u128 = 500;366	pub const ExistentialDeposit: u128 = 0;367	pub const MaxLocks: u32 = 50;368}369370impl pallet_balances::Config for Runtime {371	type MaxLocks = MaxLocks;372	type MaxReserves = ();373	type ReserveIdentifier = [u8; 8];374	/// The type for recording an account's balance.375	type Balance = Balance;376	/// The ubiquitous event type.377	type Event = Event;378	type DustRemoval = Treasury;379	type ExistentialDeposit = ExistentialDeposit;380	type AccountStore = System;381	type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;382}383384pub const MICROUNIQUE: Balance = 1_000_000_000;385pub const MILLIUNIQUE: Balance = 1_000 * MICROUNIQUE;386pub const CENTIUNIQUE: Balance = 10 * MILLIUNIQUE;387pub const UNIQUE: Balance = 100 * CENTIUNIQUE;388389pub const fn deposit(items: u32, bytes: u32) -> Balance {390	items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE391}392393/*394parameter_types! {395	pub TombstoneDeposit: Balance = deposit(396		1,397		sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,398	);399	pub DepositPerContract: Balance = TombstoneDeposit::get();400	pub const DepositPerStorageByte: Balance = deposit(0, 1);401	pub const DepositPerStorageItem: Balance = deposit(1, 0);402	pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);403	pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;404	pub const SignedClaimHandicap: u32 = 2;405	pub const MaxDepth: u32 = 32;406	pub const MaxValueSize: u32 = 16 * 1024;407	pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb408	// The lazy deletion runs inside on_initialize.409	pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *410		RuntimeBlockWeights::get().max_block;411	// The weight needed for decoding the queue should be less or equal than a fifth412	// of the overall weight dedicated to the lazy deletion.413	pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (414			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -415			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)416		)) / 5) as u32;417	pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();418}419420impl pallet_contracts::Config for Runtime {421	type Time = Timestamp;422	type Randomness = RandomnessCollectiveFlip;423	type Currency = Balances;424	type Event = Event;425	type RentPayment = ();426	type SignedClaimHandicap = SignedClaimHandicap;427	type TombstoneDeposit = TombstoneDeposit;428	type DepositPerContract = DepositPerContract;429	type DepositPerStorageByte = DepositPerStorageByte;430	type DepositPerStorageItem = DepositPerStorageItem;431	type RentFraction = RentFraction;432	type SurchargeReward = SurchargeReward;433	type WeightPrice = pallet_transaction_payment::Pallet<Self>;434	type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;435	type ChainExtension = NFTExtension;436	type DeletionQueueDepth = DeletionQueueDepth;437	type DeletionWeightLimit = DeletionWeightLimit;438	type Schedule = Schedule;439	type CallStack = [pallet_contracts::Frame<Self>; 31];440}441*/442443parameter_types! {444	pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer445	/// This value increases the priority of `Operational` transactions by adding446	/// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.447	pub const OperationalFeeMultiplier: u8 = 5;448}449450/// Linear implementor of `WeightToFeePolynomial`451pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);452453impl<T> WeightToFeePolynomial for LinearFee<T>454where455	T: BaseArithmetic + From<u32> + Copy + Unsigned,456{457	type Balance = T;458459	fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {460		smallvec!(WeightToFeeCoefficient {461			coeff_integer: 146_700u32.into(), // Targeting 0.1 Unique per NFT transfer462			coeff_frac: Perbill::zero(),463			negative: false,464			degree: 1,465		})466	}467}468469impl pallet_transaction_payment::Config for Runtime {470	type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;471	type TransactionByteFee = TransactionByteFee;472	type OperationalFeeMultiplier = OperationalFeeMultiplier;473	type WeightToFee = LinearFee<Balance>;474	type FeeMultiplierUpdate = ();475}476477parameter_types! {478	pub const ProposalBond: Permill = Permill::from_percent(5);479	pub const ProposalBondMinimum: Balance = 1 * UNIQUE;480	pub const SpendPeriod: BlockNumber = 5 * MINUTES;481	pub const Burn: Permill = Permill::from_percent(0);482	pub const TipCountdown: BlockNumber = 1 * DAYS;483	pub const TipFindersFee: Percent = Percent::from_percent(20);484	pub const TipReportDepositBase: Balance = 1 * UNIQUE;485	pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;486	pub const BountyDepositBase: Balance = 1 * UNIQUE;487	pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;488	pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");489	pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;490	pub const MaximumReasonLength: u32 = 16384;491	pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);492	pub const BountyValueMinimum: Balance = 5 * UNIQUE;493	pub const MaxApprovals: u32 = 100;494}495496impl pallet_treasury::Config for Runtime {497	type PalletId = TreasuryModuleId;498	type Currency = Balances;499	type ApproveOrigin = EnsureRoot<AccountId>;500	type RejectOrigin = EnsureRoot<AccountId>;501	type Event = Event;502	type OnSlash = ();503	type ProposalBond = ProposalBond;504	type ProposalBondMinimum = ProposalBondMinimum;505	type SpendPeriod = SpendPeriod;506	type Burn = Burn;507	type BurnDestination = ();508	type SpendFunds = ();509	type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;510	type MaxApprovals = MaxApprovals;511}512513impl pallet_sudo::Config for Runtime {514	type Event = Event;515	type Call = Call;516}517518parameter_types! {519	pub const MinVestedTransfer: Balance = 10 * UNIQUE;520}521522impl pallet_vesting::Config for Runtime {523	type Event = Event;524	type Currency = Balances;525	type BlockNumberToBalance = ConvertInto;526	type MinVestedTransfer = MinVestedTransfer;527	type WeightInfo = ();528	const MAX_VESTING_SCHEDULES: u32 = 28;529}530531parameter_types! {532	pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;533	pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;534}535536impl cumulus_pallet_parachain_system::Config for Runtime {537	type Event = Event;538	type OnValidationData = ();539	type SelfParaId = parachain_info::Pallet<Self>;540	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<541	// 	MaxDownwardMessageWeight,542	// 	XcmExecutor<XcmConfig>,543	// 	Call,544	// >;545	type OutboundXcmpMessageSource = XcmpQueue;546	type DmpMessageHandler = DmpQueue;547	type ReservedDmpWeight = ReservedDmpWeight;548	type ReservedXcmpWeight = ReservedXcmpWeight;549	type XcmpMessageHandler = XcmpQueue;550}551552impl parachain_info::Config for Runtime {}553554impl cumulus_pallet_aura_ext::Config for Runtime {}555556parameter_types! {557	pub const RelayLocation: MultiLocation = MultiLocation::parent();558	pub const RelayNetwork: NetworkId = NetworkId::Polkadot;559	pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();560	pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();561}562563/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used564/// when determining ownership of accounts for asset transacting and when attempting to use XCM565/// `Transact` in order to determine the dispatch Origin.566pub type LocationToAccountId = (567	// The parent (Relay-chain) origin converts to the default `AccountId`.568	ParentIsDefault<AccountId>,569	// Sibling parachain origins convert to AccountId via the `ParaId::into`.570	SiblingParachainConvertsVia<Sibling, AccountId>,571	// Straight up local `AccountId32` origins just alias directly to `AccountId`.572	AccountId32Aliases<RelayNetwork, AccountId>,573);574575/// Means for transacting assets on this chain.576pub type LocalAssetTransactor = CurrencyAdapter<577	// Use this currency:578	Balances,579	// Use this currency when it is a fungible asset matching the given location or name:580	IsConcrete<RelayLocation>,581	// Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:582	LocationToAccountId,583	// Our chain's account ID type (we can't get away without mentioning it explicitly):584	AccountId,585	// We don't track any teleports.586	(),587>;588589/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance,590/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can591/// biases the kind of local `Origin` it will become.592pub type XcmOriginToTransactDispatchOrigin = (593	// Sovereign account converter; this attempts to derive an `AccountId` from the origin location594	// using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for595	// foreign chains who want to have a local sovereign account on this chain which they control.596	SovereignSignedViaLocation<LocationToAccountId, Origin>,597	// Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when598	// recognised.599	RelayChainAsNative<RelayOrigin, Origin>,600	// Native converter for sibling Parachains; will convert to a `SiblingPara` origin when601	// recognised.602	SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,603	// Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a604	// transaction from the Root origin.605	ParentAsSuperuser<Origin>,606	// Native signed account converter; this just converts an `AccountId32` origin into a normal607	// `Origin::Signed` origin of the same 32-byte value.608	SignedAccountId32AsNative<RelayNetwork, Origin>,609	// Xcm origins can be represented natively under the Xcm pallet's Xcm origin.610	XcmPassthrough<Origin>,611);612613parameter_types! {614	// One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.615	pub UnitWeightCost: Weight = 1_000_000;616	// 1200 UNIQUEs buy 1 second of weight.617	pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), 1_200 * UNIQUE);618	pub const MaxInstructions: u32 = 100;619	pub const MaxAuthorities: u32 = 100_000;620}621622match_type! {623	pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {624		MultiLocation { parents: 1, interior: Here } |625		MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Unit, .. }) }626	};627}628629pub type Barrier = (630	TakeWeightCredit,631	AllowTopLevelPaidExecutionFrom<Everything>,632	AllowUnpaidExecutionFrom<ParentOrParentsUnitPlurality>,633	// ^^^ Parent & its unit plurality gets free execution634);635636pub struct XcmConfig;637impl Config for XcmConfig {638	type Call = Call;639	type XcmSender = XcmRouter;640	// How to withdraw and deposit an asset.641	type AssetTransactor = LocalAssetTransactor;642	type OriginConverter = XcmOriginToTransactDispatchOrigin;643	type IsReserve = NativeAsset;644	type IsTeleporter = (); // Teleportation is disabled645	type LocationInverter = LocationInverter<Ancestry>;646	type Barrier = Barrier;647	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;648	type Trader = UsingComponents<IdentityFee<Balance>, RelayLocation, AccountId, Balances, ()>;649	type ResponseHandler = (); // Don't handle responses for now.650	type SubscriptionService = PolkadotXcm;651652	type AssetTrap = PolkadotXcm;653	type AssetClaims = PolkadotXcm;654}655656// parameter_types! {657// 	pub const MaxDownwardMessageWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 10;658// }659660/// No local origins on this chain are allowed to dispatch XCM sends/executions.661pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);662663/// The means for routing XCM messages which are not for local execution into the right message664/// queues.665pub type XcmRouter = (666	// Two routers - use UMP to communicate with the relay chain:667	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,668	// ..and XCMP to communicate with the sibling chains.669	XcmpQueue,670);671672impl pallet_evm_coder_substrate::Config for Runtime {673	type EthereumTransactionSender = pallet_ethereum::Pallet<Self>;674}675676impl pallet_xcm::Config for Runtime {677	type Event = Event;678	type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;679	type XcmRouter = XcmRouter;680	type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;681	type XcmExecuteFilter = Everything;682	type XcmExecutor = XcmExecutor<XcmConfig>;683	type XcmTeleportFilter = Everything;684	type XcmReserveTransferFilter = Everything;685	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;686	type LocationInverter = LocationInverter<Ancestry>;687	type Origin = Origin;688	type Call = Call;689	const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;690	type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;691}692693impl cumulus_pallet_xcm::Config for Runtime {694	type Event = Event;695	type XcmExecutor = XcmExecutor<XcmConfig>;696}697698impl cumulus_pallet_xcmp_queue::Config for Runtime {699	type Event = Event;700	type XcmExecutor = XcmExecutor<XcmConfig>;701	type ChannelInfo = ParachainSystem;702	type VersionWrapper = ();703}704705impl cumulus_pallet_dmp_queue::Config for Runtime {706	type Event = Event;707	type XcmExecutor = XcmExecutor<XcmConfig>;708	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;709}710711impl pallet_aura::Config for Runtime {712	type AuthorityId = AuraId;713	type DisabledValidators = ();714	type MaxAuthorities = MaxAuthorities;715}716717parameter_types! {718	pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account();719	pub const CollectionCreationPrice: Balance = 100 * UNIQUE;720}721722impl pallet_common::Config for Runtime {723	type Event = Event;724	type EvmBackwardsAddressMapping = pallet_common::account::MapBackwardsAddressTruncated;725	type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;726	type CrossAccountId = pallet_common::account::BasicCrossAccountId<Self>;727728	type Currency = Balances;729	type CollectionCreationPrice = CollectionCreationPrice;730	type TreasuryAccountId = TreasuryAccountId;731}732733impl pallet_fungible::Config for Runtime {734	type WeightInfo = pallet_fungible::weights::SubstrateWeight<Self>;735}736impl pallet_refungible::Config for Runtime {737	type WeightInfo = pallet_refungible::weights::SubstrateWeight<Self>;738}739impl pallet_nonfungible::Config for Runtime {740	type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;741}742743/// Used for the pallet nft in `./nft.rs`744impl pallet_nft::Config for Runtime {745	type WeightInfo = pallet_nft::weights::SubstrateWeight<Self>;746}747748parameter_types! {749	pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied750}751752/// Used for the pallet inflation753impl pallet_inflation::Config for Runtime {754	type Currency = Balances;755	type TreasuryAccountId = TreasuryAccountId;756	type InflationBlockInterval = InflationBlockInterval;757}758759parameter_types! {760	pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *761		RuntimeBlockWeights::get().max_block;762	pub const MaxScheduledPerBlock: u32 = 50;763}764765pub struct Sponsoring;766impl SponsoringResolve<AccountId, Call> for Sponsoring {767	fn resolve(who: &AccountId, call: &Call) -> Option<AccountId>768	where769		Call: Dispatchable<Info = DispatchInfo>,770		AccountId: AsRef<[u8]>,771	{772		pallet_nft_transaction_payment::Module::<Runtime>::withdraw_type(who, call)773	}774}775776type SponsorshipHandler = (777	pallet_nft::NftSponsorshipHandler<Runtime>,778	//pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,779);780781impl pallet_unq_scheduler::Config for Runtime {782	type Event = Event;783	type Origin = Origin;784	type PalletsOrigin = OriginCaller;785	type Call = Call;786	type MaximumWeight = MaximumSchedulerWeight;787	type ScheduleOrigin = EnsureSigned<AccountId>;788	type MaxScheduledPerBlock = MaxScheduledPerBlock;789	type SponsorshipHandler = SponsorshipHandler;790	type WeightInfo = ();791}792793impl pallet_nft_transaction_payment::Config for Runtime {794	type SponsorshipHandler = SponsorshipHandler;795}796797impl pallet_evm_transaction_payment::Config for Runtime {798	type SponsorshipHandler = (799		pallet_nft::NftEthSponsorshipHandler<Self>,800		pallet_evm_contract_helpers::HelpersContractSponsoring<Self>,801	);802	type Currency = Balances;803}804805impl pallet_nft_charge_transaction::Config for Runtime {806	type SponsorshipHandler = pallet_nft::NftSponsorshipHandler<Runtime>;807}808809// impl pallet_contract_helpers::Config for Runtime {810//	 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;811// }812813parameter_types! {814	// 0x842899ECF380553E8a4de75bF534cdf6fBF64049815	pub const HelpersContractAddress: H160 = H160([816		0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,817	]);818}819820impl pallet_evm_contract_helpers::Config for Runtime {821	type ContractAddress = HelpersContractAddress;822	type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;823}824825construct_runtime!(826	pub enum Runtime where827		Block = Block,828		NodeBlock = opaque::Block,829		UncheckedExtrinsic = UncheckedExtrinsic830	{831		ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,832		ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,833834		Aura: pallet_aura::{Pallet, Config<T>} = 22,835		AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,836837		Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,838		RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,839		Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,840		TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,841		Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,842		Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,843		System: system::{Pallet, Call, Storage, Config, Event<T>} = 36,844		Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,845		// Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,846847		// XCM helpers.848		XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,849		PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,850		CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,851		DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,852853		// Unique Pallets854		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,855		Nft: pallet_nft::{Pallet, Call, Storage} = 61,856		Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,857		NftPayment: pallet_nft_transaction_payment::{Pallet, Call, Storage} = 63,858		Charging: pallet_nft_charge_transaction::{Pallet, Call, Storage } = 64,859		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,860		Common: pallet_common::{Pallet, Storage, Event<T>} = 66,861		Fungible: pallet_fungible::{Pallet, Storage} = 67,862		Refungible: pallet_refungible::{Pallet, Storage} = 68,863		Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,864865		// Frontier866		EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,867		Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,868869		EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,870		EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,871		EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,872		EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,873	}874);875876pub struct TransactionConverter;877878impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {879	fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {880		UncheckedExtrinsic::new_unsigned(881			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),882		)883	}884}885886impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {887	fn convert_transaction(888		&self,889		transaction: pallet_ethereum::Transaction,890	) -> opaque::UncheckedExtrinsic {891		let extrinsic = UncheckedExtrinsic::new_unsigned(892			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),893		);894		let encoded = extrinsic.encode();895		opaque::UncheckedExtrinsic::decode(&mut &encoded[..])896			.expect("Encoded extrinsic is always valid")897	}898}899900/// The address format for describing accounts.901pub type Address = sp_runtime::MultiAddress<AccountId, ()>;902/// Block header type as expected by this runtime.903pub type Header = generic::Header<BlockNumber, BlakeTwo256>;904/// Block type as expected by this runtime.905pub type Block = generic::Block<Header, UncheckedExtrinsic>;906/// A Block signed with a Justification907pub type SignedBlock = generic::SignedBlock<Block>;908/// BlockId type as expected by this runtime.909pub type BlockId = generic::BlockId<Block>;910/// The SignedExtension to the basic transaction logic.911pub type SignedExtra = (912	system::CheckSpecVersion<Runtime>,913	// system::CheckTxVersion<Runtime>,914	system::CheckGenesis<Runtime>,915	system::CheckEra<Runtime>,916	system::CheckNonce<Runtime>,917	system::CheckWeight<Runtime>,918	pallet_nft_charge_transaction::ChargeTransactionPayment<Runtime>,919	//pallet_contract_helpers::ContractHelpersExtension<Runtime>,920);921/// Unchecked extrinsic type as expected by this runtime.922pub type UncheckedExtrinsic =923	fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;924/// Extrinsic type that has already been checked.925pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;926/// Executive: handles dispatch to the various modules.927pub type Executive = frame_executive::Executive<928	Runtime,929	Block,930	frame_system::ChainContext<Runtime>,931	Runtime,932	AllPallets,933>;934935impl_opaque_keys! {936	pub struct SessionKeys {937		pub aura: Aura,938	}939}940941impl fp_self_contained::SelfContainedCall for Call {942	type SignedInfo = H160;943944	fn is_self_contained(&self) -> bool {945		match self {946			Call::Ethereum(call) => call.is_self_contained(),947			_ => false,948		}949	}950951	fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {952		match self {953			Call::Ethereum(call) => call.check_self_contained(),954			_ => None,955		}956	}957958	fn validate_self_contained(&self, info: &Self::SignedInfo) -> Option<TransactionValidity> {959		match self {960			Call::Ethereum(call) => call.validate_self_contained(info),961			_ => None,962		}963	}964965	fn pre_dispatch_self_contained(966		&self,967		info: &Self::SignedInfo,968	) -> Option<Result<(), TransactionValidityError>> {969		match self {970			Call::Ethereum(call) => call.pre_dispatch_self_contained(info),971			_ => None,972		}973	}974975	fn apply_self_contained(976		self,977		info: Self::SignedInfo,978	) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {979		match self {980			call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(981				Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),982			)),983			_ => None,984		}985	}986}987988macro_rules! dispatch_nft_runtime {989	($collection:ident.$method:ident($($name:ident),*)) => {{990		use pallet_nft::dispatch::Dispatched;991992		let collection = Dispatched::dispatch(<pallet_common::CollectionHandle<Runtime>>::new($collection).unwrap());993		let dispatch = collection.as_dyn();994995		dispatch.$method($($name),*)996	}};997}998impl_runtime_apis! {999	impl up_rpc::NftApi<Block, CrossAccountId, AccountId>1000		for Runtime1001	{1002		fn account_tokens(collection: CollectionId, account: CrossAccountId) -> Vec<TokenId> {1003			dispatch_nft_runtime!(collection.account_tokens(account))1004		}1005		fn token_exists(collection: CollectionId, token: TokenId) -> bool {1006			dispatch_nft_runtime!(collection.token_exists(token))1007		}10081009		fn token_owner(collection: CollectionId, token: TokenId) -> CrossAccountId {1010			dispatch_nft_runtime!(collection.token_owner(token))1011		}1012		fn const_metadata(collection: CollectionId, token: TokenId) -> Vec<u8> {1013			dispatch_nft_runtime!(collection.const_metadata(token))1014		}1015		fn variable_metadata(collection: CollectionId, token: TokenId) -> Vec<u8> {1016			dispatch_nft_runtime!(collection.variable_metadata(token))1017		}10181019		fn collection_tokens(collection: CollectionId) -> u32 {1020			dispatch_nft_runtime!(collection.collection_tokens())1021		}1022		fn account_balance(collection: CollectionId, account: CrossAccountId) -> u32 {1023			dispatch_nft_runtime!(collection.account_balance(account))1024		}1025		fn balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> u128 {1026			dispatch_nft_runtime!(collection.balance(account, token))1027		}1028		fn allowance(1029			collection: CollectionId,1030			sender: CrossAccountId,1031			spender: CrossAccountId,1032			token: TokenId,1033		) -> u128 {1034			dispatch_nft_runtime!(collection.allowance(sender, spender, token))1035		}10361037		fn eth_contract_code(account: H160) -> Option<Vec<u8>> {1038			<pallet_nft::NftErcSupport<Runtime>>::get_code(&account)1039				.or_else(|| <pallet_evm_migration::OnMethodCall<Runtime>>::get_code(&account))1040				.or_else(|| <pallet_evm_contract_helpers::HelpersOnMethodCall<Self>>::get_code(&account))1041		}1042		fn adminlist(collection: CollectionId) -> Vec<CrossAccountId> {1043			<pallet_nft::Pallet<Runtime>>::adminlist(collection)1044		}1045		fn allowlist(collection: CollectionId) -> Vec<CrossAccountId> {1046			<pallet_nft::Pallet<Runtime>>::allowlist(collection)1047		}1048		fn last_token_id(collection: CollectionId) -> TokenId {1049			dispatch_nft_runtime!(collection.last_token_id())1050		}1051	}10521053	impl sp_api::Core<Block> for Runtime {1054		fn version() -> RuntimeVersion {1055			VERSION1056		}10571058		fn execute_block(block: Block) {1059			Executive::execute_block(block)1060		}10611062		fn initialize_block(header: &<Block as BlockT>::Header) {1063			Executive::initialize_block(header)1064		}1065	}10661067	impl sp_api::Metadata<Block> for Runtime {1068		fn metadata() -> OpaqueMetadata {1069			OpaqueMetadata::new(Runtime::metadata().into())1070		}1071	}10721073	impl sp_block_builder::BlockBuilder<Block> for Runtime {1074		fn apply_extrinsic(extrinsic: <Block as BlockT>::Extrinsic) -> ApplyExtrinsicResult {1075			Executive::apply_extrinsic(extrinsic)1076		}10771078		fn finalize_block() -> <Block as BlockT>::Header {1079			Executive::finalize_block()1080		}10811082		fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<<Block as BlockT>::Extrinsic> {1083			data.create_extrinsics()1084		}10851086		fn check_inherents(1087			block: Block,1088			data: sp_inherents::InherentData,1089		) -> sp_inherents::CheckInherentsResult {1090			data.check_extrinsics(&block)1091		}10921093		// fn random_seed() -> <Block as BlockT>::Hash {1094		//     RandomnessCollectiveFlip::random_seed().01095		// }1096	}10971098	impl sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block> for Runtime {1099		fn validate_transaction(1100			source: TransactionSource,1101			tx: <Block as BlockT>::Extrinsic,1102			hash: <Block as BlockT>::Hash,1103		) -> TransactionValidity {1104			Executive::validate_transaction(source, tx, hash)1105		}1106	}11071108	impl sp_offchain::OffchainWorkerApi<Block> for Runtime {1109		fn offchain_worker(header: &<Block as BlockT>::Header) {1110			Executive::offchain_worker(header)1111		}1112	}11131114	impl fp_rpc::EthereumRuntimeRPCApi<Block> for Runtime {1115		fn chain_id() -> u64 {1116			<Runtime as pallet_evm::Config>::ChainId::get()1117		}11181119		fn account_basic(address: H160) -> EVMAccount {1120			EVM::account_basic(&address)1121		}11221123		fn gas_price() -> U256 {1124			<Runtime as pallet_evm::Config>::FeeCalculator::min_gas_price()1125		}11261127		fn account_code_at(address: H160) -> Vec<u8> {1128			EVM::account_codes(address)1129		}11301131		fn author() -> H160 {1132			<pallet_evm::Pallet<Runtime>>::find_author()1133		}11341135		fn storage_at(address: H160, index: U256) -> H256 {1136			let mut tmp = [0u8; 32];1137			index.to_big_endian(&mut tmp);1138			EVM::account_storages(address, H256::from_slice(&tmp[..]))1139		}11401141		fn call(1142			from: H160,1143			to: H160,1144			data: Vec<u8>,1145			value: U256,1146			gas_limit: U256,1147			gas_price: Option<U256>,1148			nonce: Option<U256>,1149			estimate: bool,1150		) -> Result<pallet_evm::CallInfo, sp_runtime::DispatchError> {1151			let config = if estimate {1152				let mut config = <Runtime as pallet_evm::Config>::config().clone();1153				config.estimate = true;1154				Some(config)1155			} else {1156				None1157			};11581159			<Runtime as pallet_evm::Config>::Runner::call(1160				from,1161				to,1162				data,1163				value,1164				gas_limit.low_u64(),1165				gas_price,1166				nonce,1167				config.as_ref().unwrap_or_else(|| <Runtime as pallet_evm::Config>::config()),1168			).map_err(|err| err.into())1169		}11701171		fn create(1172			from: H160,1173			data: Vec<u8>,1174			value: U256,1175			gas_limit: U256,1176			gas_price: Option<U256>,1177			nonce: Option<U256>,1178			estimate: bool,1179		) -> Result<pallet_evm::CreateInfo, sp_runtime::DispatchError> {1180			let config = if estimate {1181				let mut config = <Runtime as pallet_evm::Config>::config().clone();1182				config.estimate = true;1183				Some(config)1184			} else {1185				None1186			};11871188			<Runtime as pallet_evm::Config>::Runner::create(1189				from,1190				data,1191				value,1192				gas_limit.low_u64(),1193				gas_price,1194				nonce,1195				config.as_ref().unwrap_or_else(|| <Runtime as pallet_evm::Config>::config()),1196			).map_err(|err| err.into())1197		}11981199		fn current_transaction_statuses() -> Option<Vec<TransactionStatus>> {1200			Ethereum::current_transaction_statuses()1201		}12021203		fn current_block() -> Option<pallet_ethereum::Block> {1204			Ethereum::current_block()1205		}12061207		fn current_receipts() -> Option<Vec<pallet_ethereum::Receipt>> {1208			Ethereum::current_receipts()1209		}12101211		fn current_all() -> (1212			Option<pallet_ethereum::Block>,1213			Option<Vec<pallet_ethereum::Receipt>>,1214			Option<Vec<TransactionStatus>>1215		) {1216			(1217				Ethereum::current_block(),1218				Ethereum::current_receipts(),1219				Ethereum::current_transaction_statuses()1220			)1221		}12221223		fn extrinsic_filter(xts: Vec<<Block as sp_api::BlockT>::Extrinsic>) -> Vec<pallet_ethereum::Transaction> {1224			xts.into_iter().filter_map(|xt| match xt.0.function {1225				Call::Ethereum(pallet_ethereum::Call::transact { transaction }) => Some(transaction),1226				_ => None1227			}).collect()1228		}1229	}12301231	impl sp_session::SessionKeys<Block> for Runtime {1232		fn decode_session_keys(1233			encoded: Vec<u8>,1234		) -> Option<Vec<(Vec<u8>, KeyTypeId)>> {1235			SessionKeys::decode_into_raw_public_keys(&encoded)1236		}12371238		fn generate_session_keys(seed: Option<Vec<u8>>) -> Vec<u8> {1239			SessionKeys::generate(seed)1240		}1241	}12421243	impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {1244		fn slot_duration() -> sp_consensus_aura::SlotDuration {1245			sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration())1246		}12471248		fn authorities() -> Vec<AuraId> {1249			Aura::authorities().to_vec()1250		}1251	}12521253	impl cumulus_primitives_core::CollectCollationInfo<Block> for Runtime {1254		fn collect_collation_info() -> cumulus_primitives_core::CollationInfo {1255			ParachainSystem::collect_collation_info()1256		}1257	}12581259	impl frame_system_rpc_runtime_api::AccountNonceApi<Block, AccountId, Index> for Runtime {1260		fn account_nonce(account: AccountId) -> Index {1261			System::account_nonce(account)1262		}1263	}12641265	impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance> for Runtime {1266		fn query_info(uxt: <Block as BlockT>::Extrinsic, len: u32) -> RuntimeDispatchInfo<Balance> {1267			TransactionPayment::query_info(uxt, len)1268		}1269		fn query_fee_details(uxt: <Block as BlockT>::Extrinsic, len: u32) -> FeeDetails<Balance> {1270			TransactionPayment::query_fee_details(uxt, len)1271		}1272	}12731274	/*1275	impl pallet_contracts_rpc_runtime_api::ContractsApi<Block, AccountId, Balance, BlockNumber, Hash>1276		for Runtime1277	{1278		fn call(1279			origin: AccountId,1280			dest: AccountId,1281			value: Balance,1282			gas_limit: u64,1283			input_data: Vec<u8>,1284		) -> pallet_contracts_primitives::ContractExecResult {1285			Contracts::bare_call(origin, dest, value, gas_limit, input_data, false)1286		}12871288		fn instantiate(1289			origin: AccountId,1290			endowment: Balance,1291			gas_limit: u64,1292			code: pallet_contracts_primitives::Code<Hash>,1293			data: Vec<u8>,1294			salt: Vec<u8>,1295		) -> pallet_contracts_primitives::ContractInstantiateResult<AccountId, BlockNumber>1296		{1297			Contracts::bare_instantiate(origin, endowment, gas_limit, code, data, salt, true, false)1298		}12991300		fn get_storage(1301			address: AccountId,1302			key: [u8; 32],1303		) -> pallet_contracts_primitives::GetStorageResult {1304			Contracts::get_storage(address, key)1305		}13061307		fn rent_projection(1308			address: AccountId,1309		) -> pallet_contracts_primitives::RentProjectionResult<BlockNumber> {1310			Contracts::rent_projection(address)1311		}1312	}1313	*/13141315	#[cfg(feature = "runtime-benchmarks")]1316	impl frame_benchmarking::Benchmark<Block> for Runtime {1317		fn benchmark_metadata(extra: bool) -> (1318			Vec<frame_benchmarking::BenchmarkList>,1319			Vec<frame_support::traits::StorageInfo>,1320		) {1321			use frame_benchmarking::{list_benchmark, Benchmarking, BenchmarkList};1322			use frame_support::traits::StorageInfoTrait;13231324			let mut list = Vec::<BenchmarkList>::new();13251326			list_benchmark!(list, extra, pallet_evm_migration, EvmMigration);1327			list_benchmark!(list, extra, pallet_nft, Nft);1328			list_benchmark!(list, extra, pallet_inflation, Inflation);1329			list_benchmark!(list, extra, pallet_fungible, Fungible);1330			list_benchmark!(list, extra, pallet_refungible, Refungible);1331			list_benchmark!(list, extra, pallet_nonfungible, Nonfungible);13321333			let storage_info = AllPalletsWithSystem::storage_info();13341335			return (list, storage_info)1336		}13371338		fn dispatch_benchmark(1339			config: frame_benchmarking::BenchmarkConfig1340		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {1341			use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark, TrackedStorageKey};13421343			let allowlist: Vec<TrackedStorageKey> = vec![1344				// Block Number1345				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(),1346				// Total Issuance1347				hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(),1348				// Execution Phase1349				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(),1350				// Event Count1351				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(),1352				// System Events1353				hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(),1354			];13551356			let mut batches = Vec::<BenchmarkBatch>::new();1357			let params = (&config, &allowlist);13581359			add_benchmark!(params, batches, pallet_evm_migration, EvmMigration);1360			add_benchmark!(params, batches, pallet_nft, Nft);1361			add_benchmark!(params, batches, pallet_inflation, Inflation);1362			add_benchmark!(params, batches, pallet_fungible, Fungible);1363			add_benchmark!(params, batches, pallet_refungible, Refungible);1364			add_benchmark!(params, batches, pallet_nonfungible, Nonfungible);13651366			if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }1367			Ok(batches)1368		}1369	}1370}13711372struct CheckInherents;13731374impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {1375	fn check_inherents(1376		block: &Block,1377		relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,1378	) -> sp_inherents::CheckInherentsResult {1379		let relay_chain_slot = relay_state_proof1380			.read_slot()1381			.expect("Could not read the relay chain slot from the proof");13821383		let inherent_data =1384			cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration(1385				relay_chain_slot,1386				sp_std::time::Duration::from_secs(6),1387			)1388			.create_inherent_data()1389			.expect("Could not create the timestamp inherent data");13901391		inherent_data.check_extrinsics(block)1392	}1393}13941395cumulus_pallet_parachain_system::register_validate_block!(1396	Runtime = Runtime,1397	BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,1398	CheckInherents = CheckInherents,1399);
modifiedsmart_contracs/transfer/lib.rsdiffbeforeafterboth
--- a/smart_contracs/transfer/lib.rs
+++ b/smart_contracs/transfer/lib.rs
@@ -75,7 +75,7 @@
     #[ink(extension = 5, returns_result = false)]
     fn set_variable_meta_data(collection_id: u32, item_id: u32, data: Vec<u8>);
     #[ink(extension = 6, returns_result = false)]
-    fn toggle_white_list(collection_id: u32, address: DefaultAccountId, whitelisted: bool);
+    fn toggle_allow_list(collection_id: u32, address: DefaultAccountId, allowlisted: bool);
 }
 
 #[ink::contract(env = crate::NftEnvironment, dynamic_storage_allocator = true)]
@@ -135,10 +135,10 @@
                 .set_variable_meta_data(collection_id, item_id, data);
         }
         #[ink(message)]
-        pub fn toggle_white_list(&mut self, collection_id: u32, address: AccountId, whitelisted: bool) {
+        pub fn toggle_allow_list(&mut self, collection_id: u32, address: AccountId, allowlisted: bool) {
             let _ = self.env()
                 .extension()
-                .toggle_white_list(collection_id, address, whitelisted);
+                .toggle_allow_list(collection_id, address, allowlisted);
         }
 
     }
modifiedtests/package.jsondiffbeforeafterboth
--- a/tests/package.json
+++ b/tests/package.json
@@ -42,7 +42,7 @@
     "testConfirmSponsorship": "mocha --timeout 9999999 -r ts-node/register ./**/confirmSponsorship.test.ts",
     "testRemoveCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionAdmin.test.ts",
     "testRemoveCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionSponsor.test.ts",
-    "testRemoveFromWhiteList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromWhiteList.test.ts",
+    "testRemoveFromAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromAllowList.test.ts",
     "testConnection": "mocha --timeout 9999999 -r ts-node/register ./**/connection.test.ts",
     "testCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts",
     "testContracts": "mocha --timeout 9999999 -r ts-node/register ./**/contracts.test.ts",
@@ -51,14 +51,14 @@
     "testApprove": "mocha --timeout 9999999 -r ts-node/register ./**/approve.test.ts",
     "testTransferFrom": "mocha --timeout 9999999 -r ts-node/register ./**/transferFrom.test.ts",
     "testCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts",
-    "testToggleContractWhiteList": "mocha --timeout 9999999 -r ts-node/register ./**/toggleContractWhiteList.test.ts",
-    "testAddToContractWhiteList": "mocha --timeout 9999999 -r ts-node/register ./**/addToContractWhiteList.test.ts",
+    "testToggleContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/toggleContractAllowList.test.ts",
+    "testAddToContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/addToContractAllowList.test.ts",
     "testTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/transfer.test.ts",
     "testBurnItem": "mocha --timeout 9999999 -r ts-node/register ./**/burnItem.test.ts",
     "testSetMintPermission": "mocha --timeout 9999999 -r ts-node/register ./**/setMintPermission.test.ts",
     "testCreditFeesToTreasury": "mocha --timeout 9999999 -r ts-node/register ./**/creditFeesToTreasury.test.ts",
     "testEnableContractSponsoring": "mocha --timeout 9999999 -r ts-node/register ./**/enableContractSponsoring.test.ts",
-    "testRemoveFromContractWhiteList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromContractWhiteList.test.ts",
+    "testRemoveFromContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromContractAllowList.test.ts",
     "testSetContractSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setContractSponsoringRateLimit.test.ts",
     "testSetOffchainSchema": "mocha --timeout 9999999 -r ts-node/register ./**/setOffchainSchema.test.ts",
     "testOverflow": "mocha --timeout 9999999 -r ts-node/register ./**/overflow.test.ts",
addedtests/src/addToAllowList.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/addToAllowList.test.ts
@@ -0,0 +1,124 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+import {IKeyringPair} from '@polkadot/types/types';
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
+import privateKey from './substrate/privateKey';
+import usingApi, {submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {
+  addToAllowListExpectSuccess,
+  createCollectionExpectSuccess,
+  createItemExpectSuccess,
+  destroyCollectionExpectSuccess,
+  enablePublicMintingExpectSuccess,
+  enableAllowListExpectSuccess,
+  normalizeAccountId,
+  addCollectionAdminExpectSuccess,
+  addToAllowListExpectFail,
+} from './util/helpers';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+let charlie: IKeyringPair;
+
+describe('Integration Test ext. addToAllowList()', () => {
+
+  before(async () => {
+    await usingApi(async () => {
+      alice = privateKey('//Alice');
+      bob = privateKey('//Bob');
+    });
+  });
+
+  it('Execute the extrinsic with parameters: Collection ID and address to add to the allow list', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+  });
+
+  it('Allowlisted minting: list restrictions', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await enablePublicMintingExpectSuccess(alice, collectionId);
+    await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
+  });
+});
+
+describe('Negative Integration Test ext. addToAllowList()', () => {
+
+  it('Allow list an address in the collection that does not exist', async () => {
+    await usingApi(async (api) => {
+      // tslint:disable-next-line: no-bitwise
+      const collectionId = ((await api.query.common.createdCollectionCount()).toNumber()) + 1;
+      const bob = privateKey('//Bob');
+
+      const tx = api.tx.nft.addToAllowList(collectionId, normalizeAccountId(bob.address));
+      await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
+    });
+  });
+
+  it('Allow list an address in the collection that was destroyed', async () => {
+    await usingApi(async (api) => {
+      const alice = privateKey('//Alice');
+      const bob = privateKey('//Bob');
+      // tslint:disable-next-line: no-bitwise
+      const collectionId = await createCollectionExpectSuccess();
+      await destroyCollectionExpectSuccess(collectionId);
+      const tx = api.tx.nft.addToAllowList(collectionId, normalizeAccountId(bob.address));
+      await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
+    });
+  });
+
+  it('Allow list an address in the collection that does not have allow list access enabled', async () => {
+    await usingApi(async (api) => {
+      const alice = privateKey('//Alice');
+      const ferdie = privateKey('//Ferdie');
+      const collectionId = await createCollectionExpectSuccess();
+      await enableAllowListExpectSuccess(alice, collectionId);
+      await enablePublicMintingExpectSuccess(alice, collectionId);
+      const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(ferdie.address), 'NFT');
+      await expect(submitTransactionExpectFailAsync(ferdie, tx)).to.be.rejected;
+    });
+  });
+
+});
+
+describe('Integration Test ext. addToAllowList() with collection admin permissions:', () => {
+
+  before(async () => {
+    await usingApi(async () => {
+      alice = privateKey('//Alice');
+      bob = privateKey('//Bob');
+      charlie = privateKey('//Charlie');
+    });
+  });
+
+  it('Negative. Add to the allow list by regular user', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectFail(bob, collectionId, charlie.address);
+  });
+
+  it('Execute the extrinsic with parameters: Collection ID and address to add to the allow list', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+    await addToAllowListExpectSuccess(bob, collectionId, charlie.address);
+  });
+
+  it('Allowlisted minting: list restrictions', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+    await addToAllowListExpectSuccess(bob, collectionId, charlie.address);
+
+    // allowed only for collection owner
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await enablePublicMintingExpectSuccess(alice, collectionId);
+
+    await createItemExpectSuccess(charlie, collectionId, 'NFT', charlie.address);
+  });
+});
addedtests/src/addToContractAllowList.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/addToContractAllowList.test.ts
@@ -0,0 +1,92 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
+import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import privateKey from './substrate/privateKey';
+import {
+  deployFlipper,
+} from './util/contracthelpers';
+import {
+  getGenericResult,
+} from './util/helpers';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+describe.skip('Integration Test addToContractAllowList', () => {
+
+  it('Add an address to a contract allow list', async () => {
+    await usingApi(async api => {
+      const bob = privateKey('//Bob');
+      const [contract, deployer] = await deployFlipper(api);
+
+      const allowListedBefore = (await api.query.nft.contractAllowList(contract.address, bob.address)).toJSON();
+      const addTx = api.tx.nft.addToContractAllowList(contract.address, bob.address);
+      const addEvents = await submitTransactionAsync(deployer, addTx);
+      const allowListedAfter = (await api.query.nft.contractAllowList(contract.address, bob.address)).toJSON();
+
+      expect(getGenericResult(addEvents).success).to.be.true;
+      expect(allowListedBefore).to.be.false;
+      expect(allowListedAfter).to.be.true;
+    });
+  });
+
+  it('Adding same address to allow list repeatedly should not produce errors', async () => {
+    await usingApi(async api => {
+      const bob = privateKey('//Bob');
+      const [contract, deployer] = await deployFlipper(api);
+
+      const allowListedBefore = (await api.query.nft.contractAllowList(contract.address, bob.address)).toJSON();
+      const addTx = api.tx.nft.addToContractAllowList(contract.address, bob.address);
+      const addEvents = await submitTransactionAsync(deployer, addTx);
+      const allowListedAfter = (await api.query.nft.contractAllowList(contract.address, bob.address)).toJSON();
+      const addAgainEvents = await submitTransactionAsync(deployer, addTx);
+      const allowListedAgainAfter = (await api.query.nft.contractAllowList(contract.address, bob.address)).toJSON();
+
+      expect(getGenericResult(addEvents).success).to.be.true;
+      expect(allowListedBefore).to.be.false;
+      expect(allowListedAfter).to.be.true;
+      expect(getGenericResult(addAgainEvents).success).to.be.true;
+      expect(allowListedAgainAfter).to.be.true;
+    });
+  });
+});
+
+describe.skip('Negative Integration Test addToContractAllowList', () => {
+
+  it('Add an address to a allow list of a non-contract', async () => {
+    await usingApi(async api => {
+      const alice = privateKey('//Bob');
+      const bob = privateKey('//Bob');
+      const charlieGuineaPig = privateKey('//Charlie');
+
+      const allowListedBefore = (await api.query.nft.contractAllowList(charlieGuineaPig.address, bob.address)).toJSON();
+      const addTx = api.tx.nft.addToContractAllowList(charlieGuineaPig.address, bob.address);
+      await expect(submitTransactionExpectFailAsync(alice, addTx)).to.be.rejected;
+      const allowListedAfter = (await api.query.nft.contractAllowList(charlieGuineaPig.address, bob.address)).toJSON();
+
+      expect(allowListedBefore).to.be.false;
+      expect(allowListedAfter).to.be.false;
+    });
+  });
+
+  it('Add to a contract allow list using a non-owner address', async () => {
+    await usingApi(async api => {
+      const bob = privateKey('//Bob');
+      const [contract] = await deployFlipper(api);
+
+      const allowListedBefore = (await api.query.nft.contractAllowList(contract.address, bob.address)).toJSON();
+      const addTx = api.tx.nft.addToContractAllowList(contract.address, bob.address);
+      await expect(submitTransactionExpectFailAsync(bob, addTx)).to.be.rejected;
+      const allowListedAfter = (await api.query.nft.contractAllowList(contract.address, bob.address)).toJSON();
+
+      expect(allowListedBefore).to.be.false;
+      expect(allowListedAfter).to.be.false;
+    });
+  });
+
+});
deletedtests/src/addToContractWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/addToContractWhiteList.test.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-import chai from 'chai';
-import chaiAsPromised from 'chai-as-promised';
-import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
-import privateKey from './substrate/privateKey';
-import {
-  deployFlipper,
-} from './util/contracthelpers';
-import {
-  getGenericResult,
-} from './util/helpers';
-
-chai.use(chaiAsPromised);
-const expect = chai.expect;
-
-describe.skip('Integration Test addToContractWhiteList', () => {
-
-  it('Add an address to a contract white list', async () => {
-    await usingApi(async api => {
-      const bob = privateKey('//Bob');
-      const [contract, deployer] = await deployFlipper(api);
-
-      const whiteListedBefore = (await api.query.nft.contractWhiteList(contract.address, bob.address)).toJSON();
-      const addTx = api.tx.nft.addToContractWhiteList(contract.address, bob.address);
-      const addEvents = await submitTransactionAsync(deployer, addTx);
-      const whiteListedAfter = (await api.query.nft.contractWhiteList(contract.address, bob.address)).toJSON();
-
-      expect(getGenericResult(addEvents).success).to.be.true;
-      expect(whiteListedBefore).to.be.false;
-      expect(whiteListedAfter).to.be.true;
-    });
-  });
-
-  it('Adding same address to white list repeatedly should not produce errors', async () => {
-    await usingApi(async api => {
-      const bob = privateKey('//Bob');
-      const [contract, deployer] = await deployFlipper(api);
-
-      const whiteListedBefore = (await api.query.nft.contractWhiteList(contract.address, bob.address)).toJSON();
-      const addTx = api.tx.nft.addToContractWhiteList(contract.address, bob.address);
-      const addEvents = await submitTransactionAsync(deployer, addTx);
-      const whiteListedAfter = (await api.query.nft.contractWhiteList(contract.address, bob.address)).toJSON();
-      const addAgainEvents = await submitTransactionAsync(deployer, addTx);
-      const whiteListedAgainAfter = (await api.query.nft.contractWhiteList(contract.address, bob.address)).toJSON();
-
-      expect(getGenericResult(addEvents).success).to.be.true;
-      expect(whiteListedBefore).to.be.false;
-      expect(whiteListedAfter).to.be.true;
-      expect(getGenericResult(addAgainEvents).success).to.be.true;
-      expect(whiteListedAgainAfter).to.be.true;
-    });
-  });
-});
-
-describe.skip('Negative Integration Test addToContractWhiteList', () => {
-
-  it('Add an address to a white list of a non-contract', async () => {
-    await usingApi(async api => {
-      const alice = privateKey('//Bob');
-      const bob = privateKey('//Bob');
-      const charlieGuineaPig = privateKey('//Charlie');
-
-      const whiteListedBefore = (await api.query.nft.contractWhiteList(charlieGuineaPig.address, bob.address)).toJSON();
-      const addTx = api.tx.nft.addToContractWhiteList(charlieGuineaPig.address, bob.address);
-      await expect(submitTransactionExpectFailAsync(alice, addTx)).to.be.rejected;
-      const whiteListedAfter = (await api.query.nft.contractWhiteList(charlieGuineaPig.address, bob.address)).toJSON();
-
-      expect(whiteListedBefore).to.be.false;
-      expect(whiteListedAfter).to.be.false;
-    });
-  });
-
-  it('Add to a contract white list using a non-owner address', async () => {
-    await usingApi(async api => {
-      const bob = privateKey('//Bob');
-      const [contract] = await deployFlipper(api);
-
-      const whiteListedBefore = (await api.query.nft.contractWhiteList(contract.address, bob.address)).toJSON();
-      const addTx = api.tx.nft.addToContractWhiteList(contract.address, bob.address);
-      await expect(submitTransactionExpectFailAsync(bob, addTx)).to.be.rejected;
-      const whiteListedAfter = (await api.query.nft.contractWhiteList(contract.address, bob.address)).toJSON();
-
-      expect(whiteListedBefore).to.be.false;
-      expect(whiteListedAfter).to.be.false;
-    });
-  });
-
-});
deletedtests/src/addToWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/addToWhiteList.test.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-import {IKeyringPair} from '@polkadot/types/types';
-import chai from 'chai';
-import chaiAsPromised from 'chai-as-promised';
-import privateKey from './substrate/privateKey';
-import usingApi, {submitTransactionExpectFailAsync} from './substrate/substrate-api';
-import {
-  addToWhiteListExpectSuccess,
-  createCollectionExpectSuccess,
-  createItemExpectSuccess,
-  destroyCollectionExpectSuccess,
-  enablePublicMintingExpectSuccess,
-  enableWhiteListExpectSuccess,
-  normalizeAccountId,
-  addCollectionAdminExpectSuccess,
-  addToWhiteListExpectFail,
-} from './util/helpers';
-
-chai.use(chaiAsPromised);
-const expect = chai.expect;
-
-let alice: IKeyringPair;
-let bob: IKeyringPair;
-let charlie: IKeyringPair;
-
-describe('Integration Test ext. addToWhiteList()', () => {
-
-  before(async () => {
-    await usingApi(async () => {
-      alice = privateKey('//Alice');
-      bob = privateKey('//Bob');
-    });
-  });
-
-  it('Execute the extrinsic with parameters: Collection ID and address to add to the white list', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-  });
-
-  it('Whitelisted minting: list restrictions', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await enablePublicMintingExpectSuccess(alice, collectionId);
-    await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
-  });
-});
-
-describe('Negative Integration Test ext. addToWhiteList()', () => {
-
-  it('White list an address in the collection that does not exist', async () => {
-    await usingApi(async (api) => {
-      // tslint:disable-next-line: no-bitwise
-      const collectionId = ((await api.query.common.createdCollectionCount()).toNumber()) + 1;
-      const bob = privateKey('//Bob');
-
-      const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(bob.address));
-      await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
-    });
-  });
-
-  it('White list an address in the collection that was destroyed', async () => {
-    await usingApi(async (api) => {
-      const alice = privateKey('//Alice');
-      const bob = privateKey('//Bob');
-      // tslint:disable-next-line: no-bitwise
-      const collectionId = await createCollectionExpectSuccess();
-      await destroyCollectionExpectSuccess(collectionId);
-      const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(bob.address));
-      await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
-    });
-  });
-
-  it('White list an address in the collection that does not have white list access enabled', async () => {
-    await usingApi(async (api) => {
-      const alice = privateKey('//Alice');
-      const ferdie = privateKey('//Ferdie');
-      const collectionId = await createCollectionExpectSuccess();
-      await enableWhiteListExpectSuccess(alice, collectionId);
-      await enablePublicMintingExpectSuccess(alice, collectionId);
-      const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(ferdie.address), 'NFT');
-      await expect(submitTransactionExpectFailAsync(ferdie, tx)).to.be.rejected;
-    });
-  });
-
-});
-
-describe('Integration Test ext. addToWhiteList() with collection admin permissions:', () => {
-
-  before(async () => {
-    await usingApi(async () => {
-      alice = privateKey('//Alice');
-      bob = privateKey('//Bob');
-      charlie = privateKey('//Charlie');
-    });
-  });
-
-  it('Negative. Add to the white list by regular user', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectFail(bob, collectionId, charlie.address);
-  });
-
-  it('Execute the extrinsic with parameters: Collection ID and address to add to the white list', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-    await addToWhiteListExpectSuccess(bob, collectionId, charlie.address);
-  });
-
-  it('Whitelisted minting: list restrictions', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-    await addToWhiteListExpectSuccess(bob, collectionId, charlie.address);
-
-    // allowed only for collection owner
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await enablePublicMintingExpectSuccess(alice, collectionId);
-
-    await createItemExpectSuccess(charlie, collectionId, 'NFT', charlie.address);
-  });
-});
addedtests/src/allowLists.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/allowLists.test.ts
@@ -0,0 +1,304 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+import {IKeyringPair} from '@polkadot/types/types';
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
+import privateKey from './substrate/privateKey';
+import usingApi, {submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {
+  addToAllowListExpectSuccess,
+  createCollectionExpectSuccess,
+  createItemExpectSuccess,
+  destroyCollectionExpectSuccess,
+  enableAllowListExpectSuccess,
+  normalizeAccountId,
+  addCollectionAdminExpectSuccess,
+  addToAllowListExpectFail,
+  removeFromAllowListExpectSuccess,
+  removeFromAllowListExpectFailure,
+  addToAllowListAgainExpectSuccess,
+  transferExpectFailure,
+  approveExpectSuccess,
+  approveExpectFail,
+  transferExpectSuccess,
+  transferFromExpectSuccess,
+  setMintPermissionExpectSuccess,
+  createItemExpectFailure,
+} from './util/helpers';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+let charlie: IKeyringPair;
+
+describe('Integration Test ext. Allow list tests', () => {
+
+  before(async () => {
+    await usingApi(async () => {
+      alice = privateKey('//Alice');
+      bob = privateKey('//Bob');
+      charlie = privateKey('//Charlie');
+    });
+  });
+
+  it('Owner can add address to allow list', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+  });
+
+  it('Admin can add address to allow list', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+    await addToAllowListExpectSuccess(bob, collectionId, charlie.address);
+  });
+
+  it('Non-privileged user cannot add address to allow list', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectFail(bob, collectionId, charlie.address);
+  });
+
+  it('Nobody can add address to allow list of non-existing collection', async () => {
+    const collectionId = (1<<32) - 1;
+    await addToAllowListExpectFail(alice, collectionId, bob.address);
+  });
+
+  it('Nobody can add address to allow list of destroyed collection', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await destroyCollectionExpectSuccess(collectionId, '//Alice');
+    await addToAllowListExpectFail(alice, collectionId, bob.address);
+  });
+
+  it('If address is already added to allow list, nothing happens', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+    await addToAllowListAgainExpectSuccess(alice, collectionId, bob.address);
+  });
+
+  it('Owner can remove address from allow list', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+    await removeFromAllowListExpectSuccess(alice, collectionId, normalizeAccountId(bob));
+  });
+
+  it('Admin can remove address from allow list', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await removeFromAllowListExpectSuccess(bob, collectionId, normalizeAccountId(charlie));
+  });
+
+  it('Non-privileged user cannot remove address from allow list', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await removeFromAllowListExpectFailure(bob, collectionId, normalizeAccountId(charlie));
+  });
+
+  it('Nobody can remove address from allow list of non-existing collection', async () => {
+    const collectionId = (1<<32) - 1;
+    await removeFromAllowListExpectFailure(alice, collectionId, normalizeAccountId(charlie));
+  });
+
+  it('Nobody can remove address from allow list of deleted collection', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await destroyCollectionExpectSuccess(collectionId, '//Alice');
+    await removeFromAllowListExpectFailure(alice, collectionId, normalizeAccountId(charlie));
+  });
+
+  it('If address is already removed from allow list, nothing happens', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await removeFromAllowListExpectSuccess(alice, collectionId, normalizeAccountId(charlie));
+    await removeFromAllowListExpectSuccess(alice, collectionId, normalizeAccountId(charlie));
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom. Test1', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+
+    await transferExpectFailure(
+      collectionId,
+      itemId,
+      alice,
+      charlie,
+      1,
+    );
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom. Test2', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await addToAllowListExpectSuccess(alice, collectionId, alice.address);
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
+    await removeFromAllowListExpectSuccess(alice, collectionId, normalizeAccountId(alice));
+
+    await transferExpectFailure(
+      collectionId,
+      itemId,
+      alice,
+      charlie,
+      1,
+    );
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom. Test1', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await addToAllowListExpectSuccess(alice, collectionId, alice.address);
+
+    await transferExpectFailure(
+      collectionId,
+      itemId,
+      alice,
+      charlie,
+      1,
+    );
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom. Test2', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await addToAllowListExpectSuccess(alice, collectionId, alice.address);
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
+    await removeFromAllowListExpectSuccess(alice, collectionId, normalizeAccountId(alice));
+
+    await transferExpectFailure(
+      collectionId,
+      itemId,
+      alice,
+      charlie,
+      1,
+    );
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+
+    await usingApi(async (api) => {
+      const tx = api.tx.nft.burnItem(collectionId, itemId, /*normalizeAccountId(Alice.address),*/ 11);
+      const badTransaction = async function () {
+        await submitTransactionExpectFailAsync(alice, tx);
+      };
+      await expect(badTransaction()).to.be.rejected;
+    });
+  });
+
+  it('If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method)', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await approveExpectFail(collectionId, itemId, alice, bob);
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can be transferred to a allowlisted address with transfer.', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await addToAllowListExpectSuccess(alice, collectionId, alice.address);
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await transferExpectSuccess(collectionId, itemId, alice, charlie, 1, 'NFT');
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can be transferred to a alowlisted address with transferFrom.', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await addToAllowListExpectSuccess(alice, collectionId, alice.address);
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
+    await transferFromExpectSuccess(collectionId, itemId, alice, alice, charlie, 1, 'NFT');
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await addToAllowListExpectSuccess(alice, collectionId, alice.address);
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await transferExpectSuccess(collectionId, itemId, alice, charlie, 1, 'NFT');
+  });
+
+  it('If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transferFrom', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await addToAllowListExpectSuccess(alice, collectionId, alice.address);
+    await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+    await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
+    await transferFromExpectSuccess(collectionId, itemId, alice, alice, charlie, 1, 'NFT');
+  });
+
+  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await setMintPermissionExpectSuccess(alice, collectionId, false);
+    await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+  });
+
+  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await setMintPermissionExpectSuccess(alice, collectionId, false);
+    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+    await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
+  });
+
+  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow-listed address', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await setMintPermissionExpectSuccess(alice, collectionId, false);
+    await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+    await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
+  });
+
+  it('If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await setMintPermissionExpectSuccess(alice, collectionId, false);
+    await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
+  });
+
+  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await setMintPermissionExpectSuccess(alice, collectionId, true);
+    await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+  });
+
+  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await setMintPermissionExpectSuccess(alice, collectionId, true);
+    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+    await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
+  });
+
+  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await setMintPermissionExpectSuccess(alice, collectionId, true);
+    await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
+  });
+
+  it('If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await enableAllowListExpectSuccess(alice, collectionId);
+    await setMintPermissionExpectSuccess(alice, collectionId, true);
+    await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+    await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
+  });
+});
modifiedtests/src/change-collection-owner.test.tsdiffbeforeafterboth
--- a/tests/src/change-collection-owner.test.ts
+++ b/tests/src/change-collection-owner.test.ts
@@ -12,13 +12,13 @@
   setCollectionSponsorExpectSuccess,
   confirmSponsorshipExpectSuccess,
   removeCollectionSponsorExpectSuccess,
-  enableWhiteListExpectSuccess,
+  enableAllowListExpectSuccess,
   setMintPermissionExpectSuccess,
   destroyCollectionExpectSuccess,
   setCollectionSponsorExpectFailure,
   confirmSponsorshipExpectFailure,
   removeCollectionSponsorExpectFailure,
-  enableWhiteListExpectFail,
+  enableAllowListExpectFail,
   setMintPermissionExpectFailure,
   destroyCollectionExpectFailure,
   setPublicAccessModeExpectSuccess,
@@ -104,8 +104,8 @@
       );
       await submitTransactionAsync(bob, tx1);
 
-      await setPublicAccessModeExpectSuccess(bob, collectionId, 'WhiteList');
-      await enableWhiteListExpectSuccess(bob, collectionId);
+      await setPublicAccessModeExpectSuccess(bob, collectionId, 'AllowList');
+      await enableAllowListExpectSuccess(bob, collectionId);
       await setMintPermissionExpectSuccess(bob, collectionId, true);
       await destroyCollectionExpectSuccess(collectionId, '//Bob');
     });
@@ -225,7 +225,7 @@
       );
       await expect(submitTransactionExpectFailAsync(alice, tx1)).to.be.rejected;
 
-      await enableWhiteListExpectFail(alice, collectionId);
+      await enableAllowListExpectFail(alice, collectionId);
       await setMintPermissionExpectFailure(alice, collectionId, true);
       await destroyCollectionExpectFailure(collectionId, '//Alice');
     });
modifiedtests/src/collision-tests/adminDestroyCollection.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/adminDestroyCollection.test.ts
+++ b/tests/src/collision-tests/adminDestroyCollection.test.ts
@@ -27,26 +27,26 @@
   });
 });
 
-describe('Deleting a collection while add address to whitelist: ', () => {
+describe('Deleting a collection while add address to allowlist: ', () => {
   // tslint:disable-next-line: max-line-length
-  it('Adding an address to the collection whitelist in a block by the admin, and deleting the collection by the owner ', async () => {
+  it('Adding an address to the collection allowlist in a block by the admin, and deleting the collection by the owner ', async () => {
     await usingApi(async (api) => {
       const collectionId = await createCollectionExpectSuccess();
       const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
       await submitTransactionAsync(Alice, changeAdminTx);
       await waitNewBlocks(1);
       //
-      const addWhitelistAdm = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Ferdie.address));
+      const addAllowlistAdm = api.tx.nft.addToAllowList(collectionId, normalizeAccountId(Ferdie.address));
       const destroyCollection = api.tx.nft.destroyCollection(collectionId);
       await Promise.all([
-        addWhitelistAdm.signAndSend(Bob),
+        addAllowlistAdm.signAndSend(Bob),
         destroyCollection.signAndSend(Alice),
       ]);
       await waitNewBlocks(1);
-      let whiteList = false;
-      whiteList = (await api.query.nft.whiteList(collectionId, Ferdie.address)).toJSON() as boolean;
+      let allowList = false;
+      allowList = (await api.query.nft.allowList(collectionId, Ferdie.address)).toJSON() as boolean;
       // tslint:disable-next-line: no-unused-expression
-      expect(whiteList).to.be.false;
+      expect(allowList).to.be.false;
       await waitNewBlocks(2);
     });
   });
modifiedtests/src/collision-tests/tokenLimitsOff.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/tokenLimitsOff.test.ts
+++ b/tests/src/collision-tests/tokenLimitsOff.test.ts
@@ -9,7 +9,7 @@
 import privateKey from '../substrate/privateKey';
 import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';
 import {
-  addToWhiteListExpectSuccess,
+  addToAllowListExpectSuccess,
   createCollectionExpectSuccess,
   getCreateItemResult,
   setMintPermissionExpectSuccess,
@@ -44,8 +44,8 @@
     await usingApi(async (api) => {
       const collectionId = await createCollectionExpectSuccess();
       await setMintPermissionExpectSuccess(Alice, collectionId, true);
-      await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address);
-      await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
+      await addToAllowListExpectSuccess(Alice, collectionId, Ferdie.address);
+      await addToAllowListExpectSuccess(Alice, collectionId, Bob.address);
       const setCollectionLim = api.tx.nft.setCollectionLimits(
         collectionId,
         {
modifiedtests/src/collision-tests/turnsOffMinting.test.tsdiffbeforeafterboth
--- a/tests/src/collision-tests/turnsOffMinting.test.ts
+++ b/tests/src/collision-tests/turnsOffMinting.test.ts
@@ -8,7 +8,7 @@
 import privateKey from '../substrate/privateKey';
 import usingApi from '../substrate/substrate-api';
 import {
-  addToWhiteListExpectSuccess,
+  addToAllowListExpectSuccess,
   createCollectionExpectSuccess,
   setMintPermissionExpectSuccess,
   normalizeAccountId,
@@ -33,7 +33,7 @@
     await usingApi(async (api) => {
       const collectionId = await createCollectionExpectSuccess();
       await setMintPermissionExpectSuccess(Alice, collectionId, true);
-      await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address);
+      await addToAllowListExpectSuccess(Alice, collectionId, Ferdie.address);
 
       const mintItem = api.tx.nft.createItem(collectionId, normalizeAccountId(Ferdie.address), 'NFT');
       const offMinting = api.tx.nft.setMintPermission(collectionId, false);
modifiedtests/src/confirmSponsorship.test.tsdiffbeforeafterboth
--- a/tests/src/confirmSponsorship.test.ts
+++ b/tests/src/confirmSponsorship.test.ts
@@ -15,9 +15,9 @@
   createItemExpectSuccess,
   findUnusedAddress,
   getGenericResult,
-  enableWhiteListExpectSuccess,
+  enableAllowListExpectSuccess,
   enablePublicMintingExpectSuccess,
-  addToWhiteListExpectSuccess,
+  addToAllowListExpectSuccess,
   normalizeAccountId,
   addCollectionAdminExpectSuccess,
 } from './util/helpers';
@@ -144,8 +144,8 @@
     await setCollectionSponsorExpectSuccess(collectionId, bob.address);
     await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
 
-    // Enable collection white list
-    await enableWhiteListExpectSuccess(alice, collectionId);
+    // Enable collection allow list
+    await enableAllowListExpectSuccess(alice, collectionId);
 
     // Enable public minting
     await enablePublicMintingExpectSuccess(alice, collectionId);
@@ -157,8 +157,8 @@
       // Find unused address
       const zeroBalance = await findUnusedAddress(api);
 
-      // Add zeroBalance address to white list
-      await addToWhiteListExpectSuccess(alice, collectionId, zeroBalance.address);
+      // Add zeroBalance address to allow list
+      await addToAllowListExpectSuccess(alice, collectionId, zeroBalance.address);
 
       // Mint token using unused address as signer
       await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);
@@ -285,8 +285,8 @@
     await setCollectionSponsorExpectSuccess(collectionId, bob.address);
     await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
 
-    // Enable collection white list
-    await enableWhiteListExpectSuccess(alice, collectionId);
+    // Enable collection allow list
+    await enableAllowListExpectSuccess(alice, collectionId);
 
     // Enable public minting
     await enablePublicMintingExpectSuccess(alice, collectionId);
@@ -295,8 +295,8 @@
       // Find unused address
       const zeroBalance = await findUnusedAddress(api);
 
-      // Add zeroBalance address to white list
-      await addToWhiteListExpectSuccess(alice, collectionId, zeroBalance.address);
+      // Add zeroBalance address to allow list
+      await addToAllowListExpectSuccess(alice, collectionId, zeroBalance.address);
 
       // Mint token using unused address as signer - gets sponsored
       await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);
modifiedtests/src/contracts.test.tsdiffbeforeafterboth
--- a/tests/src/contracts.test.ts
+++ b/tests/src/contracts.test.ts
@@ -16,15 +16,15 @@
 } from './util/contracthelpers';
 
 import {
-  addToWhiteListExpectSuccess,
+  addToAllowListExpectSuccess,
   approveExpectSuccess,
   createCollectionExpectSuccess,
   createItemExpectSuccess,
   enablePublicMintingExpectSuccess,
-  enableWhiteListExpectSuccess,
+  enableAllowListExpectSuccess,
   getGenericResult,
   normalizeAccountId,
-  isWhitelisted,
+  isAllowlisted,
   transferFromExpectSuccess,
   getTokenOwner,
 } from './util/helpers';
@@ -96,9 +96,9 @@
       const collectionId = await createCollectionExpectSuccess();
       const [contract] = await deployTransferContract(api);
       await enablePublicMintingExpectSuccess(alice, collectionId);
-      await enableWhiteListExpectSuccess(alice, collectionId);
-      await addToWhiteListExpectSuccess(alice, collectionId, contract.address);
-      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+      await enableAllowListExpectSuccess(alice, collectionId);
+      await addToAllowListExpectSuccess(alice, collectionId, contract.address);
+      await addToAllowListExpectSuccess(alice, collectionId, bob.address);
 
       const transferTx = contract.tx.createItem(value, gasLimit, bob.address, collectionId, {Nft: {const_data: '0x010203', variable_data: '0x020304'}});
       const events = await submitTransactionAsync(alice, transferTx);
@@ -124,9 +124,9 @@
       const collectionId = await createCollectionExpectSuccess();
       const [contract] = await deployTransferContract(api);
       await enablePublicMintingExpectSuccess(alice, collectionId);
-      await enableWhiteListExpectSuccess(alice, collectionId);
-      await addToWhiteListExpectSuccess(alice, collectionId, contract.address);
-      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+      await enableAllowListExpectSuccess(alice, collectionId);
+      await addToAllowListExpectSuccess(alice, collectionId, contract.address);
+      await addToAllowListExpectSuccess(alice, collectionId, bob.address);
 
       const transferTx = contract.tx.createMultipleItems(value, gasLimit, bob.address, collectionId, [
         {Nft: {const_data: '0x010203', variable_data: '0x020304'}},
@@ -218,7 +218,7 @@
     });
   });
 
-  it('ToggleWhiteList CE', async () => {
+  it('ToggleAllowList CE', async () => {
     await usingApi(async api => {
       const alice = privateKey('//Alice');
       const bob = privateKey('//Bob');
@@ -228,23 +228,23 @@
       const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address);
       await submitTransactionAsync(alice, changeAdminTx);
 
-      expect(await isWhitelisted(collectionId, bob.address)).to.be.false;
+      expect(await isAllowlisted(collectionId, bob.address)).to.be.false;
 
       {
-        const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, true);
+        const transferTx = contract.tx.toggleAllowList(value, gasLimit, collectionId, bob.address, true);
         const events = await submitTransactionAsync(alice, transferTx);
         const result = getGenericResult(events);
         expect(result.success).to.be.true;
 
-        expect(await isWhitelisted(collectionId, bob.address)).to.be.true;
+        expect(await isAllowlisted(collectionId, bob.address)).to.be.true;
       }
       {
-        const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, false);
+        const transferTx = contract.tx.toggleAllowList(value, gasLimit, collectionId, bob.address, false);
         const events = await submitTransactionAsync(alice, transferTx);
         const result = getGenericResult(events);
         expect(result.success).to.be.true;
 
-        expect(await isWhitelisted(collectionId, bob.address)).to.be.false;
+        expect(await isAllowlisted(collectionId, bob.address)).to.be.false;
       }
     });
   });
modifiedtests/src/eth/allowlist.test.tsdiffbeforeafterboth
--- a/tests/src/eth/allowlist.test.ts
+++ b/tests/src/eth/allowlist.test.ts
@@ -24,7 +24,7 @@
     expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.true;
   });
 
-  itWeb3('Non-whitelisted user can\'t call contract with allowlist enabled', async ({api, web3}) => {
+  itWeb3('Non-allowlisted user can\'t call contract with allowlist enabled', async ({api, web3}) => {
     const owner = await createEthAccountWithBalance(api, web3);
     const flipper = await deployFlipper(web3, owner);
     const caller = await createEthAccountWithBalance(api, web3);
@@ -35,7 +35,7 @@
     await flipper.methods.flip().send({from: caller});
     expect(await flipper.methods.getValue().call()).to.be.true;
 
-    // Tx will be reverted if user is not in whitelist
+    // Tx will be reverted if user is not in allowlist
     await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
     await expect(flipper.methods.flip().send({from: caller})).to.rejected;
     expect(await flipper.methods.getValue().call()).to.be.true;
modifiedtests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth
--- a/tests/src/eth/contractSponsoring.test.ts
+++ b/tests/src/eth/contractSponsoring.test.ts
@@ -32,7 +32,7 @@
     expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
   });
 
-  itWeb3('Sponsoring is set, an address that has no UNQ can send a transaction and it works. Sponsor balance should decrease (whitelisted)', async ({api, web3}) => {
+  itWeb3('Sponsoring is set, an address that has no UNQ can send a transaction and it works. Sponsor balance should decrease (allowlisted)', async ({api, web3}) => {
     const alice = privateKey('//Alice');
 
     const owner = await createEthAccountWithBalance(api, web3);
@@ -62,7 +62,7 @@
     expect(+balanceAfter).to.be.lessThan(+originalFlipperBalance);
   });
 
-  itWeb3('Sponsoring is set, an address that has no UNQ can send a transaction and it works. Sponsor balance should not decrease (non-whitelisted)', async ({api, web3}) => {
+  itWeb3('Sponsoring is set, an address that has no UNQ can send a transaction and it works. Sponsor balance should not decrease (non-allowlisted)', async ({api, web3}) => {
     const alice = privateKey('//Alice');
 
     const owner = await createEthAccountWithBalance(api, web3);
@@ -158,7 +158,7 @@
     expect(await helpers.methods.getSponsoringRateLimit(flipper.options.address).call()).to.be.equals('7200');
   });
 
-  itWeb3('If whitelist mode is off and sponsorship is on, sponsorship does not work', async ({api, web3}) => {
+  itWeb3('If allowlist mode is off and sponsorship is on, sponsorship does not work', async ({api, web3}) => {
     const alice = privateKey('//Alice');
 
     const owner = await createEthAccountWithBalance(api, web3);
modifiedtests/src/interfaces/augment-api-errors.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-errors.ts
+++ b/tests/src/interfaces/augment-api-errors.ts
@@ -53,7 +53,7 @@
        **/
       AddressIsZero: AugmentedError<ApiType>;
       /**
-       * Address is not in white list.
+       * Address is not in allow list.
        **/
       AddressNotInAllowlist: AugmentedError<ApiType>;
       /**
modifiedtests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -219,7 +219,7 @@
        **/
       addCollectionAdmin: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newAdminId: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
       /**
-       * Add an address to white list.
+       * Add an address to allow list.
        * 
        * # Permissions
        * 
@@ -232,7 +232,7 @@
        * 
        * * address.
        **/
-      addToWhiteList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+      addToAllowList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
       /**
        * Set, change, or remove approved address to transfer the ownership of the NFT.
        * 
@@ -336,8 +336,8 @@
        * * Collection Owner.
        * * Collection Admin.
        * * Anyone if
-       * * White List is enabled, and
-       * * Address is added to white list, and
+       * * Allow List is enabled, and
+       * * Address is added to allow list, and
        * * MintPermission is enabled (see SetMintPermission method)
        * 
        * # Arguments
@@ -357,8 +357,8 @@
        * * Collection Owner.
        * * Collection Admin.
        * * Anyone if
-       * * White List is enabled, and
-       * * Address is added to white list, and
+       * * Allow List is enabled, and
+       * * Address is added to allow list, and
        * * MintPermission is enabled (see SetMintPermission method)
        * 
        * # Arguments
@@ -410,7 +410,7 @@
        **/
       removeCollectionSponsor: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
       /**
-       * Remove an address from white list.
+       * Remove an address from allow list.
        * 
        * # Permissions
        * 
@@ -423,7 +423,7 @@
        * 
        * * address.
        **/
-      removeFromWhiteList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+      removeFromAllowList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
       setCollectionLimits: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newLimit: NftDataStructsCollectionLimits | { accountTokenOwnershipLimit?: any; sponsoredDataSize?: any; sponsoredDataRateLimit?: any; tokenLimit?: any; sponsorTransferTimeout?: any; ownerCanTransfer?: any; ownerCanDestroy?: any; transfersEnabled?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, NftDataStructsCollectionLimits]>;
       /**
        * # Permissions
@@ -468,8 +468,8 @@
       setMetaUpdatePermissionFlag: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, value: NftDataStructsMetaUpdatePermission | 'ItemOwner' | 'Admin' | 'None' | number | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, NftDataStructsMetaUpdatePermission]>;
       /**
        * Allows Anyone to create tokens if:
-       * * White List is enabled, and
-       * * Address is added to white list, and
+       * * Allow List is enabled, and
+       * * Address is added to allow list, and
        * * This method was called with True parameter
        * 
        * # Permissions
@@ -498,7 +498,7 @@
        **/
       setOffchainSchema: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, schema: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, Bytes]>;
       /**
-       * Toggle between normal and white list access for the methods with access for `Anyone`.
+       * Toggle between normal and allow list access for the methods with access for `Anyone`.
        * 
        * # Permissions
        * 
@@ -510,7 +510,7 @@
        * 
        * * mode: [AccessMode]
        **/
-      setPublicAccessMode: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, mode: NftDataStructsAccessMode | 'Normal' | 'WhiteList' | number | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, NftDataStructsAccessMode]>;
+      setPublicAccessMode: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, mode: NftDataStructsAccessMode | 'Normal' | 'AllowList' | number | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, NftDataStructsAccessMode]>;
       /**
        * Set schema standard
        * ImageURL
modifiedtests/src/interfaces/nft/definitions.tsdiffbeforeafterboth
--- a/tests/src/interfaces/nft/definitions.ts
+++ b/tests/src/interfaces/nft/definitions.ts
@@ -91,7 +91,7 @@
       },
     },
     NftDataStructsAccessMode: {
-      _enum: ['Normal', 'WhiteList'],
+      _enum: ['Normal', 'AllowList'],
     },
     NftDataStructsSchemaVersion: mkDummy('SchemaVersion'),
 
modifiedtests/src/interfaces/nft/types.tsdiffbeforeafterboth
--- a/tests/src/interfaces/nft/types.ts
+++ b/tests/src/interfaces/nft/types.ts
@@ -7,7 +7,7 @@
 /** @name NftDataStructsAccessMode */
 export interface NftDataStructsAccessMode extends Enum {
   readonly isNormal: boolean;
-  readonly isWhiteList: boolean;
+  readonly isAllowList: boolean;
 }
 
 /** @name NftDataStructsCollection */
modifiedtests/src/metadataUpdate.test.tsdiffbeforeafterboth
--- a/tests/src/metadataUpdate.test.ts
+++ b/tests/src/metadataUpdate.test.ts
@@ -12,11 +12,11 @@
   createItemExpectSuccess,
   createCollectionExpectSuccess,
   enablePublicMintingExpectSuccess,
-  enableWhiteListExpectSuccess,
+  enableAllowListExpectSuccess,
   setMetadataUpdatePermissionFlagExpectSuccess,
   setVariableMetaDataExpectSuccess,
   setMintPermissionExpectSuccess,
-  addToWhiteListExpectSuccess,
+  addToAllowListExpectSuccess,
   addCollectionAdminExpectSuccess,
   setVariableMetaDataExpectFailure,
   setMetadataUpdatePermissionFlagExpectFailure,
@@ -53,7 +53,7 @@
       await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'ItemOwner');
 
       await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
-      await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, nftCollectionId, bob.address);
       await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
 
       await setVariableMetaDataExpectFailure(bob, nftCollectionId, newNftTokenId, data);
@@ -92,7 +92,7 @@
       await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'Admin');
 
       await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
-      await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, nftCollectionId, bob.address);
       await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
 
       await setVariableMetaDataExpectSuccess(bob, nftCollectionId, newNftTokenId, data);
@@ -112,7 +112,7 @@
       await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'Admin');
 
       await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
-      await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, nftCollectionId, bob.address);
       await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
 
       await setVariableMetaDataExpectSuccess(bob, nftCollectionId, newNftTokenId, data);
@@ -129,8 +129,8 @@
       // nft
       const nftCollectionId = await createCollectionExpectSuccess();
       await enablePublicMintingExpectSuccess(alice, nftCollectionId);
-      await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
-      await enableWhiteListExpectSuccess(alice, nftCollectionId);
+      await addToAllowListExpectSuccess(alice, nftCollectionId, bob.address);
+      await enableAllowListExpectSuccess(alice, nftCollectionId);
       const newNftTokenId = await createItemExpectSuccess(bob, nftCollectionId, 'NFT');
       await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'Admin');
 
@@ -169,7 +169,7 @@
       await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'None');
 
       await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
-      await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, nftCollectionId, bob.address);
       await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
 
       await setVariableMetaDataExpectFailure(bob, nftCollectionId, newNftTokenId, data);
modifiedtests/src/mintModes.test.tsdiffbeforeafterboth
--- a/tests/src/mintModes.test.ts
+++ b/tests/src/mintModes.test.ts
@@ -7,14 +7,14 @@
 import privateKey from './substrate/privateKey';
 import usingApi from './substrate/substrate-api';
 import {
-  addToWhiteListExpectSuccess,
+  addToAllowListExpectSuccess,
   createCollectionExpectSuccess,
   createItemExpectFailure,
   createItemExpectSuccess,
-  enableWhiteListExpectSuccess,
+  enableAllowListExpectSuccess,
   setMintPermissionExpectSuccess,
   addCollectionAdminExpectSuccess,
-  disableWhiteListExpectSuccess,
+  disableAllowListExpectSuccess,
 } from './util/helpers';
 
 describe('Integration Test public minting', () => {
@@ -28,40 +28,40 @@
     });
   });
 
-  it('If the AllowList mode is enabled, then the address added to the whitelist and not the owner or administrator can create tokens', async () => {
+  it('If the AllowList mode is enabled, then the address added to the allowlist and not the owner or administrator can create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
-      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, collectionId, bob.address);
 
       await createItemExpectSuccess(bob, collectionId, 'NFT');
     });
   });
 
-  it('If the AllowList mode is enabled, address not included in whitelist that is regular user cannot create tokens', async () => {
+  it('If the AllowList mode is enabled, address not included in allowlist that is regular user cannot create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
       await createItemExpectFailure(bob, collectionId, 'NFT');
     });
   });
 
-  it('If the AllowList mode is enabled, address not included in whitelist that is admin can create tokens', async () => {
+  it('If the AllowList mode is enabled, address not included in allowlist that is admin can create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
       await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
       await createItemExpectSuccess(bob, collectionId, 'NFT');
     });
   });
 
-  it('If the AllowList mode is enabled, address not included in whitelist that is owner can create tokens', async () => {
+  it('If the AllowList mode is enabled, address not included in allowlist that is owner can create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
       await createItemExpectSuccess(alice, collectionId, 'NFT');
     });
@@ -70,7 +70,7 @@
   it('If the AllowList mode is disabled, owner can create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await disableWhiteListExpectSuccess(alice, collectionId);
+      await disableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
       await createItemExpectSuccess(alice, collectionId, 'NFT');
     });
@@ -79,7 +79,7 @@
   it('If the AllowList mode is disabled, collection admin can create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await disableWhiteListExpectSuccess(alice, collectionId);
+      await disableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
       await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
       await createItemExpectSuccess(bob, collectionId, 'NFT');
@@ -89,7 +89,7 @@
   it('If the AllowList mode is disabled, regular user can`t create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await disableWhiteListExpectSuccess(alice, collectionId);
+      await disableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
       await createItemExpectFailure(bob, collectionId, 'NFT');
     });
@@ -110,9 +110,9 @@
   it('Address that is the not owner or not admin cannot create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, false);
-      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, collectionId, bob.address);
       await createItemExpectFailure(bob, collectionId, 'NFT');
     });
   });
@@ -120,7 +120,7 @@
   it('Address that is collection owner can create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await disableWhiteListExpectSuccess(alice, collectionId);
+      await disableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, false);
       await createItemExpectSuccess(alice, collectionId, 'NFT');
     });
@@ -129,7 +129,7 @@
   it('Address that is admin can create tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await disableWhiteListExpectSuccess(alice, collectionId);
+      await disableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, false);
       await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
       await createItemExpectSuccess(bob, collectionId, 'NFT');
addedtests/src/removeFromAllowList.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/removeFromAllowList.test.ts
@@ -0,0 +1,136 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
+import {default as usingApi} from './substrate/substrate-api';
+import {
+  createCollectionExpectSuccess,
+  destroyCollectionExpectSuccess,
+  enableAllowListExpectSuccess,
+  addToAllowListExpectSuccess,
+  removeFromAllowListExpectSuccess,
+  isAllowlisted,
+  findNotExistingCollection,
+  removeFromAllowListExpectFailure,
+  disableAllowListExpectSuccess,
+  normalizeAccountId,
+  addCollectionAdminExpectSuccess,
+} from './util/helpers';
+import {IKeyringPair} from '@polkadot/types/types';
+import privateKey from './substrate/privateKey';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+describe('Integration Test removeFromAllowList', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingApi(async () => {
+      alice = privateKey('//Alice');
+      bob = privateKey('//Bob');
+    });
+  });
+
+  it('ensure bob is not in allowlist after removal', async () => {
+    await usingApi(async () => {
+      const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await enableAllowListExpectSuccess(alice, collectionId);
+      await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+
+      await removeFromAllowListExpectSuccess(alice, collectionId, normalizeAccountId(bob.address));
+      expect(await isAllowlisted(collectionId, bob.address)).to.be.false;
+    });
+  });
+
+  it('allows removal from collection with unset allowlist status', async () => {
+    await usingApi(async () => {
+      const collectionWithoutAllowlistId = await createCollectionExpectSuccess();
+      await enableAllowListExpectSuccess(alice, collectionWithoutAllowlistId);
+      await addToAllowListExpectSuccess(alice, collectionWithoutAllowlistId, bob.address);
+      await disableAllowListExpectSuccess(alice, collectionWithoutAllowlistId);
+
+      await removeFromAllowListExpectSuccess(alice, collectionWithoutAllowlistId, normalizeAccountId(bob.address));
+    });
+  });
+});
+
+describe('Negative Integration Test removeFromAllowList', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingApi(async () => {
+      alice = privateKey('//Alice');
+      bob = privateKey('//Bob');
+    });
+  });
+
+  it('fails on removal from not existing collection', async () => {
+    await usingApi(async (api) => {
+      const collectionId = await findNotExistingCollection(api);
+
+      await removeFromAllowListExpectFailure(alice, collectionId, normalizeAccountId(bob.address));
+    });
+  });
+
+  it('fails on removal from removed collection', async () => {
+    await usingApi(async () => {
+      const collectionId = await createCollectionExpectSuccess();
+      await enableAllowListExpectSuccess(alice, collectionId);
+      await addToAllowListExpectSuccess(alice, collectionId, bob.address);
+      await destroyCollectionExpectSuccess(collectionId);
+
+      await removeFromAllowListExpectFailure(alice, collectionId, normalizeAccountId(bob.address));
+    });
+  });
+});
+
+describe('Integration Test removeFromAllowList with collection admin permissions', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+  let charlie: IKeyringPair;
+
+  before(async () => {
+    await usingApi(async () => {
+      alice = privateKey('//Alice');
+      bob = privateKey('//Bob');
+      charlie = privateKey('//Charlie');
+    });
+  });
+
+  it('ensure address is not in allowlist after removal', async () => {
+    await usingApi(async () => {
+      const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await enableAllowListExpectSuccess(alice, collectionId);
+      await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, collectionId, charlie.address);
+      await removeFromAllowListExpectSuccess(bob, collectionId, normalizeAccountId(charlie.address));
+      expect(await isAllowlisted(collectionId, charlie.address)).to.be.false;
+    });
+  });
+
+  it('Collection admin allowed to remove from allowlist with unset allowlist status', async () => {
+    await usingApi(async () => {
+      const collectionWithoutAllowlistId = await createCollectionExpectSuccess();
+      await enableAllowListExpectSuccess(alice, collectionWithoutAllowlistId);
+      await addCollectionAdminExpectSuccess(alice, collectionWithoutAllowlistId, bob.address);
+      await addToAllowListExpectSuccess(alice, collectionWithoutAllowlistId, charlie.address);
+      await disableAllowListExpectSuccess(alice, collectionWithoutAllowlistId);
+      await removeFromAllowListExpectSuccess(bob, collectionWithoutAllowlistId, normalizeAccountId(charlie.address));
+    });
+  });
+
+  it('Regular user can`t remove from allowlist', async () => {
+    await usingApi(async () => {
+      const collectionWithoutAllowlistId = await createCollectionExpectSuccess();
+      await enableAllowListExpectSuccess(alice, collectionWithoutAllowlistId);
+      await addToAllowListExpectSuccess(alice, collectionWithoutAllowlistId, charlie.address);
+      await removeFromAllowListExpectFailure(bob, collectionWithoutAllowlistId, normalizeAccountId(charlie.address));
+    });
+  });
+});
addedtests/src/removeFromContractAllowList.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/removeFromContractAllowList.test.ts
@@ -0,0 +1,81 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+import privateKey from './substrate/privateKey';
+import usingApi from './substrate/substrate-api';
+import {deployFlipper, toggleFlipValueExpectFailure, toggleFlipValueExpectSuccess} from './util/contracthelpers';
+import {addToContractAllowListExpectSuccess, isAllowlistedInContract, removeFromContractAllowListExpectFailure, removeFromContractAllowListExpectSuccess, toggleContractAllowlistExpectSuccess} from './util/helpers';
+import {IKeyringPair} from '@polkadot/types/types';
+import {expect} from 'chai';
+
+describe.skip('Integration Test removeFromContractAllowList', () => {
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingApi(async () => {
+      bob = privateKey('//Bob');
+    });
+  });
+
+  it('user is no longer allowlisted after removal', async () => {
+    await usingApi(async (api) => {
+      const [flipper, deployer] = await deployFlipper(api);
+
+      await addToContractAllowListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+      await removeFromContractAllowListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+
+      expect(await isAllowlistedInContract(flipper.address, bob.address)).to.be.false;
+    });
+  });
+
+  it('user can\'t execute contract after removal', async () => {
+    await usingApi(async (api) => {
+      const [flipper, deployer] = await deployFlipper(api);
+      await toggleContractAllowlistExpectSuccess(deployer, flipper.address.toString(), true);
+
+      await addToContractAllowListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+      await toggleFlipValueExpectSuccess(bob, flipper);
+
+      await removeFromContractAllowListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+      await toggleFlipValueExpectFailure(bob, flipper);
+    });
+  });
+
+  it('can be called twice', async () => {
+    await usingApi(async (api) => {
+      const [flipper, deployer] = await deployFlipper(api);
+
+      await addToContractAllowListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+      await removeFromContractAllowListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+      await removeFromContractAllowListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+    });
+  });
+});
+
+describe.skip('Negative Integration Test removeFromContractAllowList', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingApi(async () => {
+      alice = privateKey('//Alice');
+      bob = privateKey('//Bob');
+    });
+  });
+
+  it('fails when called with non-contract address', async () => {
+    await usingApi(async () => {
+      await removeFromContractAllowListExpectFailure(alice, alice.address, bob.address);
+    });
+  });
+
+  it('fails when executed by non owner', async () => {
+    await usingApi(async (api) => {
+      const [flipper] = await deployFlipper(api);
+
+      await removeFromContractAllowListExpectFailure(alice, flipper.address.toString(), bob.address);
+    });
+  });
+});
deletedtests/src/removeFromContractWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/removeFromContractWhiteList.test.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-import privateKey from './substrate/privateKey';
-import usingApi from './substrate/substrate-api';
-import {deployFlipper, toggleFlipValueExpectFailure, toggleFlipValueExpectSuccess} from './util/contracthelpers';
-import {addToContractWhiteListExpectSuccess, isWhitelistedInContract, removeFromContractWhiteListExpectFailure, removeFromContractWhiteListExpectSuccess, toggleContractWhitelistExpectSuccess} from './util/helpers';
-import {IKeyringPair} from '@polkadot/types/types';
-import {expect} from 'chai';
-
-describe.skip('Integration Test removeFromContractWhiteList', () => {
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingApi(async () => {
-      bob = privateKey('//Bob');
-    });
-  });
-
-  it('user is no longer whitelisted after removal', async () => {
-    await usingApi(async (api) => {
-      const [flipper, deployer] = await deployFlipper(api);
-
-      await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
-      await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
-
-      expect(await isWhitelistedInContract(flipper.address, bob.address)).to.be.false;
-    });
-  });
-
-  it('user can\'t execute contract after removal', async () => {
-    await usingApi(async (api) => {
-      const [flipper, deployer] = await deployFlipper(api);
-      await toggleContractWhitelistExpectSuccess(deployer, flipper.address.toString(), true);
-
-      await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
-      await toggleFlipValueExpectSuccess(bob, flipper);
-
-      await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
-      await toggleFlipValueExpectFailure(bob, flipper);
-    });
-  });
-
-  it('can be called twice', async () => {
-    await usingApi(async (api) => {
-      const [flipper, deployer] = await deployFlipper(api);
-
-      await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
-      await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
-      await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
-    });
-  });
-});
-
-describe.skip('Negative Integration Test removeFromContractWhiteList', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingApi(async () => {
-      alice = privateKey('//Alice');
-      bob = privateKey('//Bob');
-    });
-  });
-
-  it('fails when called with non-contract address', async () => {
-    await usingApi(async () => {
-      await removeFromContractWhiteListExpectFailure(alice, alice.address, bob.address);
-    });
-  });
-
-  it('fails when executed by non owner', async () => {
-    await usingApi(async (api) => {
-      const [flipper] = await deployFlipper(api);
-
-      await removeFromContractWhiteListExpectFailure(alice, flipper.address.toString(), bob.address);
-    });
-  });
-});
deletedtests/src/removeFromWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/removeFromWhiteList.test.ts
+++ /dev/null
@@ -1,136 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-import chai from 'chai';
-import chaiAsPromised from 'chai-as-promised';
-import {default as usingApi} from './substrate/substrate-api';
-import {
-  createCollectionExpectSuccess,
-  destroyCollectionExpectSuccess,
-  enableWhiteListExpectSuccess,
-  addToWhiteListExpectSuccess,
-  removeFromWhiteListExpectSuccess,
-  isWhitelisted,
-  findNotExistingCollection,
-  removeFromWhiteListExpectFailure,
-  disableWhiteListExpectSuccess,
-  normalizeAccountId,
-  addCollectionAdminExpectSuccess,
-} from './util/helpers';
-import {IKeyringPair} from '@polkadot/types/types';
-import privateKey from './substrate/privateKey';
-
-chai.use(chaiAsPromised);
-const expect = chai.expect;
-
-describe('Integration Test removeFromWhiteList', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingApi(async () => {
-      alice = privateKey('//Alice');
-      bob = privateKey('//Bob');
-    });
-  });
-
-  it('ensure bob is not in whitelist after removal', async () => {
-    await usingApi(async () => {
-      const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
-      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-
-      await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(bob.address));
-      expect(await isWhitelisted(collectionId, bob.address)).to.be.false;
-    });
-  });
-
-  it('allows removal from collection with unset whitelist status', async () => {
-    await usingApi(async () => {
-      const collectionWithoutWhitelistId = await createCollectionExpectSuccess();
-      await enableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
-      await addToWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, bob.address);
-      await disableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
-
-      await removeFromWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, normalizeAccountId(bob.address));
-    });
-  });
-});
-
-describe('Negative Integration Test removeFromWhiteList', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingApi(async () => {
-      alice = privateKey('//Alice');
-      bob = privateKey('//Bob');
-    });
-  });
-
-  it('fails on removal from not existing collection', async () => {
-    await usingApi(async (api) => {
-      const collectionId = await findNotExistingCollection(api);
-
-      await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(bob.address));
-    });
-  });
-
-  it('fails on removal from removed collection', async () => {
-    await usingApi(async () => {
-      const collectionId = await createCollectionExpectSuccess();
-      await enableWhiteListExpectSuccess(alice, collectionId);
-      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-      await destroyCollectionExpectSuccess(collectionId);
-
-      await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(bob.address));
-    });
-  });
-});
-
-describe('Integration Test removeFromWhiteList with collection admin permissions', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-  let charlie: IKeyringPair;
-
-  before(async () => {
-    await usingApi(async () => {
-      alice = privateKey('//Alice');
-      bob = privateKey('//Bob');
-      charlie = privateKey('//Charlie');
-    });
-  });
-
-  it('ensure address is not in whitelist after removal', async () => {
-    await usingApi(async () => {
-      const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
-      await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-      await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-      await removeFromWhiteListExpectSuccess(bob, collectionId, normalizeAccountId(charlie.address));
-      expect(await isWhitelisted(collectionId, charlie.address)).to.be.false;
-    });
-  });
-
-  it('Collection admin allowed to remove from whitelist with unset whitelist status', async () => {
-    await usingApi(async () => {
-      const collectionWithoutWhitelistId = await createCollectionExpectSuccess();
-      await enableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
-      await addCollectionAdminExpectSuccess(alice, collectionWithoutWhitelistId, bob.address);
-      await addToWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, charlie.address);
-      await disableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
-      await removeFromWhiteListExpectSuccess(bob, collectionWithoutWhitelistId, normalizeAccountId(charlie.address));
-    });
-  });
-
-  it('Regular user can`t remove from whitelist', async () => {
-    await usingApi(async () => {
-      const collectionWithoutWhitelistId = await createCollectionExpectSuccess();
-      await enableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
-      await addToWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, charlie.address);
-      await removeFromWhiteListExpectFailure(bob, collectionWithoutWhitelistId, normalizeAccountId(charlie.address));
-    });
-  });
-});
modifiedtests/src/setMintPermission.test.tsdiffbeforeafterboth
--- a/tests/src/setMintPermission.test.ts
+++ b/tests/src/setMintPermission.test.ts
@@ -7,12 +7,12 @@
 import privateKey from './substrate/privateKey';
 import usingApi from './substrate/substrate-api';
 import {
-  addToWhiteListExpectSuccess,
+  addToAllowListExpectSuccess,
   createCollectionExpectSuccess,
   createItemExpectFailure,
   createItemExpectSuccess,
   destroyCollectionExpectSuccess,
-  enableWhiteListExpectSuccess,
+  enableAllowListExpectSuccess,
   findNotExistingCollection,
   setMintPermissionExpectFailure,
   setMintPermissionExpectSuccess,
@@ -30,12 +30,12 @@
     });
   });
 
-  it('ensure white-listed non-privileged address can mint tokens', async () => {
+  it('ensure allow-listed non-privileged address can mint tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
-      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, collectionId, bob.address);
 
       await createItemExpectSuccess(bob, collectionId, 'NFT');
     });
@@ -88,7 +88,7 @@
 
   it('fails when not collection owner tries to set mint status', async () => {
     const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-    await enableWhiteListExpectSuccess(alice, collectionId);
+    await enableAllowListExpectSuccess(alice, collectionId);
     await setMintPermissionExpectFailure(bob, collectionId, true);
   });
 
@@ -100,10 +100,10 @@
     });
   });
 
-  it('ensure non-white-listed non-privileged address can\'t mint tokens', async () => {
+  it('ensure non-allow-listed non-privileged address can\'t mint tokens', async () => {
     await usingApi(async () => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await setMintPermissionExpectSuccess(alice, collectionId, true);
 
       await createItemExpectFailure(bob, collectionId, 'NFT');
modifiedtests/src/setPublicAccessMode.test.tsdiffbeforeafterboth
--- a/tests/src/setPublicAccessMode.test.ts
+++ b/tests/src/setPublicAccessMode.test.ts
@@ -11,12 +11,12 @@
 import privateKey from './substrate/privateKey';
 import usingApi, {submitTransactionExpectFailAsync} from './substrate/substrate-api';
 import {
-  addToWhiteListExpectSuccess,
+  addToAllowListExpectSuccess,
   createCollectionExpectSuccess,
   createItemExpectSuccess,
   destroyCollectionExpectSuccess,
   enablePublicMintingExpectSuccess,
-  enableWhiteListExpectSuccess,
+  enableAllowListExpectSuccess,
   normalizeAccountId,
   addCollectionAdminExpectSuccess,
 } from './util/helpers';
@@ -35,20 +35,20 @@
     });
   });
 
-  it('Run extrinsic with collection id parameters, set the whitelist mode for the collection', async () => {
+  it('Run extrinsic with collection id parameters, set the allowlist mode for the collection', async () => {
     await usingApi(async () => {
       const collectionId: number = await createCollectionExpectSuccess();
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await enablePublicMintingExpectSuccess(alice, collectionId);
-      await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+      await addToAllowListExpectSuccess(alice, collectionId, bob.address);
       await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
     });
   });
 
-  it('Whitelisted collection limits', async () => {
+  it('Allowlisted collection limits', async () => {
     await usingApi(async (api: ApiPromise) => {
       const collectionId = await createCollectionExpectSuccess();
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
       await enablePublicMintingExpectSuccess(alice, collectionId);
       const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(bob.address), 'NFT');
       await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
@@ -61,7 +61,7 @@
     await usingApi(async (api: ApiPromise) => {
       // tslint:disable-next-line: radix
       const collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
-      const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
+      const tx = api.tx.nft.setPublicAccessMode(collectionId, 'AllowList');
       await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
     });
   });
@@ -71,7 +71,7 @@
       // tslint:disable-next-line: no-bitwise
       const collectionId = await createCollectionExpectSuccess();
       await destroyCollectionExpectSuccess(collectionId);
-      const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
+      const tx = api.tx.nft.setPublicAccessMode(collectionId, 'AllowList');
       await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
     });
   });
@@ -79,8 +79,8 @@
   it('Re-set the list mode already set in quantity', async () => {
     await usingApi(async () => {
       const collectionId: number = await createCollectionExpectSuccess();
-      await enableWhiteListExpectSuccess(alice, collectionId);
-      await enableWhiteListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
+      await enableAllowListExpectSuccess(alice, collectionId);
     });
   });
 
@@ -88,7 +88,7 @@
     await usingApi(async (api: ApiPromise) => {
       // tslint:disable-next-line: no-bitwise
       const collectionId = await createCollectionExpectSuccess();
-      const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
+      const tx = api.tx.nft.setPublicAccessMode(collectionId, 'AllowList');
       await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
     });
   });
@@ -106,7 +106,7 @@
       // tslint:disable-next-line: no-bitwise
       const collectionId = await createCollectionExpectSuccess();
       await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-      const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
+      const tx = api.tx.nft.setPublicAccessMode(collectionId, 'AllowList');
       await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
     });
   });
addedtests/src/toggleContractAllowList.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/toggleContractAllowList.test.ts
@@ -0,0 +1,156 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
+import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import privateKey from './substrate/privateKey';
+import {
+  deployFlipper,
+  getFlipValue,
+} from './util/contracthelpers';
+import {
+  getGenericResult,
+} from './util/helpers';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+const value = 0;
+const gasLimit = 3000n * 1000000n;
+
+describe.skip('Integration Test toggleContractAllowList', () => {
+
+  it('Enable allow list contract mode', async () => {
+    await usingApi(async api => {
+      const [contract, deployer] = await deployFlipper(api);
+
+      const enabledBefore = (await api.query.nft.contractAllowListEnabled(contract.address)).toJSON();
+      const enableAllowListTx = api.tx.nft.toggleContractAllowList(contract.address, true);
+      const enableEvents = await submitTransactionAsync(deployer, enableAllowListTx);
+      const enabled = (await api.query.nft.contractAllowListEnabled(contract.address)).toJSON();
+
+      expect(getGenericResult(enableEvents).success).to.be.true;
+      expect(enabledBefore).to.be.false;
+      expect(enabled).to.be.true;
+    });
+  });
+
+  it('Only allowlisted account can call contract', async () => {
+    await usingApi(async api => {
+      const bob = privateKey('//Bob');
+
+      const [contract, deployer] = await deployFlipper(api);
+
+      let flipValueBefore = await getFlipValue(contract, deployer);
+      const flip = contract.tx.flip(value, gasLimit);
+      await submitTransactionAsync(bob, flip);
+      const flipValueAfter = await getFlipValue(contract,deployer);
+      expect(flipValueAfter).to.be.eq(!flipValueBefore, 'Anyone can call new contract.');
+
+      const deployerCanFlip = async () => {
+        const flipValueBefore = await getFlipValue(contract, deployer);
+        const deployerFlip = contract.tx.flip(value, gasLimit);
+        await submitTransactionAsync(deployer, deployerFlip);
+        const aliceFlip1Response = await getFlipValue(contract, deployer);
+        expect(aliceFlip1Response).to.be.eq(!flipValueBefore, 'Deployer always can flip.');
+      };
+      await deployerCanFlip();
+
+      flipValueBefore = await getFlipValue(contract, deployer);
+      const enableAllowListTx = api.tx.nft.toggleContractAllowList(contract.address, true);
+      await submitTransactionAsync(deployer, enableAllowListTx);
+      const flipWithEnabledAllowList = contract.tx.flip(value, gasLimit);
+      await expect(submitTransactionExpectFailAsync(bob, flipWithEnabledAllowList)).to.be.rejected;
+      const flipValueAfterEnableAllowList = await getFlipValue(contract, deployer);
+      expect(flipValueAfterEnableAllowList).to.be.eq(flipValueBefore, 'Enabling allowlist doesn\'t make it possible to call contract for everyone.');
+
+      await deployerCanFlip();
+
+      flipValueBefore = await getFlipValue(contract, deployer);
+      const addBobToAllowListTx = api.tx.nft.addToContractAllowList(contract.address, bob.address);
+      await submitTransactionAsync(deployer, addBobToAllowListTx);
+      const flipWithAllowlistedBob = contract.tx.flip(value, gasLimit);
+      await submitTransactionAsync(bob, flipWithAllowlistedBob);
+      const flipAfterAllowListed = await getFlipValue(contract,deployer);
+      expect(flipAfterAllowListed).to.be.eq(!flipValueBefore, 'Bob was allowlisted, now he can flip.');
+
+      await deployerCanFlip();
+
+      flipValueBefore = await getFlipValue(contract, deployer);
+      const removeBobFromAllowListTx = api.tx.nft.removeFromContractAllowList(contract.address, bob.address);
+      await submitTransactionAsync(deployer, removeBobFromAllowListTx);
+      const bobRemoved = contract.tx.flip(value, gasLimit);
+      await expect(submitTransactionExpectFailAsync(bob, bobRemoved)).to.be.rejected;
+      const afterBobRemoved = await getFlipValue(contract, deployer);
+      expect(afterBobRemoved).to.be.eq(flipValueBefore, 'Bob can\'t call contract, now when he is removeed from allow list.');
+
+      await deployerCanFlip();
+
+      flipValueBefore = await getFlipValue(contract, deployer);
+      const disableAllowListTx = api.tx.nft.toggleContractAllowList(contract.address, false);
+      await submitTransactionAsync(deployer, disableAllowListTx);
+      const allowListDisabledFlip = contract.tx.flip(value, gasLimit);
+      await submitTransactionAsync(bob, allowListDisabledFlip);
+      const afterAllowListDisabled = await getFlipValue(contract,deployer);
+      expect(afterAllowListDisabled).to.be.eq(!flipValueBefore, 'Anyone can call contract with disabled allowlist.');
+
+    });
+  });
+
+  it('Enabling allow list repeatedly should not produce errors', async () => {
+    await usingApi(async api => {
+      const [contract, deployer] = await deployFlipper(api);
+
+      const enabledBefore = (await api.query.nft.contractAllowListEnabled(contract.address)).toJSON();
+      const enableAllowListTx = api.tx.nft.toggleContractAllowList(contract.address, true);
+      const enableEvents = await submitTransactionAsync(deployer, enableAllowListTx);
+      const enabled = (await api.query.nft.contractAllowListEnabled(contract.address)).toJSON();
+      const enableAgainEvents = await submitTransactionAsync(deployer, enableAllowListTx);
+      const enabledAgain = (await api.query.nft.contractAllowListEnabled(contract.address)).toJSON();
+
+      expect(getGenericResult(enableEvents).success).to.be.true;
+      expect(enabledBefore).to.be.false;
+      expect(enabled).to.be.true;
+      expect(getGenericResult(enableAgainEvents).success).to.be.true;
+      expect(enabledAgain).to.be.true;
+    });
+  });
+
+});
+
+describe.skip('Negative Integration Test toggleContractAllowList', () => {
+
+  it('Enable allow list for a non-contract', async () => {
+    await usingApi(async api => {
+      const alice = privateKey('//Alice');
+      const bobGuineaPig = privateKey('//Bob');
+
+      const enabledBefore = (await api.query.nft.contractAllowListEnabled(bobGuineaPig.address)).toJSON();
+      const enableAllowListTx = api.tx.nft.toggleContractAllowList(bobGuineaPig.address, true);
+      await expect(submitTransactionExpectFailAsync(alice, enableAllowListTx)).to.be.rejected;
+      const enabled = (await api.query.nft.contractAllowListEnabled(bobGuineaPig.address)).toJSON();
+
+      expect(enabledBefore).to.be.false;
+      expect(enabled).to.be.false;
+    });
+  });
+
+  it('Enable allow list using a non-owner address', async () => {
+    await usingApi(async api => {
+      const bob = privateKey('//Bob');
+      const [contract] = await deployFlipper(api);
+
+      const enabledBefore = (await api.query.nft.contractAllowListEnabled(contract.address)).toJSON();
+      const enableAllowListTx = api.tx.nft.toggleContractAllowList(contract.address, true);
+      await expect(submitTransactionExpectFailAsync(bob, enableAllowListTx)).to.be.rejected;
+      const enabled = (await api.query.nft.contractAllowListEnabled(contract.address)).toJSON();
+
+      expect(enabledBefore).to.be.false;
+      expect(enabled).to.be.false;
+    });
+  });
+
+});
deletedtests/src/toggleContractWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/toggleContractWhiteList.test.ts
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-import chai from 'chai';
-import chaiAsPromised from 'chai-as-promised';
-import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
-import privateKey from './substrate/privateKey';
-import {
-  deployFlipper,
-  getFlipValue,
-} from './util/contracthelpers';
-import {
-  getGenericResult,
-} from './util/helpers';
-
-chai.use(chaiAsPromised);
-const expect = chai.expect;
-
-const value = 0;
-const gasLimit = 3000n * 1000000n;
-
-describe.skip('Integration Test toggleContractWhiteList', () => {
-
-  it('Enable white list contract mode', async () => {
-    await usingApi(async api => {
-      const [contract, deployer] = await deployFlipper(api);
-
-      const enabledBefore = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();
-      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);
-      const enableEvents = await submitTransactionAsync(deployer, enableWhiteListTx);
-      const enabled = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();
-
-      expect(getGenericResult(enableEvents).success).to.be.true;
-      expect(enabledBefore).to.be.false;
-      expect(enabled).to.be.true;
-    });
-  });
-
-  it('Only whitelisted account can call contract', async () => {
-    await usingApi(async api => {
-      const bob = privateKey('//Bob');
-
-      const [contract, deployer] = await deployFlipper(api);
-
-      let flipValueBefore = await getFlipValue(contract, deployer);
-      const flip = contract.tx.flip(value, gasLimit);
-      await submitTransactionAsync(bob, flip);
-      const flipValueAfter = await getFlipValue(contract,deployer);
-      expect(flipValueAfter).to.be.eq(!flipValueBefore, 'Anyone can call new contract.');
-
-      const deployerCanFlip = async () => {
-        const flipValueBefore = await getFlipValue(contract, deployer);
-        const deployerFlip = contract.tx.flip(value, gasLimit);
-        await submitTransactionAsync(deployer, deployerFlip);
-        const aliceFlip1Response = await getFlipValue(contract, deployer);
-        expect(aliceFlip1Response).to.be.eq(!flipValueBefore, 'Deployer always can flip.');
-      };
-      await deployerCanFlip();
-
-      flipValueBefore = await getFlipValue(contract, deployer);
-      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);
-      await submitTransactionAsync(deployer, enableWhiteListTx);
-      const flipWithEnabledWhiteList = contract.tx.flip(value, gasLimit);
-      await expect(submitTransactionExpectFailAsync(bob, flipWithEnabledWhiteList)).to.be.rejected;
-      const flipValueAfterEnableWhiteList = await getFlipValue(contract, deployer);
-      expect(flipValueAfterEnableWhiteList).to.be.eq(flipValueBefore, 'Enabling whitelist doesn\'t make it possible to call contract for everyone.');
-
-      await deployerCanFlip();
-
-      flipValueBefore = await getFlipValue(contract, deployer);
-      const addBobToWhiteListTx = api.tx.nft.addToContractWhiteList(contract.address, bob.address);
-      await submitTransactionAsync(deployer, addBobToWhiteListTx);
-      const flipWithWhitelistedBob = contract.tx.flip(value, gasLimit);
-      await submitTransactionAsync(bob, flipWithWhitelistedBob);
-      const flipAfterWhiteListed = await getFlipValue(contract,deployer);
-      expect(flipAfterWhiteListed).to.be.eq(!flipValueBefore, 'Bob was whitelisted, now he can flip.');
-
-      await deployerCanFlip();
-
-      flipValueBefore = await getFlipValue(contract, deployer);
-      const removeBobFromWhiteListTx = api.tx.nft.removeFromContractWhiteList(contract.address, bob.address);
-      await submitTransactionAsync(deployer, removeBobFromWhiteListTx);
-      const bobRemoved = contract.tx.flip(value, gasLimit);
-      await expect(submitTransactionExpectFailAsync(bob, bobRemoved)).to.be.rejected;
-      const afterBobRemoved = await getFlipValue(contract, deployer);
-      expect(afterBobRemoved).to.be.eq(flipValueBefore, 'Bob can\'t call contract, now when he is removeed from white list.');
-
-      await deployerCanFlip();
-
-      flipValueBefore = await getFlipValue(contract, deployer);
-      const disableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, false);
-      await submitTransactionAsync(deployer, disableWhiteListTx);
-      const whiteListDisabledFlip = contract.tx.flip(value, gasLimit);
-      await submitTransactionAsync(bob, whiteListDisabledFlip);
-      const afterWhiteListDisabled = await getFlipValue(contract,deployer);
-      expect(afterWhiteListDisabled).to.be.eq(!flipValueBefore, 'Anyone can call contract with disabled whitelist.');
-
-    });
-  });
-
-  it('Enabling white list repeatedly should not produce errors', async () => {
-    await usingApi(async api => {
-      const [contract, deployer] = await deployFlipper(api);
-
-      const enabledBefore = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();
-      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);
-      const enableEvents = await submitTransactionAsync(deployer, enableWhiteListTx);
-      const enabled = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();
-      const enableAgainEvents = await submitTransactionAsync(deployer, enableWhiteListTx);
-      const enabledAgain = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();
-
-      expect(getGenericResult(enableEvents).success).to.be.true;
-      expect(enabledBefore).to.be.false;
-      expect(enabled).to.be.true;
-      expect(getGenericResult(enableAgainEvents).success).to.be.true;
-      expect(enabledAgain).to.be.true;
-    });
-  });
-
-});
-
-describe.skip('Negative Integration Test toggleContractWhiteList', () => {
-
-  it('Enable white list for a non-contract', async () => {
-    await usingApi(async api => {
-      const alice = privateKey('//Alice');
-      const bobGuineaPig = privateKey('//Bob');
-
-      const enabledBefore = (await api.query.nft.contractWhiteListEnabled(bobGuineaPig.address)).toJSON();
-      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(bobGuineaPig.address, true);
-      await expect(submitTransactionExpectFailAsync(alice, enableWhiteListTx)).to.be.rejected;
-      const enabled = (await api.query.nft.contractWhiteListEnabled(bobGuineaPig.address)).toJSON();
-
-      expect(enabledBefore).to.be.false;
-      expect(enabled).to.be.false;
-    });
-  });
-
-  it('Enable white list using a non-owner address', async () => {
-    await usingApi(async api => {
-      const bob = privateKey('//Bob');
-      const [contract] = await deployFlipper(api);
-
-      const enabledBefore = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();
-      const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);
-      await expect(submitTransactionExpectFailAsync(bob, enableWhiteListTx)).to.be.rejected;
-      const enabled = (await api.query.nft.contractWhiteListEnabled(contract.address)).toJSON();
-
-      expect(enabledBefore).to.be.false;
-      expect(enabled).to.be.false;
-    });
-  });
-
-});
modifiedtests/src/transfer_contract/metadata.jsondiffbeforeafterboth
--- a/tests/src/transfer_contract/metadata.json
+++ b/tests/src/transfer_contract/metadata.json
@@ -323,7 +323,7 @@
             }
           },
           {
-            "name": "whitelisted",
+            "name": "allowlisted",
             "type": {
               "displayName": [
                 "bool"
@@ -335,7 +335,7 @@
         "docs": [],
         "mutates": true,
         "name": [
-          "toggle_white_list"
+          "toggle_allow_list"
         ],
         "payable": false,
         "returnType": null,
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -597,9 +597,9 @@
   });
 }
 
-export async function toggleContractWhitelistExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, value = true) {
+export async function toggleContractAllowlistExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, value = true) {
   await usingApi(async (api) => {
-    const tx = api.tx.nft.toggleContractWhiteList(contractAddress, value);
+    const tx = api.tx.nft.toggleContractAllowList(contractAddress, value);
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
 
@@ -607,17 +607,17 @@
   });
 }
 
-export async function isWhitelistedInContract(contractAddress: AccountId | string, user: string) {
-  let whitelisted = false;
+export async function isAllowlistedInContract(contractAddress: AccountId | string, user: string) {
+  let allowlisted = false;
   await usingApi(async (api) => {
-    whitelisted = (await api.query.nft.contractWhiteList(contractAddress, user)).toJSON() as boolean;
+    allowlisted = (await api.query.nft.contractAllowList(contractAddress, user)).toJSON() as boolean;
   });
-  return whitelisted;
+  return allowlisted;
 }
 
-export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
+export async function addToContractAllowListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
   await usingApi(async (api) => {
-    const tx = api.tx.nft.addToContractWhiteList(contractAddress.toString(), user.toString());
+    const tx = api.tx.nft.addToContractAllowList(contractAddress.toString(), user.toString());
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
 
@@ -625,9 +625,9 @@
   });
 }
 
-export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
+export async function removeFromContractAllowListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
   await usingApi(async (api) => {
-    const tx = api.tx.nft.removeFromContractWhiteList(contractAddress.toString(), user.toString());
+    const tx = api.tx.nft.removeFromContractAllowList(contractAddress.toString(), user.toString());
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
 
@@ -635,9 +635,9 @@
   });
 }
 
-export async function removeFromContractWhiteListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
+export async function removeFromContractAllowListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
   await usingApi(async (api) => {
-    const tx = api.tx.nft.removeFromContractWhiteList(contractAddress.toString(), user.toString());
+    const tx = api.tx.nft.removeFromContractAllowList(contractAddress.toString(), user.toString());
     const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
     const result = getGenericResult(events);
 
@@ -1048,7 +1048,7 @@
 
 export async function setPublicAccessModeExpectSuccess(
   sender: IKeyringPair, collectionId: number,
-  accessMode: 'Normal' | 'WhiteList',
+  accessMode: 'Normal' | 'AllowList',
 ) {
   await usingApi(async (api) => {
 
@@ -1069,7 +1069,7 @@
 
 export async function setPublicAccessModeExpectFail(
   sender: IKeyringPair, collectionId: number,
-  accessMode: 'Normal' | 'WhiteList',
+  accessMode: 'Normal' | 'AllowList',
 ) {
   await usingApi(async (api) => {
 
@@ -1084,15 +1084,15 @@
   });
 }
 
-export async function enableWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number) {
-  await setPublicAccessModeExpectSuccess(sender, collectionId, 'WhiteList');
+export async function enableAllowListExpectSuccess(sender: IKeyringPair, collectionId: number) {
+  await setPublicAccessModeExpectSuccess(sender, collectionId, 'AllowList');
 }
 
-export async function enableWhiteListExpectFail(sender: IKeyringPair, collectionId: number) {
-  await setPublicAccessModeExpectFail(sender, collectionId, 'WhiteList');
+export async function enableAllowListExpectFail(sender: IKeyringPair, collectionId: number) {
+  await setPublicAccessModeExpectFail(sender, collectionId, 'AllowList');
 }
 
-export async function disableWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number) {
+export async function disableAllowListExpectSuccess(sender: IKeyringPair, collectionId: number) {
   await setPublicAccessModeExpectSuccess(sender, collectionId, 'Normal');
 }
 
@@ -1138,46 +1138,46 @@
   });
 }
 
-export async function isWhitelisted(collectionId: number, address: string | CrossAccountId) {
+export async function isAllowlisted(collectionId: number, address: string | CrossAccountId) {
   return await usingApi(async (api) => {
     return (await api.query.common.allowlist(collectionId, normalizeAccountId(address))).toJSON();
   });
 }
 
-export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId | CrossAccountId) {
+export async function addToAllowListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId | CrossAccountId) {
   await usingApi(async (api) => {
-    expect(await isWhitelisted(collectionId, normalizeAccountId(address))).to.be.false;
+    expect(await isAllowlisted(collectionId, normalizeAccountId(address))).to.be.false;
 
     // Run the transaction
-    const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address));
+    const tx = api.tx.nft.addToAllowList(collectionId, normalizeAccountId(address));
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
     expect(result.success).to.be.true;
 
-    expect(await isWhitelisted(collectionId, normalizeAccountId(address))).to.be.true;
+    expect(await isAllowlisted(collectionId, normalizeAccountId(address))).to.be.true;
   });
 }
 
-export async function addToWhiteListAgainExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId) {
+export async function addToAllowListAgainExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId) {
   await usingApi(async (api) => {
 
-    expect(await isWhitelisted(collectionId, normalizeAccountId(address))).to.be.true;
+    expect(await isAllowlisted(collectionId, normalizeAccountId(address))).to.be.true;
 
     // Run the transaction
-    const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address));
+    const tx = api.tx.nft.addToAllowList(collectionId, normalizeAccountId(address));
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
     expect(result.success).to.be.true;
 
-    expect(await isWhitelisted(collectionId, normalizeAccountId(address))).to.be.true;
+    expect(await isAllowlisted(collectionId, normalizeAccountId(address))).to.be.true;
   });
 }
 
-export async function addToWhiteListExpectFail(sender: IKeyringPair, collectionId: number, address: string | AccountId) {
+export async function addToAllowListExpectFail(sender: IKeyringPair, collectionId: number, address: string | AccountId) {
   await usingApi(async (api) => {
 
     // Run the transaction
-    const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address));
+    const tx = api.tx.nft.addToAllowList(collectionId, normalizeAccountId(address));
     const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
     const result = getGenericResult(events);
 
@@ -1187,10 +1187,10 @@
   });
 }
 
-export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: CrossAccountId) {
+export async function removeFromAllowListExpectSuccess(sender: IKeyringPair, collectionId: number, address: CrossAccountId) {
   await usingApi(async (api) => {
     // Run the transaction
-    const tx = api.tx.nft.removeFromWhiteList(collectionId, normalizeAccountId(address));
+    const tx = api.tx.nft.removeFromAllowList(collectionId, normalizeAccountId(address));
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
 
@@ -1200,10 +1200,10 @@
   });
 }
 
-export async function removeFromWhiteListExpectFailure(sender: IKeyringPair, collectionId: number, address: CrossAccountId) {
+export async function removeFromAllowListExpectFailure(sender: IKeyringPair, collectionId: number, address: CrossAccountId) {
   await usingApi(async (api) => {
     // Run the transaction
-    const tx = api.tx.nft.removeFromWhiteList(collectionId, normalizeAccountId(address));
+    const tx = api.tx.nft.removeFromAllowList(collectionId, normalizeAccountId(address));
     const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
     const result = getGenericResult(events);
 
deletedtests/src/whiteLists.test.tsdiffbeforeafterboth
--- a/tests/src/whiteLists.test.ts
+++ /dev/null
@@ -1,304 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-import {IKeyringPair} from '@polkadot/types/types';
-import chai from 'chai';
-import chaiAsPromised from 'chai-as-promised';
-import privateKey from './substrate/privateKey';
-import usingApi, {submitTransactionExpectFailAsync} from './substrate/substrate-api';
-import {
-  addToWhiteListExpectSuccess,
-  createCollectionExpectSuccess,
-  createItemExpectSuccess,
-  destroyCollectionExpectSuccess,
-  enableWhiteListExpectSuccess,
-  normalizeAccountId,
-  addCollectionAdminExpectSuccess,
-  addToWhiteListExpectFail,
-  removeFromWhiteListExpectSuccess,
-  removeFromWhiteListExpectFailure,
-  addToWhiteListAgainExpectSuccess,
-  transferExpectFailure,
-  approveExpectSuccess,
-  approveExpectFail,
-  transferExpectSuccess,
-  transferFromExpectSuccess,
-  setMintPermissionExpectSuccess,
-  createItemExpectFailure,
-} from './util/helpers';
-
-chai.use(chaiAsPromised);
-const expect = chai.expect;
-
-let alice: IKeyringPair;
-let bob: IKeyringPair;
-let charlie: IKeyringPair;
-
-describe('Integration Test ext. White list tests', () => {
-
-  before(async () => {
-    await usingApi(async () => {
-      alice = privateKey('//Alice');
-      bob = privateKey('//Bob');
-      charlie = privateKey('//Charlie');
-    });
-  });
-
-  it('Owner can add address to white list', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-  });
-
-  it('Admin can add address to white list', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-    await addToWhiteListExpectSuccess(bob, collectionId, charlie.address);
-  });
-
-  it('Non-privileged user cannot add address to white list', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectFail(bob, collectionId, charlie.address);
-  });
-
-  it('Nobody can add address to white list of non-existing collection', async () => {
-    const collectionId = (1<<32) - 1;
-    await addToWhiteListExpectFail(alice, collectionId, bob.address);
-  });
-
-  it('Nobody can add address to white list of destroyed collection', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await destroyCollectionExpectSuccess(collectionId, '//Alice');
-    await addToWhiteListExpectFail(alice, collectionId, bob.address);
-  });
-
-  it('If address is already added to white list, nothing happens', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-    await addToWhiteListAgainExpectSuccess(alice, collectionId, bob.address);
-  });
-
-  it('Owner can remove address from white list', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-    await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(bob));
-  });
-
-  it('Admin can remove address from white list', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await removeFromWhiteListExpectSuccess(bob, collectionId, normalizeAccountId(charlie));
-  });
-
-  it('Non-privileged user cannot remove address from white list', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await removeFromWhiteListExpectFailure(bob, collectionId, normalizeAccountId(charlie));
-  });
-
-  it('Nobody can remove address from white list of non-existing collection', async () => {
-    const collectionId = (1<<32) - 1;
-    await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(charlie));
-  });
-
-  it('Nobody can remove address from white list of deleted collection', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await destroyCollectionExpectSuccess(collectionId, '//Alice');
-    await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(charlie));
-  });
-
-  it('If address is already removed from white list, nothing happens', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(charlie));
-    await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(charlie));
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can’t be transferred from a non-whitelisted address with transfer or transferFrom. Test1', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-
-    await transferExpectFailure(
-      collectionId,
-      itemId,
-      alice,
-      charlie,
-      1,
-    );
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can’t be transferred from a non-whitelisted address with transfer or transferFrom. Test2', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
-    await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(alice));
-
-    await transferExpectFailure(
-      collectionId,
-      itemId,
-      alice,
-      charlie,
-      1,
-    );
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can’t be transferred to a non-whitelisted address with transfer or transferFrom. Test1', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
-
-    await transferExpectFailure(
-      collectionId,
-      itemId,
-      alice,
-      charlie,
-      1,
-    );
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can’t be transferred to a non-whitelisted address with transfer or transferFrom. Test2', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
-    await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(alice));
-
-    await transferExpectFailure(
-      collectionId,
-      itemId,
-      alice,
-      charlie,
-      1,
-    );
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can’t be destroyed by a non-whitelisted address (even if it owned them before enabling WhiteList mode)', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-
-    await usingApi(async (api) => {
-      const tx = api.tx.nft.burnItem(collectionId, itemId, /*normalizeAccountId(Alice.address),*/ 11);
-      const badTransaction = async function () {
-        await submitTransactionExpectFailAsync(alice, tx);
-      };
-      await expect(badTransaction()).to.be.rejected;
-    });
-  });
-
-  it('If Public Access mode is set to WhiteList, token transfers can’t be Approved by a non-whitelisted address (see Approve method)', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await approveExpectFail(collectionId, itemId, alice, bob);
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can be transferred to a whitelisted address with transfer.', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await transferExpectSuccess(collectionId, itemId, alice, charlie, 1, 'NFT');
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can be transferred to a whitelisted address with transferFrom.', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
-    await transferFromExpectSuccess(collectionId, itemId, alice, alice, charlie, 1, 'NFT');
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can be transferred from a whitelisted address with transfer', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await transferExpectSuccess(collectionId, itemId, alice, charlie, 1, 'NFT');
-  });
-
-  it('If Public Access mode is set to WhiteList, tokens can be transferred from a whitelisted address with transferFrom', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
-    await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
-    await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
-    await transferFromExpectSuccess(collectionId, itemId, alice, alice, charlie, 1, 'NFT');
-  });
-
-  it('If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by owner', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await setMintPermissionExpectSuccess(alice, collectionId, false);
-    await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-  });
-
-  it('If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by admin', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await setMintPermissionExpectSuccess(alice, collectionId, false);
-    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-    await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
-  });
-
-  it('If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and white-listed address', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await setMintPermissionExpectSuccess(alice, collectionId, false);
-    await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-    await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
-  });
-
-  it('If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-white listed address', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await setMintPermissionExpectSuccess(alice, collectionId, false);
-    await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
-  });
-
-  it('If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by owner', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await setMintPermissionExpectSuccess(alice, collectionId, true);
-    await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
-  });
-
-  it('If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by admin', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await setMintPermissionExpectSuccess(alice, collectionId, true);
-    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-    await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
-  });
-
-  it('If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-white listed address', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await setMintPermissionExpectSuccess(alice, collectionId, true);
-    await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
-  });
-
-  it('If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by non-privileged and white listed address', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await enableWhiteListExpectSuccess(alice, collectionId);
-    await setMintPermissionExpectSuccess(alice, collectionId, true);
-    await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
-    await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
-  });
-});