Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
Add amalgamation traits for NFT CollectionId, ItemId, and DestroyWitness
Browse files Browse the repository at this point in the history
  • Loading branch information
jasl committed Mar 9, 2023
1 parent 48e7cb1 commit 6abfae6
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 8 deletions.
6 changes: 3 additions & 3 deletions frame/support/src/traits/tokens.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ pub mod nonfungibles;
pub mod nonfungibles_v2;
pub use imbalance::Imbalance;
pub use misc::{
AssetId, AttributeNamespace, Balance, BalanceConversion, BalanceStatus, ConvertRank,
DepositConsequence, ExistenceRequirement, GetSalary, Locker, WithdrawConsequence,
WithdrawReasons,
AssetId, AttributeNamespace, Balance, BalanceConversion, BalanceStatus,
CollectionId, ConvertRank, DepositConsequence, DestroyWitness, ExistenceRequirement,
GetSalary, ItemId, Locker, WithdrawConsequence, WithdrawReasons,
};
30 changes: 30 additions & 0 deletions frame/support/src/traits/tokens/misc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,36 @@ pub trait BalanceConversion<InBalance, AssetId, OutBalance> {
fn to_asset_balance(balance: InBalance, asset_id: AssetId) -> Result<OutBalance, Self::Error>;
}

/// Simple amalgamation trait to collect together properties for a CollectionId under one roof.
pub trait CollectionId:
FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen
{
}
impl<T: FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen> CollectionId
for T
{
}

/// Simple amalgamation trait to collect together properties for an ItemId under one roof.
pub trait ItemId:
FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen
{
}
impl<T: FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen> ItemId
for T
{
}

/// Simple amalgamation trait to collect together properties for a DestroyWitness under one roof.
pub trait DestroyWitness:
FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen
{
}
impl<T: FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen> DestroyWitness
for T
{
}

/// Trait to handle asset locking mechanism to ensure interactions with the asset can be implemented
/// downstream to extend logic of Uniques current functionality.
pub trait Locker<CollectionId, ItemId> {
Expand Down
7 changes: 5 additions & 2 deletions frame/support/src/traits/tokens/nonfungible_v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,18 @@
//! use.

use super::nonfungibles_v2 as nonfungibles;
use crate::{dispatch::DispatchResult, traits::Get};
use crate::{
dispatch::DispatchResult,
traits::{tokens::ItemId, Get}
};
use codec::{Decode, Encode};
use sp_runtime::TokenError;
use sp_std::prelude::*;

/// Trait for providing an interface to a read-only NFT-like item.
pub trait Inspect<AccountId> {
/// Type for identifying an item.
type ItemId;
type ItemId: ItemId;

/// Returns the owner of `item`, or `None` if the item doesn't exist or has no
/// owner.
Expand Down
7 changes: 4 additions & 3 deletions frame/support/src/traits/tokens/nonfungibles_v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
//! Implementations of these traits may be converted to implementations of corresponding
//! `nonfungible` traits by using the `nonfungible::ItemOf` type adapter.

use crate::traits::tokens::{CollectionId, ItemId, DestroyWitness};
use crate::dispatch::{DispatchError, DispatchResult};
use codec::{Decode, Encode};
use sp_runtime::TokenError;
Expand All @@ -35,11 +36,11 @@ use sp_std::prelude::*;
/// Trait for providing an interface to many read-only NFT-like sets of items.
pub trait Inspect<AccountId> {
/// Type for identifying an item.
type ItemId;
type ItemId: ItemId;

/// Type for identifying a collection (an identifier for an independent collection of
/// items).
type CollectionId;
type CollectionId: CollectionId;

/// Returns the owner of `item` of `collection`, or `None` if the item doesn't exist
/// (or somehow has no owner).
Expand Down Expand Up @@ -193,7 +194,7 @@ pub trait Create<AccountId, CollectionConfig>: Inspect<AccountId> {
/// Trait for providing the ability to destroy collections of nonfungible items.
pub trait Destroy<AccountId>: Inspect<AccountId> {
/// The witness data needed to destroy an item.
type DestroyWitness;
type DestroyWitness: DestroyWitness;

/// Provide the appropriate witness data needed to destroy an item.
fn get_destroy_witness(collection: &Self::CollectionId) -> Option<Self::DestroyWitness>;
Expand Down

0 comments on commit 6abfae6

Please sign in to comment.