Token Factory
Last updated
use kujira::msg::{DenomMsg, KujiraMsg};
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
deps: DepsMut<KujiraQuery>,
env: Env,
_info: MessageInfo,
msg: InstantiateMsg,
) -> Result<Response<KujiraMsg>, ContractError> {
let addr = env.contract.address;
let denom = format!("factory/{addr}/{denom}");
let config = Config::new(msg.owner, denom);
CONFIG.save(deps.storage, &config)?;
Ok(Response::default()
.add_message(DenomMsg::Create {
subdenom: msg.denom,
}))
}#[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute(
deps: DepsMut<KujiraQuery>,
_env: Env,
info: MessageInfo,
msg: ExecuteMsg,
) -> Result<Response<KujiraMsg>, ContractError> {
let mut c = CONFIG.load(deps.storage)?;
match msg {
ExecuteMsg::Burn {} => {
let amt = amount(&c.denom, info.funds)?;
c.validate_permitted(info.sender)?;
Ok(Response::default()
.add_attributes(vec![attr("action", "burn"), attr("amount", amt)])
.add_message(CosmosMsg::Custom(KujiraMsg::Denom(DenomMsg::Burn {
denom: c.denom,
amount: amt,
}))))
}
ExecuteMsg::Mint { amount, recipient } => {
c.validate_permitted(info.sender)?;
Ok(Response::default()
.add_attributes(vec![attr("action", "mint"), attr("amount", amount)])
.add_message(CosmosMsg::Custom(KujiraMsg::Denom(DenomMsg::Mint {
denom: c.denom,
amount,
recipient,
}))))
}
ExecuteMsg::Permit { address } => {
c.validate_owner(info.sender)?;
c.permit(address.clone());
CONFIG.save(deps.storage, &c)?;
Ok(Response::default()
.add_attributes(vec![attr("action", "permit"), attr("address", address)]))
}
}
}