git.delta.rocks / unique-network / refs/commits / 026ec882f8f6

difftreelog

delete `EvmToSustrate` folder

PraetorP2022-11-11parent: #ee86073.patch.diff
in: master

10 files changed

deletedtests/src/eth/evmToSubstrate/ABI/EvmToSubstrate.jsondiffbeforeafterboth

no changes

deletedtests/src/eth/evmToSubstrate/ABIGEN/EvmToSubstrate.tsdiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/ABIGEN/EvmToSubstrate.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Autogenerated file. Do not edit manually. */
-/* tslint:disable */
-/* eslint-disable */
-
-import type BN from "bn.js";
-import type { ContractOptions } from "web3-eth-contract";
-import type { EventLog } from "web3-core";
-import type { EventEmitter } from "events";
-import type {
-  Callback,
-  PayableTransactionObject,
-  NonPayableTransactionObject,
-  BlockType,
-  ContractEventLog,
-  BaseContract,
-} from "./types";
-
-export interface EventOptions {
-  filter?: object;
-  fromBlock?: BlockType;
-  topics?: string[];
-}
-
-export type MintToSub = ContractEventLog<{
-  _toEth: string;
-  _toSub: string;
-  _collection: string;
-  _tokenId: string;
-  0: string;
-  1: string;
-  2: string;
-  3: string;
-}>;
-
-export interface EvmToSubstrate extends BaseContract {
-  constructor(
-    jsonInterface: any[],
-    address?: string,
-    options?: ContractOptions
-  ): EvmToSubstrate;
-  clone(): EvmToSubstrate;
-  methods: {
-    mintToSubstrate(
-      _collection: string,
-      _substrateReceiver: number | string | BN
-    ): NonPayableTransactionObject<void>;
-
-    mintToSubstrateWithProperty(
-      _collection: string,
-      _substrateReceiver: number | string | BN,
-      properties: [string, string | number[]][]
-    ): NonPayableTransactionObject<void>;
-  };
-  events: {
-    MintToSub(cb?: Callback<MintToSub>): EventEmitter;
-    MintToSub(options?: EventOptions, cb?: Callback<MintToSub>): EventEmitter;
-
-    allEvents(options?: EventOptions, cb?: Callback<EventLog>): EventEmitter;
-  };
-
-  once(event: "MintToSub", cb: Callback<MintToSub>): void;
-  once(
-    event: "MintToSub",
-    options: EventOptions,
-    cb: Callback<MintToSub>
-  ): void;
-}
deletedtests/src/eth/evmToSubstrate/ABIGEN/index.tsdiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/ABIGEN/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Autogenerated file. Do not edit manually. */
-/* tslint:disable */
-/* eslint-disable */
-export type { EvmToSubstrate } from "./EvmToSubstrate";
deletedtests/src/eth/evmToSubstrate/ABIGEN/types.tsdiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/ABIGEN/types.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Autogenerated file. Do not edit manually. */
-/* tslint:disable */
-/* eslint-disable */
-import type BN from "bn.js";
-import type { EventEmitter } from "events";
-import type { EventLog, PromiEvent, TransactionReceipt } from "web3-core/types";
-import type { Contract } from "web3-eth-contract";
-
-export interface EstimateGasOptions {
-  from?: string;
-  gas?: number;
-  value?: number | string | BN;
-}
-
-export interface EventOptions {
-  filter?: object;
-  fromBlock?: BlockType;
-  topics?: string[];
-}
-
-export type Callback<T> = (error: Error, result: T) => void;
-export interface ContractEventLog<T> extends EventLog {
-  returnValues: T;
-}
-export interface ContractEventEmitter<T> extends EventEmitter {
-  on(event: "connected", listener: (subscriptionId: string) => void): this;
-  on(
-    event: "data" | "changed",
-    listener: (event: ContractEventLog<T>) => void
-  ): this;
-  on(event: "error", listener: (error: Error) => void): this;
-}
-
-export interface NonPayableTx {
-  nonce?: string | number | BN;
-  chainId?: string | number | BN;
-  from?: string;
-  to?: string;
-  data?: string;
-  gas?: string | number | BN;
-  maxPriorityFeePerGas?: string | number | BN;
-  maxFeePerGas?: string | number | BN;
-  gasPrice?: string | number | BN;
-}
-
-export interface PayableTx extends NonPayableTx {
-  value?: string | number | BN;
-}
-
-export interface NonPayableTransactionObject<T> {
-  arguments: any[];
-  call(tx?: NonPayableTx, block?: BlockType): Promise<T>;
-  send(tx?: NonPayableTx): PromiEvent<TransactionReceipt>;
-  estimateGas(tx?: NonPayableTx): Promise<number>;
-  encodeABI(): string;
-}
-
-export interface PayableTransactionObject<T> {
-  arguments: any[];
-  call(tx?: PayableTx, block?: BlockType): Promise<T>;
-  send(tx?: PayableTx): PromiEvent<TransactionReceipt>;
-  estimateGas(tx?: PayableTx): Promise<number>;
-  encodeABI(): string;
-}
-
-export type BlockType =
-  | "latest"
-  | "pending"
-  | "genesis"
-  | "earliest"
-  | number
-  | BN;
-export type BaseContract = Omit<Contract, "clone" | "once">;
deletedtests/src/eth/evmToSubstrate/EvmToSubstrateHelper.soldiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/EvmToSubstrateHelper.sol
+++ /dev/null
@@ -1,201 +0,0 @@
-// SPDX-License-Identifier:  Apache License
-pragma solidity >=0.8.0;
-import {CollectionHelpers} from "../api/CollectionHelpers.sol";
-import {ContractHelpers} from "../api/ContractHelpers.sol";
-import {UniqueRefungibleToken} from "../api/UniqueRefungibleToken.sol";
-import {UniqueRefungible, Collection, EthCrossAccount as RftCrossAccountId, Tuple20 as RftProperties} from "../api/UniqueRefungible.sol";
-import {UniqueNFT, EthCrossAccount as NftCrossAccountId, Tuple21 as NftProperty, TokenProperties} from "../api/UniqueNFT.sol";
-
-struct Property {
-	string key;
-	bytes value;
-}
-
-// interface Foo {
-// 	struct Tuple19 {
-// 		string field_0;
-// 		bytes field_1;
-// 	}
-
-// }
-
-contract EvmToSubstrate {
-	bytes32 constant REFUNGIBLE_COLLECTION_TYPE = keccak256(bytes("ReFungible"));
-	bytes32 constant NONFUNGIBLE_COLLECTION_TYPE = keccak256(bytes("NFT"));
-	// bytes32 collectionType;
-
-	// Collection commonContract;
-	// UniqueNFT nftCollection;
-	// UniqueRefungible rftCollection;
-
-	// function(address, uint256) external returns (bool) mintInvoke;
-	// function(address, address, uint256) external transferInvoke;
-
-	modifier checkRestrictions(address _collection) {
-		Collection commonContract = Collection(_collection);
-		require(commonContract.isOwnerOrAdmin(msg.sender), "Only collection admin/owner can call this method");
-
-		// bytes32 collectionType = keccak256(bytes(commonContract.uniqueCollectionType()));
-		// uint256 tokenId;
-
-		// if (collectionType == REFUNGIBLE_COLLECTION_TYPE) {
-		// 	UniqueRefungible rftCollection = UniqueRefungible(_collection);
-		// 	mintInvoke = rftCollection.mint;
-		// 	transferInvoke = rftCollection.transferFrom;
-		// 	tokenId = rftCollection.nextTokenId();
-		// } else if (collectionType == NONFUNGIBLE_COLLECTION_TYPE) {
-		// 	UniqueNFT nftCollection = UniqueNFT(_collection);
-		// 	mintInvoke = nftCollection.mint;
-		// 	transferInvoke = nftCollection.transferFrom;
-
-		// 	tokenId = nftCollection.nextTokenId();
-		// } else {
-		// 	revert("Wrong collection type. Works only with NFT or RFT");
-		// }
-
-		_;
-	}
-
-	/// @dev This emits when a mint to a substrate address has been made.
-	event MintToSub(address _toEth, uint256 _toSub, address _collection, uint256 _tokenId);
-
-	function mintToSubstrate(address _collection, uint256 _substrateReceiver) external checkRestrictions(_collection) {
-		// function(address, uint256) external returns (bool) mintInvoke;
-		// function(Tuple8 memory, Tuple8 memory, uint256) external transferInvoke;
-		Collection commonContract = Collection(_collection);
-		bytes32 collectionType = keccak256(bytes(commonContract.uniqueCollectionType()));
-		uint256 tokenId;
-
-		if (collectionType == REFUNGIBLE_COLLECTION_TYPE) {
-			UniqueRefungible rftCollection = UniqueRefungible(_collection);
-
-			tokenId = rftCollection.mint(address(this));
-
-			rftCollection.transferFromCross(
-				RftCrossAccountId(address(this), 0),
-				RftCrossAccountId(address(0), _substrateReceiver),
-				tokenId
-			);
-		} else if (collectionType == NONFUNGIBLE_COLLECTION_TYPE) {
-			UniqueNFT nftCollection = UniqueNFT(_collection);
-			// tokenId = nftCollection.nextTokenId();
-			tokenId = nftCollection.mint(address(this));
-
-			nftCollection.transferFromCross(
-				NftCrossAccountId(address(this), 0),
-				NftCrossAccountId(address(0), _substrateReceiver),
-				tokenId
-			);
-		} else {
-			revert("Wrong collection type. Works only with NFT or RFT");
-		}
-
-		// mintInvoke(address(this), tokenId);
-		// Tuple8 memory sender = Tuple8(address(this), 0);
-		// Tuple8 memory receiver = Tuple8(address(0), _substrateReceiver);
-
-		// transferInvoke(sender, receiver, tokenId);
-
-		emit MintToSub(address(0), _substrateReceiver, _collection, tokenId);
-	}
-
-	function mintToSubstrateWithProperty(
-		address _collection,
-		uint256 _substrateReceiver,
-		Property[] calldata properties
-	) external checkRestrictions(_collection) {
-		// function(address, uint256, string memory) external returns (bool) mintInvoke;
-		// function(address, address, uint256) external transferInvoke;
-		uint256 propertiesLength = properties.length;
-		require(propertiesLength > 0, "Properies is empty");
-
-		Collection commonContract = Collection(_collection);
-		bytes32 collectionType = keccak256(bytes(commonContract.uniqueCollectionType()));
-		uint256 tokenId;
-
-		if (collectionType == REFUNGIBLE_COLLECTION_TYPE) {
-			UniqueRefungible rftCollection = UniqueRefungible(_collection);
-			tokenId = rftCollection.nextTokenId();
-			rftCollection.mint(address(this));
-			for (uint256 i = 0; i < propertiesLength; ++i) {
-				rftCollection.setProperty(tokenId, properties[i].key, properties[i].value);
-			}
-			rftCollection.transferFromCross(
-				RftCrossAccountId(address(this), 0),
-				RftCrossAccountId(address(0), _substrateReceiver),
-				tokenId
-			);
-		} else if (collectionType == NONFUNGIBLE_COLLECTION_TYPE) {
-			UniqueNFT nftCollection = UniqueNFT(_collection);
-			// tokenId = nftCollection.nextTokenId();
-			tokenId = nftCollection.mint(address(this));
-			for (uint256 i = 0; i < propertiesLength; ++i) {
-				nftCollection.setProperty(tokenId, properties[i].key, properties[i].value);
-			}
-			nftCollection.transferFromCross(
-				NftCrossAccountId(address(this), 0),
-				NftCrossAccountId(address(0), _substrateReceiver),
-				tokenId
-			);
-		} else {
-			revert("Wrong collection type. Works only with NFT or RFT");
-		}
-
-		// transferInvoke(address(this), _gap, tokenId);
-
-		emit MintToSub(address(0), _substrateReceiver, _collection, tokenId);
-	}
-
-	function mintToSubstrateBulkProperty(
-		address _collection,
-		uint256 _substrateReceiver,
-		NftProperty[] calldata _properties
-	) external checkRestrictions(_collection) {
-		uint256 propertiesLength = _properties.length;
-		require(propertiesLength > 0, "Properies is empty");
-
-		Collection commonContract = Collection(_collection);
-		bytes32 collectionType = keccak256(bytes(commonContract.uniqueCollectionType()));
-		uint256 tokenId;
-
-		if (collectionType == REFUNGIBLE_COLLECTION_TYPE) {} else if (collectionType == NONFUNGIBLE_COLLECTION_TYPE) {
-			UniqueNFT nftCollection = UniqueNFT(_collection);
-			// tokenId = nftCollection.nextTokenId();
-			tokenId = nftCollection.mint(address(this));
-
-			nftCollection.setProperties(tokenId, _properties);
-
-			nftCollection.transferFromCross(
-				NftCrossAccountId(address(this), 0),
-				NftCrossAccountId(address(0), _substrateReceiver),
-				tokenId
-			);
-		} else {
-			revert("Wrong collection type. Works only with NFT or RFT");
-		}
-
-		emit MintToSub(address(0), _substrateReceiver, _collection, tokenId);
-	}
-
-	function proxyProperties(
-		address _collection,
-		uint256 _tokenId,
-		NftProperty[] calldata _properties
-	) external checkRestrictions(_collection) {
-		uint256 propertiesLength = _properties.length;
-		require(propertiesLength > 0, "Properies is empty");
-
-		Collection commonContract = Collection(_collection);
-		bytes32 collectionType = keccak256(bytes(commonContract.uniqueCollectionType()));
-
-		if (collectionType == REFUNGIBLE_COLLECTION_TYPE) {
-			revert("Wrong collection type. Works only with NFT or RFT");
-		} else if (collectionType == NONFUNGIBLE_COLLECTION_TYPE) {
-			UniqueNFT nftCollection = UniqueNFT(_collection);
-
-			nftCollection.setProperties(_tokenId, _properties);
-		} else {
-			revert("Wrong collection type. Works only with NFT or RFT");
-		}
-	}
-}
deletedtests/src/eth/evmToSubstrate/abigen.tsdiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/abigen.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import {runTypeChain, glob} from 'typechain';
-
-
-async function main() {
-  const cwd = process.cwd();
-
-  // find all files matching the glob
-  const allFiles = glob(cwd, ['./ABI/*.json']);
-
-  const result = await runTypeChain({
-    cwd,
-    filesToProcess: allFiles,
-    allFiles,
-    outDir: 'ABIGEN',
-    target: 'web3-v1',
-  });
-}
-
-main().catch(console.error);
\ No newline at end of file
deletedtests/src/eth/evmToSubstrate/addressResearch.tsdiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/addressResearch.ts
+++ /dev/null
@@ -1,191 +0,0 @@
-// import {createEthAccountWithBalance} from '../util/helpers';
-import {EthUniqueHelper, usingEthPlaygrounds} from '../util/playgrounds';
-import {readFile} from 'fs/promises';
-import {ContractImports} from '../util/playgrounds/types';
-import {Contract} from '@polkadot/api-contract/base';
-import Web3 from 'web3';
-import {IProperty, ITokenPropertyPermission} from '../../util/playgrounds/types';
-import {addressToEvm, decodeAddress} from '@polkadot/util-crypto';
-import nonFungibleAbi from '../nonFungibleAbi.json';
-import {CrossAccountId} from '../../util/helpers';
-import {IKeyringPair} from '@polkadot/types/types';
-
-enum SponsoringMode {
-	Disabled = 0,
-	Allowlisted = 1,
-	Generous = 2,
-}
-
-const WS_ENDPOINT = 'wss://ws-rc.unique.network';
-const CONTRACT_IMPORT: ContractImports[] = [
-  {
-    fsPath: `${__dirname}/../api/CollectionHelpers.sol`,
-    solPath: 'api/CollectionHelpers.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/ContractHelpers.sol`,
-    solPath: 'api/ContractHelpers.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueRefungibleToken.sol`,
-    solPath: 'api/UniqueRefungibleToken.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueRefungible.sol`,
-    solPath: 'api/UniqueRefungible.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueNFT.sol`,
-    solPath: 'api/UniqueNFT.sol',
-  },
-];
-const main = async () => {
-  await usingEthPlaygrounds(async (helper, privateKey) => {
-    const contract_source = (
-      await readFile(`${__dirname}/EvmToSubstrateHelper.sol`)
-    ).toString();
-      
-    
-    const donor = privateKey('//Alice'); // Seed from account with balance on this network
-    const myAccount = privateKey('//Bob'); // replace with account from polkadot extension
-    console.log('donor raw sub: ', donor.addressRaw);
-    console.log('donor sub->eth->sub: ', decodeAddress(await helper.address.ethToSubstrate(helper.address.substrateToEth(donor.address))));
-    console.log('donor sub: ', donor.address);
-
-    console.log('donor raw eth: ', Uint8Array.from(Buffer.from(helper.address.substrateToEth(donor.address).slice(2), 'hex')));
-    console.log('donor eth: ', helper.address.substrateToEth(donor.address));
-    
-    const signer = await helper.eth.createAccountWithBalance(donor, 100n);
-    
-    console.log('\nsigner eth: ', signer);
-    console.log('signer raw eth: ', Uint8Array.from(Buffer.from(signer.slice(2), 'hex')));
-    console.log('signer raw sub: ', decodeAddress(await helper.address.ethToSubstrate(signer)));
-
-    const collection = await helper.nft.mintCollection(donor, {
-      name: 'test mintToSubstrate',
-      description: 'EVMHelpers',
-      tokenPrefix: 'ap',
-      tokenPropertyPermissions: [
-        {
-          key: 'url',
-          permission: {
-            tokenOwner: true,
-            collectionAdmin: true,
-            mutable: true,
-          },
-        },
-      ],
-      limits: {sponsorTransferTimeout: 0, sponsorApproveTimeout: 0}, permissions: {mintMode: true},
-    });
-   
-    // await collection.addToAllowList(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-    // await collection.addToAllowList(donor, {Substrate: donor.address});
-    await collection.addToAllowList(donor, {Substrate: myAccount.address});
-    // await collection.addAdmin(donor, {Ethereum: signer});
-    // await collection.addAdmin(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-    
-    console.log('collection admin(s)): ', await collection.getAdmins());
-    console.log('collection owner(s)): ', await collection.getAllowList());
-  
-    
-    const collectionEthAddress = helper.ethAddress.fromCollectionId(collection.collectionId);
-    const collectionContract = helper.ethNativeContract.collection(
-      collectionEthAddress,
-      'nft',
-    );
-    const receiverEthAddress = helper.address.substrateToEth(myAccount.address);
-    
-    console.log('myAccount eth mirror: ', receiverEthAddress);
-    console.log('contract eth mirror: ', collectionEthAddress);
-
-    let subTokenId = await collectionContract.methods.nextTokenId().call();
-
-    const encodedCall = collectionContract.methods
-      .mint(receiverEthAddress, subTokenId)
-      .encodeABI();
-
-    const ethFee = await helper.arrange.calculcateFee(
-      {Substrate: donor.address},
-      async () => {
-        await helper.eth.sendEVM(
-          myAccount,
-          collectionContract.options.address,
-          encodedCall,
-          '0',
-        );
-      },
-    );
-
-    console.log(`\ncollection mint from eth : ${ethFee}\n`);
-
-    // subTokenId = await collectionContract.methods.nextTokenId().call();
-    
-    // const contract = await helper.ethContract.deployByCode(signer, 'EvmToSubstrate', contract_source, CONTRACT_IMPORT);
-    // console.log('contract Address', contract.options.address);
-    // await helper.eth.transferBalanceFromSubstrate(donor, contract.options.address, 100n);
-    
-    // await collection.addToAllowList(donor, {Ethereum: contract.options.address});
-    // await collection.addAdmin(donor, {Ethereum: contract.options.address});
-   
-    
-    // const feeForProxyContractMinting = await helper.arrange.calculcateFee(
-    //   {Ethereum: signer},
-    //   async () => {
-    //     await contract.methods.mintToSubstrate(helper.ethAddress.fromCollectionId(collection.collectionId), myAccount.addressRaw).send({from: signer});
-    //   },
-    // );
-      
-    // console.log(`\ncollection mint from contract to the Substrate Id: ${feeForProxyContractMinting}\n`);
-    subTokenId = await collectionContract.methods.nextTokenId().call();
-    console.log(subTokenId);  
-   
-    console.log('All done');
-  });
-};
-    
-main()
-  .then(() => process.exit(0))
-  .catch((e) => {
-    console.log(e);
-    process.exit(1);
-  });
-    
-    
-async function createCollectionForPropertiesBenchmarks(
-  helper: EthUniqueHelper,
-  privateKey: (seed: string) => IKeyringPair,
-  ethSigner: string,
-  proxyContract: string,
-  permissions: ITokenPropertyPermission[],
-) {
-    
-  const donor = privateKey('//Alice'); // Seed from account with balance on this network
-    
-    
-  const collection = await helper.nft.mintCollection(donor, {
-    name: 'test mintToSubstrate',
-    description: 'EVMHelpers',
-    tokenPrefix: 'ap',
-    tokenPropertyPermissions: [
-      {
-        key: 'url',
-        permission: {
-          tokenOwner: true,
-          collectionAdmin: true,
-          mutable: true,
-        },
-      },
-    ],
-    limits: {sponsorTransferTimeout: 0, sponsorApproveTimeout: 0}, permissions: {mintMode: true},
-  });
-   
-  await collection.addToAllowList(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-  await collection.addToAllowList(donor, {Substrate: donor.address});
-  await collection.addAdmin(donor, {Ethereum: ethSigner});
-  await collection.addAdmin(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-  await collection.addToAllowList(donor, {Ethereum: proxyContract});
-  await collection.addAdmin(donor, {Ethereum: proxyContract});
-  await collection.setTokenPropertyPermissions(donor, permissions);
-  
-  return collection;
-} 
\ No newline at end of file
deletedtests/src/eth/evmToSubstrate/coderTest.tsdiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/coderTest.ts
+++ /dev/null
@@ -1,210 +0,0 @@
-import {EthUniqueHelper, usingEthPlaygrounds} from '../util';
-import {readFile} from 'fs/promises';
-import {ContractImports} from '../util/playgrounds/types';
-import Web3 from 'web3';
-import {
-  IProperty,
-  ITokenPropertyPermission,
-} from '../../util/playgrounds/types';
-import {addressToEvm, decodeAddress} from '@polkadot/util-crypto';
-import nonFungibleAbi from '../nonFungibleAbi.json';
-import {IKeyringPair} from '@polkadot/types/types';
-
-enum SponsoringMode {
-	Disabled = 0,
-	Allowlisted = 1,
-	Generous = 2,
-}
-
-const WS_ENDPOINT = 'wss://ws-rc.unique.network';
-const CONTRACT_IMPORT: ContractImports[] = [
-  {
-    fsPath: `${__dirname}/../api/CollectionHelpers.sol`,
-    solPath: 'api/CollectionHelpers.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/ContractHelpers.sol`,
-    solPath: 'api/ContractHelpers.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueRefungibleToken.sol`,
-    solPath: 'api/UniqueRefungibleToken.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueRefungible.sol`,
-    solPath: 'api/UniqueRefungible.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueNFT.sol`,
-    solPath: 'api/UniqueNFT.sol',
-  },
-];
-
-const main = async () => {
-  await usingEthPlaygrounds(async (helper, privateKey) => {
-    const contract_source = (
-      await readFile(`${__dirname}/EvmToSubstrateHelper.sol`)
-    ).toString();
-
-    const donor = await privateKey('//Alice'); // Seed from account with balance on this network
-    const myAccount = await privateKey('//Bob'); // replace with account from polkadot extension
-    const signer = await helper.eth.createAccountWithBalance(donor, 100n);
-    console.log(`signer data: ${Uint8Array.from(Buffer.from(signer.slice(2), 'hex'))}`);
-    const collection = await helper.nft.mintCollection(donor, {
-      name: 'test mintToSubstrate',
-      description: 'EVMHelpers',
-      tokenPrefix: 'ap',
-      tokenPropertyPermissions: [
-        {
-          key: 'url',
-          permission: {
-            tokenOwner: true,
-            collectionAdmin: true,
-            mutable: true,
-          },
-        },
-      ],
-      limits: {sponsorTransferTimeout: 0, sponsorApproveTimeout: 0},
-      permissions: {mintMode: true},
-    });
-
-    await collection.addToAllowList(donor, {
-      Ethereum: helper.address.substrateToEth(donor.address),
-    });
-    await collection.addToAllowList(donor, {Substrate: donor.address});
-    await collection.addAdmin(donor, {Ethereum: signer});
-    await collection.addAdmin(donor, {
-      Ethereum: helper.address.substrateToEth(donor.address),
-    });
-
-    console.log('collection admin(s)): ', await collection.getAdmins());
-    console.log('collection owner(s)): ', await collection.getAllowList());
-
-    const collectionEthAddress = helper.ethAddress.fromCollectionId(collection.collectionId);
-
-    const collectionEthContract = helper.ethNativeContract.collection(
-      collectionEthAddress,
-      'nft',
-    );
-
-    const receiverEthAddress = helper.address.substrateToEth(myAccount.address);
-			
-    const contract = await helper.ethContract.deployByCode(
-      signer,
-      'EvmToSubstrate',
-      contract_source,
-      CONTRACT_IMPORT,
-    );
-    console.log(`contract has been deployed\naddres: ${contract.options.address} || ${Uint8Array.from(Buffer.from(contract.options.address.slice(2), 'hex'))}`);
-
-    await helper.eth.transferBalanceFromSubstrate(
-      donor,
-      contract.options.address,
-      100n,
-    );
-
-    console.log('transfer has been completed');
-
-    await collection.addToAllowList(donor, {
-      Ethereum: contract.options.address,
-    });
-    await collection.addAdmin(donor, {Ethereum: contract.options.address});
-
-    console.log('setup has been completed');
-
-    console.log('\t\t\t *** Properties Fees ***\n');
-
-    const propertiesNumber = 20;
-
-    const properties = Array(40)
-      .fill(0)
-      .map((_, i) => {
-        return {
-          key: `key_${i}`,
-          value: Uint8Array.from(Buffer.from(`value_${i}`)),
-        };
-      });
-
-    const permissions: ITokenPropertyPermission[] = properties.map((p) => {
-      return {
-        key: p.key,
-        permission: {
-          tokenOwner: true,
-          collectionAdmin: true,
-          mutable: true,
-        },
-      };
-    });
-
-    //    *** ProxyContract Bulk ***
-
-    const token = await collection.mintToken(donor, {Ethereum: signer});
-
-    const mintWithBulkPropProxyContractFee = await helper.arrange.calculcateFee(
-      {Ethereum: signer},
-      async () => {
-        await contract.methods
-          .proxyProperties(
-            collectionEthContract.options.address,
-            token.tokenId,
-            properties.slice(0, propertiesNumber).map((p) => {
-              return {field_0: p.key, field_1: p.value};
-            }),
-          )
-          .send({from: signer, gas: 20_000_000});
-      },
-    );
-    console.log(`token mint from contract(with bulk prop.) to the Substrate Id: ${mintWithBulkPropProxyContractFee}`);
-
-    console.log('All done');
-  });
-};
-
-main()
-  .then(() => process.exit(0))
-  .catch((e) => {
-    console.log(e);
-    process.exit(1);
-  });
-
-async function createCollectionForPropertiesBenchmarks(
-  helper: EthUniqueHelper,
-  privateKey: (seed: string) => Promise<IKeyringPair>,
-  ethSigner: string,
-  proxyContract: string,
-  permissions: ITokenPropertyPermission[],
-) {
-  const donor = await privateKey('//Alice'); // Seed from account with balance on this network
-
-  const collection = await helper.nft.mintCollection(donor, {
-    name: 'test mintToSubstrate',
-    description: 'EVMHelpers',
-    tokenPrefix: 'ap',
-    tokenPropertyPermissions: [
-      {
-        key: 'url',
-        permission: {
-          tokenOwner: true,
-          collectionAdmin: true,
-          mutable: true,
-        },
-      },
-    ],
-    limits: {sponsorTransferTimeout: 0, sponsorApproveTimeout: 0},
-    permissions: {mintMode: true},
-  });
-
-  await collection.addToAllowList(donor, {
-    Ethereum: helper.address.substrateToEth(donor.address),
-  });
-  await collection.addToAllowList(donor, {Substrate: donor.address});
-  await collection.addAdmin(donor, {Ethereum: ethSigner});
-  await collection.addAdmin(donor, {
-    Ethereum: helper.address.substrateToEth(donor.address),
-  });
-  await collection.addToAllowList(donor, {Ethereum: proxyContract});
-  await collection.addAdmin(donor, {Ethereum: proxyContract});
-  await collection.setTokenPropertyPermissions(donor, permissions);
-
-  return collection;
-}
deletedtests/src/eth/evmToSubstrate/feeBench.tsdiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/feeBench.ts
+++ /dev/null
@@ -1,314 +0,0 @@
-import {EthUniqueHelper, usingEthPlaygrounds} from '../util';
-import {readFile} from 'fs/promises';
-import {ContractImports} from '../util/playgrounds/types';
-
-import Web3 from 'web3';
-import {IProperty, ITokenPropertyPermission} from '../../util/playgrounds/types';
-import {addressToEvm, decodeAddress} from '@polkadot/util-crypto';
-import nonFungibleAbi from '../nonFungibleAbi.json';
-import {IKeyringPair} from '@polkadot/types/types';
-
-enum SponsoringMode {
-	Disabled = 0,
-	Allowlisted = 1,
-	Generous = 2,
-}
-
-const WS_ENDPOINT = 'wss://ws-rc.unique.network';
-const CONTRACT_IMPORT: ContractImports[] = [
-  {
-    fsPath: `${__dirname}/../api/CollectionHelpers.sol`,
-    solPath: 'api/CollectionHelpers.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/ContractHelpers.sol`,
-    solPath: 'api/ContractHelpers.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueRefungibleToken.sol`,
-    solPath: 'api/UniqueRefungibleToken.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueRefungible.sol`,
-    solPath: 'api/UniqueRefungible.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueNFT.sol`,
-    solPath: 'api/UniqueNFT.sol',
-  },
-];
-const main = async () => {
-  await usingEthPlaygrounds(async (helper, privateKey) => {
-    const contract_source = (
-      await readFile(`${__dirname}/EvmToSubstrateHelper.sol`)
-    ).toString();
-      
-    
-    const donor = await privateKey('//Alice'); // Seed from account with balance on this network
-    const myAccount = await privateKey('//Bob'); // replace with account from polkadot extension
-   
-    const signer = await helper.eth.createAccountWithBalance(donor, 100n);
-
-    const collection = await helper.nft.mintCollection(donor, {
-      name: 'test mintToSubstrate',
-      description: 'EVMHelpers',
-      tokenPrefix: 'ap',
-      tokenPropertyPermissions: [
-        {
-          key: 'url',
-          permission: {
-            tokenOwner: true,
-            collectionAdmin: true,
-            mutable: true,
-          },
-        },
-      ],
-      limits: {sponsorTransferTimeout: 0, sponsorApproveTimeout: 0}, permissions: {mintMode: true},
-    });
-   
-    await collection.addToAllowList(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-    await collection.addToAllowList(donor, {Substrate: donor.address});
-    await collection.addAdmin(donor, {Ethereum: signer});
-    await collection.addAdmin(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-    
-    console.log('collection admin(s)): ', await collection.getAdmins());
-    console.log('collection owner(s)): ', await collection.getAllowList());
-    const fee = await helper.arrange.calculcateFee({Substrate: donor.address}, () => collection.mintToken(donor, {Substrate: myAccount.address}));
-    console.log(`\ntoken mint from susbtrate : ${fee}`);
-    
-    const collectionEthAddress = helper.ethAddress.fromCollectionId(collection.collectionId);
-    const collectionContract = helper.ethNativeContract.collection(
-      collectionEthAddress,
-      'nft',
-    );
-    
-    const receiverEthAddress = helper.address.substrateToEth(myAccount.address);
-    
-    // let subTokenId = await collectionContract.methods.nextTokenId().call();
-
-    let encodedCall = collectionContract.methods
-      .mint(receiverEthAddress)
-      .encodeABI();
-
-    const ethFee = await helper.arrange.calculcateFee(
-      {Substrate: donor.address},
-      async () => {
-        await helper.eth.sendEVM(
-          donor,
-          collectionContract.options.address,
-          encodedCall,
-          '0',
-        );
-      },
-    );
-
-    console.log(`token mint from eth : ${ethFee}`);
-    
-    const contract = await helper.ethContract.deployByCode(signer, 'EvmToSubstrate', contract_source, CONTRACT_IMPORT);
-    console.log('contract has been deployed');
-    
-    await helper.eth.transferBalanceFromSubstrate(donor, contract.options.address, 100n);
-    
-    console.log('transfer has been completed');
-    
-    await collection.addToAllowList(donor, {Ethereum: contract.options.address});
-    await collection.addAdmin(donor, {Ethereum: contract.options.address});
-   
-    console.log('setup has been completed');
-    
-    const feeForProxyContractMinting = await helper.arrange.calculcateFee(
-      {Ethereum: signer},
-      async () => {
-        await contract.methods.mintToSubstrate(helper.ethAddress.fromCollectionId(collection.collectionId), myAccount.addressRaw).send({from: signer});
-      },
-    );
-      
-    console.log(`token mint from contract to the Substrate Id: ${feeForProxyContractMinting}\n`);
-    // subTokenId = await collectionContract.methods.nextTokenId().call();
-      
-    /// *** properties part *** 
-      
-    console.log('\t\t\t *** Properties Fees ***\n');
-
-    const propertiesNumber = 20;
-    
-    const properties = Array(40).fill(0)
-      .map((_, i) => { return {key: `key_${i}`, value: Uint8Array.from(Buffer.from(`value_${i}`))}; });
-    
-    const permissions: ITokenPropertyPermission[] = properties
-      .map(p => {
-        return {
-          key: p.key, permission: {
-            tokenOwner: true,
-            collectionAdmin: true,
-            mutable: true}}; });
-    
-    
-    //    *** Susbtrate ***
-    
-    const collectionForSubstrateBench = await createCollectionForPropertiesBenchmarks(helper, privateKey, signer, contract.options.address, permissions);
-    
-    const mintWithPropSubstrate = await helper.arrange.calculcateFee({Substrate: donor.address}, async () => {
-      await collectionForSubstrateBench
-        .mintToken(donor, {Substrate: myAccount.address}, properties.slice(0, propertiesNumber).map(p => { return {key: p.key, value: Buffer.from(p.value).toString()}; }));
-    });
-    console.log(`token mint from susbtrate: ${mintWithPropSubstrate}`);
-    
-    //    *** EVM ***
-    
-    const collectionForEvmBench = await createCollectionForPropertiesBenchmarks(helper, privateKey, signer, contract.options.address, permissions);
-    const evmContract = helper.ethNativeContract.collection(helper.ethAddress.fromCollectionId(collectionForEvmBench.collectionId), 'nft');
-    
-    let subTokenId = await evmContract.methods.nextTokenId().call();
-    
-    encodedCall = evmContract.methods
-      .mint(receiverEthAddress)
-      .encodeABI();
-    
-    const evmCallWithPropFee = await helper.arrange.calculcateFee(
-      {Substrate: donor.address},
-      async () => {
-
-        await helper.eth.sendEVM(
-          donor,
-          evmContract.options.address,
-          encodedCall,
-          '0',
-        );
-        
-        for (const val of properties.slice(0, propertiesNumber)) {
-          
-          encodedCall = await evmContract.methods
-            .setProperty(subTokenId, val.key, Buffer.from(val.value))
-            .encodeABI();
-          
-          await helper.eth.sendEVM(
-            donor,
-            evmContract.options.address,
-            encodedCall,
-            '0',
-          );
-        }
-      },
-    );
-    
-    console.log(`token mint from eth : ${evmCallWithPropFee}`);
-    
-    
-    
-    //    *** EVM Bulk***
-    
-    const collectionForEvmBulkBench = await createCollectionForPropertiesBenchmarks(helper, privateKey, signer, contract.options.address, permissions);
-    const evmBulkContract = helper.ethNativeContract.collection(helper.ethAddress.fromCollectionId(collectionForEvmBulkBench.collectionId), 'nft');
-    
-    subTokenId = await evmBulkContract.methods.nextTokenId().call();
-
-    encodedCall = evmBulkContract.methods
-      .mint(receiverEthAddress)
-      .encodeABI();
-    
-    const evmCallWithBulkPropFee = await helper.arrange.calculcateFee(
-      {Substrate: donor.address},
-      async () => {
-
-        await helper.eth.sendEVM(
-          donor,
-          evmBulkContract.options.address,
-          encodedCall,
-          '0',
-        );
-        
-       
-          
-        encodedCall = await evmBulkContract.methods
-          .setProperties(
-            subTokenId,
-            properties.slice(0, propertiesNumber)
-              .map(p => { return {field_0: p.key, field_1: p.value}; }),
-          )
-          .encodeABI();
-          
-        await helper.eth.sendEVM(
-          donor,
-          evmBulkContract.options.address,
-          encodedCall,
-          '0',
-        );
-        
-      },
-    );
-    
-    console.log(`token mint from eth (Bulk) : ${evmCallWithBulkPropFee}`);
-    
-    
-    //    *** ProxyContract ***
-    
-    await collection.setTokenPropertyPermissions(donor, permissions);
-    const mintWithPropProxyContractFee = await helper.arrange.calculcateFee({Ethereum: signer}, async () => {
-      await contract.methods.mintToSubstrateWithProperty(helper.ethAddress
-        .fromCollectionId(collection.collectionId), myAccount.addressRaw, properties.slice(0, propertiesNumber)).send({from: signer});
-    });
-    console.log(`token mint from contract to the Substrate Id: ${mintWithPropProxyContractFee}`);
-    
-    
-    // //    *** ProxyContract Bulk ***
-    
-    const collectionForProxyContractBulrProperties = await createCollectionForPropertiesBenchmarks(helper, privateKey, signer, contract.options.address, permissions);
-    const evmContractProxyBulk = helper.ethNativeContract.collection(helper.ethAddress.fromCollectionId(collectionForProxyContractBulrProperties.collectionId), 'nft');
-    
-    const mintWithBulkPropProxyContractFee = await helper.arrange.calculcateFee({Ethereum: signer}, async () => {
-      await contract.methods.mintToSubstrateBulkProperty(evmContractProxyBulk.options.address, myAccount.addressRaw, properties.slice(0, propertiesNumber)
-        .map(p => { return {field_0: p.key, field_1: p.value}; })).send({from: signer, gas: 25_000_000});
-    });
-    console.log(`token mint from contract(with bulk prop.) to the Substrate Id: ${mintWithBulkPropProxyContractFee}`);
-        
-    console.log('All done');
-  });
-};
-    
-main()
-  .then(() => process.exit(0))
-  .catch((e) => {
-    console.log(e);
-    process.exit(1);
-  });
-    
-    
-async function createCollectionForPropertiesBenchmarks(
-  helper: EthUniqueHelper,
-  privateKey: (seed: string) => Promise<IKeyringPair>,
-  ethSigner: string,
-  proxyContract: string,
-  permissions: ITokenPropertyPermission[],
-) {
-    
-  const donor = await privateKey('//Alice'); // Seed from account with balance on this network
-    
-    
-  const collection = await helper.nft.mintCollection(donor, {
-    name: 'test mintToSubstrate',
-    description: 'EVMHelpers',
-    tokenPrefix: 'ap',
-    tokenPropertyPermissions: [
-      {
-        key: 'url',
-        permission: {
-          tokenOwner: true,
-          collectionAdmin: true,
-          mutable: true,
-        },
-      },
-    ],
-    limits: {sponsorTransferTimeout: 0, sponsorApproveTimeout: 0}, permissions: {mintMode: true},
-  });
-   
-  await collection.addToAllowList(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-  await collection.addToAllowList(donor, {Substrate: donor.address});
-  await collection.addAdmin(donor, {Ethereum: ethSigner});
-  await collection.addAdmin(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-  await collection.addToAllowList(donor, {Ethereum: proxyContract});
-  await collection.addAdmin(donor, {Ethereum: proxyContract});
-  await collection.setTokenPropertyPermissions(donor, permissions);
-  
-  return collection;
-} 
\ No newline at end of file
deletedtests/src/eth/evmToSubstrate/prototype.tsdiffbeforeafterboth
--- a/tests/src/eth/evmToSubstrate/prototype.ts
+++ /dev/null
@@ -1,256 +0,0 @@
-// import {createEthAccountWithBalance} from '../util/helpers';
-import {EthUniqueHelper, usingEthPlaygrounds} from '../util/playgrounds';
-import {readFile} from 'fs/promises';
-import {ContractImports} from '../util/playgrounds/types';
-import {Contract} from '@polkadot/api-contract/base';
-import Web3 from 'web3';
-import {IProperty, ITokenPropertyPermission} from '../../util/playgrounds/types';
-import {addressToEvm, decodeAddress} from '@polkadot/util-crypto';
-import nonFungibleAbi from '../nonFungibleAbi.json';
-
-import {IKeyringPair} from '@polkadot/types/types';
-
-enum SponsoringMode {
-	Disabled = 0,
-	Allowlisted = 1,
-	Generous = 2,
-}
-
-const WS_ENDPOINT = 'wss://ws-rc.unique.network';
-const CONTRACT_IMPORT: ContractImports[] = [
-  {
-    fsPath: `${__dirname}/../api/CollectionHelpers.sol`,
-    solPath: 'api/CollectionHelpers.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/ContractHelpers.sol`,
-    solPath: 'api/ContractHelpers.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueRefungibleToken.sol`,
-    solPath: 'api/UniqueRefungibleToken.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueRefungible.sol`,
-    solPath: 'api/UniqueRefungible.sol',
-  },
-  {
-    fsPath: `${__dirname}/../api/UniqueNFT.sol`,
-    solPath: 'api/UniqueNFT.sol',
-  },
-];
-const main = async () => {
-  await usingEthPlaygrounds(async (helper, privateKey) => {
-    const contractSource = (
-      await readFile(`${__dirname}/EvmToSubstrateHelper.sol`)
-    ).toString();
-      
-    
-    const donor = privateKey('//Alice'); // Seed from account with balance on this network
-    const myAccount = privateKey('//Bob'); // replace with account from polkadot extension
-    console.log('donor raw sub: ', donor.addressRaw);
-    console.log('donor sub->eth->sub: ', decodeAddress(await helper.address.ethToSubstrate(helper.address.substrateToEth(donor.address))));
-    console.log('donor sub: ', donor.address);
-
-    console.log('donor raw eth: ', Uint8Array.from(Buffer.from(helper.address.substrateToEth(donor.address).slice(2), 'hex')));
-    console.log('donor eth: ', helper.address.substrateToEth(donor.address));
-    
-    const signer = await helper.eth.createAccountWithBalance(donor, 100n);
-    
-    console.log('\nsigner eth: ', signer);
-    console.log('signer raw eth: ', Uint8Array.from(Buffer.from(signer.slice(2), 'hex')));
-    console.log('signer raw sub: ', decodeAddress(await helper.address.ethToSubstrate(signer)));
-
-    const collection = await helper.nft.mintCollection(donor, {
-      name: 'test mintToSubstrate',
-      description: 'EVMHelpers',
-      tokenPrefix: 'ap',
-      tokenPropertyPermissions: [
-        {
-          key: 'url',
-          permission: {
-            tokenOwner: true,
-            collectionAdmin: true,
-            mutable: true,
-          },
-        },
-      ],
-      limits: {sponsorTransferTimeout: 0, sponsorApproveTimeout: 0}, permissions: {mintMode: true},
-    });
-   
-    await collection.addToAllowList(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-    await collection.addToAllowList(donor, {Substrate: donor.address});
-    await collection.addAdmin(donor, {Ethereum: signer});
-    await collection.addAdmin(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-    
-    console.log('collection admin(s)): ', await collection.getAdmins());
-    console.log('collection owner(s)): ', await collection.getAllowList());
-    const fee = await helper.arrange.calculcateFee({Substrate: donor.address}, () => collection.mintToken(donor, {Substrate: myAccount.address}));
-    console.log(`\ncollection mint from susbtrate : ${fee}\n`);
-    
-    const collectionEthAddress = helper.ethAddress.fromCollectionId(collection.collectionId);
-    const collectionContract = helper.ethNativeContract.collection(
-      collectionEthAddress,
-      'nft',
-    );
-    const receiverEthAddress = helper.address.substrateToEth(myAccount.address);
-    console.log('myAccount eth mirror: ', receiverEthAddress);
-    console.log('contract eth mirror: ', collectionEthAddress);
-
-    let subTokenId = await collectionContract.methods.nextTokenId().call();
-
-    let encodedCall = collectionContract.methods
-      .mint(receiverEthAddress, subTokenId)
-      .encodeABI();
-
-    const ethFee = await helper.arrange.calculcateFee(
-      {Substrate: donor.address},
-      async () => {
-        await helper.eth.sendEVM(
-          donor,
-          collectionContract.options.address,
-          encodedCall,
-          '0',
-        );
-      },
-    );
-
-    console.log(`\ncollection mint from eth : ${ethFee}\n`);
-
-    subTokenId = await collectionContract.methods.nextTokenId().call();
-    
-    const contract = await helper.ethContract.deployByCode(signer, 'EvmToSubstrate', contractSource, CONTRACT_IMPORT);
-    console.log('contract Address', contract.options.address);
-    await helper.eth.transferBalanceFromSubstrate(donor, contract.options.address, 100n);
-    
-    await collection.addToAllowList(donor, {Ethereum: contract.options.address});
-    await collection.addAdmin(donor, {Ethereum: contract.options.address});
-   
-    
-    const feeForProxyContractMinting = await helper.arrange.calculcateFee(
-      {Ethereum: signer},
-      async () => {
-        await contract.methods.mintToSubstrate(helper.ethAddress.fromCollectionId(collection.collectionId), myAccount.addressRaw).send({from: signer});
-      },
-    );
-      
-    console.log(`\ncollection mint from contract to the Substrate Id: ${feeForProxyContractMinting}\n`);
-    subTokenId = await collectionContract.methods.nextTokenId().call();
-      
-    /// *** properties part *** 
-      
-    console.log('\t\t\t *** Properties Fees ***\n');
-
-    const propertiesNumber = 20;
-    
-    const properties = Array(40).fill(0).map((_, i) => { return {key: `key_${i}`, value: Uint8Array.from(Buffer.from(`value_${i}`))}; });
-    const permissions: ITokenPropertyPermission[] = properties.map(p => { return {key: p.key, permission: {tokenOwner: true,
-      collectionAdmin: true,
-      mutable: true}}; });
-        
-    await collection.setTokenPropertyPermissions(donor, permissions);
-        
-    
-    const mintWithPropProxyContractFee = await helper.arrange.calculcateFee({Ethereum: signer}, async () => {
-      await contract.methods.mintToSubstrateWithProperty(helper.ethAddress
-        .fromCollectionId(collection.collectionId), myAccount.addressRaw, properties.slice(0, propertiesNumber)).send({from: signer});
-    });
-    console.log(`collection mint from contract to the Substrate Id: ${mintWithPropProxyContractFee}`);
-    
-    const collectionForSubstrateBench = await createCollectionForPropertiesBenchmarks(helper, privateKey, signer, contract.options.address, permissions);
-    
-    const mintWithPropSubstrate = await helper.arrange.calculcateFee({Substrate: donor.address}, async () => {
-      await collectionForSubstrateBench
-        .mintToken(donor, {Substrate: myAccount.address}, properties.slice(0, propertiesNumber).map(p => { return {key: p.key, value: Buffer.from(p.value).toString()}; }));
-    });
-    
-    console.log(`collection mint from susbtrate: ${mintWithPropSubstrate}`);
-    
-    const collectionForEvmBench = await createCollectionForPropertiesBenchmarks(helper, privateKey, signer, contract.options.address, permissions);
-    const evmContract = helper.ethNativeContract.collection(helper.ethAddress.fromCollectionId(collectionForEvmBench.collectionId), 'nft');
-    
-    subTokenId = await evmContract.methods.nextTokenId().call();
-
-    encodedCall = evmContract.methods
-      .mint(receiverEthAddress, subTokenId)
-      .encodeABI();
-    
-    const evmCallWithPropFee = await helper.arrange.calculcateFee(
-      {Substrate: donor.address},
-      async () => {
-
-        await helper.eth.sendEVM(
-          donor,
-          evmContract.options.address,
-          encodedCall,
-          '0',
-        );
-        
-        for (const val of properties.slice(0, propertiesNumber)) {
-          
-          encodedCall = await evmContract.methods
-            .setProperty(subTokenId, val.key, Buffer.from(val.value))
-            .encodeABI();
-          
-          await helper.eth.sendEVM(
-            donor,
-            evmContract.options.address,
-            encodedCall,
-            '0',
-          );
-        }
-      },
-    );
-    
-    console.log(`collection mint from eth : ${evmCallWithPropFee}`);
-
-    console.log('All done');
-  });
-};
-    
-main()
-  .then(() => process.exit(0))
-  .catch((e) => {
-    console.log(e);
-    process.exit(1);
-  });
-    
-    
-async function createCollectionForPropertiesBenchmarks(
-  helper: EthUniqueHelper,
-  privateKey: (seed: string) => IKeyringPair,
-  ethSigner: string,
-  proxyContract: string,
-  permissions: ITokenPropertyPermission[],
-) {
-    
-  const donor = privateKey('//Alice'); // Seed from account with balance on this network
-    
-    
-  const collection = await helper.nft.mintCollection(donor, {
-    name: 'test mintToSubstrate',
-    description: 'EVMHelpers',
-    tokenPrefix: 'ap',
-    tokenPropertyPermissions: [
-      {
-        key: 'url',
-        permission: {
-          tokenOwner: true,
-          collectionAdmin: true,
-          mutable: true,
-        },
-      },
-    ],
-    limits: {sponsorTransferTimeout: 0, sponsorApproveTimeout: 0}, permissions: {mintMode: true},
-  });
-   
-  await collection.addToAllowList(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-  await collection.addToAllowList(donor, {Substrate: donor.address});
-  await collection.addAdmin(donor, {Ethereum: ethSigner});
-  await collection.addAdmin(donor, {Ethereum: helper.address.substrateToEth(donor.address)});
-  await collection.addToAllowList(donor, {Ethereum: proxyContract});
-  await collection.addAdmin(donor, {Ethereum: proxyContract});
-  await collection.setTokenPropertyPermissions(donor, permissions);
-  
-  return collection;
-} 
\ No newline at end of file