ckb_ssri_std/public_module_traits/
udt.rs1use ckb_std::ckb_types::{
2 bytes::Bytes,
3 packed::{Byte32Vec, Script, Transaction},
4};
5extern crate alloc;
6
7use alloc::vec::Vec;
8use serde::{Deserialize, Serialize};
9
10pub trait UDT {
39 type Error;
40 fn transfer(
41 tx: Option<Transaction>,
42 to_lock_vec: Vec<Script>,
43 to_amount_vec: Vec<u128>,
44 ) -> Result<Transaction, Self::Error>;
45 fn verify_transfer() -> Result<(), Self::Error>;
46 fn name() -> Result<Bytes, Self::Error>;
47 fn symbol() -> Result<Bytes, Self::Error>;
48 fn decimals() -> Result<u8, Self::Error>;
49 fn icon() -> Result<Bytes, Self::Error>;
50 fn mint(
51 tx: Option<Transaction>,
52 to_lock_vec: Vec<Script>,
53 to_amount_vec: Vec<u128>,
54 ) -> Result<Transaction, Self::Error>;
55 fn verify_mint() -> Result<(), Self::Error>;
56}
57pub const UDT_LEN: usize = 16;
58pub enum UDTError {
59 InsufficientBalance,
60 NoMintPermission,
61 NoBurnPermission,
62}
63
64pub trait UDTPausable: UDT {
65 fn pause(
67 tx: Option<Transaction>,
68 lock_hashes: &Vec<[u8; 32]>,
69 ) -> Result<Transaction, Self::Error>;
70 fn unpause(
71 tx: Option<Transaction>,
72 lock_hashes: &Vec<[u8; 32]>,
73 ) -> Result<Transaction, Self::Error>;
74 fn is_paused(lock_hashes: &Vec<[u8; 32]>) -> Result<Vec<bool>, Self::Error>;
75 fn enumerate_paused(offset: u64, limit: u64) -> Result<Byte32Vec, Self::Error>;
76}
77
78#[derive(Serialize, Deserialize, Clone, Debug)]
79pub struct UDTPausableData {
80 pub pause_list: Vec<[u8; 32]>,
81 pub next_type_script: Option<ScriptLike>
82}
83
84#[derive(Serialize, Deserialize, Clone, Debug)]
85pub struct ScriptLike {
86 pub code_hash: [u8; 32],
87 pub hash_type: u8,
88 pub args: Vec<u8>,
89}
90pub enum UDTPausableError {
91 NoPausePermission,
92 NoUnpausePermission,
93 AbortedFromPause,
94 IncompletePauseList,
95 CyclicPauseList,
96}