difftreelog
NFTPAR-56
in: master
3 files changed
pallets/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(())
}
pallets/nft/src/mock.rsdiffbeforeafterboth30 pub const MaximumBlockWeight: Weight = 1024;30 pub const MaximumBlockWeight: Weight = 1024;31 pub const MaximumBlockLength: u32 = 2 * 1024;31 pub const MaximumBlockLength: u32 = 2 * 1024;32 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);32 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);33 pub MaximumExtrinsicWeight: Weight = 10 * WEIGHT_PER_SECOND;33 pub const MaximumExtrinsicWeight: Weight = 10 * WEIGHT_PER_SECOND;34}34}353536impl system::Trait for Test {36impl system::Trait for Test {pallets/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);