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