From 860bb39fe415ba0d2d199d8c905b6a55dbd4560a Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Wed, 29 Jun 2022 13:53:45 +0000 Subject: [PATCH] Add rpc method for total_pieces --- --- a/client/rpc/src/lib.rs +++ b/client/rpc/src/lib.rs @@ -184,12 +184,21 @@ token: TokenId, at: Option, ) -> Result>; + #[method(name = "unique_effectiveCollectionLimits")] fn effective_collection_limits( &self, collection_id: CollectionId, at: Option, ) -> Result>; + + #[method(name = "unique_totalPieces")] + fn total_pieces( + &self, + collection_id: CollectionId, + token_id: TokenId, + at: Option, + ) -> Result; } mod rmrk_unique_rpc { @@ -463,6 +472,7 @@ pass_method!(collection_stats() -> CollectionStats, unique_api); pass_method!(next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Option, unique_api); pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option, unique_api); + pass_method!(total_pieces(collection_id: CollectionId, token_id: TokenId) -> u128, unique_api); } #[allow(deprecated)] --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -1382,6 +1382,8 @@ fn account_balance(&self, account: T::CrossAccountId) -> u32; /// Amount of specific token account have (Applicable to fungible/refungible) fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128; + /// Amount of token pieces + fn total_pieces(&self, token: TokenId) -> u128; fn allowance( &self, sender: T::CrossAccountId, --- a/pallets/fungible/src/common.rs +++ b/pallets/fungible/src/common.rs @@ -403,4 +403,8 @@ fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions> { None } + + fn total_pieces(&self, _token: TokenId) -> u128 { + 0 + } } --- a/pallets/nonfungible/src/common.rs +++ b/pallets/nonfungible/src/common.rs @@ -472,4 +472,8 @@ fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions> { None } + + fn total_pieces(&self, _token: TokenId) -> u128 { + 1 + } } --- a/pallets/refungible/src/common.rs +++ b/pallets/refungible/src/common.rs @@ -409,6 +409,10 @@ fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions> { Some(self) } + + fn total_pieces(&self, token: TokenId) -> u128 { + >::total_pieces(self.id, token) + } } impl RefungibleExtensions for RefungibleHandle { --- a/pallets/refungible/src/lib.rs +++ b/pallets/refungible/src/lib.rs @@ -710,4 +710,9 @@ >::insert((collection.id, token), amount); Ok(()) } + + fn total_pieces(collection_id: CollectionId, token_id: TokenId) -> u128 { + // Not "try_fold" because total count of pieces is limited by 'MAX_REFUNGIBLE_PIECES'. + >::iter_prefix((collection_id, token_id)).fold(0, |total, piece| total + piece.1) + } } --- a/primitives/rpc/src/lib.rs +++ b/primitives/rpc/src/lib.rs @@ -80,5 +80,6 @@ fn collection_stats() -> Result; fn next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Result>; fn effective_collection_limits(collection_id: CollectionId) -> Result>; + fn total_pieces(collection_id: CollectionId, token_id: TokenId) -> Result; } } --- a/runtime/common/src/runtime_apis.rs +++ b/runtime/common/src/runtime_apis.rs @@ -142,6 +142,10 @@ fn effective_collection_limits(collection: CollectionId) -> Result, DispatchError> { Ok(>::effective_collection_limits(collection)) } + + fn total_pieces(collection: CollectionId, token_id: TokenId) -> Result { + dispatch_unique_runtime!(collection.total_pieces(token_id)) + } } impl sp_api::Core for Runtime { -- gitstuff