--- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -280,6 +280,10 @@ } >::remove((collection_id, item_id)); + // update balance + let new_balance = >::get((collection_id, item.owner.clone())) - 1; + >::insert((collection_id, item.owner.clone()), new_balance); + Ok(()) } @@ -308,10 +312,19 @@ } >::remove((collection_id, item_id)); + // update balance + let balance_old_owner = >::get((collection_id, item.owner.clone())) - 1; + >::insert((collection_id, item.owner.clone()), balance_old_owner); + + let balance_new_owner = >::get((collection_id, new_owner.clone())) + 1; + >::insert((collection_id, new_owner.clone()), balance_new_owner); + // change owner item.owner = new_owner; >::insert((collection_id, item_id), item); + + Ok(()) } } --- a/pallets/nft/src/tests.rs +++ b/pallets/nft/src/tests.rs @@ -68,6 +68,8 @@ // burn item assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1)); assert_noop!(TemplateModule::burn_item(origin1.clone(), 1, 1), "Item does not exists"); + + assert_eq!(TemplateModule::balance_count((1, 1)), 0); }); } @@ -176,5 +178,9 @@ // transfer assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2)); assert_eq!(TemplateModule::item_id((1,1)).owner, 2); + + // balance_of check + assert_eq!(TemplateModule::balance_count((1, 1)), 0); + assert_eq!(TemplateModule::balance_count((1, 2)), 1); }); }