difftreelog
Public storage
in: master
3 files changed
pallets/nft/src/sponsorship.rsdiffbeforeafterboth1use crate::{2 Config, Call, CreateItemBasket, VariableMetaDataBasket, ReFungibleTransferBasket,3 FungibleTransferBasket, NftTransferBasket, CreateItemData, CollectionMode, NftApproveBasket,4 FungibleApproveBasket, RefungibleApproveBasket,5};6use core::marker::PhantomData;7use up_sponsorship::SponsorshipHandler;8use frame_support::{9 traits::{IsSubType},10 storage::{StorageMap, StorageDoubleMap, StorageNMap},11};12use nft_data_structs::{13 CollectionId, FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, NFT_SPONSOR_TRANSFER_TIMEOUT,14 REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, TokenId,15};16use pallet_common::{CollectionHandle};1718pub fn withdraw_transfer<T: Config>(19 collection: &CollectionHandle<T>,20 who: &T::AccountId,21 item_id: &TokenId,22) -> Option<()> {23 // sponsor timeout24 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;25 let limit = collection26 .limits27 .sponsor_transfer_timeout(match collection.mode {28 CollectionMode::NFT => NFT_SPONSOR_TRANSFER_TIMEOUT,29 CollectionMode::Fungible(_) => FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,30 CollectionMode::ReFungible => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,31 });3233 let last_tx_block = match collection.mode {34 CollectionMode::NFT => <NftTransferBasket<T>>::get(collection.id, item_id),35 CollectionMode::Fungible(_) => <FungibleTransferBasket<T>>::get(collection.id, who),36 CollectionMode::ReFungible => {37 <ReFungibleTransferBasket<T>>::get((collection.id, item_id, who))38 }39 };4041 if let Some(last_tx_block) = last_tx_block {42 let timeout = last_tx_block + limit.into();43 if block_number < timeout {44 return None;45 }46 }4748 match collection.mode {49 CollectionMode::NFT => <NftTransferBasket<T>>::insert(collection.id, item_id, block_number),50 CollectionMode::Fungible(_) => {51 <FungibleTransferBasket<T>>::insert(collection.id, who, block_number)52 }53 CollectionMode::ReFungible => {54 <ReFungibleTransferBasket<T>>::insert((collection.id, item_id, who), block_number)55 }56 };5758 Some(())59}6061pub fn withdraw_create_item<T: Config>(62 collection: &CollectionHandle<T>,63 who: &T::AccountId,64 _properties: &CreateItemData,65) -> Option<()> {66 if _properties.data_size() as u32 > collection.limits.sponsored_data_size() {67 return None;68 }6970 // sponsor timeout71 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;72 let limit = collection73 .limits74 .sponsor_transfer_timeout(match _properties {75 CreateItemData::NFT(_) => NFT_SPONSOR_TRANSFER_TIMEOUT,76 CreateItemData::Fungible(_) => FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,77 CreateItemData::ReFungible(_) => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,78 });7980 if let Some(last_tx_block) = <CreateItemBasket<T>>::get((collection.id, &who)) {81 let timeout = last_tx_block + limit.into();82 if block_number < timeout {83 return None;84 }85 }8687 CreateItemBasket::<T>::insert((collection.id, who.clone()), block_number);8889 Some(())90}9192pub fn withdraw_set_variable_meta_data<T: Config>(93 collection: &CollectionHandle<T>,94 item_id: &TokenId,95 data: &[u8],96) -> Option<()> {97 // Can't sponsor fungible collection, this tx will be rejected98 // as invalid99 if matches!(collection.mode, CollectionMode::Fungible(_)) {100 return None;101 }102 if data.len() > collection.limits.sponsored_data_size() as usize {103 return None;104 }105106 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;107 let limit = collection.limits.sponsored_data_rate_limit()?;108109 if let Some(last_tx_block) = VariableMetaDataBasket::<T>::get(collection.id, item_id) {110 let timeout = last_tx_block + limit.into();111 if block_number < timeout {112 return None;113 }114 }115116 <VariableMetaDataBasket<T>>::insert(collection.id, item_id, block_number);117118 Some(())119}120121pub fn withdraw_approve<T: Config>(122 collection: &CollectionHandle<T>,123 who: &T::AccountId,124 item_id: &TokenId,125) -> Option<()> {126 // sponsor timeout127 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;128 let limit = collection.limits.sponsor_approve_timeout();129130 let last_tx_block = match collection.mode {131 CollectionMode::NFT => <NftApproveBasket<T>>::get(collection.id, item_id),132 CollectionMode::Fungible(_) => <FungibleApproveBasket<T>>::get(collection.id, who),133 CollectionMode::ReFungible => {134 <RefungibleApproveBasket<T>>::get((collection.id, item_id, who))135 }136 };137138 if let Some(last_tx_block) = last_tx_block {139 let timeout = last_tx_block + limit.into();140 if block_number < timeout {141 return None;142 }143 }144145 match collection.mode {146 CollectionMode::NFT => <NftApproveBasket<T>>::insert(collection.id, item_id, block_number),147 CollectionMode::Fungible(_) => {148 <FungibleApproveBasket<T>>::insert(collection.id, who, block_number)149 }150 CollectionMode::ReFungible => {151 <RefungibleApproveBasket<T>>::insert((collection.id, item_id, who), block_number)152 }153 };154155 Some(())156}157158fn load<T: Config>(id: CollectionId) -> Option<(T::AccountId, CollectionHandle<T>)> {159 let collection = CollectionHandle::new(id)?;160 let sponsor = collection.sponsorship.sponsor().cloned()?;161 Some((sponsor, collection))162}163164pub struct NftSponsorshipHandler<T>(PhantomData<T>);165impl<T, C> SponsorshipHandler<T::AccountId, C> for NftSponsorshipHandler<T>166where167 T: Config,168 C: IsSubType<Call<T>>,169{170 fn get_sponsor(who: &T::AccountId, call: &C) -> Option<T::AccountId> {171 match IsSubType::<Call<T>>::is_sub_type(call)? {172 Call::create_item {173 collection_id,174 data,175 ..176 } => {177 let (sponsor, collection) = load(*collection_id)?;178 withdraw_create_item::<T>(&collection, who, data).map(|()| sponsor)179 }180 Call::transfer {181 collection_id,182 item_id,183 ..184 }185 | Call::transfer_from {186 collection_id,187 item_id,188 ..189 } => {190 let (sponsor, collection) = load(*collection_id)?;191 withdraw_transfer::<T>(&collection, who, item_id).map(|()| sponsor)192 }193 Call::approve {194 collection_id,195 item_id,196 ..197 } => {198 let (sponsor, collection) = load(*collection_id)?;199 withdraw_approve::<T>(&collection, who, item_id).map(|()| sponsor)200 }201 Call::set_variable_meta_data {202 collection_id,203 item_id,204 data,205 } => {206 let (sponsor, collection) = load(*collection_id)?;207 withdraw_set_variable_meta_data::<T>(&collection, item_id, data).map(|()| sponsor)208 }209 _ => None,210 }211 }212}pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -58,18 +58,18 @@
}
#[pallet::pallet]
- #[pallet::generate_store(pub(super) trait Store)]
+ #[pallet::generate_store(pub trait Store)]
pub struct Pallet<T>(_);
#[pallet::storage]
- pub(super) type TokensMinted<T: Config> =
+ pub type TokensMinted<T: Config> =
StorageMap<Hasher = Twox64Concat, Key = CollectionId, Value = u32, QueryKind = ValueQuery>;
#[pallet::storage]
- pub(super) type TokensBurnt<T: Config> =
+ pub type TokensBurnt<T: Config> =
StorageMap<Hasher = Twox64Concat, Key = CollectionId, Value = u32, QueryKind = ValueQuery>;
#[pallet::storage]
- pub(super) type TokenData<T: Config> = StorageNMap<
+ pub type TokenData<T: Config> = StorageNMap<
Key = (Key<Twox64Concat, CollectionId>, Key<Twox64Concat, TokenId>),
Value = ItemData<T>,
QueryKind = OptionQuery,
@@ -77,7 +77,7 @@
/// Used to enumerate tokens owned by account
#[pallet::storage]
- pub(super) type Owned<T: Config> = StorageNMap<
+ pub type Owned<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
Key<Blake2_128Concat, T::CrossAccountId>,
@@ -88,7 +88,7 @@
>;
#[pallet::storage]
- pub(super) type AccountBalance<T: Config> = StorageNMap<
+ pub type AccountBalance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
Key<Blake2_128Concat, T::CrossAccountId>,
@@ -98,7 +98,7 @@
>;
#[pallet::storage]
- pub(super) type Allowance<T: Config> = StorageNMap<
+ pub type Allowance<T: Config> = StorageNMap<
Key = (Key<Twox64Concat, CollectionId>, Key<Twox64Concat, TokenId>),
Value = T::CrossAccountId,
QueryKind = OptionQuery,
pallets/refungible/src/lib.rsdiffbeforeafterboth--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -54,25 +54,25 @@
}
#[pallet::pallet]
- #[pallet::generate_store(pub(super) trait Store)]
+ #[pallet::generate_store(pub trait Store)]
pub struct Pallet<T>(_);
#[pallet::storage]
- pub(super) type TokensMinted<T: Config> =
+ pub type TokensMinted<T: Config> =
StorageMap<Hasher = Twox64Concat, Key = CollectionId, Value = u32, QueryKind = ValueQuery>;
#[pallet::storage]
- pub(super) type TokensBurnt<T: Config> =
+ pub type TokensBurnt<T: Config> =
StorageMap<Hasher = Twox64Concat, Key = CollectionId, Value = u32, QueryKind = ValueQuery>;
#[pallet::storage]
- pub(super) type TokenData<T: Config> = StorageNMap<
+ pub type TokenData<T: Config> = StorageNMap<
Key = (Key<Twox64Concat, CollectionId>, Key<Twox64Concat, TokenId>),
Value = ItemData,
QueryKind = ValueQuery,
>;
#[pallet::storage]
- pub(super) type TotalSupply<T: Config> = StorageNMap<
+ pub type TotalSupply<T: Config> = StorageNMap<
Key = (Key<Twox64Concat, CollectionId>, Key<Twox64Concat, TokenId>),
Value = u128,
QueryKind = ValueQuery,
@@ -80,7 +80,7 @@
/// Used to enumerate tokens owned by account
#[pallet::storage]
- pub(super) type Owned<T: Config> = StorageNMap<
+ pub type Owned<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
Key<Blake2_128Concat, T::CrossAccountId>,
@@ -91,7 +91,7 @@
>;
#[pallet::storage]
- pub(super) type AccountBalance<T: Config> = StorageNMap<
+ pub type AccountBalance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
// Owner
@@ -102,7 +102,7 @@
>;
#[pallet::storage]
- pub(super) type Balance<T: Config> = StorageNMap<
+ pub type Balance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
Key<Twox64Concat, TokenId>,
@@ -114,7 +114,7 @@
>;
#[pallet::storage]
- pub(super) type Allowance<T: Config> = StorageNMap<
+ pub type Allowance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
Key<Twox64Concat, TokenId>,