neo3/neo_contract/
nft_contract.rs1use async_trait::async_trait;
2use primitive_types::H160;
3
4use crate::{
5 neo_clients::{JsonRpcProvider, RpcClient},
6 neo_contract::{
7 traits::{NonFungibleTokenTrait, SmartContractTrait, TokenTrait},
8 ContractError,
9 },
10 neo_types::NNSName,
11};
12
13#[derive(Debug)]
14pub struct NftContract<'a, P: JsonRpcProvider> {
15 script_hash: H160,
16 total_supply: Option<u64>,
17 decimals: Option<u8>,
18 symbol: Option<String>,
19 provider: Option<&'a RpcClient<P>>,
20}
21
22impl<'a, P: JsonRpcProvider> NftContract<'a, P> {
23 pub fn new(script_hash: &H160, provider: Option<&'a RpcClient<P>>) -> Self {
24 Self {
25 script_hash: script_hash.clone(),
26 total_supply: None,
27 decimals: None,
28 symbol: None,
29 provider,
30 }
31 }
32}
33
34#[async_trait]
35impl<'a, P: JsonRpcProvider> TokenTrait<'a, P> for NftContract<'a, P> {
36 fn total_supply(&self) -> Option<u64> {
37 self.total_supply
38 }
39
40 fn set_total_supply(&mut self, total_supply: u64) {
41 self.total_supply = Option::from(total_supply);
42 }
43
44 fn decimals(&self) -> Option<u8> {
45 self.decimals
46 }
47
48 fn set_decimals(&mut self, decimals: u8) {
49 self.decimals = Option::from(decimals);
50 }
51
52 fn symbol(&self) -> Option<String> {
53 self.symbol.clone()
54 }
55
56 fn set_symbol(&mut self, symbol: String) {
57 self.symbol = Option::from(symbol);
58 }
59
60 async fn resolve_nns_text_record(&self, _name: &NNSName) -> Result<H160, ContractError> {
61 Err(ContractError::UnsupportedOperation(
64 "NNS text record resolution is not supported for NFT contracts".to_string(),
65 ))
66 }
67}
68
69#[async_trait]
70impl<'a, P: JsonRpcProvider> SmartContractTrait<'a> for NftContract<'a, P> {
71 type P = P;
72
73 fn script_hash(&self) -> H160 {
74 self.script_hash
75 }
76
77 fn set_script_hash(&mut self, script_hash: H160) {
78 self.script_hash = script_hash;
79 }
80
81 fn provider(&self) -> Option<&RpcClient<P>> {
82 self.provider
83 }
84}
85
86#[async_trait]
87impl<'a, P: JsonRpcProvider> NonFungibleTokenTrait<'a, P> for NftContract<'a, P> {}