1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
// This file is part of Substrate. // Copyright (C) 2017-2021 Parity Technologies (UK) Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //! Various basic types for use in the assets pallet. use super::*; use frame_support::{traits::Get, BoundedVec}; pub(super) type DepositBalanceOf<T, I = ()> = <<T as Config<I>>::Currency as Currency<<T as SystemConfig>::AccountId>>::Balance; pub(super) type ClassDetailsFor<T, I> = ClassDetails<<T as SystemConfig>::AccountId, DepositBalanceOf<T, I>>; pub(super) type InstanceDetailsFor<T, I> = InstanceDetails<<T as SystemConfig>::AccountId, DepositBalanceOf<T, I>>; #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug)] pub struct ClassDetails<AccountId, DepositBalance> { /// Can change `owner`, `issuer`, `freezer` and `admin` accounts. pub(super) owner: AccountId, /// Can mint tokens. pub(super) issuer: AccountId, /// Can thaw tokens, force transfers and burn tokens from any account. pub(super) admin: AccountId, /// Can freeze tokens. pub(super) freezer: AccountId, /// The total balance deposited for the all storage associated with this asset class. Used by /// `destroy`. pub(super) total_deposit: DepositBalance, /// If `true`, then no deposit is needed to hold instances of this class. pub(super) free_holding: bool, /// The total number of outstanding instances of this asset class. pub(super) instances: u32, /// The total number of outstanding instance metadata of this asset class. pub(super) instance_metadatas: u32, /// The total number of attributes for this asset class. pub(super) attributes: u32, /// Whether the asset is frozen for non-admin transfers. pub(super) is_frozen: bool, } /// Witness data for the destroy transactions. #[derive(Copy, Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug)] pub struct DestroyWitness { /// The total number of outstanding instances of this asset class. #[codec(compact)] pub(super) instances: u32, /// The total number of outstanding instance metadata of this asset class. #[codec(compact)] pub(super) instance_metadatas: u32, #[codec(compact)] /// The total number of attributes for this asset class. pub(super) attributes: u32, } impl<AccountId, DepositBalance> ClassDetails<AccountId, DepositBalance> { pub fn destroy_witness(&self) -> DestroyWitness { DestroyWitness { instances: self.instances, instance_metadatas: self.instance_metadatas, attributes: self.attributes, } } } /// Information concerning the ownership of a single unique asset. #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, Default)] pub struct InstanceDetails<AccountId, DepositBalance> { /// The owner of this asset. pub(super) owner: AccountId, /// The approved transferrer of this asset, if one is set. pub(super) approved: Option<AccountId>, /// Whether the asset can be transferred or not. pub(super) is_frozen: bool, /// The amount held in the pallet's default account for this asset. Free-hold assets will have /// this as zero. pub(super) deposit: DepositBalance, } #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, Default)] pub struct ClassMetadata<DepositBalance, StringLimit: Get<u32>> { /// The balance deposited for this metadata. /// /// This pays for the data stored in this struct. pub(super) deposit: DepositBalance, /// General information concerning this asset. Limited in length by `StringLimit`. This will /// generally be either a JSON dump or the hash of some JSON which can be found on a /// hash-addressable global publication system such as IPFS. pub(super) data: BoundedVec<u8, StringLimit>, /// Whether the asset metadata may be changed by a non Force origin. pub(super) is_frozen: bool, } #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, Default)] pub struct InstanceMetadata<DepositBalance, StringLimit: Get<u32>> { /// The balance deposited for this metadata. /// /// This pays for the data stored in this struct. pub(super) deposit: DepositBalance, /// General information concerning this asset. Limited in length by `StringLimit`. This will /// generally be either a JSON dump or the hash of some JSON which can be found on a /// hash-addressable global publication system such as IPFS. pub(super) data: BoundedVec<u8, StringLimit>, /// Whether the asset metadata may be changed by a non Force origin. pub(super) is_frozen: bool, }