#![no_std]
#[cfg(any(test, feature = "testutils"))]
pub mod testutils;
use soroban_sdk::{contractclient, symbol_short, Address, Env, String, Symbol};
#[contractclient(name = "TokenClient")]
pub trait Token {
fn allowance(env: Env, from: Address, spender: Address) -> i128;
fn approve(env: Env, from: Address, spender: Address, amount: i128, live_until_ledger: u32);
fn balance(env: Env, id: Address) -> i128;
fn transfer(env: Env, from: Address, to: Address, amount: i128);
fn transfer_from(env: Env, spender: Address, from: Address, to: Address, amount: i128);
fn burn(env: Env, from: Address, amount: i128);
fn burn_from(env: Env, spender: Address, from: Address, amount: i128);
fn decimals(env: Env) -> u32;
fn name(env: Env) -> String;
fn symbol(env: Env) -> String;
}
pub struct TokenEvents {}
impl TokenEvents {
pub fn approve(env: &Env, from: Address, to: Address, amount: i128, expiration_ledger: u32) {
let topics = (symbol_short!("approve"), from, to);
env.events().publish(topics, (amount, expiration_ledger));
}
pub fn transfer(env: &Env, from: Address, to: Address, amount: i128) {
let topics = (symbol_short!("transfer"), from, to);
env.events().publish(topics, amount);
}
pub fn mint(env: &Env, admin: Address, to: Address, amount: i128) {
let topics = (symbol_short!("mint"), admin, to);
env.events().publish(topics, amount);
}
pub fn clawback(env: &Env, admin: Address, from: Address, amount: i128) {
let topics = (symbol_short!("clawback"), admin, from);
env.events().publish(topics, amount);
}
pub fn set_authorized(env: &Env, admin: Address, id: Address, authorize: bool) {
let topics = (Symbol::new(env, "set_authorized"), admin, id);
env.events().publish(topics, authorize);
}
pub fn set_admin(env: &Env, admin: Address, new_admin: Address) {
let topics = (symbol_short!("set_admin"), admin);
env.events().publish(topics, new_admin);
}
pub fn burn(env: &Env, from: Address, amount: i128) {
let topics = (symbol_short!("burn"), from);
env.events().publish(topics, amount);
}
}