Implementation of PSP22 token standard in pure ink! Contains following extensions traits: * Metadata * Burnable * Mintable * Pausable * Wrapper * Ownable ## Build https://github.com/paritytech/cargo-contract cargo contract build --release --features "contract" ## Unit tests cargo test --features "contract" ## About ### Module Overview - `lib.rs`: The main module that includes all other modules and re-exports key components. - `data.rs`: Defines structs and enums, which are used to manage token data and events. - `errors.rs`: Contains enums for error handling. - `traits.rs`: Declares several traits like `PSP22`, `PSP22Metadata`, `PSP22Burnable`, `PSP22Mintable`, `PSP22Pausable`, `PSP22Wrapper`, and `Ownable`, which define the standard functionalities of PSP22 tokens. ### `lib.rs` - `Token`: Main struct representing a PSP22 token. It includes methods for token creation (`new`) and for emitting events (`emit_events`). - `Approval` and `Transfer`: Event structs used for emitting events related to token transfer and approval. ### `data.rs` - `PSP22Data`: A struct that maintains the state of all account balances and allowances. Includes methods for token supply management, balance queries, and allowance management. - `PSP22Event`: An enum representing events that occur during state changes of `PSP22Data`. ### `errors.rs` - `PSP22Error`: An enum for PSP22-specific errors, such as insufficient balance or allowance. - `OwnableError`: An enum for errors related to ownership management. ### `traits.rs` - `PSP22`: A trait defining the core functionalities of a PSP22 token, including methods for querying supply, balance, and allowance, and for executing transfers and approvals. - `PSP22Metadata`: A trait for accessing token metadata like name, symbol, and decimals. - `PSP22Burnable`: A trait for token burning functionalities. - `PSP22Mintable`: A trait for token minting functionalities. - `PSP22Pausable`: A trait for pausing and unpausing token transfers. - `PSP22Wrapper`: A trait for deposit and withdrawal functionalities. - `Ownable`: A trait for ownership management, including querying owner, transferring ownership, and renouncing ownership. ### General Notes - The library adheres to the PSP22 standard for fungible tokens. - Most methods in `PSP22Data` and the traits in `traits.rs` return `Result` types, indicating that they can fail with a `PSP22Error`. - Events are an essential part of the library, used for signaling state changes like transfers and approvals. This documentation provides an overview of your Rust library's structure and functionalities. For a complete understanding, users should refer to the detailed comments and implementations within each module.