git.delta.rocks / unique-network / refs/commits / a11cc833f140

difftreelog

test(contract-helpers) generous sponsoring mode

Yaroslav Bolyukin2022-01-19parent: #a5d7692.patch.diff
in: master

4 files changed

modifiedtests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth
10 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';
1417
15describe('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 });
2427
28 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 });
37
38 itWeb3('In generous mode, non-allowlisted user transaction will be sponsored', async ({ api, web3 }) => {
39 const alice = privateKey('//Alice');
40
41 const owner = await createEthAccountWithBalance(api, web3);
42 const caller = await createEthAccountWithBalance(api, web3);
43
44 const flipper = await deployFlipper(web3, owner);
45
46 const helpers = contractHelpers(web3, owner);
47
48 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;
52
53 await transferBalanceToEth(api, alice, flipper.options.address);
54
55 const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
56 expect(originalFlipperBalance).to.be.not.equal('0');
57
58 await flipper.methods.flip().send({from: caller});
59 expect(await flipper.methods.getValue().call()).to.be.true;
60
61 // Balance should be taken from flipper instead of caller
62 const balanceAfter = await web3.eth.getBalance(flipper.options.address);
63 expect(+balanceAfter).to.be.lessThan(+originalFlipperBalance);
64 });
3465
35 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');
3768
38 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);
4071
41 const flipper = await deployFlipper(web3, owner);72 const flipper = await deployFlipper(web3, owner);
4273
45 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});
4677
47 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;
5182
66 const alice = privateKey('//Alice');97 const alice = privateKey('//Alice');
6798
68 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);
70101
71 const flipper = await deployFlipper(web3, owner);102 const flipper = await deployFlipper(web3, owner);
72103
73 const helpers = contractHelpers(web3, owner);104 const helpers = contractHelpers(web3, owner);
74105
75 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;
79110
104 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});
105136
106 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;
110141
133 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});
134165
135 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;
139170
158 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 });
160
161 itWeb3('If allowlist mode is off and sponsorship is on, sponsorship does not work', async ({api, web3}) => {
162 const alice = privateKey('//Alice');
163
164 const owner = await createEthAccountWithBalance(api, web3);
165 const caller = await createEthAccountWithBalance(api, web3);
166
167 const flipper = await deployFlipper(web3, owner);
168
169 const helpers = contractHelpers(web3, owner);
170
171 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;
175
176 await transferBalanceToEth(api, alice, flipper.options.address);
177
178 const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
179 expect(originalFlipperBalance).to.be.not.equal('0');
180
181 await flipper.methods.flip().send({from: caller});
182 expect(await flipper.methods.getValue().call()).to.be.true;
183
184 // Balance should be taken from flipper instead of caller
185 const balanceAfter = await web3.eth.getBalance(flipper.options.address);
186 expect(+balanceAfter).to.be.equals(+originalFlipperBalance);
187 });
188
189});191});
190192
modifiedtests/src/eth/marketplace/marketplace.test.tsdiffbeforeafterboth
2import {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);
2626
147 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);
153153
modifiedtests/src/eth/sponsoring.test.tsdiffbeforeafterboth
1import {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';
44
5describe('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});
1919
20 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;
2424
49 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});
5050
51 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;
5555
modifiedtests/src/eth/util/helpers.tsdiffbeforeafterboth
2121
22export const GAS_ARGS = {gas: 2500000};22export const GAS_ARGS = {gas: 2500000};
23
24export enum SponsoringMode {
25 Disabled,
26 Allowlisted,
27 Generous,
28}
2329
24let 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> {