git.delta.rocks / unique-network / refs/commits / 8684bc0f6fa5

difftreelog

source

tests/src/eth/collectionSponsoring.test.ts8.1 KiBsourcehistory
1import {addToAllowListExpectSuccess, confirmSponsorshipExpectSuccess, createCollectionExpectSuccess, enablePublicMintingExpectSuccess, getDetailedCollectionInfo, setCollectionSponsorExpectSuccess} 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  itWeb3('Sponsoring collection from evm address via access list', async ({api, web3, privateKeyWrapper}) => {42    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);43    const collectionHelpers = evmCollectionHelpers(web3, owner);44    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();45    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);46    const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);47    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);48    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send({from: owner});49    let collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;50    const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;51    expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;52    expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));53    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');5455    await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});56    collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;57    expect(collectionSub.sponsorship.isConfirmed).to.be.true;58    expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));5960    const user = createEthAccount(web3);61    const nextTokenId = await collectionEvm.methods.nextTokenId().call();62    expect(nextTokenId).to.be.equal('1');6364    const oldPermissions = (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();65    expect(oldPermissions.mintMode).to.be.false;66    expect(oldPermissions.access).to.be.equal('Normal');6768    await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});69    await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});70    await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});7172    const newPermissions = (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();73    expect(newPermissions.mintMode).to.be.true;74    expect(newPermissions.access).to.be.equal('AllowList');7576    const ownerBalanceBefore = await ethBalanceViaSub(api, owner);77    const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);7879    {80      const nextTokenId = await collectionEvm.methods.nextTokenId().call();81      expect(nextTokenId).to.be.equal('1');82      const result = await collectionEvm.methods.mintWithTokenURI(83        user,84        nextTokenId,85        'Test URI',86      ).send({from: user});87      const events = normalizeEvents(result.events);8889      expect(events).to.be.deep.equal([90        {91          address: collectionIdAddress,92          event: 'Transfer',93          args: {94            from: '0x0000000000000000000000000000000000000000',95            to: user,96            tokenId: nextTokenId,97          },98        },99      ]);100101      const ownerBalanceAfter = await ethBalanceViaSub(api, owner);102      const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);103104      expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');105      expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);106      expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;107    }108  });109110  itWeb3('Check that transaction via EVM spend money from sponsor address', async ({api, web3, privateKeyWrapper}) => {111    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);112    const collectionHelpers = evmCollectionHelpers(web3, owner);113    let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();114    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);115    const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);116    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);117    result = await collectionEvm.methods.setCollectionSponsor(sponsor).send();118    let collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;119    const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;120    expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;121    expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));122    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');123    const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);124    await sponsorCollection.methods.confirmCollectionSponsorship().send();125    collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;126    expect(collectionSub.sponsorship.isConfirmed).to.be.true;127    expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));128129    const user = createEthAccount(web3);130    await collectionEvm.methods.addCollectionAdmin(user).send();131    132    const ownerBalanceBefore = await ethBalanceViaSub(api, owner);133    const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);134    135  136    const userCollectionEvm = evmCollection(web3, user, collectionIdAddress);137    const nextTokenId = await userCollectionEvm.methods.nextTokenId().call();138    expect(nextTokenId).to.be.equal('1');139    result = await userCollectionEvm.methods.mintWithTokenURI(140      user,141      nextTokenId,142      'Test URI',143    ).send();144145    const events = normalizeEvents(result.events);146    const address = collectionIdToAddress(collectionId);147148    expect(events).to.be.deep.equal([149      {150        address,151        event: 'Transfer',152        args: {153          from: '0x0000000000000000000000000000000000000000',154          to: user,155          tokenId: nextTokenId,156        },157      },158    ]);159    expect(await userCollectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');160  161    const ownerBalanceAfter = await ethBalanceViaSub(api, owner);162    expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);163    const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);164    expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;165  });166});