difftreelog
Add rpc method for total_pieces
in: master
8 files changed
client/rpc/src/lib.rsdiffbeforeafterboth--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -184,12 +184,21 @@
token: TokenId,
at: Option<BlockHash>,
) -> Result<Option<u64>>;
+
#[method(name = "unique_effectiveCollectionLimits")]
fn effective_collection_limits(
&self,
collection_id: CollectionId,
at: Option<BlockHash>,
) -> Result<Option<CollectionLimits>>;
+
+ #[method(name = "unique_totalPieces")]
+ fn total_pieces(
+ &self,
+ collection_id: CollectionId,
+ token_id: TokenId,
+ at: Option<BlockHash>,
+ ) -> Result<u128>;
}
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<u64>, unique_api);
pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option<CollectionLimits>, unique_api);
+ pass_method!(total_pieces(collection_id: CollectionId, token_id: TokenId) -> u128, unique_api);
}
#[allow(deprecated)]
pallets/common/src/lib.rsdiffbeforeafterboth--- 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,
pallets/fungible/src/common.rsdiffbeforeafterboth--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -403,4 +403,8 @@
fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>> {
None
}
+
+ fn total_pieces(&self, _token: TokenId) -> u128 {
+ 0
+ }
}
pallets/nonfungible/src/common.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -472,4 +472,8 @@
fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>> {
None
}
+
+ fn total_pieces(&self, _token: TokenId) -> u128 {
+ 1
+ }
}
pallets/refungible/src/common.rsdiffbeforeafterboth410 Some(self)410 Some(self)411 }411 }412413 fn total_pieces(&self, token: TokenId) -> u128 {414 <Pallet<T>>::total_pieces(self.id, token)415 }412}416}413417414impl<T: Config> RefungibleExtensions<T> for RefungibleHandle<T> {418impl<T: Config> RefungibleExtensions<T> for RefungibleHandle<T> {pallets/refungible/src/lib.rsdiffbeforeafterboth--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -710,4 +710,9 @@
<TotalSupply<T>>::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'.
+ <Balance<T>>::iter_prefix((collection_id, token_id)).fold(0, |total, piece| total + piece.1)
+ }
}
primitives/rpc/src/lib.rsdiffbeforeafterboth--- a/primitives/rpc/src/lib.rs
+++ b/primitives/rpc/src/lib.rs
@@ -80,5 +80,6 @@
fn collection_stats() -> Result<CollectionStats>;
fn next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Result<Option<u64>>;
fn effective_collection_limits(collection_id: CollectionId) -> Result<Option<CollectionLimits>>;
+ fn total_pieces(collection_id: CollectionId, token_id: TokenId) -> Result<u128>;
}
}
runtime/common/src/runtime_apis.rsdiffbeforeafterboth--- 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<Option<CollectionLimits>, DispatchError> {
Ok(<pallet_common::Pallet<Runtime>>::effective_collection_limits(collection))
}
+
+ fn total_pieces(collection: CollectionId, token_id: TokenId) -> Result<u128, DispatchError> {
+ dispatch_unique_runtime!(collection.total_pieces(token_id))
+ }
}
impl sp_api::Core<Block> for Runtime {