difftreelog
NFTPAR-183: Storage Refactoring. Decimal points u32 -> u8. Also extended decimal points limit 4 -> 30.
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth454546mod default_weights;46mod default_weights;4748pub const MAX_DECIMAL_POINTS: DecimalPoints = 30;474948// Structs50// Structs49// #region51// #region505251pub type CollectionId = u32;53pub type CollectionId = u32;52pub type TokenId = u32;54pub type TokenId = u32;5556pub type DecimalPoints = u8;535754#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]58#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]55#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]59#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]56pub enum CollectionMode {60pub enum CollectionMode {57 Invalid,61 Invalid,58 NFT,62 NFT,59 // decimal points63 // decimal points60 Fungible(u32),64 Fungible(DecimalPoints),61 // decimal points65 // decimal points62 ReFungible(u32),66 ReFungible(DecimalPoints),63}67}646865impl Into<u8> for CollectionMode {69impl Into<u8> for CollectionMode {104 pub owner: AccountId,108 pub owner: AccountId,105 pub mode: CollectionMode,109 pub mode: CollectionMode,106 pub access: AccessMode,110 pub access: AccessMode,107 pub decimal_points: u32,111 pub decimal_points: DecimalPoints,108 pub name: Vec<u16>, // 64 include null escape char112 pub name: Vec<u16>, // 64 include null escape char109 pub description: Vec<u16>, // 256 include null escape char113 pub description: Vec<u16>, // 256 include null escape char110 pub token_prefix: Vec<u8>, // 16 include null escape char114 pub token_prefix: Vec<u8>, // 16 include null escape char269 pub enum Error for Module<T: Trait> {273 pub enum Error for Module<T: Trait> {270 /// Total collections bound exceeded.274 /// Total collections bound exceeded.271 TotalCollectionsLimitExceeded,275 TotalCollectionsLimitExceeded,272 /// Decimal_points parameter must be lower than 4.276 /// Decimal_points parameter must be lower than MAX_DECIMAL_POINTS constant, currently it is 30.273 CollectionDecimalPointLimitExceeded, 277 CollectionDecimalPointLimitExceeded, 274 /// Collection name can not be longer than 63 char.278 /// Collection name can not be longer than 63 char.275 CollectionNameLimitExceeded, 279 CollectionNameLimitExceeded, 498 ensure!(CollectionCount::get() < ChainLimit::get().collection_numbers_limit, Error::<T>::TotalCollectionsLimitExceeded);502 ensure!(CollectionCount::get() < ChainLimit::get().collection_numbers_limit, Error::<T>::TotalCollectionsLimitExceeded);499503500 // check params504 // check params501 ensure!(decimal_points <= 4, Error::<T>::CollectionDecimalPointLimitExceeded);505 ensure!(decimal_points <= MAX_DECIMAL_POINTS, Error::<T>::CollectionDecimalPointLimitExceeded);502506503 let mut name = collection_name.to_vec();507 let mut name = collection_name.to_vec();504 name.push(0);508 name.push(0);1461 let item = FungibleItemType {1465 let item = FungibleItemType {1462 collection: collection_id,1466 collection: collection_id,1463 owner,1467 owner,1464 value: (10 as u128).pow(collection.decimal_points)1468 value: (10 as u128).pow(collection.decimal_points as u32)1465 };1469 };146614701467 Self::add_fungible_item(item)?;1471 Self::add_fungible_item(item)?;1468 },1472 },1469 CreateItemData::ReFungible(data) => {1473 CreateItemData::ReFungible(data) => {1470 let mut owner_list = Vec::new();1474 let mut owner_list = Vec::new();1471 let value = (10 as u128).pow(collection.decimal_points);1475 let value = (10 as u128).pow(collection.decimal_points as u32);1472 owner_list.push(Ownership {owner: owner.clone(), fraction: value});1476 owner_list.push(Ownership {owner: owner.clone(), fraction: value});147314771474 let item = ReFungibleItemType {1478 let item = ReFungibleItemType {1982 fn init_collection(item: &CollectionType<T::AccountId>) {1986 fn init_collection(item: &CollectionType<T::AccountId>) {1983 // check params1987 // check params1984 assert!(1988 assert!(1985 item.decimal_points <= 4,1989 item.decimal_points <= MAX_DECIMAL_POINTS,1986 "decimal_points parameter must be lower than 4"1990 "decimal_points parameter must be lower than MAX_DECIMAL_POINTS"1987 );1991 );1988 assert!(1992 assert!(1989 item.name.len() <= 64,1993 item.name.len() <= 64,pallets/nft/src/tests.rsdiffbeforeafterboth3use crate::mock::*;3use crate::mock::*;4use crate::{AccessMode, ApprovePermissions, CollectionMode,4use crate::{AccessMode, ApprovePermissions, CollectionMode,5 Ownership, ChainLimits, CreateItemData, CreateNftData, CreateFungibleData, CreateReFungibleData,5 Ownership, ChainLimits, CreateItemData, CreateNftData, CreateFungibleData, CreateReFungibleData,6 CollectionId, TokenId}; //Err6 CollectionId, TokenId, MAX_DECIMAL_POINTS}; //Err7use frame_support::{assert_noop, assert_ok};7use frame_support::{assert_noop, assert_ok};8use frame_system::{ RawOrigin };8use frame_system::{ RawOrigin };99777778// Use cases tests region78// Use cases tests region79// #region79// #region80#[test]81fn create_fungible_collection_fails_with_large_decimal_numbers() {82 new_test_ext().execute_with(|| {83 default_limits();8485 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();86 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();87 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();8889 let origin1 = Origin::signed(1);90 assert_noop!(TemplateModule::create_collection(91 origin1,92 col_name1,93 col_desc1,94 token_prefix1,95 CollectionMode::Fungible(MAX_DECIMAL_POINTS + 1)96 ), Error::<Test>::CollectionDecimalPointLimitExceeded);97 }); 98}99100#[test]101fn create_re_fungible_collection_fails_with_large_decimal_numbers() {102 new_test_ext().execute_with(|| {103 default_limits();104105 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();106 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();107 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();108109 let origin1 = Origin::signed(1);110 assert_noop!(TemplateModule::create_collection(111 origin1,112 col_name1,113 col_desc1,114 token_prefix1,115 CollectionMode::ReFungible(MAX_DECIMAL_POINTS + 1)116 ), Error::<Test>::CollectionDecimalPointLimitExceeded);117 });118}11980#[test]120#[test]81fn create_nft_item() {121fn create_nft_item() {