difftreelog
delete `EvmToSustrate` folder
in: master
10 files changed
tests/src/eth/evmToSubstrate/ABI/EvmToSubstrate.jsondiffbeforeafterbothno changes
tests/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;
-}
tests/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";
tests/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">;
tests/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");
- }
- }
-}
tests/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
tests/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
tests/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;
-}
tests/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
tests/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