difftreelog
Merge pull request #133 from usetech-llc/feature/NFTPAR-196_sponsor_setVariableMetadata
in: master
Feature/nftpar 196 sponsor set variable metadata
3 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -174,7 +174,7 @@
pub mint_mode: bool,
pub offchain_schema: Vec<u8>,
pub schema_version: SchemaVersion,
- pub sponsorship: SponsorshipState<AccountId>,
+ pub sponsorship: SponsorshipState<T::AccountId>,
pub limits: CollectionLimits<T::BlockNumber>, // Collection private restrictions
pub variable_on_chain_schema: Vec<u8>, //
pub const_on_chain_schema: Vec<u8>, //
@@ -1853,8 +1853,6 @@
}
fn create_item_no_validation(collection: &CollectionHandle<T>, owner: T::AccountId, data: CreateItemData) -> DispatchResult {
- let collection_id = collection.id;
-
match data
{
CreateItemData::NFT(data) => {
@@ -2622,10 +2620,7 @@
// sponsor timeout
let block_number = <system::Module<T>>::block_number() as T::BlockNumber;
- let collection = <Collection<T>>::get(collection_id);
-
let limit = collection.limits.sponsor_transfer_timeout;
- let mut sponsored = true;
if <CreateItemBasket<T>>::contains_key((collection_id, &who)) {
let last_tx_block = <CreateItemBasket<T>>::get((collection_id, &who));
let limit_time = last_tx_block + limit.into();
@@ -2636,9 +2631,7 @@
<CreateItemBasket<T>>::insert((collection_id, who.clone()), block_number);
// check free create limit
- if (collection.limits.sponsored_data_size >= (_properties.len() as u32)) &&
- (sponsored)
- {
+ if collection.limits.sponsored_data_size >= (_properties.len() as u32) {
collection.sponsorship.sponsor()
.cloned()
} else {
@@ -2747,7 +2740,7 @@
let collection = <CollectionById<T>>::get(collection_id)?;
if
- collection.sponsor_confirmed &&
+ collection.sponsorship.confirmed() &&
// Can't sponsor fungible collection, this tx will be rejected
// as invalid
!matches!(collection.mode, CollectionMode::Fungible(_)) &&
@@ -2769,7 +2762,7 @@
if !sponsor_metadata_changes {
None
} else {
- Some(collection.sponsor)
+ collection.sponsorship.sponsor().cloned()
}
}
tests/src/rpc.load.tsdiffbeforeafterboth--- a/tests/src/rpc.load.ts
+++ b/tests/src/rpc.load.ts
@@ -110,7 +110,7 @@
});
});
- it.only('Smart Contract RPC Load Test', async () => {
+ it('Smart Contract RPC Load Test', async () => {
await usingApi(async api => {
// Deploy smart contract
tests/src/setVariableMetadataSponsoringRateLimit.test.tsdiffbeforeafterboth1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { IKeyringPair } from '@polkadot/types/types';7import privateKey from './substrate/privateKey';8import usingApi from './substrate/substrate-api';9import {10 confirmSponsorshipExpectSuccess,11 createCollectionExpectSuccess,12 createItemExpectSuccess,13 findUnusedAddress,14 setCollectionLimitsExpectSuccess,15 setCollectionSponsorExpectSuccess,16 setVariableMetaDataExpectFailure,17 setVariableMetaDataExpectSuccess,18} from './util/helpers';1920describe('Integration Test setVariableMetadataSponsoringRateLimit', () => {21 let alice: IKeyringPair;22 let userWithNoBalance: IKeyringPair;2324 before(async () => {25 await usingApi(async (api) => {26 alice = privateKey('//Alice');27 userWithNoBalance = await findUnusedAddress(api);28 });29 });3031 it('sponsored setVariableMetaData can be called twice with pause for free', async () => {32 const collectionId = await createCollectionExpectSuccess();33 await setCollectionSponsorExpectSuccess(collectionId, alice.address);34 await confirmSponsorshipExpectSuccess(collectionId);35 await setCollectionLimitsExpectSuccess(alice, collectionId, {36 SponsoredDataRateLimit: 0,37 });3839 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);40 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);41 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);42 });4344 it('sponsored setVariableMetaData can\'t be called twice without pause for free', async () => {45 const collectionId = await createCollectionExpectSuccess();46 await setCollectionSponsorExpectSuccess(collectionId, alice.address);47 await confirmSponsorshipExpectSuccess(collectionId);48 await setCollectionLimitsExpectSuccess(alice, collectionId, {49 SponsoredDataRateLimit: 10,50 });5152 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);53 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);54 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1, 2, 3]);55 });5657 it('sponsored setVariableMetaData can\'t be called for free with variable metadata above collection limits', async () => {58 const collectionId = await createCollectionExpectSuccess();59 await setCollectionSponsorExpectSuccess(collectionId, alice.address);60 await confirmSponsorshipExpectSuccess(collectionId);61 await setCollectionLimitsExpectSuccess(alice, collectionId, {62 SponsoredDataRateLimit: 0,63 SponsoredDataSize: 1,64 });65 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);6667 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1]);68 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1, 2]);69 });7071 it.only('Default value of rate limit does not sponsor setting variable metadata', async () => {72 const collectionId = await createCollectionExpectSuccess();73 await setCollectionSponsorExpectSuccess(collectionId, alice.address);74 await confirmSponsorshipExpectSuccess(collectionId);7576 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);77 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1]);78 });7980});1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { IKeyringPair } from '@polkadot/types/types';7import privateKey from './substrate/privateKey';8import usingApi from './substrate/substrate-api';9import {10 confirmSponsorshipExpectSuccess,11 createCollectionExpectSuccess,12 createItemExpectSuccess,13 findUnusedAddress,14 setCollectionLimitsExpectSuccess,15 setCollectionSponsorExpectSuccess,16 setVariableMetaDataExpectFailure,17 setVariableMetaDataExpectSuccess,18} from './util/helpers';1920describe('Integration Test setVariableMetadataSponsoringRateLimit', () => {21 let alice: IKeyringPair;22 let userWithNoBalance: IKeyringPair;2324 before(async () => {25 await usingApi(async (api) => {26 alice = privateKey('//Alice');27 userWithNoBalance = await findUnusedAddress(api);28 });29 });3031 it('sponsored setVariableMetaData can be called twice with pause for free', async () => {32 const collectionId = await createCollectionExpectSuccess();33 await setCollectionSponsorExpectSuccess(collectionId, alice.address);34 await confirmSponsorshipExpectSuccess(collectionId);35 await setCollectionLimitsExpectSuccess(alice, collectionId, {36 SponsoredDataRateLimit: 0,37 });3839 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);40 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);41 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);42 });4344 it('sponsored setVariableMetaData can\'t be called twice without pause for free', async () => {45 const collectionId = await createCollectionExpectSuccess();46 await setCollectionSponsorExpectSuccess(collectionId, alice.address);47 await confirmSponsorshipExpectSuccess(collectionId);48 await setCollectionLimitsExpectSuccess(alice, collectionId, {49 SponsoredDataRateLimit: 10,50 });5152 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);53 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1, 2, 3]);54 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1, 2, 3]);55 });5657 it('sponsored setVariableMetaData can\'t be called for free with variable metadata above collection limits', async () => {58 const collectionId = await createCollectionExpectSuccess();59 await setCollectionSponsorExpectSuccess(collectionId, alice.address);60 await confirmSponsorshipExpectSuccess(collectionId);61 await setCollectionLimitsExpectSuccess(alice, collectionId, {62 SponsoredDataRateLimit: 0,63 SponsoredDataSize: 1,64 });65 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);6667 await setVariableMetaDataExpectSuccess(userWithNoBalance, collectionId, itemId, [1]);68 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1, 2]);69 });7071 it('Default value of rate limit does not sponsor setting variable metadata', async () => {72 const collectionId = await createCollectionExpectSuccess();73 await setCollectionSponsorExpectSuccess(collectionId, alice.address);74 await confirmSponsorshipExpectSuccess(collectionId);7576 const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', userWithNoBalance.address);77 await setVariableMetaDataExpectFailure(userWithNoBalance, collectionId, itemId, [1]);78 });7980});