difftreelog
patch: Fix broken test. Add some new tests. Move tests.
in: master
2 files changed
tests/src/eth/collectionSponsoring.test.tsdiffbeforeafterboth1import {addToAllowListExpectSuccess, confirmSponsorshipExpectSuccess, createCollectionExpectSuccess, enablePublicMintingExpectSuccess, setCollectionSponsorExpectSuccess} from '../util/helpers';1import {addToAllowListExpectSuccess, confirmSponsorshipExpectSuccess, createCollectionExpectSuccess, enablePublicMintingExpectSuccess, getDetailedCollectionInfo, setCollectionSponsorExpectSuccess} from '../util/helpers';2import {itWeb3, createEthAccount, collectionIdToAddress, GAS_ARGS, normalizeEvents} from './util/helpers';2import {itWeb3, createEthAccount, collectionIdToAddress, GAS_ARGS, normalizeEvents, createEthAccountWithBalance, evmCollectionHelpers, getCollectionAddressFromResult, evmCollection, ethBalanceViaSub} from './util/helpers';3import nonFungibleAbi from './nonFungibleAbi.json';3import nonFungibleAbi from './nonFungibleAbi.json';4import {expect} from 'chai';4import {expect} from 'chai';5import { evmToAddress } from '@polkadot/util-crypto';566describe('evm collection sponsoring', () => {7describe('evm collection sponsoring', () => {7 itWeb3('sponsors mint transactions', async ({web3, privateKeyWrapper}) => {8 itWeb3('sponsors mint transactions', async ({web3, privateKeyWrapper}) => {37 ]);38 ]);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 });39});166});40167tests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth--- a/tests/src/eth/contractSponsoring.test.ts
+++ b/tests/src/eth/contractSponsoring.test.ts
@@ -23,24 +23,8 @@
itWeb3,
SponsoringMode,
createEthAccount,
- collectionIdToAddress,
- GAS_ARGS,
- normalizeEvents,
- subToEth,
- executeEthTxOnSub,
- evmCollectionHelpers,
- getCollectionAddressFromResult,
- evmCollection,
ethBalanceViaSub,
} from './util/helpers';
-import {
- addCollectionAdminExpectSuccess,
- createCollectionExpectSuccess,
- getDetailedCollectionInfo,
- transferBalanceTo,
-} from '../util/helpers';
-import nonFungibleAbi from './nonFungibleAbi.json';
-import getBalance from '../substrate/get-balance';
import {evmToAddress} from '@polkadot/util-crypto';
describe('Sponsoring EVM contracts', () => {
@@ -62,39 +46,99 @@
await expect(helpers.methods.setSponsoringMode(notOwner, SponsoringMode.Allowlisted).send({from: notOwner})).to.rejected;
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
});
+
+ itWeb3('Sponsor can be set by the address that deployed the contract', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const flipper = await deployFlipper(web3, owner);
+ const helpers = contractHelpers(web3, owner);
+ expect(await helpers.methods.hasPendingSponsor(flipper.options.address).call()).to.be.false;
+ await expect(helpers.methods.setSponsor(flipper.options.address, sponsor).send()).to.be.not.rejected;
+ expect(await helpers.methods.hasPendingSponsor(flipper.options.address).call()).to.be.true;
+ });
+
+ itWeb3('Sponsor can not be set by the address that did not deployed the contract', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const notOwner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const flipper = await deployFlipper(web3, owner);
+ const helpers = contractHelpers(web3, owner);
+ expect(await helpers.methods.hasPendingSponsor(flipper.options.address).call()).to.be.false;
+ await expect(helpers.methods.setSponsor(flipper.options.address, sponsor).call({from: notOwner})).to.be.rejectedWith('NoPermission');
+ expect(await helpers.methods.hasPendingSponsor(flipper.options.address).call()).to.be.false;
+ });
+
+ itWeb3('Sponsorship can be confirmed by the address that pending as sponsor', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const flipper = await deployFlipper(web3, owner);
+ const helpers = contractHelpers(web3, owner);
+ expect(await helpers.methods.hasSponsor(flipper.options.address).call()).to.be.false;
+ await expect(helpers.methods.setSponsor(flipper.options.address, sponsor).send()).to.be.not.rejected;
+ await expect(helpers.methods.confirmSponsorship(flipper.options.address).send({from: sponsor})).to.be.not.rejected;
+ expect(await helpers.methods.hasSponsor(flipper.options.address).call()).to.be.true;
+ });
+
+ itWeb3('Sponsorship can not be confirmed by the address that not pending as sponsor', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const notSponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const flipper = await deployFlipper(web3, owner);
+ const helpers = contractHelpers(web3, owner);
+ expect(await helpers.methods.hasSponsor(flipper.options.address).call()).to.be.false;
+ await expect(helpers.methods.setSponsor(flipper.options.address, sponsor).send()).to.be.not.rejected;
+ await expect(helpers.methods.confirmSponsorship(flipper.options.address).call({from: notSponsor})).to.be.rejectedWith('NoPermission');
+ expect(await helpers.methods.hasSponsor(flipper.options.address).call()).to.be.false;
+ });
+
+ itWeb3('Get confirmed sponsor', async ({api, web3, privateKeyWrapper}) => {
+ const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const flipper = await deployFlipper(web3, owner);
+ const helpers = contractHelpers(web3, owner);
+ await helpers.methods.setSponsor(flipper.options.address, sponsor).send();
+ await helpers.methods.confirmSponsorship(flipper.options.address).send({from: sponsor});
+
+ const result = await helpers.methods.getSponsor(flipper.options.address).call();
+
+ expect(result[0]).to.be.eq(sponsor);
+ const sponsorSub = api.registry.createType('AccountId', '0x' + BigInt(result[1]).toString(16).padStart(64, '0')).toJSON();
+ expect(sponsorSub).to.be.eq(evmToAddress(sponsor));
+ });
itWeb3('In generous mode, non-allowlisted user transaction will be sponsored', async ({api, web3, privateKeyWrapper}) => {
- const alice = privateKeyWrapper('//Alice');
-
const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const flipper = await deployFlipper(web3, owner);
const helpers = contractHelpers(web3, owner);
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
+ expect(await helpers.methods.hasSponsor(flipper.options.address).call()).to.be.false;
+ await helpers.methods.setSponsor(flipper.options.address, sponsor).send();
+ await helpers.methods.confirmSponsorship(flipper.options.address).send({from: sponsor});
+ expect(await helpers.methods.hasSponsor(flipper.options.address).call()).to.be.true;
+
await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Generous).send({from: owner});
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
-
- await transferBalanceToEth(api, alice, flipper.options.address);
- const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
- expect(originalFlipperBalance).to.be.not.equal('0');
+ const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
+ const callerBalanceBefore = await ethBalanceViaSub(api, caller);
await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
- // Balance should be taken from flipper instead of caller
- const balanceAfter = await web3.eth.getBalance(flipper.options.address);
- expect(+balanceAfter).to.be.lessThan(+originalFlipperBalance);
+ // Balance should be taken from sponsor instead of caller
+ const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
+ const callerBalanceAfter = await ethBalanceViaSub(api, caller);
+ expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
+ expect(callerBalanceAfter).to.be.eq(callerBalanceBefore);
});
itWeb3('Sponsoring is set, an address that has no UNQ can send a transaction and it works. Sponsor balance should decrease (allowlisted)', async ({api, web3, privateKeyWrapper}) => {
- const alice = privateKeyWrapper('//Alice');
-
const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const caller = createEthAccount(web3);
const flipper = await deployFlipper(web3, owner);
@@ -103,22 +147,21 @@
await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
- await transferBalanceToEth(api, alice, flipper.options.address);
+ await helpers.methods.setSponsor(flipper.options.address, sponsor).send();
+ await helpers.methods.confirmSponsorship(flipper.options.address).send({from: sponsor});
- const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
- expect(originalFlipperBalance).to.be.not.equal('0');
+ const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
+ expect(sponsorBalanceBefore).to.be.not.equal('0');
await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
// Balance should be taken from flipper instead of caller
- const balanceAfter = await web3.eth.getBalance(flipper.options.address);
- expect(+balanceAfter).to.be.lessThan(+originalFlipperBalance);
+ const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
+ expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
});
itWeb3('Sponsoring is set, an address that has no UNQ can send a transaction and it works. Sponsor balance should not decrease (non-allowlisted)', async ({api, web3, privateKeyWrapper}) => {
@@ -131,10 +174,8 @@
const helpers = contractHelpers(web3, owner);
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
await transferBalanceToEth(api, alice, flipper.options.address);
@@ -150,11 +191,9 @@
});
itWeb3('Sponsoring is set, an address that has UNQ can send a transaction and it works. User balance should not change', async ({api, web3, privateKeyWrapper}) => {
- const alice = privateKeyWrapper('//Alice');
-
const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
- const originalCallerBalance = await web3.eth.getBalance(caller);
const flipper = await deployFlipper(web3, owner);
@@ -162,26 +201,27 @@
await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
- await transferBalanceToEth(api, alice, flipper.options.address);
+ await helpers.methods.setSponsor(flipper.options.address, sponsor).send();
+ await helpers.methods.confirmSponsorship(flipper.options.address).send({from: sponsor});
- const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
- expect(originalFlipperBalance).to.be.not.equal('0');
+ const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
+ const callerBalanceBefore = await ethBalanceViaSub(api, caller);
await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
- expect(await web3.eth.getBalance(caller)).to.be.equals(originalCallerBalance);
+ const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
+ const callerBalanceAfter = await ethBalanceViaSub(api, caller);
+ expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
+ expect(callerBalanceAfter).to.be.equals(callerBalanceBefore);
});
itWeb3('Sponsoring is limited, with setContractRateLimit. The limitation is working if transactions are sent more often, the sender pays the commission.', async ({api, web3, privateKeyWrapper}) => {
- const alice = privateKeyWrapper('//Alice');
-
const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+ const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const caller = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const originalCallerBalance = await web3.eth.getBalance(caller);
@@ -191,25 +231,24 @@
await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 10).send({from: owner});
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
- await transferBalanceToEth(api, alice, flipper.options.address);
+ await helpers.methods.setSponsor(flipper.options.address, sponsor).send();
+ await helpers.methods.confirmSponsorship(flipper.options.address).send({from: sponsor});
- const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
+ const originalFlipperBalance = await web3.eth.getBalance(sponsor);
expect(originalFlipperBalance).to.be.not.equal('0');
await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
expect(await web3.eth.getBalance(caller)).to.be.equals(originalCallerBalance);
- const newFlipperBalance = await web3.eth.getBalance(flipper.options.address);
+ const newFlipperBalance = await web3.eth.getBalance(sponsor);
expect(newFlipperBalance).to.be.not.equals(originalFlipperBalance);
await flipper.methods.flip().send({from: caller});
- expect(await web3.eth.getBalance(flipper.options.address)).to.be.equal(newFlipperBalance);
+ expect(await web3.eth.getBalance(sponsor)).to.be.equal(newFlipperBalance);
expect(await web3.eth.getBalance(caller)).to.be.not.equals(originalCallerBalance);
});
@@ -219,131 +258,5 @@
const flipper = await deployFlipper(web3, owner);
const helpers = contractHelpers(web3, owner);
expect(await helpers.methods.getSponsoringRateLimit(flipper.options.address).call()).to.be.equals('7200');
- });
-
- itWeb3('Sponsoring collection from evm address via access list', async ({api, web3, privateKeyWrapper}) => {
- const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
- const collectionHelpers = evmCollectionHelpers(web3, owner);
- let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();
- const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
- const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
- const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
- result = await collectionEvm.methods.setCollectionSponsor(sponsor).send({from: owner});
- let collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
- const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
- expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;
- expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
- await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');
-
- await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});
- collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
- expect(collectionSub.sponsorship.isConfirmed).to.be.true;
- expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
-
- const user = createEthAccount(web3);
- const nextTokenId = await collectionEvm.methods.nextTokenId().call();
- expect(nextTokenId).to.be.equal('1');
-
- const oldPermissions = (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();
- expect(oldPermissions.mintMode).to.be.false;
- expect(oldPermissions.access).to.be.equal('Normal');
-
- await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});
- await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});
- await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});
-
- const newPermissions = (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();
- expect(newPermissions.mintMode).to.be.true;
- expect(newPermissions.access).to.be.equal('AllowList');
-
- const ownerBalanceBefore = await ethBalanceViaSub(api, owner);
- const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
-
- {
- const nextTokenId = await collectionEvm.methods.nextTokenId().call();
- expect(nextTokenId).to.be.equal('1');
- const result = await collectionEvm.methods.mintWithTokenURI(
- user,
- nextTokenId,
- 'Test URI',
- ).send({from: user});
- const events = normalizeEvents(result.events);
-
- expect(events).to.be.deep.equal([
- {
- address: collectionIdAddress,
- event: 'Transfer',
- args: {
- from: '0x0000000000000000000000000000000000000000',
- to: user,
- tokenId: nextTokenId,
- },
- },
- ]);
-
- const ownerBalanceAfter = await ethBalanceViaSub(api, owner);
- const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
-
- expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
- expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);
- expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;
- }
- });
-
- itWeb3('Check that transaction via EVM spend money from sponsor address', async ({api, web3, privateKeyWrapper}) => {
- const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
- const collectionHelpers = evmCollectionHelpers(web3, owner);
- let result = await collectionHelpers.methods.createNonfungibleCollection('Sponsor collection', '1', '1').send();
- const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
- const sponsor = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
- const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
- result = await collectionEvm.methods.setCollectionSponsor(sponsor).send();
- let collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
- const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
- expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;
- expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
- await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');
- const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);
- await sponsorCollection.methods.confirmCollectionSponsorship().send();
- collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
- expect(collectionSub.sponsorship.isConfirmed).to.be.true;
- expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
-
- const user = createEthAccount(web3);
- await collectionEvm.methods.addCollectionAdmin(user).send();
-
- const ownerBalanceBefore = await ethBalanceViaSub(api, owner);
- const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
-
-
- const userCollectionEvm = evmCollection(web3, user, collectionIdAddress);
- const nextTokenId = await userCollectionEvm.methods.nextTokenId().call();
- expect(nextTokenId).to.be.equal('1');
- result = await userCollectionEvm.methods.mintWithTokenURI(
- user,
- nextTokenId,
- 'Test URI',
- ).send();
-
- const events = normalizeEvents(result.events);
- const address = collectionIdToAddress(collectionId);
-
- expect(events).to.be.deep.equal([
- {
- address,
- event: 'Transfer',
- args: {
- from: '0x0000000000000000000000000000000000000000',
- to: user,
- tokenId: nextTokenId,
- },
- },
- ]);
- expect(await userCollectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
-
- const ownerBalanceAfter = await ethBalanceViaSub(api, owner);
- expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);
- const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
- expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
});
});