From ea076cb37bde74d1e55670985ab745094c58a546 Mon Sep 17 00:00:00 2001 From: Igor Kozyrev Date: Fri, 18 Feb 2022 14:53:55 +0000 Subject: [PATCH] Merge branch 'develop' into feature/polkadot-js-7 --- --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -162,9 +162,12 @@ type EvmBackwardsAddressMapping: up_evm_mapping::EvmBackwardsAddressMapping; type Currency: Currency; + + #[pallet::constant] type CollectionCreationPrice: Get< <::Currency as Currency>::Balance, >; + type TreasuryAccountId: Get; } --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -64,7 +64,7 @@ // Schema limits pub const OFFCHAIN_SCHEMA_LIMIT: u32 = 8192; pub const VARIABLE_ON_CHAIN_SCHEMA_LIMIT: u32 = 8192; -pub const CONST_ON_CHAIN_SCHEMA_LIMIT: u32 = 1048576; +pub const CONST_ON_CHAIN_SCHEMA_LIMIT: u32 = 32768; pub const MAX_COLLECTION_NAME_LENGTH: u32 = 64; pub const MAX_COLLECTION_DESCRIPTION_LENGTH: u32 = 256; --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -250,8 +250,13 @@ pub const SS58Prefix: u8 = 42; } +/* +8880 - Unique +8881 - Quartz +8882 - Opal +*/ parameter_types! { - pub const ChainId: u64 = 8888; + pub const ChainId: u64 = 8882; } pub struct FixedFee; @@ -874,7 +879,7 @@ parameter_types! { pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account(); - pub const CollectionCreationPrice: Balance = 100 * UNIQUE; + pub const CollectionCreationPrice: Balance = 2 * UNIQUE; } impl pallet_common::Config for Runtime { --- a/tests/src/confirmSponsorship.test.ts +++ b/tests/src/confirmSponsorship.test.ts @@ -373,4 +373,31 @@ await destroyCollectionExpectSuccess(collectionId); await confirmSponsorshipExpectFailure(collectionId, '//Bob'); }); + + it('(!negative test!) Transfer fees are not paid by the sponsor if the transfer failed', async () => { + const collectionId = await createCollectionExpectSuccess(); + await setCollectionSponsorExpectSuccess(collectionId, bob.address); + await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + + await usingApi(async (api) => { + // Find unused address + const ownerZeroBalance = await findUnusedAddress(api); + + // Find another unused address + const senderZeroBalance = await findUnusedAddress(api); + + // Mint token for an unused address + const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', ownerZeroBalance.address); + + const sponsorBalanceBeforeTx = (await api.query.system.account(bob.address)).data.free.toBigInt(); + + // Try to transfer this token from an unsponsored unused adress to Alice + const zeroToAlice = api.tx.unique.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0); + await expect(submitTransactionExpectFailAsync(senderZeroBalance, zeroToAlice)).to.be.rejected; + + const sponsorBalanceAfterTx = (await api.query.system.account(bob.address)).data.free.toBigInt(); + + expect(sponsorBalanceAfterTx).to.equal(sponsorBalanceBeforeTx); + }); + }); }); --- a/tests/src/eth/allowlist.test.ts +++ b/tests/src/eth/allowlist.test.ts @@ -1,27 +1,23 @@ import {expect} from 'chai'; -import {contractHelpers, createEthAccount, createEthAccountWithBalance, deployFlipper, itWeb3} from './util/helpers'; +import {contractHelpers, createEthAccountWithBalance, deployFlipper, itWeb3} from './util/helpers'; describe('EVM allowlist', () => { itWeb3('Contract allowlist can be toggled', async ({api, web3}) => { const owner = await createEthAccountWithBalance(api, web3); const flipper = await deployFlipper(web3, owner); - const randomUser = createEthAccount(web3); const helpers = contractHelpers(web3, owner); // Any user is allowed by default expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.false; - expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.true; // Enable await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner}); expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.true; - expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.false; // Disable await helpers.methods.toggleAllowlist(flipper.options.address, false).send({from: owner}); expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.false; - expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.true; }); itWeb3('Non-allowlisted user can\'t call contract with allowlist enabled', async ({api, web3}) => { --- a/tests/src/eth/contractSponsoring.test.ts +++ b/tests/src/eth/contractSponsoring.test.ts @@ -113,8 +113,8 @@ const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address); expect(originalFlipperBalance).to.be.not.equal('0'); - await flipper.methods.flip().send({from: caller}); - expect(await flipper.methods.getValue().call()).to.be.true; + await expect(flipper.methods.flip().send({from: caller})).to.be.rejectedWith(/InvalidTransaction::Payment/); + expect(await flipper.methods.getValue().call()).to.be.false; // Balance should be taken from flipper instead of caller const balanceAfter = await web3.eth.getBalance(flipper.options.address); -- gitstuff