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

difftreelog

NFTPAR-56

str-mv2020-07-03parent: #89d693c.patch.diff
in: master

3 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -24,6 +24,9 @@
 pub struct CollectionType<AccountId> {
     pub owner: AccountId,
     pub next_item_id: u64,
+    pub name: Vec<u16>, // 64 include null escape char
+    pub description: Vec<u16>, // 256 include null escape char
+    pub token_trefix: Vec<u8>, // 16 include null escape char
     pub custom_data_size: u32,
 }
 
@@ -79,7 +82,9 @@
     where
         AccountId = <T as system::Trait>::AccountId,
     {
-        Created(u32, AccountId),
+        Created(u64, AccountId),
+        ItemCreated(u64),
+        ItemDestroyed(u64, u64),
     }
 );
 
@@ -91,10 +96,6 @@
         // Initializing events
         // this is needed only if you are using events in your pallet
         fn deposit_event() = default;
-
-        // Initializing events
-        // this is needed only if you are using events in your module
-        // fn deposit_event<T>() = default;
 
         // Create collection of NFT with given parameters
         //
@@ -106,10 +107,28 @@
         // @param customDataSz size of custom data in each collection item
         // returns collection ID
         #[weight = 0]
-        pub fn create_collection(origin, custom_data_sz: u32) -> DispatchResult {
+        pub fn create_collection(   origin, 
+                                    collection_name: Vec<u16>, 
+                                    collection_description: Vec<u16>, 
+                                    token_prefix: Vec<u8>, 
+                                    custom_data_sz: u32) -> DispatchResult {
+
             // Anyone can create a collection
             let who = ensure_signed(origin)?;
 
+            // check params 
+            let mut name = collection_name.to_vec();
+            name.push(0);
+            ensure!(name.len() <= 64, "Collection name can not be longer than 63 char");
+
+            let mut description = collection_description.to_vec();
+            description.push(0);
+            ensure!(name.len() <= 256, "Collection description can not be longer than 255 char");
+
+            let mut token_trefix = token_prefix.to_vec();
+            token_trefix.push(0);
+            ensure!(token_trefix.len() <= 16, "Token prefix can not be longer than 15 char");
+
             // Generate next collection ID
             let next_id = NextCollectionID::get();
 
@@ -117,7 +136,10 @@
 
             // Create new collection
             let new_collection = CollectionType {
-                owner: who,
+                owner: who.clone(),
+                name: name,
+                description: description,
+                token_trefix: token_trefix,
                 next_item_id: next_id,
                 custom_data_size: custom_data_sz,
             };
@@ -125,6 +147,9 @@
             // Add new collection to map
             <Collection<T>>::insert(next_id, new_collection);
 
+            // call event
+            Self::deposit_event(RawEvent::Created(next_id, who.clone()));
+
             Ok(())
         }
 
@@ -252,6 +277,9 @@
             <ItemListIndex>::insert(collection_id, current_index);
             <ItemList<T>>::insert((collection_id, current_index), new_item);
 
+            // call event
+            Self::deposit_event(RawEvent::ItemCreated(collection_id));
+
             Ok(())
         }
 
@@ -286,6 +314,9 @@
             let new_balance = <Balance<T>>::get((collection_id, item.owner.clone())) - 1;
             <Balance<T>>::insert((collection_id, item.owner.clone()), new_balance);
 
+            // call event
+            Self::deposit_event(RawEvent::ItemDestroyed(collection_id, item_id));
+
             Ok(())
         }
 
