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 near_plugins::{Pausable, pause};
12use near_sdk::{AccountId, FunctionError, assert_one_yocto, near};
13
14use crate::{
15 contract::{Contract, ContractExt},
16 tokens::imt::ImtBurner,
17};
18
19#[near]
20impl ImtBurner for Contract {
21 #[pause]
22 #[payable]
23 fn imt_burn(&mut self, minter_id: AccountId, tokens: ImtTokens, memo: Option<String>) {
24 assert_one_yocto();
25
26 let owner_id = self.ensure_auth_predecessor_id();
27
28 State::imt_burn(self, &owner_id, &minter_id, tokens.clone(), memo.clone())
29 .unwrap_or_else(|err| err.panic());
30
31 DefuseEvent::ImtBurn(Cow::Borrowed(
32 [MaybeIntentEvent::new_fn_call(AccountEvent::new(
33 owner_id,
34 Cow::Owned(ImtBurn {
35 minter_id,
36 tokens,
37 memo,
38 }),
39 ))]
40 .as_slice(),
41 ))
42 .emit();
43 }
44}