git.delta.rocks / unique-network / refs/commits / 52d04b4c4f04

difftreelog

source

smart_contracs/transfer/lib.rs2.1 KiBsourcehistory
1#![cfg_attr(not(feature = "std"), no_std)]23use ink_lang as ink;4use ink_env::{Environment, DefaultEnvironment};56pub enum NftEnvironment {}78impl Environment for NftEnvironment {9    const MAX_EVENT_TOPICS: usize =10        <DefaultEnvironment as Environment>::MAX_EVENT_TOPICS;1112    type AccountId = <DefaultEnvironment as Environment>::AccountId;13    type Balance = <DefaultEnvironment as Environment>::Balance;14    type Hash = <DefaultEnvironment as Environment>::Hash;15    type BlockNumber = <DefaultEnvironment as Environment>::BlockNumber;16    type Timestamp = <DefaultEnvironment as Environment>::Timestamp;1718    type ChainExtension = NftChainExtension;19}2021/// The shared error code for the NFT chain extension.22#[derive(23    Debug, Copy, Clone, PartialEq, Eq, scale::Encode, scale::Decode,24)]25pub enum NftErrorCode {26    SomeError,27}2829impl ink_env::chain_extension::FromStatusCode for NftErrorCode {30    fn from_status_code(status_code: u32) -> Result<(), Self> {31        match status_code {32            0 => Ok(()),33            1 => Err(Self::SomeError),34            _ => panic!("encountered unknown status code"),35        }36    }37}3839#[ink::chain_extension]40pub trait NftChainExtension {41    type ErrorCode = NftErrorCode;4243    /// Transfer one NFT token from sender44    ///45    #[ink(extension = 0, returns_result = false)]46    fn transfer(recipient: <DefaultEnvironment as Environment>::AccountId, collection_id: u32, token_id: u32, amount: u128);47}4849#[ink::contract(env = crate::NftEnvironment)]50mod nft_transfer {5152    #[ink(storage)]53    pub struct NftTransfer {54    }5556    impl NftTransfer {57        /// Default Constructor58        ///59        /// Constructors can delegate to other constructors.60        #[ink(constructor)]61        pub fn default() -> Self {62            Self {}63        }6465        /// Transfer one NFT token66        #[ink(message)]67        pub fn transfer(&mut self, recipient: AccountId, collection_id: u32, token_id: u32, amount: u128) {68            let _ = self.env()69                .extension()70                .transfer(recipient, collection_id, token_id, amount);71        }7273    }7475}