difftreelog
test(contract-helpers) generous sponsoring mode
in: master
4 files changed
tests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth10 createEthAccountWithBalance,10 createEthAccountWithBalance,11 transferBalanceToEth,11 transferBalanceToEth,12 deployFlipper,12 deployFlipper,13 itWeb3} from './util/helpers';13 itWeb3,14 SponsoringMode,15 createEthAccount,16} from './util/helpers';141715describe('Sponsoring EVM contracts', () => {18describe('Sponsoring EVM contracts', () => {18 const flipper = await deployFlipper(web3, owner);21 const flipper = await deployFlipper(web3, owner);19 const helpers = contractHelpers(web3, owner);22 const helpers = contractHelpers(web3, owner);20 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;23 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;21 await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});24 await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});22 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;25 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;23 });26 });242728 const flipper = await deployFlipper(web3, owner);31 const flipper = await deployFlipper(web3, owner);29 const helpers = contractHelpers(web3, owner);32 const helpers = contractHelpers(web3, owner);30 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;33 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;31 await expect(helpers.methods.toggleSponsoring(notOwner, true).send({from: notOwner})).to.rejected;34 await expect(helpers.methods.setSponsoringMode(notOwner, SponsoringMode.Allowlisted).send({from: notOwner})).to.rejected;32 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;35 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;33 });36 });3738 itWeb3('In generous mode, non-allowlisted user transaction will be sponsored', async ({ api, web3 }) => {39 const alice = privateKey('//Alice');4041 const owner = await createEthAccountWithBalance(api, web3);42 const caller = await createEthAccountWithBalance(api, web3);4344 const flipper = await deployFlipper(web3, owner);4546 const helpers = contractHelpers(web3, owner);4748 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;49 await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Generous).send({from: owner});50 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});51 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;5253 await transferBalanceToEth(api, alice, flipper.options.address);5455 const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);56 expect(originalFlipperBalance).to.be.not.equal('0');5758 await flipper.methods.flip().send({from: caller});59 expect(await flipper.methods.getValue().call()).to.be.true;6061 // Balance should be taken from flipper instead of caller62 const balanceAfter = await web3.eth.getBalance(flipper.options.address);63 expect(+balanceAfter).to.be.lessThan(+originalFlipperBalance);64 });346535 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}) => {66 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}) => {36 const alice = privateKey('//Alice');67 const alice = privateKey('//Alice');376838 const owner = await createEthAccountWithBalance(api, web3);69 const owner = await createEthAccountWithBalance(api, web3);39 const caller = await createEthAccountWithBalance(api, web3);70 const caller = await createEthAccount(api);407141 const flipper = await deployFlipper(web3, owner);72 const flipper = await deployFlipper(web3, owner);427345 await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});76 await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});467747 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;78 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;48 await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});79 await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});49 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});80 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});50 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;81 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;518266 const alice = privateKey('//Alice');97 const alice = privateKey('//Alice');679868 const owner = await createEthAccountWithBalance(api, web3);99 const owner = await createEthAccountWithBalance(api, web3);69 const caller = await createEthAccountWithBalance(api, web3);100 const caller = await createEthAccount(api);7010171 const flipper = await deployFlipper(web3, owner);102 const flipper = await deployFlipper(web3, owner);7210373 const helpers = contractHelpers(web3, owner);104 const helpers = contractHelpers(web3, owner);7410575 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;106 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;76 await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});107 await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});77 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});108 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});78 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;109 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;79110104 await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});135 await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});105136106 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;137 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;107 await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});138 await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});108 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});139 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});109 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;140 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;110141133 await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});164 await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});134165135 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;166 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;136 await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});167 await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});137 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 10).send({from: owner});168 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 10).send({from: owner});138 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;169 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;139170158 expect(await helpers.methods.getSponsoringRateLimit(flipper.options.address).call()).to.be.equals('7200');189 expect(await helpers.methods.getSponsoringRateLimit(flipper.options.address).call()).to.be.equals('7200');159 });190 });160161 itWeb3('If allowlist mode is off and sponsorship is on, sponsorship does not work', async ({api, web3}) => {162 const alice = privateKey('//Alice');163164 const owner = await createEthAccountWithBalance(api, web3);165 const caller = await createEthAccountWithBalance(api, web3);166167 const flipper = await deployFlipper(web3, owner);168169 const helpers = contractHelpers(web3, owner);170171 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;172 await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});173 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});174 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;175176 await transferBalanceToEth(api, alice, flipper.options.address);177178 const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);179 expect(originalFlipperBalance).to.be.not.equal('0');180181 await flipper.methods.flip().send({from: caller});182 expect(await flipper.methods.getValue().call()).to.be.true;183184 // Balance should be taken from flipper instead of caller185 const balanceAfter = await web3.eth.getBalance(flipper.options.address);186 expect(+balanceAfter).to.be.equals(+originalFlipperBalance);187 });188189});191});190192tests/src/eth/marketplace/marketplace.test.tsdiffbeforeafterboth2import {getBalanceSingle, transferBalanceExpectSuccess} from '../../substrate/get-balance';2import {getBalanceSingle, transferBalanceExpectSuccess} from '../../substrate/get-balance';3import privateKey from '../../substrate/privateKey';3import privateKey from '../../substrate/privateKey';4import {addToAllowListExpectSuccess, confirmSponsorshipExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, getTokenOwner, setCollectionLimitsExpectSuccess, setCollectionSponsorExpectSuccess, transferExpectSuccess, transferFromExpectSuccess} from '../../util/helpers';4import {addToAllowListExpectSuccess, confirmSponsorshipExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, getTokenOwner, setCollectionLimitsExpectSuccess, setCollectionSponsorExpectSuccess, transferExpectSuccess, transferFromExpectSuccess} from '../../util/helpers';5import {collectionIdToAddress, contractHelpers, createEthAccountWithBalance, executeEthTxOnSub, GAS_ARGS, itWeb3, subToEth, subToEthLowercase, transferBalanceToEth} from '../util/helpers';5import {collectionIdToAddress, contractHelpers, createEthAccountWithBalance, executeEthTxOnSub, GAS_ARGS, itWeb3, SponsoringMode, subToEth, subToEthLowercase, transferBalanceToEth} from '../util/helpers';6import {evmToAddress} from '@polkadot/util-crypto';6import {evmToAddress} from '@polkadot/util-crypto';7import nonFungibleAbi from '../nonFungibleAbi.json';7import nonFungibleAbi from '../nonFungibleAbi.json';8import fungibleAbi from '../fungibleAbi.json';8import fungibleAbi from '../fungibleAbi.json';20 });20 });21 const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments:[matcherOwner]}).send({from: matcherOwner});21 const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments:[matcherOwner]}).send({from: matcherOwner});22 const helpers = contractHelpers(web3, matcherOwner);22 const helpers = contractHelpers(web3, matcherOwner);23 await helpers.methods.toggleSponsoring(matcher.options.address, true).send({from: matcherOwner});23 await helpers.methods.setSponsoringMode(matcher.options.address, SponsoringMode.Allowlisted).send({from: matcherOwner});24 await helpers.methods.setSponsoringRateLimit(matcher.options.address, 1).send({from: matcherOwner});24 await helpers.methods.setSponsoringRateLimit(matcher.options.address, 1).send({from: matcherOwner});25 await transferBalanceToEth(api, alice, matcher.options.address);25 await transferBalanceToEth(api, alice, matcher.options.address);2626147 const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments: [matcherOwner]}).send({from: matcherOwner, gas: 10000000});147 const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlace.bin`)).toString(), arguments: [matcherOwner]}).send({from: matcherOwner, gas: 10000000});148 await matcher.methods.setEscrow(escrow).send({from: matcherOwner});148 await matcher.methods.setEscrow(escrow).send({from: matcherOwner});149 const helpers = contractHelpers(web3, matcherOwner);149 const helpers = contractHelpers(web3, matcherOwner);150 await helpers.methods.toggleSponsoring(matcher.options.address, true).send({from: matcherOwner});150 await helpers.methods.setSponsoringMode(matcher.options.address, SponsoringMode.Allowlisted).send({from: matcherOwner});151 await helpers.methods.setSponsoringRateLimit(matcher.options.address, 1).send({from: matcherOwner});151 await helpers.methods.setSponsoringRateLimit(matcher.options.address, 1).send({from: matcherOwner});152 await transferBalanceToEth(api, alice, matcher.options.address);152 await transferBalanceToEth(api, alice, matcher.options.address);153153tests/src/eth/sponsoring.test.tsdiffbeforeafterboth1import {expect} from 'chai';1import {expect} from 'chai';2import privateKey from '../substrate/privateKey';2import privateKey from '../substrate/privateKey';3import {contractHelpers, createEthAccount, createEthAccountWithBalance, deployCollector, deployFlipper, itWeb3, transferBalanceToEth} from './util/helpers';3import {contractHelpers, createEthAccount, createEthAccountWithBalance, deployCollector, deployFlipper, itWeb3, SponsoringMode, transferBalanceToEth} from './util/helpers';445describe('EVM sponsoring', () => {5describe('EVM sponsoring', () => {6 itWeb3('Fee is deducted from contract if sponsoring is enabled', async ({api, web3}) => {6 itWeb3('Fee is deducted from contract if sponsoring is enabled', async ({api, web3}) => {18 await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});18 await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});191920 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;20 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;21 await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});21 await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Allowlisted).send({from: owner});22 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});22 await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});23 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;23 expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;242449 await helpers.methods.toggleAllowed(collector.options.address, caller, true).send({from: owner});49 await helpers.methods.toggleAllowed(collector.options.address, caller, true).send({from: owner});505051 expect(await helpers.methods.sponsoringEnabled(collector.options.address).call()).to.be.false;51 expect(await helpers.methods.sponsoringEnabled(collector.options.address).call()).to.be.false;52 await helpers.methods.toggleSponsoring(collector.options.address, true).send({from: owner});52 await helpers.methods.setSponsoringMode(collector.options.address, SponsoringMode.Allowlisted).send({from: owner});53 await helpers.methods.setSponsoringRateLimit(collector.options.address, 0).send({from: owner});53 await helpers.methods.setSponsoringRateLimit(collector.options.address, 0).send({from: owner});54 expect(await helpers.methods.sponsoringEnabled(collector.options.address).call()).to.be.true;54 expect(await helpers.methods.sponsoringEnabled(collector.options.address).call()).to.be.true;5555tests/src/eth/util/helpers.tsdiffbeforeafterboth212122export const GAS_ARGS = {gas: 2500000};22export const GAS_ARGS = {gas: 2500000};2324export enum SponsoringMode {25 Disabled,26 Allowlisted,27 Generous,28}232924let web3Connected = false;30let web3Connected = false;25export async function usingWeb3<T>(cb: (web3: Web3) => Promise<T> | T): Promise<T> {31export async function usingWeb3<T>(cb: (web3: Web3) => Promise<T> | T): Promise<T> {