modifiedpallets/nft/src/mock.rsdiffbeforeafterboth
before · pallets/nft/src/mock.rs
1// Creating mock runtime here23use crate::{Module, Trait};4use frame_support::{5    impl_outer_origin, parameter_types, 6    weights::{ 7        Weight,8        constants::{ BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND },9    }};10use frame_system as system;11use sp_core::H256;12use sp_runtime::{13    testing::Header,14    traits::{BlakeTwo256, IdentityLookup},15    Perbill,16};1718impl_outer_origin! {19    pub enum Origin for Test {20    }21}2223// For testing the pallet, we construct most of a mock runtime. This means24// first constructing a configuration type (`Test`) which `impl`s each of the25// configuration traits of pallets we want to use.26#[derive(Clone, Eq, PartialEq)]27pub struct Test;28parameter_types! {29    pub const BlockHashCount: u64 = 250;30    pub const MaximumBlockWeight: Weight = 1024;31    pub const MaximumBlockLength: u32 = 2 * 1024;32    pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);33    pub MaximumExtrinsicWeight: Weight = 10 * WEIGHT_PER_SECOND;34}3536impl system::Trait for Test {37    type Origin = Origin;38    type Call = ();39    type Index = u64;40    type BlockNumber = u64;41    type BaseCallFilter = ();42    type DbWeight = RocksDbWeight;43    type BlockExecutionWeight = BlockExecutionWeight;44    type Hash = H256;45    type Hashing = BlakeTwo256;46    type AccountId = u64;47    type Lookup = IdentityLookup<Self::AccountId>;48    type Header = Header;49    type Event = ();50    type BlockHashCount = BlockHashCount;51    type ExtrinsicBaseWeight = ExtrinsicBaseWeight;52    type MaximumExtrinsicWeight = MaximumExtrinsicWeight;53    type MaximumBlockWeight = MaximumBlockWeight;54    type MaximumBlockLength = MaximumBlockLength;55    type AvailableBlockRatio = AvailableBlockRatio;56    type Version = ();57    type ModuleToIndex = ();58    type AccountData = ();59    type OnNewAccount = ();60    type OnKilledAccount = ();61}62impl Trait for Test {63    type Event = ();64}6566pub type TemplateModule = Module<Test>;6768// This function basically just builds a genesis storage key/value store according to69// our desired mockup.70pub fn new_test_ext() -> sp_io::TestExternalities {71    system::GenesisConfig::default()72        .build_storage::<Test>()73        .unwrap()74        .into()75}
after · pallets/nft/src/mock.rs
1// Creating mock runtime here23use crate::{Module, Trait};4use frame_support::{5    impl_outer_origin, parameter_types, 6    weights::{ 7        Weight,8        constants::{ BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND },9    }};10use frame_system as system;11use sp_core::H256;12use sp_runtime::{13    testing::Header,14    traits::{BlakeTwo256, IdentityLookup},15    Perbill,16};1718impl_outer_origin! {19    pub enum Origin for Test {20    }21}2223// For testing the pallet, we construct most of a mock runtime. This means24// first constructing a configuration type (`Test`) which `impl`s each of the25// configuration traits of pallets we want to use.26#[derive(Clone, Eq, PartialEq)]27pub struct Test;28parameter_types! {29    pub const BlockHashCount: u64 = 250;30    pub const MaximumBlockWeight: Weight = 1024;31    pub const MaximumBlockLength: u32 = 2 * 1024;32    pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);33    pub const MaximumExtrinsicWeight: Weight = 10 * WEIGHT_PER_SECOND;34}3536impl system::Trait for Test {37    type Origin = Origin;38    type Call = ();39    type Index = u64;40    type BlockNumber = u64;41    type BaseCallFilter = ();42    type DbWeight = RocksDbWeight;43    type BlockExecutionWeight = BlockExecutionWeight;44    type Hash = H256;45    type Hashing = BlakeTwo256;46    type AccountId = u64;47    type Lookup = IdentityLookup<Self::AccountId>;48    type Header = Header;49    type Event = ();50    type BlockHashCount = BlockHashCount;51    type ExtrinsicBaseWeight = ExtrinsicBaseWeight;52    type MaximumExtrinsicWeight = MaximumExtrinsicWeight;53    type MaximumBlockWeight = MaximumBlockWeight;54    type MaximumBlockLength = MaximumBlockLength;55    type AvailableBlockRatio = AvailableBlockRatio;56    type Version = ();57    type ModuleToIndex = ();58    type AccountData = ();59    type OnNewAccount = ();60    type OnKilledAccount = ();61}62impl Trait for Test {63    type Event = ();64}6566pub type TemplateModule = Module<Test>;6768// This function basically just builds a genesis storage key/value store according to69// our desired mockup.70pub fn new_test_ext() -> sp_io::TestExternalities {71    system::GenesisConfig::default()72        .build_storage::<Test>()73        .unwrap()74        .into()75}
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
--- a/pallets/nft/src/tests.rs
+++ b/pallets/nft/src/tests.rs
@@ -5,9 +5,14 @@
 #[test]
 fn create_collection_test() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
         assert_eq!(TemplateModule::collection(1).owner, 1);
     });
 }
@@ -15,10 +20,15 @@
 #[test]
 fn change_collection_owner() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
         assert_ok!(TemplateModule::change_collection_owner(
             origin1.clone(),
             1,
@@ -31,10 +41,14 @@
 #[test]
 fn destroy_collection() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
         let size = 1024;
         let origin1 = Origin::signed(1);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
         assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));
     });
 }
@@ -42,11 +56,16 @@
 #[test]
 fn create_item() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
         assert_ok!(TemplateModule::create_item(
             origin2.clone(),
@@ -62,11 +81,16 @@
 #[test]
 fn burn_item() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
         assert_ok!(TemplateModule::create_item(
             origin2.clone(),
@@ -91,14 +115,19 @@
 #[test]
 fn add_collection_admin() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
         let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin2.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin3.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
 
         assert_eq!(TemplateModule::collection(1).owner, 1);
         assert_eq!(TemplateModule::collection(2).owner, 2);
@@ -116,14 +145,19 @@
 #[test]
 fn remove_collection_admin() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
         let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin2.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin3.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
 
         assert_eq!(TemplateModule::collection(1).owner, 1);
         assert_eq!(TemplateModule::collection(2).owner, 2);
@@ -149,14 +183,19 @@
 #[test]
 fn balance_of() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
         let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin2.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin3.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
 
         assert_eq!(TemplateModule::collection(1).owner, 1);
         assert_eq!(TemplateModule::collection(2).owner, 2);
@@ -181,14 +220,19 @@
 #[test]
 fn transfer() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
         let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin2.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin3.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
 
         assert_eq!(TemplateModule::collection(1).owner, 1);
         assert_eq!(TemplateModule::collection(2).owner, 2);
@@ -214,14 +258,19 @@
 #[test]
 fn approve() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
         let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin2.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin3.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
 
         assert_eq!(TemplateModule::collection(1).owner, 1);
         assert_eq!(TemplateModule::collection(2).owner, 2);
@@ -243,14 +292,19 @@
 #[test]
 fn get_approved() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
         let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin2.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin3.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
 
         assert_eq!(TemplateModule::collection(1).owner, 1);
         assert_eq!(TemplateModule::collection(2).owner, 2);
@@ -272,14 +326,19 @@
 #[test]
 fn transfer_from() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
         let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin2.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin3.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
 
         assert_eq!(TemplateModule::collection(1).owner, 1);
         assert_eq!(TemplateModule::collection(2).owner, 2);
@@ -301,14 +360,19 @@
 #[test]
 fn index_list() {
     new_test_ext().execute_with(|| {
+
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         let size = 1024;
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
         let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::create_collection(origin1.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin2.clone(), size));
-        assert_ok!(TemplateModule::create_collection(origin3.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
+        assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));
 
         assert_eq!(TemplateModule::collection(1).owner, 1);
         assert_eq!(TemplateModule::collection(2).owner, 2);