1use near_sdk::{AccountId, PromiseOrValue, ext_contract, json_types::U128};
2
3use super::{Token, TokenId, resolver::MultiTokenResolver};
4
5#[ext_contract(ext_mt_core)]
6pub trait MultiTokenCore: MultiTokenResolver {
7 fn mt_transfer(
8 &mut self,
9 receiver_id: AccountId,
10 token_id: TokenId,
11 amount: U128,
12 approval: Option<(AccountId, u64)>,
13 memo: Option<String>,
14 );
15
16 fn mt_batch_transfer(
17 &mut self,
18 receiver_id: AccountId,
19 token_ids: Vec<TokenId>,
20 amounts: Vec<U128>,
21 approvals: Option<Vec<Option<(AccountId, u64)>>>,
22 memo: Option<String>,
23 );
24
25 fn mt_transfer_call(
26 &mut self,
27 receiver_id: AccountId,
28 token_id: TokenId,
29 amount: U128,
30 approval: Option<(AccountId, u64)>,
31 memo: Option<String>,
32 msg: String,
33 ) -> PromiseOrValue<Vec<U128>>;
34
35 fn mt_batch_transfer_call(
36 &mut self,
37 receiver_id: AccountId,
38 token_ids: Vec<TokenId>,
39 amounts: Vec<U128>,
40 approvals: Option<Vec<Option<(AccountId, u64)>>>,
41 memo: Option<String>,
42 msg: String,
43 ) -> PromiseOrValue<Vec<U128>>;
44
45 fn mt_token(&self, token_ids: Vec<TokenId>) -> Vec<Option<Token>>;
46
47 fn mt_balance_of(&self, account_id: AccountId, token_id: TokenId) -> U128;
48
49 fn mt_batch_balance_of(&self, account_id: AccountId, token_ids: Vec<TokenId>) -> Vec<U128>;
50
51 fn mt_supply(&self, token_id: TokenId) -> Option<U128>;
52
53 fn mt_batch_supply(&self, token_ids: Vec<TokenId>) -> Vec<Option<U128>>;
54}