git.delta.rocks / unique-network / refs/commits / 9e6c0bc65705

difftreelog

Resolve conflict in runtime_types

Greg Zaitsev2021-02-09parents: #c311337 #2109c86.patch.diff
in: master

32 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
54mod default_weights;54mod default_weights;
5555
56pub const MAX_DECIMAL_POINTS: DecimalPoints = 30;56pub const MAX_DECIMAL_POINTS: DecimalPoints = 30;
57pub const MAX_REFUNGIBLE_PIECES: u128 = 1_000_000_000_000_000_000_000;
57pub const MAX_SPONSOR_TIMEOUT: u32 = 10_368_000;58pub const MAX_SPONSOR_TIMEOUT: u32 = 10_368_000;
58pub const MAX_TOKEN_OWNERSHIP: u32 = 10_000_000;59pub const MAX_TOKEN_OWNERSHIP: u32 = 10_000_000;
5960
71 NFT,72 NFT,
72 // decimal points73 // decimal points
73 Fungible(DecimalPoints),74 Fungible(DecimalPoints),
74 // decimal points
75 ReFungible(DecimalPoints),75 ReFungible,
76}76}
7777
78impl Default for CollectionMode {78impl Default for CollectionMode {
87 CollectionMode::Invalid => 0,87 CollectionMode::Invalid => 0,
88 CollectionMode::NFT => 1,88 CollectionMode::NFT => 1,
89 CollectionMode::Fungible(_) => 2,89 CollectionMode::Fungible(_) => 2,
90 CollectionMode::ReFungible(_) => 3,90 CollectionMode::ReFungible => 3,
91 }91 }
92 }92 }
93}93}
271pub struct CreateReFungibleData {271pub struct CreateReFungibleData {
272 pub const_data: Vec<u8>,272 pub const_data: Vec<u8>,
273 pub variable_data: Vec<u8>,273 pub variable_data: Vec<u8>,
274 pub pieces: u128,
274}275}
275276
276#[derive(Encode, Decode, Debug, Clone, PartialEq)]277#[derive(Encode, Decode, Debug, Clone, PartialEq)]
382 /// Collection limit bounds per collection exceeded383 /// Collection limit bounds per collection exceeded
383 CollectionLimitBoundsExceeded,384 CollectionLimitBoundsExceeded,
384 /// Schema data size limit bound exceeded385 /// Schema data size limit bound exceeded
385 SchemaDataLimitExceeded386 SchemaDataLimitExceeded,
387 /// Maximum refungibility exceeded
388 WrongRefungiblePieces
386 }389 }
387}390}
388391
553556
554 let decimal_points = match mode {557 let decimal_points = match mode {
555 CollectionMode::Fungible(points) => points,558 CollectionMode::Fungible(points) => points,
556 CollectionMode::ReFungible(points) => points,
557 _ => 0559 _ => 0
558 };560 };
559561
938940
939 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?;941 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?;
940 Self::validate_create_item_args(&target_collection, &data)?;942 Self::validate_create_item_args(&target_collection, &data)?;
941 Self::create_item_no_validation(collection_id, &target_collection, owner, data)?;943 Self::create_item_no_validation(collection_id, owner, data)?;
942944
943 Ok(())945 Ok(())
944 }946 }
978 Self::validate_create_item_args(&target_collection, data)?;980 Self::validate_create_item_args(&target_collection, data)?;
979 }981 }
980 for data in &items_data {982 for data in &items_data {
981 Self::create_item_no_validation(collection_id, &target_collection, owner.clone(), data.clone())?;983 Self::create_item_no_validation(collection_id, owner.clone(), data.clone())?;
982 }984 }
983985
984 Ok(())986 Ok(())
1017 {1019 {
1018 CollectionMode::NFT => Self::burn_nft_item(collection_id, item_id)?,1020 CollectionMode::NFT => Self::burn_nft_item(collection_id, item_id)?,
1019 CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, collection_id, value)?,1021 CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, collection_id, value)?,
1020 CollectionMode::ReFungible(_) => Self::burn_refungible_item(collection_id, item_id, &sender)?,1022 CollectionMode::ReFungible => Self::burn_refungible_item(collection_id, item_id, &sender)?,
1021 _ => ()1023 _ => ()
1022 };1024 };
10231025
1159 {1161 {
1160 CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, from, recipient)?,1162 CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, from, recipient)?,
1161 CollectionMode::Fungible(_) => Self::transfer_fungible(collection_id, value, &from, &recipient)?,1163 CollectionMode::Fungible(_) => Self::transfer_fungible(collection_id, value, &from, &recipient)?,
1162 CollectionMode::ReFungible(_) => Self::transfer_refungible(collection_id, item_id, value, from.clone(), recipient)?,1164 CollectionMode::ReFungible => Self::transfer_refungible(collection_id, item_id, value, from.clone(), recipient)?,
1163 _ => ()1165 _ => ()
1164 };1166 };
11651167
1216 match target_collection.mode1218 match target_collection.mode
1217 {1219 {
1218 CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?,1220 CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?,
1219 CollectionMode::ReFungible(_) => Self::set_re_fungible_variable_data(collection_id, item_id, data)?,1221 CollectionMode::ReFungible => Self::set_re_fungible_variable_data(collection_id, item_id, data)?,
1220 CollectionMode::Fungible(_) => fail!(Error::<T>::CantStoreMetadataInFungibleTokens),1222 CollectionMode::Fungible(_) => fail!(Error::<T>::CantStoreMetadataInFungibleTokens),
1221 _ => fail!(Error::<T>::UnexpectedCollectionType)1223 _ => fail!(Error::<T>::UnexpectedCollectionType)
1222 };1224 };
1556 {1558 {
1557 CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, sender.clone(), recipient)?,1559 CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, sender.clone(), recipient)?,
1558 CollectionMode::Fungible(_) => Self::transfer_fungible(collection_id, value, &sender, &recipient)?,1560 CollectionMode::Fungible(_) => Self::transfer_fungible(collection_id, value, &sender, &recipient)?,
1559 CollectionMode::ReFungible(_) => Self::transfer_refungible(collection_id, item_id, value, sender.clone(), recipient)?,1561 CollectionMode::ReFungible => Self::transfer_refungible(collection_id, item_id, value, sender.clone(), recipient)?,
1560 _ => ()1562 _ => ()
1561 };1563 };
15621564
1608 fail!(Error::<T>::NotFungibleDataUsedToMintFungibleCollectionToken);1610 fail!(Error::<T>::NotFungibleDataUsedToMintFungibleCollectionToken);
1609 }1611 }
1610 },1612 },
1611 CollectionMode::ReFungible(_) => {1613 CollectionMode::ReFungible => {
1612 if let CreateItemData::ReFungible(data) = data {1614 if let CreateItemData::ReFungible(data) = data {
16131615
1614 // check sizes1616 // check sizes
1615 ensure!(ChainLimit::get().custom_data_limit >= data.const_data.len() as u32, Error::<T>::TokenConstDataLimitExceeded);1617 ensure!(ChainLimit::get().custom_data_limit >= data.const_data.len() as u32, Error::<T>::TokenConstDataLimitExceeded);
1616 ensure!(ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);1618 ensure!(ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);
1619
1620 // Check refungibility limits
1621 ensure!(data.pieces <= MAX_REFUNGIBLE_PIECES, Error::<T>::WrongRefungiblePieces);
1622 ensure!(data.pieces > 0, Error::<T>::WrongRefungiblePieces);
1617 } else {1623 } else {
1618 fail!(Error::<T>::NotReFungibleDataUsedToMintReFungibleCollectionToken);1624 fail!(Error::<T>::NotReFungibleDataUsedToMintReFungibleCollectionToken);
1619 }1625 }
1624 Ok(())1630 Ok(())
1625 }1631 }
16261632
1627 fn create_item_no_validation(collection_id: CollectionId, collection: &CollectionType<T::AccountId>, owner: T::AccountId, data: CreateItemData) -> DispatchResult {1633 fn create_item_no_validation(collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult {
1628 match data1634 match data
1629 {1635 {
1630 CreateItemData::NFT(data) => {1636 CreateItemData::NFT(data) => {
1641 },1647 },
1642 CreateItemData::ReFungible(data) => {1648 CreateItemData::ReFungible(data) => {
1643 let mut owner_list = Vec::new();1649 let mut owner_list = Vec::new();
1644 let value = (10 as u128).pow(collection.decimal_points as u32);
1645 owner_list.push(Ownership {owner: owner.clone(), fraction: value});1650 owner_list.push(Ownership {owner: owner.clone(), fraction: data.pieces});
16461651
1647 let item = ReFungibleItemType {1652 let item = ReFungibleItemType {
1648 owner: owner_list,1653 owner: owner_list,
1871 CollectionMode::Fungible(_) => {1876 CollectionMode::Fungible(_) => {
1872 <FungibleItemList<T>>::contains_key(collection_id, &subject)1877 <FungibleItemList<T>>::contains_key(collection_id, &subject)
1873 }1878 }
1874 CollectionMode::ReFungible(_) => {1879 CollectionMode::ReFungible => {
1875 <ReFungibleItemList<T>>::get(collection_id, item_id)1880 <ReFungibleItemList<T>>::get(collection_id, item_id)
1876 .owner1881 .owner
1877 .iter()1882 .iter()
1900 {1905 {
1901 CollectionMode::NFT => <NftItemList<T>>::contains_key(collection_id, item_id),1906 CollectionMode::NFT => <NftItemList<T>>::contains_key(collection_id, item_id),
1902 CollectionMode::Fungible(_) => <FungibleItemList<T>>::contains_key(collection_id, owner),1907 CollectionMode::Fungible(_) => <FungibleItemList<T>>::contains_key(collection_id, owner),
1903 CollectionMode::ReFungible(_) => <ReFungibleItemList<T>>::contains_key(collection_id, item_id),1908 CollectionMode::ReFungible => <ReFungibleItemList<T>>::contains_key(collection_id, item_id),
1904 _ => false1909 _ => false
1905 };1910 };
19061911
24262431
2427 sponsored2432 sponsored
2428 }2433 }
2429 CollectionMode::ReFungible(_) => {2434 CollectionMode::ReFungible => {
2430 2435
2431 // get correct limit2436 // get correct limit
2432 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {2437 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
35}35}
3636
37fn default_re_fungible_data () -> CreateReFungibleData {37fn default_re_fungible_data () -> CreateReFungibleData {
38 CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }38 CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1], pieces: 1023 }
39}39}
4040
41fn create_test_collection_for_owner(mode: &CollectionMode, owner: u64, id: CollectionId) -> CollectionId {41fn create_test_collection_for_owner(mode: &CollectionMode, owner: u64, id: CollectionId) -> CollectionId {
113 }); 113 });
114}114}
115
116#[test]
117fn create_re_fungible_collection_fails_with_large_decimal_numbers() {
118 new_test_ext().execute_with(|| {
119 default_limits();
120
121 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
122 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
123 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
124
125 let origin1 = Origin::signed(1);
126 assert_noop!(TemplateModule::create_collection(
127 origin1,
128 col_name1,
129 col_desc1,
130 token_prefix1,
131 CollectionMode::ReFungible(MAX_DECIMAL_POINTS + 1)
132 ), Error::<Test>::CollectionDecimalPointLimitExceeded);
133 });
134}
135115
136#[test]116#[test]
137fn create_nft_item() {117fn create_nft_item() {
176fn create_refungible_item() {156fn create_refungible_item() {
177 new_test_ext().execute_with(|| {157 new_test_ext().execute_with(|| {
178 default_limits();158 default_limits();
179 let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);159 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
180160
181 let data = default_re_fungible_data();161 let data = default_re_fungible_data();
182 create_test_item(collection_id, &data.clone().into());162 create_test_item(collection_id, &data.clone().into());
192 TemplateModule::refungible_item_id(collection_id, 1).owner[0],172 TemplateModule::refungible_item_id(collection_id, 1).owner[0],
193 Ownership {173 Ownership {
194 owner: 1,174 owner: 1,
195 fraction: 1000175 fraction: 1023
196 }176 }
197 );177 );
198 });178 });
203 new_test_ext().execute_with(|| {183 new_test_ext().execute_with(|| {
204 default_limits();184 default_limits();
205 185
206 create_test_collection(&CollectionMode::ReFungible(3), 1);186 create_test_collection(&CollectionMode::ReFungible, 1);
207187
208 let origin1 = Origin::signed(1);188 let origin1 = Origin::signed(1);
209189
224 item.owner[0],204 item.owner[0],
225 Ownership {205 Ownership {
226 owner: 1,206 owner: 1,
227 fraction: 1000207 fraction: 1023
228 }208 }
229 );209 );
230 }210 }
312 new_test_ext().execute_with(|| {292 new_test_ext().execute_with(|| {
313 default_limits();293 default_limits();
314 294
315 let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);295 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
316296
317 let data = default_re_fungible_data();297 let data = default_re_fungible_data();
318 create_test_item(collection_id, &data.clone().into());298 create_test_item(collection_id, &data.clone().into());
331 TemplateModule::refungible_item_id(collection_id, 1).owner[0],311 TemplateModule::refungible_item_id(collection_id, 1).owner[0],
332 Ownership {312 Ownership {
333 owner: 1,313 owner: 1,
334 fraction: 1000314 fraction: 1023
335 }315 }
336 );316 );
337 assert_eq!(TemplateModule::balance_count(1, 1), 1000);317 assert_eq!(TemplateModule::balance_count(1, 1), 1023);
338 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);318 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
339319
340 // change owner scenario320 // change owner scenario
341 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));321 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1023));
342 assert_eq!(322 assert_eq!(
343 TemplateModule::refungible_item_id(1, 1).owner[0],323 TemplateModule::refungible_item_id(1, 1).owner[0],
344 Ownership {324 Ownership {
345 owner: 2,325 owner: 2,
346 fraction: 1000326 fraction: 1023
347 }327 }
348 );328 );
349 assert_eq!(TemplateModule::balance_count(1, 1), 0);329 assert_eq!(TemplateModule::balance_count(1, 1), 0);
350 assert_eq!(TemplateModule::balance_count(1, 2), 1000);330 assert_eq!(TemplateModule::balance_count(1, 2), 1023);
351 // assert_eq!(TemplateModule::address_tokens(1, 1), []);331 // assert_eq!(TemplateModule::address_tokens(1, 1), []);
352 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);332 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);
353333
357 TemplateModule::refungible_item_id(1, 1).owner[0],337 TemplateModule::refungible_item_id(1, 1).owner[0],
358 Ownership {338 Ownership {
359 owner: 2,339 owner: 2,
360 fraction: 500340 fraction: 523
361 }341 }
362 );342 );
363 assert_eq!(343 assert_eq!(
367 fraction: 500347 fraction: 500
368 }348 }
369 );349 );
370 assert_eq!(TemplateModule::balance_count(1, 2), 500);350 assert_eq!(TemplateModule::balance_count(1, 2), 523);
371 assert_eq!(TemplateModule::balance_count(1, 3), 500);351 assert_eq!(TemplateModule::balance_count(1, 3), 500);
372 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);352 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);
373 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);353 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);
378 TemplateModule::refungible_item_id(1, 1).owner[0],358 TemplateModule::refungible_item_id(1, 1).owner[0],
379 Ownership {359 Ownership {
380 owner: 2,360 owner: 2,
381 fraction: 300361 fraction: 323
382 }362 }
383 );363 );
384 assert_eq!(364 assert_eq!(
388 fraction: 700368 fraction: 700
389 }369 }
390 );370 );
391 assert_eq!(TemplateModule::balance_count(1, 2), 300);371 assert_eq!(TemplateModule::balance_count(1, 2), 323);
392 assert_eq!(TemplateModule::balance_count(1, 3), 700);372 assert_eq!(TemplateModule::balance_count(1, 3), 700);
393 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);373 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);
394 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);374 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);
517 new_test_ext().execute_with(|| {497 new_test_ext().execute_with(|| {
518 default_limits();498 default_limits();
519 499
520 let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);500 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
521 501
522 let origin1 = Origin::signed(1);502 let origin1 = Origin::signed(1);
523 let origin2 = Origin::signed(2);503 let origin2 = Origin::signed(2);
524504
525 let data = default_re_fungible_data();505 let data = default_re_fungible_data();
526 create_test_item(collection_id, &data.into());506 create_test_item(collection_id, &data.into());
527507
528 assert_eq!(TemplateModule::balance_count(1, 1), 1000);508 assert_eq!(TemplateModule::balance_count(1, 1), 1023);
529 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);509 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
530510
531 assert_ok!(TemplateModule::set_mint_permission(511 assert_ok!(TemplateModule::set_mint_permission(
543 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));523 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));
544524
545 // do approve525 // do approve
546 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1, 1000));526 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1, 1023));
547 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1000);527 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1023);
548528
549 assert_ok!(TemplateModule::transfer_from(529 assert_ok!(TemplateModule::transfer_from(
550 origin2.clone(),530 origin2.clone(),
554 1,534 1,
555 100535 100
556 ));536 ));
557 assert_eq!(TemplateModule::balance_count(1, 1), 900);537 assert_eq!(TemplateModule::balance_count(1, 1), 923);
558 assert_eq!(TemplateModule::balance_count(1, 3), 100);538 assert_eq!(TemplateModule::balance_count(1, 3), 100);
559 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);539 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
560 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);540 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);
561541
562 assert_eq!(542 assert_eq!(
563 TemplateModule::approved(1, (1, 1, 2)),543 TemplateModule::approved(1, (1, 1, 2)),
564 900544 923
565 );545 );
566 });546 });
567}547}
717 new_test_ext().execute_with(|| {697 new_test_ext().execute_with(|| {
718 default_limits();698 default_limits();
719 699
720 let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);700 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
721 let origin1 = Origin::signed(1);701 let origin1 = Origin::signed(1);
722702
723 assert_ok!(TemplateModule::set_mint_permission(703 assert_ok!(TemplateModule::set_mint_permission(
738 create_test_item(collection_id, &data.into());718 create_test_item(collection_id, &data.into());
739719
740 // check balance (collection with id = 1, user id = 2)720 // check balance (collection with id = 1, user id = 2)
741 assert_eq!(TemplateModule::balance_count(1, 1), 1000);721 assert_eq!(TemplateModule::balance_count(1, 1), 1023);
742722
743 // burn item723 // burn item
744 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 1000));724 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 1023));
745 assert_noop!(725 assert_noop!(
746 TemplateModule::burn_item(origin1.clone(), 1, 1, 1000),726 TemplateModule::burn_item(origin1.clone(), 1, 1, 1023),
747 Error::<Test>::TokenNotFound727 Error::<Test>::TokenNotFound
748 );728 );
749729
807 787
808 let nft_collection_id = create_test_collection(&CollectionMode::NFT, 1);788 let nft_collection_id = create_test_collection(&CollectionMode::NFT, 1);
809 let fungible_collection_id = create_test_collection(&CollectionMode::Fungible(3), 2);789 let fungible_collection_id = create_test_collection(&CollectionMode::Fungible(3), 2);
810 let re_fungible_collection_id = create_test_collection(&CollectionMode::ReFungible(3), 3);790 let re_fungible_collection_id = create_test_collection(&CollectionMode::ReFungible, 3);
811 791
812 // check balance before792 // check balance before
813 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 0);793 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 0);
826 // check balance (collection with id = 1, user id = 1)806 // check balance (collection with id = 1, user id = 1)
827 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 1);807 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 1);
828 assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 5);808 assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 5);
829 assert_eq!(TemplateModule::balance_count(re_fungible_collection_id, 1), 1000);809 assert_eq!(TemplateModule::balance_count(re_fungible_collection_id, 1), 1023);
830 assert_eq!(TemplateModule::nft_item_id(nft_collection_id, 1).owner, 1);810 assert_eq!(TemplateModule::nft_item_id(nft_collection_id, 1).owner, 1);
831 assert_eq!(TemplateModule::fungible_item_id(fungible_collection_id, 1).value, 5);811 assert_eq!(TemplateModule::fungible_item_id(fungible_collection_id, 1).value, 5);
832 assert_eq!(TemplateModule::refungible_item_id(re_fungible_collection_id, 1).owner[0].owner, 1);812 assert_eq!(TemplateModule::refungible_item_id(re_fungible_collection_id, 1).owner[0].owner, 1);
1905 new_test_ext().execute_with(|| {1885 new_test_ext().execute_with(|| {
1906 default_limits();1886 default_limits();
19071887
1908 let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);1888 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
19091889
1910 let origin1 = Origin::signed(1);1890 let origin1 = Origin::signed(1);
19111891
1982 }));1962 }));
19831963
19841964
1985 let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);1965 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
19861966
1987 let origin1 = Origin::signed(1);1967 let origin1 = Origin::signed(1);
19881968
modifiedruntime_types.jsondiffbeforeafterboth
1{1{
2 "Schedule": {
3 "version": "u32",
4 "put_code_per_byte_cost": "Gas",
5 "grow_mem_cost": "Gas",
6 "regular_op_cost": "Gas",
7 "return_data_per_byte_cost": "Gas",
8 "event_data_per_byte_cost": "Gas",
9 "event_per_topic_cost": "Gas",
10 "event_base_cost": "Gas",
11 "call_base_cost": "Gas",
12 "instantiate_base_cost": "Gas",
13 "dispatch_base_cost": "Gas",
14 "sandbox_data_read_cost": "Gas",
15 "sandbox_data_write_cost": "Gas",
16 "transfer_cost": "Gas",
17 "instantiate_cost": "Gas",
18 "max_event_topics": "u32",
19 "max_stack_height": "u32",
20 "max_memory_pages": "u32",
21 "max_table_size": "u32",
22 "enable_println": "bool",
23 "max_subject_len": "u32"
24 },
25 "AccessMode": {2 "AccessMode": {
26 "_enum": [3 "_enum": [
27 "Normal",4 "Normal",
34 "Invalid": null,11 "Invalid": null,
35 "NFT": null,12 "NFT": null,
36 "Fungible": "DecimalPoints",13 "Fungible": "DecimalPoints",
37 "ReFungible": "DecimalPoints"14 "ReFungible": null
38 }15 }
39 },16 },
40 "Ownership": {17 "Ownership": {
84 },61 },
85 "CreateReFungibleData": {62 "CreateReFungibleData": {
86 "const_data": "Vec<u8>",63 "const_data": "Vec<u8>",
87 "variable_data": "Vec<u8>" 64 "variable_data": "Vec<u8>",
65 "pieces": "u128"
88 },66 },
89 "CreateItemData": {67 "CreateItemData": {
90 "_enum": {68 "_enum": {
120 "SponsorTimeout": "u32",98 "SponsorTimeout": "u32",
121 "OwnerCanTransfer": "bool",99 "OwnerCanTransfer": "bool",
122 "OwnerCanDestroy": "bool"100 "OwnerCanDestroy": "bool"
123 },101 }
124 "AccountInfo": "AccountInfoWithProviders",
125 "AccountInfoWithProviders": {
126 "nonce": "Index",
127 "consumers": "RefCount",
128 "providers": "RefCount",
129 "data": "AccountData"
130 }
131
132 }102}
133
modifiedtests/src/addCollectionAdmin.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { ApiPromise } from '@polkadot/api'; 6import { ApiPromise } from '@polkadot/api';
2import BN from 'bn.js'; 7import BN from 'bn.js';
98 }); 103 });
99 }); 104 });
100 105
101 it('Add an admin to a collection that has reached the maximum number of admins limit', async () => { 106 it.only('Add an admin to a collection that has reached the maximum number of admins limit', async () => {
102 await usingApi(async (api: ApiPromise) => { 107 await usingApi(async (api: ApiPromise) => {
103 const Alice = privateKey('//Alice'); 108 const Alice = privateKey('//Alice');
104 const accounts = [ 109 const accounts = [
112 ]; 117 ];
113 const collectionId = await createCollectionExpectSuccess(); 118 const collectionId = await createCollectionExpectSuccess();
114 119
115 const chainLimits: any = await api.query.nft.chainLimit(); 120 const chainLimit = await api.query.nft.chainLimit() as unknown as { CollectionAdminsLimit: BN };
116 const chainAdminLimit = chainLimits.CollectionAdminsLimit.toNumber(); 121 const chainAdminLimit = chainLimit.CollectionAdminsLimit.toNumber();
117 expect(chainAdminLimit).to.be.equal(5); 122 expect(chainAdminLimit).to.be.equal(5);
118 123
119 for (let i = 0; i < chainAdminLimit; i++) { 124 for (let i = 0; i < chainAdminLimit; i++) {
modifiedtests/src/addToContractWhiteList.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import chai from "chai";6import chai from "chai";
2import chaiAsPromised from 'chai-as-promised';7import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/addToWhiteList.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { IKeyringPair } from '@polkadot/types/types'; 6import { IKeyringPair } from '@polkadot/types/types';
2import chai from 'chai'; 7import chai from 'chai';
modifiedtests/src/approve.test.tsdiffbeforeafterboth
34 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);34 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);
35 // reFungible35 // reFungible
36 const reFungibleCollectionId =36 const reFungibleCollectionId =
37 await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});37 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
38 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');38 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
39 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);39 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);
40 });40 });
56 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);56 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);
57 // reFungible57 // reFungible
58 const reFungibleCollectionId =58 const reFungibleCollectionId =
59 await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});59 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
60 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');60 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
61 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 1);61 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 1);
62 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0);62 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0);
95 await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);95 await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);
96 // reFungible96 // reFungible
97 const reFungibleCollectionId =97 const reFungibleCollectionId =
98 await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});98 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
99 await destroyCollectionExpectSuccess(reFungibleCollectionId);99 await destroyCollectionExpectSuccess(reFungibleCollectionId);
100 await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);100 await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);
101 });101 });
113 await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);113 await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);
114 // reFungible114 // reFungible
115 const reFungibleCollectionId =115 const reFungibleCollectionId =
116 await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});116 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
117 await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);117 await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);
118 });118 });
119 });119 });
132 await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);132 await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);
133 // reFungible133 // reFungible
134 const reFungibleCollectionId =134 const reFungibleCollectionId =
135 await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});135 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
136 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');136 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
137 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);137 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);
138 });138 });
modifiedtests/src/burnItem.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';6import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
2import { Keyring } from "@polkadot/api";7import { Keyring } from "@polkadot/api";
70 });75 });
71 it('Burn item in ReFungible collection', async () => {76 it('Burn item in ReFungible collection', async () => {
72 const createMode = 'ReFungible';77 const createMode = 'ReFungible';
73 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 2 }});78 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});
74 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);79 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
7580
76 await usingApi(async (api) => {81 await usingApi(async (api) => {
9196
92 it('Burn owned portion of item in ReFungible collection', async () => {97 it('Burn owned portion of item in ReFungible collection', async () => {
93 const createMode = 'ReFungible';98 const createMode = 'ReFungible';
94 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 2 }});99 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
95 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);100 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
96101
97 await usingApi(async (api) => {102 await usingApi(async (api) => {
modifiedtests/src/change-collection-owner.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import chai from 'chai';6import chai from 'chai';
2import chaiAsPromised from 'chai-as-promised';7import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/confirmSponsorship.test.tsdiffbeforeafterboth
115 });115 });
116116
117 it('ReFungible: Transfer fees are paid by the sponsor after confirmation', async () => {117 it('ReFungible: Transfer fees are paid by the sponsor after confirmation', async () => {
118 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0 }});118 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
119 await setCollectionSponsorExpectSuccess(collectionId, bob.address);119 await setCollectionSponsorExpectSuccess(collectionId, bob.address);
120 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');120 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
121121
247 });247 });
248248
249 it('ReFungible: Sponsoring is rate limited', async () => {249 it('ReFungible: Sponsoring is rate limited', async () => {
250 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0 }});250 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
251 await setCollectionSponsorExpectSuccess(collectionId, bob.address);251 await setCollectionSponsorExpectSuccess(collectionId, bob.address);
252 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');252 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
253253
modifiedtests/src/contracts.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import chai from "chai";6import chai from "chai";
2import chaiAsPromised from 'chai-as-promised';7import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/createCollection.test.tsdiffbeforeafterboth
28 await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}}); 28 await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
29 }); 29 });
30 it('Create new ReFungible collection', async () => { 30 it('Create new ReFungible collection', async () => {
31 await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); 31 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
32 }); 32 });
33}); 33});
34 34
modifiedtests/src/createItem.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { default as usingApi } from './substrate/substrate-api'; 6import { default as usingApi } from './substrate/substrate-api';
2import { Keyring } from "@polkadot/api"; 7import { Keyring } from "@polkadot/api";
28 }); 33 });
29 it('Create new item in ReFungible collection', async () => { 34 it('Create new item in ReFungible collection', async () => {
30 const createMode = 'ReFungible'; 35 const createMode = 'ReFungible';
31 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}}); 36 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
32 await createItemExpectSuccess(alice, newCollectionID, createMode); 37 await createItemExpectSuccess(alice, newCollectionID, createMode);
33 }); 38 });
34}); 39});
modifiedtests/src/createMultipleItems.test.tsdiffbeforeafterboth
5656
57 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {57 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {
58 await usingApi(async (api: ApiPromise) => {58 await usingApi(async (api: ApiPromise) => {
59 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});59 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
60 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;60 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
61 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);61 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
62 const Alice = privateKey('//Alice');62 const Alice = privateKey('//Alice');
63 const args = [63 const args = [
64 { Refungible: ['0x31', '0x31'] },64 {refungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
65 { Refungible: ['0x32', '0x32'] },65 {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
66 { Refungible: ['0x33', '0x33'] },66 {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
67 ];67 ];
68 const createMultipleItemsTx = await api.tx.nft68 const createMultipleItemsTx = await api.tx.nft
69 .createMultipleItems(collectionId, Alice.address, args);69 .createMultipleItems(collectionId, Alice.address, args);
137137
138 // ReFungible138 // ReFungible
139 const collectionIdReFungible =139 const collectionIdReFungible =
140 await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});140 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
141 const argsReFungible = [141 const argsReFungible = [
142 { ReFungible: ['1'.repeat(2049), '1'.repeat(2049)] },142 { ReFungible: ['1'.repeat(2049), '1'.repeat(2049)] },
143 { ReFungible: ['2'.repeat(2049), '2'.repeat(2049)] },143 { ReFungible: ['2'.repeat(2049), '2'.repeat(2049)] },
modifiedtests/src/destroyCollection.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import chai from 'chai';6import chai from 'chai';
2import chaiAsPromised from 'chai-as-promised';7import chaiAsPromised from 'chai-as-promised';
3import { default as usingApi, submitTransactionAsync } from "./substrate/substrate-api";8import { default as usingApi } from "./substrate/substrate-api";
4import { createCollectionExpectSuccess, createCollectionExpectFailure, destroyCollectionExpectSuccess, destroyCollectionExpectFailure } from "./util/helpers";9import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, destroyCollectionExpectFailure } from "./util/helpers";
5import type { AccountId, EventRecord } from '@polkadot/types/interfaces';
6import privateKey from './substrate/privateKey';
710
8chai.use(chaiAsPromised);11chai.use(chaiAsPromised);
9const expect = chai.expect;
1012
11describe('integration test: ext. destroyCollection():', () => {13describe('integration test: ext. destroyCollection():', () => {
12 it('NFT collection can be destroyed', async () => {14 it('NFT collection can be destroyed', async () => {
18 await destroyCollectionExpectSuccess(collectionId);20 await destroyCollectionExpectSuccess(collectionId);
19 });21 });
20 it('ReFungible collection can be destroyed', async () => {22 it('ReFungible collection can be destroyed', async () => {
21 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});23 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
22 await destroyCollectionExpectSuccess(collectionId);24 await destroyCollectionExpectSuccess(collectionId);
23 });25 });
24});26});
modifiedtests/src/enableContractSponsoring.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { IKeyringPair } from '@polkadot/types/types';6import { IKeyringPair } from '@polkadot/types/types';
2import chai from 'chai';7import chai from 'chai';
modifiedtests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { ApiPromise } from '@polkadot/api';6import { ApiPromise } from '@polkadot/api';
2import BN from 'bn.js';
3import chai from 'chai';7import chai from 'chai';
4import chaiAsPromised from 'chai-as-promised';8import chaiAsPromised from 'chai-as-promised';
5import privateKey from './substrate/privateKey';9import privateKey from './substrate/privateKey';
modifiedtests/src/removeFromWhiteList.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import chai from 'chai';6import chai from 'chai';
2import chaiAsPromised from 'chai-as-promised';7import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/setCollectionLimits.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits6// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
2import { ApiPromise, Keyring } from '@polkadot/api';7import { ApiPromise, Keyring } from '@polkadot/api';
modifiedtests/src/setCollectionSponsor.test.tsdiffbeforeafterboth
9import { createCollectionExpectSuccess, setCollectionSponsorExpectSuccess, destroyCollectionExpectSuccess, setCollectionSponsorExpectFailure } from "./util/helpers";9import { createCollectionExpectSuccess, setCollectionSponsorExpectSuccess, destroyCollectionExpectSuccess, setCollectionSponsorExpectFailure } from "./util/helpers";
10import { Keyring } from "@polkadot/api";10import { Keyring } from "@polkadot/api";
11import { IKeyringPair } from "@polkadot/types/types";11import { IKeyringPair } from "@polkadot/types/types";
12import type { AccountId } from '@polkadot/types/interfaces';
1312
14chai.use(chaiAsPromised);13chai.use(chaiAsPromised);
15const expect = chai.expect;14const expect = chai.expect;
34 await setCollectionSponsorExpectSuccess(collectionId, bob.address);33 await setCollectionSponsorExpectSuccess(collectionId, bob.address);
35 });34 });
36 it('Set ReFungible collection sponsor', async () => {35 it('Set ReFungible collection sponsor', async () => {
37 const collectionId = await createCollectionExpectSuccess({ mode: {type: 'ReFungible', decimalPoints: 0} });36 const collectionId = await createCollectionExpectSuccess({ mode: {type: 'ReFungible'} });
38 await setCollectionSponsorExpectSuccess(collectionId, bob.address);37 await setCollectionSponsorExpectSuccess(collectionId, bob.address);
39 });38 });
4039
modifiedtests/src/setConstOnChainSchema.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { Keyring } from '@polkadot/api';6import { Keyring } from '@polkadot/api';
2import { IKeyringPair } from '@polkadot/types/types';7import { IKeyringPair } from '@polkadot/types/types';
modifiedtests/src/setContractSponsoringRateLimit.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { IKeyringPair } from '@polkadot/types/types';6import { IKeyringPair } from '@polkadot/types/types';
2import privateKey from './substrate/privateKey';7import privateKey from './substrate/privateKey';
modifiedtests/src/setMintPermission.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { IKeyringPair } from '@polkadot/types/types';6import { IKeyringPair } from '@polkadot/types/types';
2import privateKey from './substrate/privateKey';7import privateKey from './substrate/privateKey';
modifiedtests/src/setPublicAccessMode.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1// https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion 6// https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion
2import { ApiPromise, Keyring } from '@polkadot/api'; 7import { ApiPromise, Keyring } from '@polkadot/api';
modifiedtests/src/setSchemaVersion.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1// https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion6// https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion
2import { ApiPromise, Keyring } from '@polkadot/api';7import { ApiPromise, Keyring } from '@polkadot/api';
3import { IKeyringPair } from '@polkadot/types/types';8import { IKeyringPair } from '@polkadot/types/types';
4import BN from 'bn.js';
5import chai from 'chai';9import chai from 'chai';
6import chaiAsPromised from 'chai-as-promised';10import chaiAsPromised from 'chai-as-promised';
7import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';11import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
modifiedtests/src/setVariableMetaData.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { IKeyringPair } from '@polkadot/types/types';6import { IKeyringPair } from '@polkadot/types/types';
2import chai from 'chai';7import chai from 'chai';
modifiedtests/src/setVariableOnChainSchema.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import { Keyring } from '@polkadot/api'; 6import { Keyring } from '@polkadot/api';
2import { IKeyringPair } from '@polkadot/types/types'; 7import { IKeyringPair } from '@polkadot/types/types';
modifiedtests/src/toggleContractWhiteList.test.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import chai from "chai";6import chai from "chai";
2import chaiAsPromised from 'chai-as-promised';7import chaiAsPromised from 'chai-as-promised';
modifiedtests/src/transfer.test.tsdiffbeforeafterboth
63 });63 });
64 });64 });
6565
66 it('Create collection, balance transfers and check balance', async () => {66 it('User can transfer owned token', async () => {
67 await usingApi(async (api) => {67 await usingApi(async (api) => {
68 const Alice = privateKey('//Alice');68 const Alice = privateKey('//Alice');
69 const Bob = privateKey('//Bob');69 const Bob = privateKey('//Bob');
77 await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');77 await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');
78 // reFungible78 // reFungible
79 const reFungibleCollectionId = await79 const reFungibleCollectionId = await
80 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});80 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
81 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');81 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
82 await transferExpectSuccess(reFungibleCollectionId,82 await transferExpectSuccess(reFungibleCollectionId,
83 newReFungibleTokenId, Alice, Bob, 1, 'ReFungible');83 newReFungibleTokenId, Alice, Bob, 100, 'ReFungible');
84 });84 });
85 });85 });
86});86});
119 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');119 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');
120 // reFungible120 // reFungible
121 const reFungibleCollectionId = await121 const reFungibleCollectionId = await
122 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});122 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
123 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');123 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
124 await destroyCollectionExpectSuccess(reFungibleCollectionId);124 await destroyCollectionExpectSuccess(reFungibleCollectionId);
125 await transferExpectFail(reFungibleCollectionId,125 await transferExpectFail(reFungibleCollectionId,
134 await transferExpectFail(fungibleCollectionId, 2, Alice, Bob, 1, 'Fungible');134 await transferExpectFail(fungibleCollectionId, 2, Alice, Bob, 1, 'Fungible');
135 // reFungible135 // reFungible
136 const reFungibleCollectionId = await136 const reFungibleCollectionId = await
137 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});137 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
138 await transferExpectFail(reFungibleCollectionId,138 await transferExpectFail(reFungibleCollectionId,
139 2, Alice, Bob, 1, 'ReFungible');139 2, Alice, Bob, 1, 'ReFungible');
140 });140 });
151 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');151 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');
152 // reFungible152 // reFungible
153 const reFungibleCollectionId = await153 const reFungibleCollectionId = await
154 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});154 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
155 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');155 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
156 await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 1);156 await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 1);
157 await transferExpectFail(reFungibleCollectionId,157 await transferExpectFail(reFungibleCollectionId,
168 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Charlie, Bob, 1, 'Fungible');168 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Charlie, Bob, 1, 'Fungible');
169 // reFungible169 // reFungible
170 const reFungibleCollectionId = await170 const reFungibleCollectionId = await
171 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});171 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
172 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');172 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
173 await transferExpectFail(reFungibleCollectionId,173 await transferExpectFail(reFungibleCollectionId,
174 newReFungibleTokenId, Charlie, Bob, 1, 'ReFungible');174 newReFungibleTokenId, Charlie, Bob, 1, 'ReFungible');
modifiedtests/src/transferFrom.test.tsdiffbeforeafterboth
25 await usingApi(async (api: ApiPromise) => {25 await usingApi(async (api: ApiPromise) => {
26 const Alice = privateKey('//Alice');26 const Alice = privateKey('//Alice');
27 const Bob = privateKey('//Bob');27 const Bob = privateKey('//Bob');
28 const Charlie = privateKey('//CHARLIE');28 const Charlie = privateKey('//Charlie');
29 // nft29 // nft
30 const nftCollectionId = await createCollectionExpectSuccess();30 const nftCollectionId = await createCollectionExpectSuccess();
31 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');31 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
40 await transferFromExpectSuccess(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1, 'Fungible');40 await transferFromExpectSuccess(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1, 'Fungible');
41 // reFungible41 // reFungible
42 const reFungibleCollectionId = await42 const reFungibleCollectionId = await
43 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});43 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
44 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');44 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
45 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);45 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 100);
46 await transferFromExpectSuccess(reFungibleCollectionId,46 await transferFromExpectSuccess(reFungibleCollectionId,
47 newReFungibleTokenId, Bob, Alice, Charlie, 1, 'ReFungible');47 newReFungibleTokenId, Bob, Alice, Charlie, 100, 'ReFungible');
48 });48 });
49 });49 });
50});50});
54 await usingApi(async (api: ApiPromise) => {54 await usingApi(async (api: ApiPromise) => {
55 const Alice = privateKey('//Alice');55 const Alice = privateKey('//Alice');
56 const Bob = privateKey('//Bob');56 const Bob = privateKey('//Bob');
57 const Charlie = privateKey('//CHARLIE');57 const Charlie = privateKey('//Charlie');
58 // nft58 // nft
59 const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;59 const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
60 await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob);60 await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob);
96 await usingApi(async (api: ApiPromise) => {96 await usingApi(async (api: ApiPromise) => {
97 const Alice = privateKey('//Alice');97 const Alice = privateKey('//Alice');
98 const Bob = privateKey('//Bob');98 const Bob = privateKey('//Bob');
99 const Charlie = privateKey('//CHARLIE');99 const Charlie = privateKey('//Charlie');
100 // nft100 // nft
101 const nftCollectionId = await createCollectionExpectSuccess();101 const nftCollectionId = await createCollectionExpectSuccess();
102 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');102 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
109 await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1);109 await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1);
110 // reFungible110 // reFungible
111 const reFungibleCollectionId = await111 const reFungibleCollectionId = await
112 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});112 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
113 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');113 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
114 await transferFromExpectFail(reFungibleCollectionId,114 await transferFromExpectFail(reFungibleCollectionId,
115 newReFungibleTokenId, Bob, Alice, Charlie, 1);115 newReFungibleTokenId, Bob, Alice, Charlie, 1);
120 await usingApi(async (api: ApiPromise) => {120 await usingApi(async (api: ApiPromise) => {
121 const Alice = privateKey('//Alice');121 const Alice = privateKey('//Alice');
122 const Bob = privateKey('//Bob');122 const Bob = privateKey('//Bob');
123 const Charlie = privateKey('//CHARLIE');123 const Charlie = privateKey('//Charlie');
124 // nft124 // nft
125 const nftCollectionId = await createCollectionExpectSuccess();125 const nftCollectionId = await createCollectionExpectSuccess();
126 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');126 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
135 await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 2);135 await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 2);
136 // reFungible136 // reFungible
137 const reFungibleCollectionId = await137 const reFungibleCollectionId = await
138 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});138 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
139 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');139 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
140 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);140 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);
141 await transferFromExpectFail(reFungibleCollectionId,141 await transferFromExpectFail(reFungibleCollectionId,
147 await usingApi(async (api: ApiPromise) => {147 await usingApi(async (api: ApiPromise) => {
148 const Alice = privateKey('//Alice');148 const Alice = privateKey('//Alice');
149 const Bob = privateKey('//Bob');149 const Bob = privateKey('//Bob');
150 const Charlie = privateKey('//CHARLIE');150 const Charlie = privateKey('//Charlie');
151 const Dave = privateKey('//DAVE');151 const Dave = privateKey('//Dave');
152 // nft152 // nft
153 const nftCollectionId = await createCollectionExpectSuccess();153 const nftCollectionId = await createCollectionExpectSuccess();
154 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');154 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
174 }174 }
175 // reFungible175 // reFungible
176 const reFungibleCollectionId = await176 const reFungibleCollectionId = await
177 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});177 createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
178 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');178 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
179 try {179 try {
180 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Bob);180 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Bob);
modifiedtests/src/types.tsdiffbeforeafterboth
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
1import BN from 'bn.js';6import BN from 'bn.js';
27
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
124124
125interface ReFungible {125interface ReFungible {
126 type: 'ReFungible';126 type: 'ReFungible';
127 decimalPoints: number;
128}127}
129
130interface Nft {
131 type: 'NFT'
132}
133
134interface Fungible {
135 type: 'Fungible',
136 decimalPoints: number
137}
138
139interface ReFungible {
140 type: 'ReFungible',
141 decimalPoints: number
142}
143128
144type CollectionMode = Nft | Fungible | ReFungible | Invalid;129type CollectionMode = Nft | Fungible | ReFungible | Invalid;
145130
174 } else if (mode.type === 'Fungible') {159 } else if (mode.type === 'Fungible') {
175 modeprm = {fungible: mode.decimalPoints};160 modeprm = {fungible: mode.decimalPoints};
176 } else if (mode.type === 'ReFungible') {161 } else if (mode.type === 'ReFungible') {
177 modeprm = {refungible: mode.decimalPoints};162 modeprm = {refungible: null};
178 } else if (mode.type === 'Invalid') {163 } else if (mode.type === 'Invalid') {
179 modeprm = {invalid: null};164 modeprm = {invalid: null};
180 }165 }
216 } else if (mode.type === 'Fungible') {201 } else if (mode.type === 'Fungible') {
217 modeprm = {fungible: mode.decimalPoints};202 modeprm = {fungible: mode.decimalPoints};
218 } else if (mode.type === 'ReFungible') {203 } else if (mode.type === 'ReFungible') {
219 modeprm = {refungible: mode.decimalPoints};204 modeprm = {refungible: null};
220 } else if (mode.type === 'Invalid') {205 } else if (mode.type === 'Invalid') {
221 modeprm = {invalid: null};206 modeprm = {invalid: null};
222 }207 }
620 if (createMode === 'Fungible') {605 if (createMode === 'Fungible') {
621 const createData = {fungible: {value: 10}};606 const createData = {fungible: {value: 10}};
622 tx = api.tx.nft.createItem(collectionId, owner, createData);607 tx = api.tx.nft.createItem(collectionId, owner, createData);
623 } else {608 } else if (createMode === 'ReFungible') {
609 const createData = {refungible: {const_data: [], variable_data: [], pieces: 100}};
610 tx = api.tx.nft.createItem(collectionId, owner, createData);
611 } else {
624 tx = api.tx.nft.createItem(collectionId, owner, createMode);612 tx = api.tx.nft.createItem(collectionId, owner, createMode);
625 }613 }
626 const events = await submitTransactionAsync(sender, tx);614 const events = await submitTransactionAsync(sender, tx);