git.delta.rocks / unique-network / refs/commits / 22fb1ca81266

difftreelog

refactor use playgtounds in collectionSponsoring eth test

Daniel Shiposha2022-09-30parent: #8afb146.patch.diff
in: master

1 file changed

modifiedtests/src/eth/collectionSponsoring.test.tsdiffbeforeafterboth
before · tests/src/eth/collectionSponsoring.test.ts
1import {addToAllowListExpectSuccess, confirmSponsorshipExpectSuccess, createCollectionExpectSuccess, enablePublicMintingExpectSuccess, getDetailedCollectionInfo, setCollectionSponsorExpectSuccess, UNIQUE} from '../util/helpers';2import {itWeb3, createEthAccount, collectionIdToAddress, GAS_ARGS, normalizeEvents, createEthAccountWithBalance, evmCollectionHelpers, getCollectionAddressFromResult, evmCollection, ethBalanceViaSub} from './util/helpers';3import nonFungibleAbi from './nonFungibleAbi.json';4import {expect} from 'chai';5import {evmToAddress} from '@polkadot/util-crypto';67describe('evm collection sponsoring', () => {8  itWeb3('sponsors mint transactions', async ({web3, privateKeyWrapper}) => {9    const alice = privateKeyWrapper('//Alice');1011    const collection = await createCollectionExpectSuccess();12    await setCollectionSponsorExpectSuccess(collection, alice.address);13    await confirmSponsorshipExpectSuccess(collection);1415    const minter = createEthAccount(web3);16    expect(await web3.eth.getBalance(minter)).to.equal('0');1718    const address = collectionIdToAddress(collection);19    const contract = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collection), {from: minter, ...GAS_ARGS});2021    await enablePublicMintingExpectSuccess(alice, collection);22    await addToAllowListExpectSuccess(alice, collection, {Ethereum: minter});2324    const nextTokenId = await contract.methods.nextTokenId().call();25    expect(nextTokenId).to.equal('1');26    const result = await contract.methods.mint(minter, nextTokenId).send();27    const events = normalizeEvents(result.events);28    expect(events).to.be.deep.equal([29      {30        address,31        event: 'Transfer',32        args: {33          from: '0x0000000000000000000000000000000000000000',34          to: minter,35          tokenId: nextTokenId,36        },37      },38    ]);39  });4041  // TODO: Temprorary off. Need refactor42  // itWeb3('Set substrate sponsor', async ({api, web3, privateKeyWrapper}) => {43  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);44  //   const collectionHelpers = evmCollectionHelpers(web3, owner);45  //   let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();46  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);47  //   const sponsor = privateKeyWrapper('//Alice');48  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);4950  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;51  //   result = await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});52  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;53    54  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);55  //   await submitTransactionAsync(sponsor, confirmTx);56  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;57    58  //   const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});59  //   expect(bigIntToSub(api, BigInt(sponsorTuple[1]))).to.be.eq(sponsor.address);60  // });6162  itWeb3('Remove sponsor', async ({api, web3, privateKeyWrapper}) => {63    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);64    const collectionHelpers = evmCollectionHelpers(web3, owner);65    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send({value: Number(2n * UNIQUE)});66    const {collectionIdAddress} = await getCollectionAddressFromResult(api, result);67    const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);68    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);6970    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;71    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send({from: owner});72    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;73    74    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});75    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;76    77    await collectionEvm.methods.removeCollectionSponsor().send({from: owner});78    79    const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});80    expect(sponsorTuple.field_0).to.be.eq('0x0000000000000000000000000000000000000000');81  });8283  itWeb3('Sponsoring collection from evm address via access list', async ({api, web3, privateKeyWrapper}) => {84    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);85    const collectionHelpers = evmCollectionHelpers(web3, owner);86    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send({value: Number(2n * UNIQUE)});87    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);88    const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);89    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);90    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send({from: owner});91    let collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;92    const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;93    expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;94    expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));95    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');9697    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});98    collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;99    expect(collectionSub.sponsorship.isConfirmed).to.be.true;100    expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));101102    const user = createEthAccount(web3);103    const nextTokenId = await collectionEvm.methods.nextTokenId().call();104    expect(nextTokenId).to.be.equal('1');105106    const oldPermissions = (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();107    expect(oldPermissions.mintMode).to.be.false;108    expect(oldPermissions.access).to.be.equal('Normal');109110    await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});111    await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});112    await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});113114    const newPermissions = (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();115    expect(newPermissions.mintMode).to.be.true;116    expect(newPermissions.access).to.be.equal('AllowList');117118    const ownerBalanceBefore = await ethBalanceViaSub(api, owner);119    const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);120121    {122      const nextTokenId = await collectionEvm.methods.nextTokenId().call();123      expect(nextTokenId).to.be.equal('1');124      const result = await collectionEvm.methods.mintWithTokenURI(125        user,126        nextTokenId,127        'Test URI',128      ).send({from: user});129      const events = normalizeEvents(result.events);130131      expect(events).to.be.deep.equal([132        {133          address: collectionIdAddress,134          event: 'Transfer',135          args: {136            from: '0x0000000000000000000000000000000000000000',137            to: user,138            tokenId: nextTokenId,139          },140        },141      ]);142143      const ownerBalanceAfter = await ethBalanceViaSub(api, owner);144      const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);145146      expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');147      expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);148      expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;149    }150  });151152  // TODO: Temprorary off. Need refactor153  // itWeb3('Sponsoring collection from substrate address via access list', async ({api, web3, privateKeyWrapper}) => {154  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);155  //   const collectionHelpers = evmCollectionHelpers(web3, owner);156  //   const result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();157  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);158  //   const sponsor = privateKeyWrapper('//Alice');159  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);160161  //   await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});162    163  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);164  //   await submitTransactionAsync(sponsor, confirmTx);165    166  //   const user = createEthAccount(web3);167  //   const nextTokenId = await collectionEvm.methods.nextTokenId().call();168  //   expect(nextTokenId).to.be.equal('1');169170  //   await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});171  //   await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});172  //   await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});173174  //   const ownerBalanceBefore = await ethBalanceViaSub(api, owner);175  //   const sponsorBalanceBefore = (await getBalance(api, [sponsor.address]))[0];176177  //   {178  //     const nextTokenId = await collectionEvm.methods.nextTokenId().call();179  //     expect(nextTokenId).to.be.equal('1');180  //     const result = await collectionEvm.methods.mintWithTokenURI(181  //       user,182  //       nextTokenId,183  //       'Test URI',184  //     ).send({from: user});185  //     const events = normalizeEvents(result.events);186187  //     expect(events).to.be.deep.equal([188  //       {189  //         address: collectionIdAddress,190  //         event: 'Transfer',191  //         args: {192  //           from: '0x0000000000000000000000000000000000000000',193  //           to: user,194  //           tokenId: nextTokenId,195  //         },196  //       },197  //     ]);198199  //     const ownerBalanceAfter = await ethBalanceViaSub(api, owner);200  //     const sponsorBalanceAfter = (await getBalance(api, [sponsor.address]))[0];201202  //     expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');203  //     expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);204  //     expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;205  //   }206  // });207208  itWeb3('Check that transaction via EVM spend money from sponsor address', async ({api, web3, privateKeyWrapper}) => {209    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);210    const collectionHelpers = evmCollectionHelpers(web3, owner);211    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send({value: Number(2n * UNIQUE)});212    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);213    const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);214    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);215    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send();216    let collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;217    const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;218    expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;219    expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));220    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');221    const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);222    await sponsorCollection.methods.confirmCollectionSponsorship().send();223    collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;224    expect(collectionSub.sponsorship.isConfirmed).to.be.true;225    expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));226227    const user = createEthAccount(web3);228    await collectionEvm.methods.addCollectionAdmin(user).send();229    230    const ownerBalanceBefore = await ethBalanceViaSub(api, owner);231    const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);232    233  234    const userCollectionEvm = evmCollection(web3, user, collectionIdAddress);235    const nextTokenId = await userCollectionEvm.methods.nextTokenId().call();236    expect(nextTokenId).to.be.equal('1');237    result = await userCollectionEvm.methods.mintWithTokenURI(238      user,239      nextTokenId,240      'Test URI',241    ).send();242243    const events = normalizeEvents(result.events);244    const address = collectionIdToAddress(collectionId);245246    expect(events).to.be.deep.equal([247      {248        address,249        event: 'Transfer',250        args: {251          from: '0x0000000000000000000000000000000000000000',252          to: user,253          tokenId: nextTokenId,254        },255      },256    ]);257    expect(await userCollectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');258  259    const ownerBalanceAfter = await ethBalanceViaSub(api, owner);260    expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);261    const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);262    expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;263  });264});
after · tests/src/eth/collectionSponsoring.test.ts
1import {collectionIdToAddress, normalizeEvents} from './util/helpers';2import {evmToAddress} from '@polkadot/util-crypto';3import {itEth, expect} from '../eth/util/playgrounds';45describe('evm collection sponsoring', () => {6  itEth('sponsors mint transactions', async ({helper, privateKey}) => {7    const alice = privateKey('//Alice');89    const collection = await helper.nft.mintCollection(alice, {tokenPrefix: 'spnr', permissions: {mintMode: true}});10    await collection.setSponsor(alice, alice.address);11    await collection.confirmSponsorship(alice);1213    const minter = helper.eth.createAccount();14    expect(await helper.balance.getEthereum(minter)).to.equal(0n);1516    const address = helper.ethAddress.fromCollectionId(collection.collectionId);17    const contract = helper.ethNativeContract.collection(address, 'nft', minter);1819    await collection.addToAllowList(alice, {Ethereum: minter});2021    const nextTokenId = await contract.methods.nextTokenId().call();22    expect(nextTokenId).to.equal('1');23    const result = await contract.methods.mint(minter, nextTokenId).send();24    const events = normalizeEvents(result.events);25    expect(events).to.be.deep.equal([26      {27        address,28        event: 'Transfer',29        args: {30          from: '0x0000000000000000000000000000000000000000',31          to: minter,32          tokenId: nextTokenId,33        },34      },35    ]);36  });3738  // TODO: Temprorary off. Need refactor39  // itWeb3('Set substrate sponsor', async ({api, web3, privateKeyWrapper}) => {40  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);41  //   const collectionHelpers = evmCollectionHelpers(web3, owner);42  //   let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();43  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);44  //   const sponsor = privateKeyWrapper('//Alice');45  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);4647  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;48  //   result = await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});49  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;50    51  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);52  //   await submitTransactionAsync(sponsor, confirmTx);53  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;54    55  //   const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});56  //   expect(bigIntToSub(api, BigInt(sponsorTuple[1]))).to.be.eq(sponsor.address);57  // });5859  itEth('Remove sponsor', async ({helper, privateKey}) => {60    const alice = privateKey('//Alice');6162    const owner = await helper.eth.createAccountWithBalance(alice);63    const collectionHelpers = helper.ethNativeContract.collectionHelpers(owner);6465    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();66    const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);67    const sponsor = await helper.eth.createAccountWithBalance(alice);68    const collectionEvm = await helper.ethNativeContract.collection(collectionIdAddress, 'nft', owner);6970    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;71    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send({from: owner});72    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;73    74    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});75    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;76    77    await collectionEvm.methods.removeCollectionSponsor().send({from: owner});78    79    const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});80    expect(sponsorTuple.field_0).to.be.eq('0x0000000000000000000000000000000000000000');81  });8283  itEth('Sponsoring collection from evm address via access list', async ({helper, privateKey}) => {84    const alice = privateKey('//Alice');8586    const owner = await helper.eth.createAccountWithBalance(alice);87    const collectionHelpers = helper.ethNativeContract.collectionHelpers(owner);8889    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();90    const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);91    const collectionId = helper.ethAddress.extractCollectionId(collectionIdAddress);92    const collection = helper.nft.getCollectionObject(collectionId);93    const sponsor = await helper.eth.createAccountWithBalance(alice);94    const collectionEvm = await helper.ethNativeContract.collection(collectionIdAddress, 'nft', owner);9596    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send({from: owner});97    let collectionData = (await collection.getData())!;98    const ss58Format = helper.chain.getChainProperties().ss58Format;99    expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));100    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');101102    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});103    collectionData = (await collection.getData())!;104    expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));105106    const user = helper.eth.createAccount();107    const nextTokenId = await collectionEvm.methods.nextTokenId().call();108    expect(nextTokenId).to.be.equal('1');109110    const oldPermissions = (await collection.getData())!.raw.permissions; // (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();111    expect(oldPermissions.mintMode).to.be.false;112    expect(oldPermissions.access).to.be.equal('Normal');113114    await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});115    await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});116    await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});117118    const newPermissions = (await collection.getData())!.raw.permissions; // (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();119    expect(newPermissions.mintMode).to.be.true;120    expect(newPermissions.access).to.be.equal('AllowList');121122    const ownerBalanceBefore = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(owner));123    const sponsorBalanceBefore = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(sponsor));124125    {126      const nextTokenId = await collectionEvm.methods.nextTokenId().call();127      expect(nextTokenId).to.be.equal('1');128      const result = await collectionEvm.methods.mintWithTokenURI(129        user,130        nextTokenId,131        'Test URI',132      ).send({from: user});133      const events = normalizeEvents(result.events);134135      expect(events).to.be.deep.equal([136        {137          address: collectionIdAddress,138          event: 'Transfer',139          args: {140            from: '0x0000000000000000000000000000000000000000',141            to: user,142            tokenId: nextTokenId,143          },144        },145      ]);146147      const ownerBalanceAfter = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(owner));148      const sponsorBalanceAfter = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(sponsor));149150      expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');151      expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);152      expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;153    }154  });155156  // TODO: Temprorary off. Need refactor157  // itWeb3('Sponsoring collection from substrate address via access list', async ({api, web3, privateKeyWrapper}) => {158  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);159  //   const collectionHelpers = evmCollectionHelpers(web3, owner);160  //   const result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();161  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);162  //   const sponsor = privateKeyWrapper('//Alice');163  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);164165  //   await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});166    167  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);168  //   await submitTransactionAsync(sponsor, confirmTx);169    170  //   const user = createEthAccount(web3);171  //   const nextTokenId = await collectionEvm.methods.nextTokenId().call();172  //   expect(nextTokenId).to.be.equal('1');173174  //   await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});175  //   await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});176  //   await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});177178  //   const ownerBalanceBefore = await ethBalanceViaSub(api, owner);179  //   const sponsorBalanceBefore = (await getBalance(api, [sponsor.address]))[0];180181  //   {182  //     const nextTokenId = await collectionEvm.methods.nextTokenId().call();183  //     expect(nextTokenId).to.be.equal('1');184  //     const result = await collectionEvm.methods.mintWithTokenURI(185  //       user,186  //       nextTokenId,187  //       'Test URI',188  //     ).send({from: user});189  //     const events = normalizeEvents(result.events);190191  //     expect(events).to.be.deep.equal([192  //       {193  //         address: collectionIdAddress,194  //         event: 'Transfer',195  //         args: {196  //           from: '0x0000000000000000000000000000000000000000',197  //           to: user,198  //           tokenId: nextTokenId,199  //         },200  //       },201  //     ]);202203  //     const ownerBalanceAfter = await ethBalanceViaSub(api, owner);204  //     const sponsorBalanceAfter = (await getBalance(api, [sponsor.address]))[0];205206  //     expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');207  //     expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);208  //     expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;209  //   }210  // });211212  itEth('Check that transaction via EVM spend money from sponsor address', async ({helper, privateKey}) => {213    const alice = privateKey('//Alice');214215    const owner = await helper.eth.createAccountWithBalance(alice);216    const collectionHelpers = helper.ethNativeContract.collectionHelpers(owner);217218    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();219    const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);220    const collectionId = helper.ethAddress.extractCollectionId(collectionIdAddress);221    const collection = helper.nft.getCollectionObject(collectionId);222    const sponsor = await helper.eth.createAccountWithBalance(alice);223    const collectionEvm = await helper.ethNativeContract.collection(collectionIdAddress, 'nft', owner);224225    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send();226    let collectionData = (await collection.getData())!;227    const ss58Format = helper.chain.getChainProperties().ss58Format;228    expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));229    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');230231    const sponsorCollection = await helper.ethNativeContract.collection(collectionIdAddress, 'nft', sponsor);232    await sponsorCollection.methods.confirmCollectionSponsorship().send();233    collectionData = (await collection.getData())!;234    expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));235236    const user = helper.eth.createAccount();237    await collectionEvm.methods.addCollectionAdmin(user).send();238    239    const ownerBalanceBefore = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(owner));240    const sponsorBalanceBefore = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(sponsor));241242    const userCollectionEvm = await helper.ethNativeContract.collection(collectionIdAddress, 'nft', user);243    const nextTokenId = await userCollectionEvm.methods.nextTokenId().call();244    expect(nextTokenId).to.be.equal('1');245    result = await userCollectionEvm.methods.mintWithTokenURI(246      user,247      nextTokenId,248      'Test URI',249    ).send();250251    const events = normalizeEvents(result.events);252    const address = collectionIdToAddress(collectionId);253254    expect(events).to.be.deep.equal([255      {256        address,257        event: 'Transfer',258        args: {259          from: '0x0000000000000000000000000000000000000000',260          to: user,261          tokenId: nextTokenId,262        },263      },264    ]);265    expect(await userCollectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');266  267    const ownerBalanceAfter = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(owner));268    expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);269    const sponsorBalanceAfter = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(sponsor));270    expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;271  });272});