1use super::{BlockchainApi, ManagedTypeApi};
2use crate::types::{
3 BigUint, CodeMetadata, DcdtTokenPayment, ManagedAddress, ManagedArgBuffer, ManagedBuffer,
4 ManagedInto, ManagedVec, TokenIdentifier,
5};
6
7pub const DCDT_TRANSFER_STRING: &[u8] = b"DCDTTransfer";
8pub const DCDT_NFT_TRANSFER_STRING: &[u8] = b"DCDTNFTTransfer";
9pub const DCDT_MULTI_TRANSFER_STRING: &[u8] = b"MultiDCDTNFTTransfer";
10
11pub trait SendApi: ManagedTypeApi + BlockchainApi + Clone + Sized {
13 fn direct_rewa<D>(&self, to: &ManagedAddress<Self>, amount: &BigUint<Self>, data: D)
16 where
17 D: ManagedInto<Self, ManagedBuffer<Self>>;
18
19 fn direct_rewa_execute(
21 &self,
22 to: &ManagedAddress<Self>,
23 amount: &BigUint<Self>,
24 gas_limit: u64,
25 endpoint_name: &ManagedBuffer<Self>,
26 arg_buffer: &ManagedArgBuffer<Self>,
27 ) -> Result<(), &'static [u8]>;
28
29 fn direct_dcdt_execute(
31 &self,
32 to: &ManagedAddress<Self>,
33 token: &TokenIdentifier<Self>,
34 amount: &BigUint<Self>,
35 gas_limit: u64,
36 endpoint_name: &ManagedBuffer<Self>,
37 arg_buffer: &ManagedArgBuffer<Self>,
38 ) -> Result<(), &'static [u8]>;
39
40 #[allow(clippy::too_many_arguments)]
42 fn direct_dcdt_nft_execute(
43 &self,
44 to: &ManagedAddress<Self>,
45 token: &TokenIdentifier<Self>,
46 nonce: u64,
47 amount: &BigUint<Self>,
48 gas_limit: u64,
49 endpoint_name: &ManagedBuffer<Self>,
50 arg_buffer: &ManagedArgBuffer<Self>,
51 ) -> Result<(), &'static [u8]>;
52
53 fn direct_multi_dcdt_transfer_execute(
54 &self,
55 to: &ManagedAddress<Self>,
56 payments: &ManagedVec<Self, DcdtTokenPayment<Self>>,
57 gas_limit: u64,
58 endpoint_name: &ManagedBuffer<Self>,
59 arg_buffer: &ManagedArgBuffer<Self>,
60 ) -> Result<(), &'static [u8]>;
61
62 fn async_call_raw(
69 &self,
70 to: &ManagedAddress<Self>,
71 amount: &BigUint<Self>,
72 endpoint_name: &ManagedBuffer<Self>,
73 arg_buffer: &ManagedArgBuffer<Self>,
74 ) -> !;
75
76 fn deploy_contract(
81 &self,
82 gas: u64,
83 amount: &BigUint<Self>,
84 code: &ManagedBuffer<Self>,
85 code_metadata: CodeMetadata,
86 arg_buffer: &ManagedArgBuffer<Self>,
87 ) -> (ManagedAddress<Self>, ManagedVec<Self, ManagedBuffer<Self>>);
88
89 fn deploy_from_source_contract(
93 &self,
94 gas: u64,
95 amount: &BigUint<Self>,
96 source_contract_address: &ManagedAddress<Self>,
97 code_metadata: CodeMetadata,
98 arg_buffer: &ManagedArgBuffer<Self>,
99 ) -> (ManagedAddress<Self>, ManagedVec<Self, ManagedBuffer<Self>>);
100
101 fn upgrade_contract(
105 &self,
106 sc_address: &ManagedAddress<Self>,
107 gas: u64,
108 amount: &BigUint<Self>,
109 code: &ManagedBuffer<Self>,
110 code_metadata: CodeMetadata,
111 arg_buffer: &ManagedArgBuffer<Self>,
112 );
113
114 fn execute_on_dest_context_raw(
116 &self,
117 gas: u64,
118 address: &ManagedAddress<Self>,
119 value: &BigUint<Self>,
120 endpoint_name: &ManagedBuffer<Self>,
121 arg_buffer: &ManagedArgBuffer<Self>,
122 ) -> ManagedVec<Self, ManagedBuffer<Self>>;
123
124 fn execute_on_dest_context_raw_custom_result_range<F>(
132 &self,
133 gas: u64,
134 address: &ManagedAddress<Self>,
135 value: &BigUint<Self>,
136 endpoint_name: &ManagedBuffer<Self>,
137 arg_buffer: &ManagedArgBuffer<Self>,
138 range_closure: F,
139 ) -> ManagedVec<Self, ManagedBuffer<Self>>
140 where
141 F: FnOnce(usize, usize) -> (usize, usize);
142
143 fn execute_on_dest_context_by_caller_raw(
144 &self,
145 gas: u64,
146 address: &ManagedAddress<Self>,
147 value: &BigUint<Self>,
148 endpoint_name: &ManagedBuffer<Self>,
149 arg_buffer: &ManagedArgBuffer<Self>,
150 ) -> ManagedVec<Self, ManagedBuffer<Self>>;
151
152 fn execute_on_same_context_raw(
153 &self,
154 gas: u64,
155 address: &ManagedAddress<Self>,
156 value: &BigUint<Self>,
157 endpoint_name: &ManagedBuffer<Self>,
158 arg_buffer: &ManagedArgBuffer<Self>,
159 ) -> ManagedVec<Self, ManagedBuffer<Self>>;
160
161 fn execute_on_dest_context_readonly_raw(
162 &self,
163 gas: u64,
164 address: &ManagedAddress<Self>,
165 endpoint_name: &ManagedBuffer<Self>,
166 arg_buffer: &ManagedArgBuffer<Self>,
167 ) -> ManagedVec<Self, ManagedBuffer<Self>>;
168
169 fn storage_store_tx_hash_key(&self, data: &ManagedBuffer<Self>);
171
172 fn storage_load_tx_hash_key(&self) -> ManagedBuffer<Self>;
174
175 fn call_local_dcdt_built_in_function(
179 &self,
180 gas: u64,
181 endpoint_name: &ManagedBuffer<Self>,
182 arg_buffer: &ManagedArgBuffer<Self>,
183 ) -> ManagedVec<Self, ManagedBuffer<Self>>;
184}