defuse/contract/tokens/
imt.rs1use std::borrow::Cow;
2
3use defuse_core::{
4 accounts::AccountEvent, engine::State, events::DefuseEvent, intents::imt::ImtBurn,
5 tokens::imt::ImtTokens,
6};
7
8use defuse_near_utils::UnwrapOrPanic;
9use near_plugins::{Pausable, pause};
10use near_sdk::{AccountId, assert_one_yocto, near};
11
12use crate::{
13 contract::{Contract, ContractExt},
14 tokens::imt::ImtBurner,
15};
16
17#[near]
18impl ImtBurner for Contract {
19 #[pause]
20 #[payable]
21 fn imt_burn(&mut self, minter_id: AccountId, tokens: ImtTokens, memo: Option<String>) {
22 assert_one_yocto();
23
24 let owner_id = self.ensure_auth_predecessor_id();
25
26 State::imt_burn(self, &owner_id, &minter_id, tokens.clone(), memo.clone())
27 .unwrap_or_panic();
28
29 DefuseEvent::ImtBurn(Cow::Borrowed(
30 [AccountEvent::new(
31 owner_id,
32 Cow::Owned(ImtBurn {
33 minter_id,
34 tokens,
35 memo,
36 }),
37 )]
38 .as_slice(),
39 ))
40 .emit();
41 }
42}