iota_types/
coin_manager.rs1use move_core_types::{ident_str, identifier::IdentStr};
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8use crate::{
9 IOTA_FRAMEWORK_ADDRESS, StructTag,
10 coin::{CoinMetadata, TreasuryCap},
11 id::UID,
12};
13
14pub const COIN_MANAGER_MODULE_NAME: &IdentStr = ident_str!("coin_manager");
15pub const COIN_MANAGER_STRUCT_NAME: &IdentStr = ident_str!("CoinManager");
16pub const COIN_MANAGER_TREASURY_CAP_STRUCT_NAME: &IdentStr = ident_str!("CoinManagerTreasuryCap");
17
18#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, JsonSchema)]
25pub struct CoinManager {
26 pub id: UID,
28 pub treasury_cap: TreasuryCap,
30 pub metadata: Option<CoinMetadata>,
32 pub immutable_metadata: Option<ImmutableCoinMetadata>,
35 pub maximum_supply: Option<u64>,
38 pub supply_immutable: bool,
41 pub metadata_immutable: bool,
44}
45
46impl CoinManager {
47 pub fn is_coin_manager(object_type: &StructTag) -> bool {
48 object_type.address == IOTA_FRAMEWORK_ADDRESS
49 && object_type.module.as_ident_str() == COIN_MANAGER_MODULE_NAME
50 && object_type.name.as_ident_str() == COIN_MANAGER_STRUCT_NAME
51 }
52}
53
54#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, JsonSchema)]
57pub struct ImmutableCoinMetadata {
58 pub decimals: u8,
60 pub name: String,
62 pub symbol: String,
64 pub description: String,
66 pub icon_url: Option<String>,
68}
69
70#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, JsonSchema)]
73pub struct CoinManagerTreasuryCap {
74 pub id: UID,
76}
77
78impl CoinManagerTreasuryCap {
79 pub fn is_coin_manager_treasury_cap(object_type: &StructTag) -> bool {
80 object_type.address == IOTA_FRAMEWORK_ADDRESS
81 && object_type.module.as_ident_str() == COIN_MANAGER_MODULE_NAME
82 && object_type.name.as_ident_str() == COIN_MANAGER_TREASURY_CAP_STRUCT_NAME
83 }
84}