git.delta.rocks / unique-network / refs/commits / 19616c6c3dee

difftreelog

fix collectionSponsoringTests

Maksandre2022-10-05parent: #44c4cc8.patch.diff
in: master

1 file changed

modifiedtests/src/eth/collectionSponsoring.test.tsdiffbeforeafterboth
before · 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 = 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 = 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 = 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 = 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});
after · tests/src/eth/collectionSponsoring.test.ts
1import {usingPlaygrounds} from './../util/playgrounds/index';2import {IKeyringPair} from '@polkadot/types/types';3import {normalizeEvents} from './util/helpers';4import {itEth, expect} from '../eth/util/playgrounds';56describe('evm collection sponsoring', () => {7  let donor: IKeyringPair;8  let alice: IKeyringPair;9  let nominal: bigint;1011  before(async () => {12    await usingPlaygrounds(async (helper, privateKey) => {13      donor = privateKey('//Alice');14      nominal = helper.balance.getOneTokenNominal();15    });16  });1718  beforeEach(async () => {19    await usingPlaygrounds(async (helper) => {20      [alice] = await helper.arrange.createAccounts([1000n], donor);21    });22  });2324  itEth('sponsors mint transactions', async ({helper}) => {25    const collection = await helper.nft.mintCollection(alice, {tokenPrefix: 'spnr', permissions: {mintMode: true}});26    await collection.setSponsor(alice, alice.address);27    await collection.confirmSponsorship(alice);2829    const minter = helper.eth.createAccount();30    expect(await helper.balance.getEthereum(minter)).to.equal(0n);3132    const collectionAddress = helper.ethAddress.fromCollectionId(collection.collectionId);33    const contract = helper.ethNativeContract.collection(collectionAddress, 'nft', minter);3435    await collection.addToAllowList(alice, {Ethereum: minter});3637    const nextTokenId = await contract.methods.nextTokenId().call();38    expect(nextTokenId).to.equal('1');39    const result = await contract.methods.mint(minter, nextTokenId).send();40    const events = normalizeEvents(result.events);41    expect(events).to.be.deep.equal([42      {43        address: collectionAddress,44        event: 'Transfer',45        args: {46          from: '0x0000000000000000000000000000000000000000',47          to: minter,48          tokenId: nextTokenId,49        },50      },51    ]);52  });5354  // TODO: Temprorary off. Need refactor55  // itWeb3('Set substrate sponsor', async ({api, web3, privateKeyWrapper}) => {56  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);57  //   const collectionHelpers = evmCollectionHelpers(web3, owner);58  //   let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();59  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);60  //   const sponsor = privateKeyWrapper('//Alice');61  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);6263  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;64  //   result = await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});65  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;66    67  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);68  //   await submitTransactionAsync(sponsor, confirmTx);69  //   expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;70    71  //   const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});72  //   expect(bigIntToSub(api, BigInt(sponsorTuple[1]))).to.be.eq(sponsor.address);73  // });7475  itEth('Remove sponsor', async ({helper}) => {76    const owner = await helper.eth.createAccountWithBalance(donor);77    const collectionHelpers = helper.ethNativeContract.collectionHelpers(owner);7879    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send({value: Number(2n * nominal)});80    const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);81    const sponsor = await helper.eth.createAccountWithBalance(donor);82    const collectionEvm = helper.ethNativeContract.collection(collectionIdAddress, 'nft', owner);8384    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;85    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send({from: owner});86    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.true;87    88    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});89    expect(await collectionEvm.methods.hasCollectionPendingSponsor().call({from: owner})).to.be.false;90    91    await collectionEvm.methods.removeCollectionSponsor().send({from: owner});92    93    const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});94    expect(sponsorTuple.field_0).to.be.eq('0x0000000000000000000000000000000000000000');95  });9697  itEth('Sponsoring collection from evm address via access list', async ({helper, privateKey}) => {98    const owner = await helper.eth.createAccountWithBalance(donor);99    const collectionHelpers = helper.ethNativeContract.collectionHelpers(owner);100101    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send({value: Number(2n * nominal)});102    const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);103    const collectionId = helper.ethAddress.extractCollectionId(collectionIdAddress);104    const collection = helper.nft.getCollectionObject(collectionId);105    const sponsor = await helper.eth.createAccountWithBalance(donor);106    const collectionEvm = helper.ethNativeContract.collection(collectionIdAddress, 'nft', owner);107108    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send({from: owner});109    let collectionData = (await collection.getData())!;110    const ss58Format = helper.chain.getChainProperties().ss58Format;111    expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsor));112    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');113114    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});115    collectionData = (await collection.getData())!;116    expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsor));117118    const user = helper.eth.createAccount();119    const nextTokenId = await collectionEvm.methods.nextTokenId().call();120    expect(nextTokenId).to.be.equal('1');121122    const oldPermissions = (await collection.getData())!.raw.permissions; // (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();123    expect(oldPermissions.mintMode).to.be.false;124    expect(oldPermissions.access).to.be.equal('Normal');125126    await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});127    await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});128    await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});129130    const newPermissions = (await collection.getData())!.raw.permissions; // (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();131    expect(newPermissions.mintMode).to.be.true;132    expect(newPermissions.access).to.be.equal('AllowList');133134    const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));135    const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));136137    {138      const nextTokenId = await collectionEvm.methods.nextTokenId().call();139      expect(nextTokenId).to.be.equal('1');140      const result = await collectionEvm.methods.mintWithTokenURI(141        user,142        nextTokenId,143        'Test URI',144      ).send({from: user});145      const events = normalizeEvents(result.events);146147      expect(events).to.be.deep.equal([148        {149          address: collectionIdAddress,150          event: 'Transfer',151          args: {152            from: '0x0000000000000000000000000000000000000000',153            to: user,154            tokenId: nextTokenId,155          },156        },157      ]);158159      const ownerBalanceAfter = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(owner));160      const sponsorBalanceAfter = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(sponsor));161162      expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');163      expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);164      expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;165    }166  });167168  // TODO: Temprorary off. Need refactor169  // itWeb3('Sponsoring collection from substrate address via access list', async ({api, web3, privateKeyWrapper}) => {170  //   const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);171  //   const collectionHelpers = evmCollectionHelpers(web3, owner);172  //   const result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();173  //   const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);174  //   const sponsor = privateKeyWrapper('//Alice');175  //   const collectionEvm = evmCollection(web3, owner, collectionIdAddress);176177  //   await collectionEvm.methods.setCollectionSponsorSubstrate(sponsor.addressRaw).send({from: owner});178    179  //   const confirmTx = await api.tx.unique.confirmSponsorship(collectionId);180  //   await submitTransactionAsync(sponsor, confirmTx);181    182  //   const user = createEthAccount(web3);183  //   const nextTokenId = await collectionEvm.methods.nextTokenId().call();184  //   expect(nextTokenId).to.be.equal('1');185186  //   await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});187  //   await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});188  //   await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});189190  //   const ownerBalanceBefore = await ethBalanceViaSub(api, owner);191  //   const sponsorBalanceBefore = (await getBalance(api, [sponsor.address]))[0];192193  //   {194  //     const nextTokenId = await collectionEvm.methods.nextTokenId().call();195  //     expect(nextTokenId).to.be.equal('1');196  //     const result = await collectionEvm.methods.mintWithTokenURI(197  //       user,198  //       nextTokenId,199  //       'Test URI',200  //     ).send({from: user});201  //     const events = normalizeEvents(result.events);202203  //     expect(events).to.be.deep.equal([204  //       {205  //         address: collectionIdAddress,206  //         event: 'Transfer',207  //         args: {208  //           from: '0x0000000000000000000000000000000000000000',209  //           to: user,210  //           tokenId: nextTokenId,211  //         },212  //       },213  //     ]);214215  //     const ownerBalanceAfter = await ethBalanceViaSub(api, owner);216  //     const sponsorBalanceAfter = (await getBalance(api, [sponsor.address]))[0];217218  //     expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');219  //     expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);220  //     expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;221  //   }222  // });223224  itEth('Check that transaction via EVM spend money from sponsor address', async ({helper, privateKey}) => {225    const owner = await helper.eth.createAccountWithBalance(donor);226    const collectionHelpers = helper.ethNativeContract.collectionHelpers(owner);227228    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send({value: Number(2n * nominal)});229    const collectionIdAddress = helper.ethAddress.normalizeAddress(result.events.CollectionCreated.returnValues.collectionId);230    const collectionId = helper.ethAddress.extractCollectionId(collectionIdAddress);231    const collection = helper.nft.getCollectionObject(collectionId);232    const sponsor = await helper.eth.createAccountWithBalance(donor);233    const collectionEvm = helper.ethNativeContract.collection(collectionIdAddress, 'nft', owner);234235    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send();236    let collectionData = (await collection.getData())!;237    expect(collectionData.raw.sponsorship.Unconfirmed).to.be.eq(helper.address.ethToSubstrate(sponsor));238    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');239240    const sponsorCollection = helper.ethNativeContract.collection(collectionIdAddress, 'nft', sponsor);241    await sponsorCollection.methods.confirmCollectionSponsorship().send();242    collectionData = (await collection.getData())!;243    expect(collectionData.raw.sponsorship.Confirmed).to.be.eq(helper.address.ethToSubstrate(sponsor));244245    const user = helper.eth.createAccount();246    await collectionEvm.methods.addCollectionAdmin(user).send();247    248    const ownerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(owner));249    const sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor));250251    const userCollectionEvm = helper.ethNativeContract.collection(collectionIdAddress, 'nft', user);252    const nextTokenId = await userCollectionEvm.methods.nextTokenId().call();253    expect(nextTokenId).to.be.equal('1');254    result = await userCollectionEvm.methods.mintWithTokenURI(255      user,256      nextTokenId,257      'Test URI',258    ).send();259260    const events = normalizeEvents(result.events);261    const address = helper.ethAddress.fromCollectionId(collectionId);262263    expect(events).to.be.deep.equal([264      {265        address,266        event: 'Transfer',267        args: {268          from: '0x0000000000000000000000000000000000000000',269          to: user,270          tokenId: nextTokenId,271        },272      },273    ]);274    expect(await userCollectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');275  276    const ownerBalanceAfter = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(owner));277    expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);278    const sponsorBalanceAfter = await helper.balance.getSubstrate(await helper.address.ethToSubstrate(sponsor));279    expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;280  });281});