1234567891011121314151617#![cfg_attr(not(feature = "std"), no_std)]1819use up_data_structs::{20 CollectionId, TokenId, RpcCollection, CollectionStats, CollectionLimits, Property,21 PropertyKeyPermission, TokenData, TokenChild,22};2324use sp_std::vec::Vec;25use codec::Decode;26use sp_runtime::{27 DispatchError,28 traits::{AtLeast32BitUnsigned, Member},29};3031type Result<T> = core::result::Result<T, DispatchError>;3233sp_api::decl_runtime_apis! {34 #[api_version(2)]35 36 pub trait UniqueApi<CrossAccountId, AccountId> where37 AccountId: Decode,38 CrossAccountId: pallet_evm::account::CrossAccountId<AccountId>,39 {40 #[changed_in(2)]41 fn token_owner(collection: CollectionId, token: TokenId) -> Result<CrossAccountId>;4243 44 fn account_tokens(collection: CollectionId, account: CrossAccountId) -> Result<Vec<TokenId>>;4546 47 fn collection_tokens(collection: CollectionId) -> Result<Vec<TokenId>>;4849 50 fn token_exists(collection: CollectionId, token: TokenId) -> Result<bool>;5152 53 fn token_owner(collection: CollectionId, token: TokenId) -> Result<Option<CrossAccountId>>;5455 56 fn topmost_token_owner(collection: CollectionId, token: TokenId) -> Result<Option<CrossAccountId>>;5758 59 fn token_children(collection: CollectionId, token: TokenId) -> Result<Vec<TokenChild>>;6061 62 fn collection_properties(collection: CollectionId, properties: Option<Vec<Vec<u8>>>) -> Result<Vec<Property>>;6364 65 fn token_properties(66 collection: CollectionId,67 token_id: TokenId,68 properties: Option<Vec<Vec<u8>>>69 ) -> Result<Vec<Property>>;7071 72 fn property_permissions(73 collection: CollectionId,74 properties: Option<Vec<Vec<u8>>>75 ) -> Result<Vec<PropertyKeyPermission>>;7677 78 fn token_data(79 collection: CollectionId,80 token_id: TokenId,81 keys: Option<Vec<Vec<u8>>>82 ) -> Result<TokenData<CrossAccountId>>;8384 85 fn total_supply(collection: CollectionId) -> Result<u32>;8687 88 fn account_balance(collection: CollectionId, account: CrossAccountId) -> Result<u32>;8990 91 fn balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Result<u128>;9293 94 fn allowance(95 collection: CollectionId,96 sender: CrossAccountId,97 spender: CrossAccountId,98 token: TokenId,99 ) -> Result<u128>;100101 102 fn adminlist(collection: CollectionId) -> Result<Vec<CrossAccountId>>;103104 105 fn allowlist(collection: CollectionId) -> Result<Vec<CrossAccountId>>;106107 108 fn allowed(collection: CollectionId, user: CrossAccountId) -> Result<bool>;109110 111 fn last_token_id(collection: CollectionId) -> Result<TokenId>;112113 114 fn collection_by_id(collection: CollectionId) -> Result<Option<RpcCollection<AccountId>>>;115116 117 fn collection_stats() -> Result<CollectionStats>;118119 120 fn next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Result<Option<u64>>;121122 123 fn effective_collection_limits(collection_id: CollectionId) -> Result<Option<CollectionLimits>>;124125 126 fn total_pieces(collection_id: CollectionId, token_id: TokenId) -> Result<Option<u128>>;127128 fn token_owners(collection: CollectionId, token: TokenId) -> Result<Vec<CrossAccountId>>;129 }130}