difftreelog
Collision tests fixed
in: master
10 files changed
tests/src/collision-tests/admVsOwnerChanges.test.tsdiffbeforeafterboth4import privateKey from '../substrate/privateKey';4import privateKey from '../substrate/privateKey';5import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';5import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';6import {6import {7 addCollectionAdminExpectSuccess,8 approveExpectSuccess,7 createCollectionExpectSuccess,9 createCollectionExpectSuccess,8 createItemExpectSuccess,10 createItemExpectSuccess,11 transferFromExpectSuccess,12 transferExpectSuccess,13 normalizeAccountId,9} from '../util/helpers';14} from '../util/helpers';101511chai.use(chaiAsPromised);16chai.use(chaiAsPromised);33 28 await usingApi(async (api) => {34 await usingApi(async (api) => {29 const collectionId = await createCollectionExpectSuccess();35 const collectionId = await createCollectionExpectSuccess();30 const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);36 const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));31 await submitTransactionAsync(Alice, changeAdminTxBob);37 await submitTransactionAsync(Alice, changeAdminTxBob);32 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));38 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));33 const changeAdminTxFerdie = api.tx.nft.addCollectionAdmin(collectionId, Ferdie.address);39 const changeAdminTxFerdie = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Ferdie.address));34 await submitTransactionAsync(Bob, changeAdminTxFerdie);40 await submitTransactionAsync(Bob, changeAdminTxFerdie);35 const itemId = await createItemExpectSuccess(Ferdie, collectionId, 'NFT');41 const itemId = await createItemExpectSuccess(Ferdie, collectionId, 'NFT');36 //42 37 const changeOwner = api.tx.nft.transferFrom(Ferdie.address, Bob.address, collectionId, itemId, 1);43 const changeOwner = api.tx.nft.transferFrom(normalizeAccountId(Ferdie.address), normalizeAccountId(Bob.address), collectionId, itemId, 1);38 const approve = api.tx.nft.approve(Bob.address, collectionId, itemId, 1);44 const approve = api.tx.nft.approve(normalizeAccountId(Bob.address), collectionId, itemId, 1);39 const sendItem = api.tx.nft.transfer(Alice.address, collectionId, itemId, 1);45 const sendItem = api.tx.nft.transfer(normalizeAccountId(Alice.address), collectionId, itemId, 1);40 await Promise.all([46 await Promise.all([41 changeOwner.signAndSend(Alice),47 changeOwner.signAndSend(Alice),42 approve.signAndSend(Bob),48 approve.signAndSend(Bob),tests/src/collision-tests/admVsOwnerData.test.tsdiffbeforeafterboth6import {6import {7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,8 createItemExpectSuccess,8 createItemExpectSuccess,9 normalizeAccountId,9} from '../util/helpers';10} from '../util/helpers';101111chai.use(chaiAsPromised);12chai.use(chaiAsPromised);26 const AliceData = 1;27 const AliceData = 1;27 const BobData = 2;28 const BobData = 2;28 const collectionId = await createCollectionExpectSuccess();29 const collectionId = await createCollectionExpectSuccess();29 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);30 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));30 await submitTransactionAsync(Alice, changeAdminTx);31 await submitTransactionAsync(Alice, changeAdminTx);31 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));32 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));32 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');33 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');tests/src/collision-tests/admVsOwnerTake.test.tsdiffbeforeafterboth6import {6import {7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,8 createItemExpectSuccess,8 createItemExpectSuccess,9 normalizeAccountId,9} from '../util/helpers';10} from '../util/helpers';101111chai.use(chaiAsPromised);12chai.use(chaiAsPromised);27 it('The collection admin burns the token and in the same block the token owner performs a transaction on it ', async () => {28 it('The collection admin burns the token and in the same block the token owner performs a transaction on it ', async () => {28 await usingApi(async (api) => {29 await usingApi(async (api) => {29 const collectionId = await createCollectionExpectSuccess();30 const collectionId = await createCollectionExpectSuccess();30 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);31 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));31 await submitTransactionAsync(Alice, changeAdminTx);32 await submitTransactionAsync(Alice, changeAdminTx);32 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));33 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));33 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');34 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');34 //35 //35 const sendItem = api.tx.nft.transfer(Ferdie.address, collectionId, itemId, 1);36 const sendItem = api.tx.nft.transfer(normalizeAccountId(Ferdie.address), collectionId, itemId, 1);36 const burnItem = api.tx.nft.burnItem(collectionId, itemId, 1);37 const burnItem = api.tx.nft.burnItem(collectionId, itemId, 1);37 await Promise.all([38 await Promise.all([38 sendItem.signAndSend(Bob),39 sendItem.signAndSend(Bob),39 burnItem.signAndSend(Alice),40 burnItem.signAndSend(Alice),40 ]);41 ]);41 await timeoutPromise(10000);42 await timeoutPromise(20000);42 let itemBurn = false;43 let itemBurn = false;43 itemBurn = (await (api.query.nft.nftItemList(collectionId, itemId))).toJSON() as boolean;44 itemBurn = (await (api.query.nft.nftItemList(collectionId, itemId))).toJSON() as boolean;44 // tslint:disable-next-line: no-unused-expression45 // tslint:disable-next-line: no-unused-expressiontests/src/collision-tests/adminDestroyCollection.test.tsdiffbeforeafterboth5import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';5import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';6import {6import {7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,8 normalizeAccountId,8} from '../util/helpers';9} from '../util/helpers';91010chai.use(chaiAsPromised);11chai.use(chaiAsPromised);26 it('Adding an address to the collection whitelist in a block by the admin, and deleting the collection by the owner ', async () => {27 it('Adding an address to the collection whitelist in a block by the admin, and deleting the collection by the owner ', async () => {27 await usingApi(async (api) => {28 await usingApi(async (api) => {28 const collectionId = await createCollectionExpectSuccess();29 const collectionId = await createCollectionExpectSuccess();29 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);30 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));30 await submitTransactionAsync(Alice, changeAdminTx);31 await submitTransactionAsync(Alice, changeAdminTx);31 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));32 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));32 await timeoutPromise(10000);33 await timeoutPromise(10000);33 //34 //34 const addWhitelistAdm = api.tx.nft.addToWhiteList(collectionId, Ferdie.address);35 const addWhitelistAdm = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Ferdie.address));35 const destroyCollection = api.tx.nft.destroyCollection(collectionId);36 const destroyCollection = api.tx.nft.destroyCollection(collectionId);36 await Promise.all([37 await Promise.all([37 addWhitelistAdm.signAndSend(Bob),38 addWhitelistAdm.signAndSend(Bob),tests/src/collision-tests/adminLimitsOff.test.tsdiffbeforeafterboth6import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api';6import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api';7import {7import {8 createCollectionExpectSuccess,8 createCollectionExpectSuccess,9 normalizeAccountId,9} from '../util/helpers';10} from '../util/helpers';101111chai.use(chaiAsPromised);12chai.use(chaiAsPromised);37 const chainAdminLimit = (api.consts.nft.collectionAdminsLimit as any).toNumber();38 const chainAdminLimit = (api.consts.nft.collectionAdminsLimit as any).toNumber();38 expect(chainAdminLimit).to.be.equal(5);39 expect(chainAdminLimit).to.be.equal(5);394040 const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, Eve.address);41 const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Eve.address));41 await submitTransactionAsync(Alice, changeAdminTx1);42 await submitTransactionAsync(Alice, changeAdminTx1);42 const changeAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, Dave.address);43 const changeAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Dave.address));43 await submitTransactionAsync(Alice, changeAdminTx2);44 await submitTransactionAsync(Alice, changeAdminTx2);44 const changeAdminTx3 = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);45 const changeAdminTx3 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));45 await submitTransactionAsync(Alice, changeAdminTx3);46 await submitTransactionAsync(Alice, changeAdminTx3);464747 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));48 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));48 const addAdmOne = api.tx.nft.addCollectionAdmin(collectionId, Ferdie.address);49 const addAdmOne = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Ferdie.address));49 const addAdmTwo = api.tx.nft.addCollectionAdmin(collectionId, Charlie.address);50 const addAdmTwo = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address));50 await Promise.all([51 await Promise.all([51 addAdmOne.signAndSend(Bob),52 addAdmOne.signAndSend(Bob),52 addAdmTwo.signAndSend(Alice),53 addAdmTwo.signAndSend(Alice),53 ]);54 ]);54 await timeoutPromise(10000);55 await timeoutPromise(20000);55 const changeAdminTx4 = api.tx.nft.addCollectionAdmin(collectionId, Alice.address);56 const changeAdminTx4 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Alice.address));56 await expect(submitTransactionExpectFailAsync(Alice, changeAdminTx4)).to.be.rejected;57 await expect(submitTransactionExpectFailAsync(Alice, changeAdminTx4)).to.be.rejected;575858 const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));59 const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));59 expect(adminListAfterAddAdmin).to.be.contains(Eve.address);60 expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(Eve.address));60 expect(adminListAfterAddAdmin).to.be.contains(Ferdie.address);61 expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(Ferdie.address));61 expect(adminListAfterAddAdmin).not.to.be.contains(Alice.address);62 expect(adminListAfterAddAdmin).not.to.be.contains(normalizeAccountId(Alice.address));62 await timeoutPromise(20000);63 await timeoutPromise(20000);63 });64 });64 });65 });tests/src/collision-tests/adminRightsOff.test.tsdiffbeforeafterboth6import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';6import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';7import {7import {8 createCollectionExpectSuccess,8 createCollectionExpectSuccess,9 normalizeAccountId,9} from '../util/helpers';10} from '../util/helpers';101111chai.use(chaiAsPromised);12chai.use(chaiAsPromised);25 it('In the block, the collection admin adds a token or changes data, and the collection owner deprives the admin of rights ', async () => {26 it('In the block, the collection admin adds a token or changes data, and the collection owner deprives the admin of rights ', async () => {26 await usingApi(async (api) => {27 await usingApi(async (api) => {27 const collectionId = await createCollectionExpectSuccess();28 const collectionId = await createCollectionExpectSuccess();28 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);29 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));29 await submitTransactionAsync(Alice, changeAdminTx);30 await submitTransactionAsync(Alice, changeAdminTx);30 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));31 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));31 await timeoutPromise(10000);32 await timeoutPromise(10000);32 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];33 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];33 const addItemAdm = api.tx.nft.createMultipleItems(collectionId, Bob.address, args);34 const addItemAdm = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);34 const removeAdm = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address);35 const removeAdm = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));35 await Promise.all([36 await Promise.all([36 addItemAdm.signAndSend(Bob),37 addItemAdm.signAndSend(Bob),37 removeAdm.signAndSend(Alice),38 removeAdm.signAndSend(Alice),38 ]);39 ]);39 await timeoutPromise(10000);40 await timeoutPromise(20000);40 const itemsListIndex = await api.query.nft.itemListIndex(collectionId) as unknown as BN;41 const itemsListIndex = await api.query.nft.itemListIndex(collectionId) as unknown as BN;41 expect(itemsListIndex.toNumber()).to.be.equal(0);42 expect(itemsListIndex.toNumber()).to.be.equal(0);42 const adminList: any = (await api.query.nft.adminList(collectionId));43 const adminList: any = (await api.query.nft.adminList(collectionId));43 expect(adminList).not.to.be.contains(Bob.address);44 expect(adminList).not.to.be.contains(normalizeAccountId(Bob.address));44 await timeoutPromise(20000);45 await timeoutPromise(20000);45 });46 });46 });47 });tests/src/collision-tests/setSponsorNewOwner.test.tsdiffbeforeafterboth6import {6import {7 createCollectionExpectSuccess, setCollectionSponsorExpectSuccess,7 createCollectionExpectSuccess, 8 setCollectionSponsorExpectSuccess,9 normalizeAccountId,8} from '../util/helpers';10} from '../util/helpers';91110chai.use(chaiAsPromised);12chai.use(chaiAsPromised);28 const collectionId = await createCollectionExpectSuccess();30 const collectionId = await createCollectionExpectSuccess();29 await setCollectionSponsorExpectSuccess(collectionId, Bob.address);31 await setCollectionSponsorExpectSuccess(collectionId, Bob.address);30 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));32 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));31 await timeoutPromise(10000);33 await timeoutPromise(20000);32 const confirmSponsorship = api.tx.nft.confirmSponsorship(collectionId);34 const confirmSponsorship = api.tx.nft.confirmSponsorship(collectionId);33 const changeCollectionOwner = api.tx.nft.changeCollectionOwner(collectionId, Ferdie.address);35 const changeCollectionOwner = api.tx.nft.changeCollectionOwner(collectionId, Ferdie.address);34 await Promise.all([36 await Promise.all([35 confirmSponsorship.signAndSend(Bob),37 confirmSponsorship.signAndSend(Bob),36 changeCollectionOwner.signAndSend(Alice),38 changeCollectionOwner.signAndSend(Alice),37 ]);39 ]);38 await timeoutPromise(10000);40 await timeoutPromise(20000);39 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();41 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();40 expect(collection.Sponsorship.Confirmed).to.be.eq(Bob.address);42 expect(collection.Sponsorship.confirmed).to.be.eq(Bob.address);41 expect(collection.Owner).to.be.eq(Ferdie.address);43 expect(collection.Owner).to.be.eq(Ferdie.address);42 await timeoutPromise(20000);44 await timeoutPromise(20000);43 });45 });tests/src/collision-tests/sponsorPayments.test.tsdiffbeforeafterboth10 createCollectionExpectSuccess,10 createCollectionExpectSuccess,11 createItemExpectSuccess,11 createItemExpectSuccess,12 setCollectionSponsorExpectSuccess,12 setCollectionSponsorExpectSuccess,13 normalizeAccountId,13} from '../util/helpers';14} from '../util/helpers';141515chai.use(chaiAsPromised);16chai.use(chaiAsPromised);29 it('Payment of commission if one block contains transactions for payment from the sponsor\'s balance and his (sponsor\'s) exclusion from the collection ', async () => {30 it('Payment of commission if one block contains transactions for payment from the sponsor\'s balance and his (sponsor\'s) exclusion from the collection ', async () => {30 await usingApi(async (api) => {31 await usingApi(async (api) => {31 const collectionId = await createCollectionExpectSuccess();32 const collectionId = await createCollectionExpectSuccess();32 const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);33 const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));33 await submitTransactionAsync(Alice, changeAdminTxBob);34 await submitTransactionAsync(Alice, changeAdminTxBob);34 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));35 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));35 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');36 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');36 await setCollectionSponsorExpectSuccess(collectionId, Bob.address);37 await setCollectionSponsorExpectSuccess(collectionId, Bob.address);37 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');38 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');383939 const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);40 const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);40 const sendItem = api.tx.nft.transfer(Alice.address, collectionId, itemId, 1);41 const sendItem = api.tx.nft.transfer(normalizeAccountId(Alice.address), collectionId, itemId, 1);41 const revokeSponsor = api.tx.nft.removeCollectionSponsor(collectionId);42 const revokeSponsor = api.tx.nft.removeCollectionSponsor(collectionId);42 await Promise.all([43 await Promise.all([43 sendItem.signAndSend(Bob),44 sendItem.signAndSend(Bob),tests/src/collision-tests/tokenLimitsOff.test.tsdiffbeforeafterboth9 createCollectionExpectSuccess,9 createCollectionExpectSuccess,10 getCreateItemResult,10 getCreateItemResult,11 setMintPermissionExpectSuccess,11 setMintPermissionExpectSuccess,12 normalizeAccountId,12} from '../util/helpers';13} from '../util/helpers';131414chai.use(chaiAsPromised);15chai.use(chaiAsPromised);57 // tslint:disable-next-line:no-unused-expression58 // tslint:disable-next-line:no-unused-expression58 expect(subTxTesult.success).to.be.true;59 expect(subTxTesult.success).to.be.true;59 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));60 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));60 await timeoutPromise(10000);61 await timeoutPromise(20000);616262 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];63 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];63 const mintItemOne = api.tx.nft64 const mintItemOne = api.tx.nft64 .createMultipleItems(collectionId, Ferdie.address, args);65 .createMultipleItems(collectionId, normalizeAccountId(Ferdie.address), args);65 const mintItemTwo = api.tx.nft66 const mintItemTwo = api.tx.nft66 .createMultipleItems(collectionId, Bob.address, args);67 .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);67 await Promise.all([68 await Promise.all([68 mintItemOne.signAndSend(Ferdie),69 mintItemOne.signAndSend(Ferdie),69 mintItemTwo.signAndSend(Bob),70 mintItemTwo.signAndSend(Bob),70 ]);71 ]);71 await timeoutPromise(10000);72 await timeoutPromise(20000);72 const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;73 const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;73 expect(itemsListIndexAfter.toNumber()).to.be.equal(3);74 expect(itemsListIndexAfter.toNumber()).to.be.equal(3);74 // TokenLimit = 4. The first transaction is successful. The second should fail.75 // TokenLimit = 4. The first transaction is successful. The second should fail.75 await timeoutPromise(10000);76 await timeoutPromise(20000);76 });77 });77 });78 });78});79});tests/src/collision-tests/turnsOffMinting.test.tsdiffbeforeafterboth7 addToWhiteListExpectSuccess,7 addToWhiteListExpectSuccess,8 createCollectionExpectSuccess,8 createCollectionExpectSuccess,9 setMintPermissionExpectSuccess,9 setMintPermissionExpectSuccess,10 normalizeAccountId,10} from '../util/helpers';11} from '../util/helpers';111212chai.use(chaiAsPromised);13chai.use(chaiAsPromised);30 await setMintPermissionExpectSuccess(Alice, collectionId, true);31 await setMintPermissionExpectSuccess(Alice, collectionId, true);31 await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address);32 await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address);323333 const mintItem = api.tx.nft.createItem(collectionId, Ferdie.address, 'NFT');34 const mintItem = api.tx.nft.createItem(collectionId, normalizeAccountId(Ferdie.address), 'NFT');34 const offMinting = api.tx.nft.setMintPermission(collectionId, false);35 const offMinting = api.tx.nft.setMintPermission(collectionId, false);35 await Promise.all([36 await Promise.all([36 mintItem.signAndSend(Ferdie),37 mintItem.signAndSend(Ferdie),