1#![allow(clippy::too_many_arguments)]
2
3use defuse_nep245::{MultiTokenCore, TokenId, receiver::MultiTokenReceiver};
4use near_plugins::AccessControllable;
5use near_sdk::{AccountId, PromiseOrValue, ext_contract, json_types::U128};
6
7#[ext_contract(ext_mt_withdraw)]
8pub trait MultiTokenWithdrawer: MultiTokenReceiver + MultiTokenWithdrawResolver {
9 fn mt_withdraw(
16 &mut self,
17 token: AccountId,
18 receiver_id: AccountId,
19 token_ids: Vec<TokenId>,
20 amounts: Vec<U128>,
21 memo: Option<String>,
22 msg: Option<String>,
23 ) -> PromiseOrValue<Vec<U128>>;
24}
25
26#[ext_contract(mt_withdraw_resolver)]
27pub trait MultiTokenWithdrawResolver {
28 fn mt_resolve_withdraw(
29 &mut self,
30 token: AccountId,
31 sender_id: AccountId,
32 token_ids: Vec<TokenId>,
33 amounts: Vec<U128>,
34 is_call: bool,
35 ) -> Vec<U128>;
36}
37
38#[ext_contract(ext_mt_force_core)]
41pub trait MultiTokenForcedCore: MultiTokenCore + AccessControllable {
42 fn mt_force_transfer(
43 &mut self,
44 owner_id: AccountId,
45 receiver_id: AccountId,
46 token_id: TokenId,
47 amount: U128,
48 approval: Option<(AccountId, u64)>,
49 memo: Option<String>,
50 );
51
52 fn mt_force_batch_transfer(
53 &mut self,
54 owner_id: AccountId,
55 receiver_id: AccountId,
56 token_ids: Vec<TokenId>,
57 amounts: Vec<U128>,
58 approvals: Option<Vec<Option<(AccountId, u64)>>>,
59 memo: Option<String>,
60 );
61
62 fn mt_force_transfer_call(
63 &mut self,
64 owner_id: AccountId,
65 receiver_id: AccountId,
66 token_id: TokenId,
67 amount: U128,
68 approval: Option<(AccountId, u64)>,
69 memo: Option<String>,
70 msg: String,
71 ) -> PromiseOrValue<Vec<U128>>;
72
73 fn mt_force_batch_transfer_call(
74 &mut self,
75 owner_id: AccountId,
76 receiver_id: AccountId,
77 token_ids: Vec<TokenId>,
78 amounts: Vec<U128>,
79 approvals: Option<Vec<Option<(AccountId, u64)>>>,
80 memo: Option<String>,
81 msg: String,
82 ) -> PromiseOrValue<Vec<U128>>;
83}
84
85#[ext_contract(ext_mt_force_withdraw)]
86pub trait MultiTokenForcedWithdrawer: MultiTokenWithdrawer + AccessControllable {
87 fn mt_force_withdraw(
88 &mut self,
89 owner_id: AccountId,
90 token: AccountId,
91 receiver_id: AccountId,
92 token_ids: Vec<TokenId>,
93 amounts: Vec<U128>,
94 memo: Option<String>,
95 msg: Option<String>,
96 ) -> PromiseOrValue<Vec<U128>>;
97}