From 008a188c3ea987da9f3dccbbc09bebaf486e29ca Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 12 May 2022 10:57:06 +0000 Subject: [PATCH] Remove variableOnChainSchema --- --- a/pallets/common/src/benchmarking.rs +++ b/pallets/common/src/benchmarking.rs @@ -19,7 +19,7 @@ use up_data_structs::{ CollectionMode, CreateCollectionData, CollectionId, MAX_COLLECTION_NAME_LENGTH, MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_TOKEN_PREFIX_LENGTH, OFFCHAIN_SCHEMA_LIMIT, - VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT, + CONST_ON_CHAIN_SCHEMA_LIMIT, }; use frame_support::{ traits::{Currency, Get}, @@ -67,7 +67,6 @@ let description = create_u16_data::(); let token_prefix = create_data::(); let offchain_schema = create_data::(); - let variable_on_chain_schema = create_data::(); let const_on_chain_schema = create_data::(); handler( owner, @@ -77,7 +76,6 @@ description, token_prefix, offchain_schema, - variable_on_chain_schema, const_on_chain_schema, ..Default::default() }, --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -482,12 +482,6 @@ .expect("data has lower bounds than field"); Self::set_field_raw( id, - CollectionField::VariableOnChainSchema, - v.variable_on_chain_schema.clone().into_inner(), - ) - .expect("data has lower bounds than field"); - Self::set_field_raw( - id, CollectionField::ConstOnChainSchema, v.const_on_chain_schema.clone().into_inner(), ) @@ -621,11 +615,6 @@ CollectionField::ConstOnChainSchema, )) .into_inner(), - variable_on_chain_schema: >::get(( - collection, - CollectionField::VariableOnChainSchema, - )) - .into_inner(), token_property_permissions, properties, }) @@ -723,12 +712,6 @@ id, CollectionField::OffchainSchema, data.offchain_schema.into_inner(), - ) - .expect("data has lower bounds than field"); - Self::set_field_raw( - id, - CollectionField::VariableOnChainSchema, - data.variable_on_chain_schema.into_inner(), ) .expect("data has lower bounds than field"); Self::set_field_raw( --- a/pallets/unique/src/benchmarking.rs +++ b/pallets/unique/src/benchmarking.rs @@ -146,14 +146,6 @@ let data = create_var_data(b); }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data) - set_variable_on_chain_schema { - let b in 0..VARIABLE_ON_CHAIN_SCHEMA_LIMIT; - - let caller: T::AccountId = account("caller", 0, SEED); - let collection = create_nft_collection::(caller.clone())?; - let data = create_var_data(b); - }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data) - set_schema_version { let caller: T::AccountId = account("caller", 0, SEED); let collection = create_nft_collection::(caller.clone())?; --- a/pallets/unique/src/lib.rs +++ b/pallets/unique/src/lib.rs @@ -35,7 +35,7 @@ use frame_system::{self as system, ensure_signed}; use sp_runtime::{sp_std::prelude::Vec}; use up_data_structs::{ - VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT, OFFCHAIN_SCHEMA_LIMIT, + CONST_ON_CHAIN_SCHEMA_LIMIT, OFFCHAIN_SCHEMA_LIMIT, MAX_COLLECTION_NAME_LENGTH, MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_TOKEN_PREFIX_LENGTH, AccessMode, CreateItemData, CollectionLimits, CollectionId, CollectionMode, TokenId, SchemaVersion, SponsorshipState, MetaUpdatePermission, CreateCollectionData, CustomDataLimit, @@ -191,13 +191,6 @@ /// /// * collection_id: Globally unique collection identifier. SchemaVersionSet(CollectionId), - - /// Variable on chain schema was set - /// - /// # Arguments - /// - /// * collection_id: Globally unique collection identifier. - VariableOnChainSchemaSet(CollectionId), } } @@ -1083,38 +1076,6 @@ >::set_field(&collection, &sender, CollectionField::ConstOnChainSchema, schema.into_inner())?; >::deposit_event(Event::::ConstOnChainSchemaSet( - collection_id - )); - Ok(()) - } - - /// Set variable on-chain data schema. - /// - /// # Permissions - /// - /// * Collection Owner - /// * Collection Admin - /// - /// # Arguments - /// - /// * collection_id. - /// - /// * schema: String representing the variable on-chain data schema. - #[weight = >::set_const_on_chain_schema(schema.len() as u32)] - #[transactional] - pub fn set_variable_on_chain_schema ( - origin, - collection_id: CollectionId, - schema: BoundedVec> - ) -> DispatchResult { - let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); - let collection = >::try_get(collection_id)?; - - // ========= - - >::set_field(&collection, &sender, CollectionField::VariableOnChainSchema, schema.into_inner())?; - - >::deposit_event(Event::::VariableOnChainSchemaSet( collection_id )); Ok(()) --- a/pallets/unique/src/weights.rs +++ b/pallets/unique/src/weights.rs @@ -47,7 +47,6 @@ fn set_transfers_enabled_flag() -> Weight; fn set_offchain_schema(b: u32, ) -> Weight; fn set_const_on_chain_schema(b: u32, ) -> Weight; - fn set_variable_on_chain_schema(b: u32, ) -> Weight; fn set_schema_version() -> Weight; fn set_collection_limits() -> Weight; fn set_meta_update_permission_flag() -> Weight; @@ -156,12 +155,6 @@ // Storage: Common CollectionById (r:1 w:1) fn set_const_on_chain_schema(_b: u32, ) -> Weight { (14_984_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - // Storage: Common CollectionById (r:1 w:1) - fn set_variable_on_chain_schema(_b: u32, ) -> Weight { - (15_196_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } @@ -287,12 +280,6 @@ // Storage: Common CollectionById (r:1 w:1) fn set_const_on_chain_schema(_b: u32, ) -> Weight { (14_984_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(1 as Weight)) - .saturating_add(RocksDbWeight::get().writes(1 as Weight)) - } - // Storage: Common CollectionById (r:1 w:1) - fn set_variable_on_chain_schema(_b: u32, ) -> Weight { - (15_196_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -76,11 +76,9 @@ // 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 = 32768; pub const COLLECTION_FIELD_LIMIT: u32 = CONST_ON_CHAIN_SCHEMA_LIMIT; -// u32::max is not const: OFFCHAIN_SCHEMA_LIMIT.max(VARIABLE_ON_CHAIN_SCHEMA_LIMIT).max(CONST_ON_CHAIN_SCHEMA_LIMIT); pub const MAX_COLLECTION_NAME_LENGTH: u32 = 64; pub const MAX_COLLECTION_DESCRIPTION_LENGTH: u32 = 256; @@ -303,8 +301,6 @@ #[version(2.., upper(limits.into()))] pub limits: CollectionLimitsVersion2, - #[version(..2)] - pub variable_on_chain_schema: BoundedVec>, #[version(..2)] pub const_on_chain_schema: BoundedVec>, @@ -326,7 +322,6 @@ pub schema_version: SchemaVersion, pub sponsorship: SponsorshipState, pub limits: CollectionLimits, - pub variable_on_chain_schema: Vec, pub const_on_chain_schema: Vec, pub meta_update_permission: MetaUpdatePermission, pub token_property_permissions: Vec, @@ -336,7 +331,6 @@ #[derive(Encode, Decode, Clone, PartialEq, TypeInfo, MaxEncodedLen)] #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] pub enum CollectionField { - VariableOnChainSchema, ConstOnChainSchema, OffchainSchema, } @@ -354,7 +348,6 @@ pub schema_version: Option, pub pending_sponsor: Option, pub limits: Option, - pub variable_on_chain_schema: BoundedVec>, pub const_on_chain_schema: BoundedVec>, pub meta_update_permission: Option, pub token_property_permissions: CollectionPropertiesPermissionsVec, --- a/runtime/tests/src/tests.rs +++ b/runtime/tests/src/tests.rs @@ -2423,45 +2423,6 @@ )), b"test const on chain schema".to_vec() ); - assert_eq!( - >::get(( - collection_id, - CollectionField::VariableOnChainSchema - )), - b"".to_vec() - ); - }); -} - -#[test] -fn set_variable_on_chain_schema() { - new_test_ext().execute_with(|| { - let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1)); - - let origin1 = Origin::signed(1); - assert_ok!(Unique::set_variable_on_chain_schema( - origin1, - collection_id, - b"test variable on chain schema" - .to_vec() - .try_into() - .unwrap() - )); - - assert_eq!( - >::get(( - collection_id, - CollectionField::ConstOnChainSchema - )), - b"".to_vec() - ); - assert_eq!( - >::get(( - collection_id, - CollectionField::VariableOnChainSchema - )), - b"test variable on chain schema".to_vec() - ); }); } --- a/tests/src/createCollection.test.ts +++ b/tests/src/createCollection.test.ts @@ -40,20 +40,20 @@ }); it('create new collection with properties #1', async () => { - await createCollectionWithPropsExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}, - properties: [{key: 'key1', value: 'val1'}], + await createCollectionWithPropsExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}, + properties: [{key: 'key1', value: 'val1'}], propPerm: [{key: 'key1', tokenOwner: true, mutable: false, collectionAdmin: true}]}); }); it('create new collection with properties #2', async () => { - await createCollectionWithPropsExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}, - properties: [{key: 'key1', value: 'val1'}], + await createCollectionWithPropsExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}, + properties: [{key: 'key1', value: 'val1'}], propPerm: [{key: 'key1', tokenOwner: false, mutable: true, collectionAdmin: false}]}); }); it('create new collection with properties #3', async () => { - await createCollectionWithPropsExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}, - properties: [{key: 'key1', value: 'val1'}], + await createCollectionWithPropsExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}, + properties: [{key: 'key1', value: 'val1'}], propPerm: [{key: 'key1', tokenOwner: true, mutable: false, collectionAdmin: false}]}); }); @@ -73,7 +73,6 @@ limits: { accountTokenOwnershipLimit: 3, }, - variableOnChainSchema: '0x222222', constOnChainSchema: '0x333333', metaUpdatePermission: 'Admin', }); @@ -91,7 +90,6 @@ expect(collection.schemaVersion.isUnique).to.be.true; expect(collection.sponsorship.asUnconfirmed.toString()).to.equal(bob.address); expect(collection.limits.accountTokenOwnershipLimit.unwrap().toNumber()).to.equal(3); - expect(collection.variableOnChainSchema.toString()).to.equal('0x222222'); expect(collection.constOnChainSchema.toString()).to.equal('0x333333'); expect(collection.metaUpdatePermission.isAdmin).to.be.true; }); --- a/tests/src/nesting/migration-check.test.ts +++ b/tests/src/nesting/migration-check.test.ts @@ -11,7 +11,7 @@ // todo skip describe('Migration testing for pallet-common', () => { let alice: IKeyringPair; - + before(async() => { await usingApi(async () => { alice = privateKey('//Alice'); @@ -36,7 +36,6 @@ limits: { accountTokenOwnershipLimit: 3, }, - variableOnChainSchema: '0x222222', constOnChainSchema: '0x333333', metaUpdatePermission: 'Admin', }); @@ -78,13 +77,11 @@ await usingApi(async api => { const collectionNew = (await api.query.common.collectionById(collectionId)).toJSON() as any; - + // Make sure the extra fields are what they should be - const variableOnChainSchema = await api.query.common.collectionData(collectionId, 'VariableOnChainSchema'); const constOnChainSchema = await api.query.common.collectionData(collectionId, 'ConstOnChainSchema'); const offchainSchema = await api.query.common.collectionData(collectionId, 'OffchainSchema'); - expect(variableOnChainSchema.toHex()).to.be.deep.equal((collectionOld.variableOnChainSchema)); expect(constOnChainSchema.toHex()).to.be.deep.equal(collectionOld.constOnChainSchema); expect(offchainSchema.toHex()).to.be.deep.equal(collectionOld.offchainSchema); expect(collectionNew).to.have.nested.property('limits.nestingRule'); @@ -93,10 +90,8 @@ delete collectionNew.limits.nestingRule; delete collectionOld.constOnChainSchema; delete collectionOld.offchainSchema; - delete collectionOld.variableOnChainSchema; expect(collectionNew).to.be.deep.equal(collectionOld); }); }); }); - \ No newline at end of file --- a/tests/src/setChainLimits.test.ts +++ b/tests/src/setChainLimits.test.ts @@ -44,7 +44,6 @@ fungibleSponsorTransferTimeout: 1, refungibleSponsorTransferTimeout: 1, offchainSchemaLimit: 1, - variableOnChainSchemaLimit: 1, constOnChainSchemaLimit: 1, }; }); --- a/tests/src/setVariableOnChainSchema.test.ts +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -import {Keyring} from '@polkadot/api'; -import {IKeyringPair} from '@polkadot/types/types'; -import chai from 'chai'; -import chaiAsPromised from 'chai-as-promised'; -import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api'; -import { - createCollectionExpectSuccess, - destroyCollectionExpectSuccess, - addCollectionAdminExpectSuccess, - queryCollectionExpectSuccess, - getCreatedCollectionCount, -} from './util/helpers'; - -chai.use(chaiAsPromised); -const expect = chai.expect; - -let alice: IKeyringPair; -let bob: IKeyringPair; -let schema: any; -let largeSchema: any; - -before(async () => { - await usingApi(async () => { - const keyring = new Keyring({type: 'sr25519'}); - alice = keyring.addFromUri('//Alice'); - bob = keyring.addFromUri('//Bob'); - schema = '0x31'; - largeSchema = new Array(8 * 1024 + 10).fill(0xff); - - }); -}); -describe('Integration Test ext. setVariableOnChainSchema()', () => { - - it('Run extrinsic with parameters of the collection id, set the scheme', async () => { - await usingApi(async (api) => { - const collectionId = await createCollectionExpectSuccess(); - const collection = await queryCollectionExpectSuccess(api, collectionId); - expect(collection.owner.toString()).to.be.eq(alice.address); - const setSchema = api.tx.unique.setVariableOnChainSchema(collectionId, schema); - await submitTransactionAsync(alice, setSchema); - }); - }); - - it('Checking collection data using the setVariableOnChainSchema parameter', async () => { - await usingApi(async (api) => { - const collectionId = await createCollectionExpectSuccess(); - const setSchema = api.tx.unique.setVariableOnChainSchema(collectionId, schema); - await submitTransactionAsync(alice, setSchema); - const collection = await queryCollectionExpectSuccess(api, collectionId); - expect(collection.variableOnChainSchema.toString()).to.be.eq(schema); - - }); - }); -}); - -describe('Integration Test ext. collection admin setVariableOnChainSchema()', () => { - - it('Run extrinsic with parameters of the collection id, set the scheme', async () => { - await usingApi(async (api) => { - const collectionId = await createCollectionExpectSuccess(); - const collection = await queryCollectionExpectSuccess(api, collectionId); - expect(collection.owner.toString()).to.be.eq(alice.address); - await addCollectionAdminExpectSuccess(alice, collectionId, bob.address); - const setSchema = api.tx.unique.setVariableOnChainSchema(collectionId, schema); - await submitTransactionAsync(bob, setSchema); - }); - }); - - it('Checking collection data using the setVariableOnChainSchema parameter', async () => { - await usingApi(async (api) => { - const collectionId = await createCollectionExpectSuccess(); - await addCollectionAdminExpectSuccess(alice, collectionId, bob.address); - const setSchema = api.tx.unique.setVariableOnChainSchema(collectionId, schema); - await submitTransactionAsync(bob, setSchema); - const collection = await queryCollectionExpectSuccess(api, collectionId); - expect(collection.variableOnChainSchema.toString()).to.be.eq(schema); - - }); - }); -}); - -describe('Negative Integration Test ext. setVariableOnChainSchema()', () => { - - it('Set a non-existent collection', async () => { - await usingApi(async (api) => { - // tslint:disable-next-line: radix - const collectionId = await getCreatedCollectionCount(api) + 1; - const setSchema = api.tx.unique.setVariableOnChainSchema(collectionId, schema); - await expect(submitTransactionExpectFailAsync(alice, setSchema)).to.be.rejected; - }); - }); - - it('Set a previously deleted collection', async () => { - await usingApi(async (api) => { - const collectionId = await createCollectionExpectSuccess(); - await destroyCollectionExpectSuccess(collectionId); - const setSchema = api.tx.unique.setVariableOnChainSchema(collectionId, schema); - await expect(submitTransactionExpectFailAsync(alice, setSchema)).to.be.rejected; - }); - }); - - it('Set invalid data in schema (size too large:> 8kB)', async () => { - await usingApi(async (api) => { - const collectionId = await createCollectionExpectSuccess(); - const setSchema = api.tx.unique.setVariableOnChainSchema(collectionId, largeSchema); - await expect(submitTransactionExpectFailAsync(alice, setSchema)).to.be.rejected; - }); - }); - - it('Execute method not on behalf of the collection owner', async () => { - await usingApi(async (api) => { - const collectionId = await createCollectionExpectSuccess(); - const collection = await queryCollectionExpectSuccess(api, collectionId); - expect(collection.owner.toString()).to.be.eq(alice.address); - const setSchema = api.tx.unique.setVariableOnChainSchema(collectionId, schema); - await expect(submitTransactionExpectFailAsync(bob, setSchema)).to.be.rejected; - }); - }); - -}); --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -136,7 +136,6 @@ fungibleSponsorTransferTimeout: number; refungibleSponsorTransferTimeout: number; offchainSchemaLimit: number; - variableOnChainSchemaLimit: number; constOnChainSchemaLimit: number; } -- gitstuff