neo3/neo_contract/
fungible_token_contract.rs1use async_trait::async_trait;
2use primitive_types::H160;
3
4use crate::{
5 neo_clients::{JsonRpcProvider, RpcClient},
6 neo_contract::{
7 traits::{FungibleTokenTrait, SmartContractTrait, TokenTrait},
8 ContractError,
9 },
10 neo_types::NNSName,
11};
12
13#[derive(Debug)]
14pub struct FungibleTokenContract<'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> FungibleTokenContract<'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 FungibleTokenContract<'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(
62 "NNS text record resolution requires comprehensive domain name integration for fungible tokens".to_string(),
63 ))
64 }
65}
66
67#[async_trait]
68impl<'a, P: JsonRpcProvider> SmartContractTrait<'a> for FungibleTokenContract<'a, P> {
69 type P = P;
70
71 fn script_hash(&self) -> H160 {
72 self.script_hash
73 }
74
75 fn set_script_hash(&mut self, script_hash: H160) {
76 self.script_hash = script_hash;
77 }
78
79 fn provider(&self) -> Option<&RpcClient<P>> {
80 self.provider
81 }
82}
83
84#[async_trait]
85impl<'a, P: JsonRpcProvider> FungibleTokenTrait<'a, P> for FungibleTokenContract<'a, P> {}