1use std::ffi::c_void;
2
3use multiversx_chain_vm_executor::{MemLength, MemPtr, VMHooks};
4
5use crate::mem_conv;
6
7use super::VMHooksHandler;
8
9#[derive(Debug)]
11pub struct VMHooksDispatcher {
12 handler: Box<dyn VMHooksHandler>,
13}
14
15impl VMHooksDispatcher {
16 pub fn new(handler: Box<dyn VMHooksHandler>) -> Self {
17 VMHooksDispatcher { handler }
18 }
19}
20
21fn bool_to_i32(b: bool) -> i32 {
22 if b {
23 1
24 } else {
25 0
26 }
27}
28
29#[allow(unused)]
30impl VMHooks for VMHooksDispatcher {
31 fn set_vm_hooks_ptr(&mut self, _vm_hooks_ptr: *mut c_void) {}
32
33 fn get_gas_left(&self) -> i64 {
34 self.handler.get_gas_left() as i64
35 }
36
37 fn get_sc_address(&self, result_offset: MemPtr) {
38 panic!("Unavailable: get_sc_address");
39 }
40
41 fn get_owner_address(&self, result_offset: MemPtr) {
42 panic!("Unavailable: get_owner_address");
43 }
44
45 fn get_shard_of_address(&self, address_offset: MemPtr) -> i32 {
46 unsafe {
47 mem_conv::with_bytes(address_offset, 32, |address_bytes| {
48 self.handler.get_shard_of_address(address_bytes)
49 })
50 }
51 }
52
53 fn is_smart_contract(&self, address_offset: MemPtr) -> i32 {
54 unsafe {
55 bool_to_i32(mem_conv::with_bytes(address_offset, 32, |address_bytes| {
56 self.handler.is_smart_contract(address_bytes)
57 }))
58 }
59 }
60
61 fn signal_error(&self, message_offset: MemPtr, message_length: MemLength) {
62 unsafe {
63 mem_conv::with_bytes(message_offset, message_length, |message| {
64 self.handler.signal_error(message);
65 });
66 }
67 }
68
69 fn get_external_balance(&self, address_offset: MemPtr, result_offset: MemPtr) {
70 panic!("Unavailable: get_external_balance");
71 }
72
73 fn get_block_hash(&self, nonce: i64, result_offset: MemPtr) -> i32 {
74 panic!("Unavailable: get_block_hash")
75 }
76
77 fn get_esdt_balance(
78 &self,
79 address_offset: MemPtr,
80 token_id_offset: MemPtr,
81 token_id_len: MemLength,
82 nonce: i64,
83 result_offset: MemPtr,
84 ) -> i32 {
85 panic!("Unavailable: get_esdt_balance")
86 }
87
88 fn get_esdt_nft_name_length(
89 &self,
90 address_offset: MemPtr,
91 token_id_offset: MemPtr,
92 token_id_len: MemLength,
93 nonce: i64,
94 ) -> i32 {
95 panic!("Unavailable: get_esdt_nft_name_length")
96 }
97
98 fn get_esdt_nft_attribute_length(
99 &self,
100 address_offset: MemPtr,
101 token_id_offset: MemPtr,
102 token_id_len: MemLength,
103 nonce: i64,
104 ) -> i32 {
105 panic!("Unavailable: get_esdt_nft_attribute_length")
106 }
107
108 fn get_esdt_nft_uri_length(
109 &self,
110 address_offset: MemPtr,
111 token_id_offset: MemPtr,
112 token_id_len: MemLength,
113 nonce: i64,
114 ) -> i32 {
115 panic!("Unavailable: get_esdt_nft_uri_length")
116 }
117
118 fn get_esdt_token_data(
119 &self,
120 address_offset: MemPtr,
121 token_id_offset: MemPtr,
122 token_id_len: MemLength,
123 nonce: i64,
124 value_handle: i32,
125 properties_offset: MemPtr,
126 hash_offset: MemPtr,
127 name_offset: MemPtr,
128 attributes_offset: MemPtr,
129 creator_offset: MemPtr,
130 royalties_handle: i32,
131 uris_offset: MemPtr,
132 ) -> i32 {
133 panic!("Unavailable: get_esdt_token_data")
134 }
135
136 fn get_esdt_local_roles(&self, token_id_handle: i32) -> i64 {
137 self.handler.get_esdt_local_roles_bits(token_id_handle) as i64
138 }
139
140 fn validate_token_identifier(&self, token_id_handle: i32) -> i32 {
141 panic!("Unavailable: validate_token_identifier")
142 }
143
144 fn transfer_value(
145 &self,
146 dest_offset: MemPtr,
147 value_offset: MemPtr,
148 data_offset: MemPtr,
149 length: MemLength,
150 ) -> i32 {
151 panic!("Unavailable: transfer_value")
152 }
153
154 fn transfer_value_execute(
155 &self,
156 dest_offset: MemPtr,
157 value_offset: MemPtr,
158 gas_limit: i64,
159 function_offset: MemPtr,
160 function_length: MemLength,
161 num_arguments: i32,
162 arguments_length_offset: MemPtr,
163 data_offset: MemPtr,
164 ) -> i32 {
165 panic!("Unavailable: transfer_value_execute")
166 }
167
168 fn transfer_esdt_execute(
169 &self,
170 dest_offset: MemPtr,
171 token_id_offset: MemPtr,
172 token_id_len: MemLength,
173 value_offset: MemPtr,
174 gas_limit: i64,
175 function_offset: MemPtr,
176 function_length: MemLength,
177 num_arguments: i32,
178 arguments_length_offset: MemPtr,
179 data_offset: MemPtr,
180 ) -> i32 {
181 panic!("Unavailable: transfer_esdt_execute")
182 }
183
184 fn transfer_esdt_nft_execute(
185 &self,
186 dest_offset: MemPtr,
187 token_id_offset: MemPtr,
188 token_id_len: MemLength,
189 value_offset: MemPtr,
190 nonce: i64,
191 gas_limit: i64,
192 function_offset: MemPtr,
193 function_length: MemLength,
194 num_arguments: i32,
195 arguments_length_offset: MemPtr,
196 data_offset: MemPtr,
197 ) -> i32 {
198 panic!("Unavailable: transfer_esdt_nft_execute")
199 }
200
201 fn multi_transfer_esdt_nft_execute(
202 &self,
203 dest_offset: MemPtr,
204 num_token_transfers: i32,
205 token_transfers_args_length_offset: MemPtr,
206 token_transfer_data_offset: MemPtr,
207 gas_limit: i64,
208 function_offset: MemPtr,
209 function_length: MemLength,
210 num_arguments: i32,
211 arguments_length_offset: MemPtr,
212 data_offset: MemPtr,
213 ) -> i32 {
214 panic!("Unavailable: multi_transfer_esdt_nft_execute")
215 }
216
217 fn create_async_call(
218 &self,
219 dest_offset: MemPtr,
220 value_offset: MemPtr,
221 data_offset: MemPtr,
222 data_length: MemLength,
223 success_offset: MemPtr,
224 success_length: MemLength,
225 error_offset: MemPtr,
226 error_length: MemLength,
227 gas: i64,
228 extra_gas_for_callback: i64,
229 ) -> i32 {
230 panic!("Unavailable: create_async_call")
231 }
232
233 fn set_async_context_callback(
234 &self,
235 callback: MemPtr,
236 callback_length: MemLength,
237 data: MemPtr,
238 data_length: MemLength,
239 gas: i64,
240 ) -> i32 {
241 panic!("Unavailable: set_async_context_callback")
242 }
243
244 fn upgrade_contract(
245 &self,
246 dest_offset: MemPtr,
247 gas_limit: i64,
248 value_offset: MemPtr,
249 code_offset: MemPtr,
250 code_metadata_offset: MemPtr,
251 length: MemLength,
252 num_arguments: i32,
253 arguments_length_offset: MemPtr,
254 data_offset: MemPtr,
255 ) {
256 panic!("Unavailable: upgrade_contract");
257 }
258
259 fn upgrade_from_source_contract(
260 &self,
261 dest_offset: MemPtr,
262 gas_limit: i64,
263 value_offset: MemPtr,
264 source_contract_address_offset: MemPtr,
265 code_metadata_offset: MemPtr,
266 num_arguments: i32,
267 arguments_length_offset: MemPtr,
268 data_offset: MemPtr,
269 ) {
270 panic!("Unavailable: upgrade_from_source_contract");
271 }
272
273 fn delete_contract(
274 &self,
275 dest_offset: MemPtr,
276 gas_limit: i64,
277 num_arguments: i32,
278 arguments_length_offset: MemPtr,
279 data_offset: MemPtr,
280 ) {
281 panic!("Unavailable: delete_contract");
282 }
283
284 fn async_call(
285 &self,
286 dest_offset: MemPtr,
287 value_offset: MemPtr,
288 data_offset: MemPtr,
289 length: MemLength,
290 ) {
291 panic!("Unavailable: async_call");
292 }
293
294 fn get_argument_length(&self, id: i32) -> i32 {
295 panic!("Unavailable: get_argument_length")
296 }
297
298 fn get_argument(&self, id: i32, arg_offset: MemPtr) -> i32 {
299 panic!("Unavailable: get_argument")
300 }
301
302 fn get_function(&self, function_offset: MemPtr) -> i32 {
303 panic!("Unavailable: get_function")
304 }
305
306 fn get_num_arguments(&self) -> i32 {
307 self.handler.get_num_arguments()
308 }
309
310 fn storage_store(
311 &self,
312 key_offset: MemPtr,
313 key_length: MemLength,
314 data_offset: MemPtr,
315 data_length: MemLength,
316 ) -> i32 {
317 panic!("Unavailable: storage_store")
318 }
319
320 fn storage_load_length(&self, key_offset: MemPtr, key_length: MemLength) -> i32 {
321 panic!("Unavailable: storage_load_length")
322 }
323
324 fn storage_load_from_address(
325 &self,
326 address_offset: MemPtr,
327 key_offset: MemPtr,
328 key_length: MemLength,
329 data_offset: MemPtr,
330 ) -> i32 {
331 panic!("Unavailable: storage_load_from_address")
332 }
333
334 fn storage_load(&self, key_offset: MemPtr, key_length: MemLength, data_offset: MemPtr) -> i32 {
335 panic!("Unavailable: storage_load")
336 }
337
338 fn set_storage_lock(
339 &self,
340 key_offset: MemPtr,
341 key_length: MemLength,
342 lock_timestamp: i64,
343 ) -> i32 {
344 panic!("Unavailable: set_storage_lock")
345 }
346
347 fn get_storage_lock(&self, key_offset: MemPtr, key_length: MemLength) -> i64 {
348 panic!("Unavailable: get_storage_lock")
349 }
350
351 fn is_storage_locked(&self, key_offset: MemPtr, key_length: MemLength) -> i32 {
352 panic!("Unavailable: is_storage_locked")
353 }
354
355 fn clear_storage_lock(&self, key_offset: MemPtr, key_length: MemLength) -> i32 {
356 panic!("Unavailable: clear_storage_lock")
357 }
358
359 fn get_caller(&self, result_offset: MemPtr) {
360 panic!("Unavailable: get_caller");
361 }
362
363 fn check_no_payment(&self) {
364 self.handler.check_not_payable();
365 }
366
367 fn get_call_value(&self, result_offset: MemPtr) -> i32 {
368 panic!("Unavailable: get_call_value")
369 }
370
371 fn get_esdt_value(&self, result_offset: MemPtr) -> i32 {
372 panic!("Unavailable: get_esdt_value")
373 }
374
375 fn get_esdt_value_by_index(&self, result_offset: MemPtr, index: i32) -> i32 {
376 panic!("Unavailable: get_esdt_value_by_index")
377 }
378
379 fn get_esdt_token_name(&self, result_offset: MemPtr) -> i32 {
380 panic!("Unavailable: get_esdt_token_name")
381 }
382
383 fn get_esdt_token_name_by_index(&self, result_offset: MemPtr, index: i32) -> i32 {
384 panic!("Unavailable: get_esdt_token_name_by_index")
385 }
386
387 fn get_esdt_token_nonce(&self) -> i64 {
388 panic!("Unavailable: get_esdt_token_nonce")
389 }
390
391 fn get_esdt_token_nonce_by_index(&self, index: i32) -> i64 {
392 panic!("Unavailable: get_esdt_token_nonce_by_index")
393 }
394
395 fn get_current_esdt_nft_nonce(
396 &self,
397 address_offset: MemPtr,
398 token_id_offset: MemPtr,
399 token_id_len: MemLength,
400 ) -> i64 {
401 unsafe {
402 mem_conv::with_bytes(address_offset, 32, |address_bytes| {
403 mem_conv::with_bytes(token_id_offset, token_id_len, |token_id_bytes| {
404 self.handler
405 .get_current_esdt_nft_nonce(address_bytes, token_id_bytes)
406 as i64
407 })
408 })
409 }
410 }
411
412 fn get_esdt_token_type(&self) -> i32 {
413 panic!("Unavailable: get_esdt_token_type")
414 }
415
416 fn get_esdt_token_type_by_index(&self, index: i32) -> i32 {
417 panic!("Unavailable: get_esdt_token_type_by_index")
418 }
419
420 fn get_num_esdt_transfers(&self) -> i32 {
421 self.handler.esdt_num_transfers() as i32
422 }
423
424 fn get_call_value_token_name(
425 &self,
426 call_value_offset: MemPtr,
427 token_name_offset: MemPtr,
428 ) -> i32 {
429 panic!("Unavailable: get_call_value_token_name")
430 }
431
432 fn get_call_value_token_name_by_index(
433 &self,
434 call_value_offset: MemPtr,
435 token_name_offset: MemPtr,
436 index: i32,
437 ) -> i32 {
438 panic!("Unavailable: get_call_value_token_name_by_index")
439 }
440
441 fn write_log(
442 &self,
443 data_pointer: MemPtr,
444 data_length: MemLength,
445 topic_ptr: MemPtr,
446 num_topics: i32,
447 ) {
448 panic!("Unavailable: write_log");
449 }
450
451 fn write_event_log(
452 &self,
453 num_topics: i32,
454 topic_lengths_offset: MemPtr,
455 topic_offset: MemPtr,
456 data_offset: MemPtr,
457 data_length: MemLength,
458 ) {
459 panic!("Unavailable: write_event_log");
460 }
461
462 fn get_block_timestamp(&self) -> i64 {
463 self.handler.get_block_timestamp() as i64
464 }
465
466 fn get_block_nonce(&self) -> i64 {
467 self.handler.get_block_nonce() as i64
468 }
469
470 fn get_block_round(&self) -> i64 {
471 self.handler.get_block_round() as i64
472 }
473
474 fn get_block_epoch(&self) -> i64 {
475 self.handler.get_block_epoch() as i64
476 }
477
478 fn get_block_random_seed(&self, pointer: MemPtr) {
479 panic!("Unavailable: get_block_random_seed");
480 }
481
482 fn get_state_root_hash(&self, pointer: MemPtr) {
483 panic!("Unavailable: get_state_root_hash");
484 }
485
486 fn get_prev_block_timestamp(&self) -> i64 {
487 self.handler.get_prev_block_timestamp() as i64
488 }
489
490 fn get_prev_block_nonce(&self) -> i64 {
491 self.handler.get_prev_block_nonce() as i64
492 }
493
494 fn get_prev_block_round(&self) -> i64 {
495 self.handler.get_prev_block_round() as i64
496 }
497
498 fn get_prev_block_epoch(&self) -> i64 {
499 self.handler.get_prev_block_epoch() as i64
500 }
501
502 fn get_prev_block_random_seed(&self, pointer: MemPtr) {
503 panic!("Unavailable: get_prev_block_random_seed");
504 }
505
506 fn finish(&self, pointer: MemPtr, length: MemLength) {
507 unsafe {
508 mem_conv::with_bytes(pointer, length, |bytes| {
509 self.handler.finish_slice_u8(bytes);
510 })
511 }
512 }
513
514 fn execute_on_same_context(
515 &self,
516 gas_limit: i64,
517 address_offset: MemPtr,
518 value_offset: MemPtr,
519 function_offset: MemPtr,
520 function_length: MemLength,
521 num_arguments: i32,
522 arguments_length_offset: MemPtr,
523 data_offset: MemPtr,
524 ) -> i32 {
525 panic!("Unavailable: execute_on_same_context")
526 }
527
528 fn execute_on_dest_context(
529 &self,
530 gas_limit: i64,
531 address_offset: MemPtr,
532 value_offset: MemPtr,
533 function_offset: MemPtr,
534 function_length: MemLength,
535 num_arguments: i32,
536 arguments_length_offset: MemPtr,
537 data_offset: MemPtr,
538 ) -> i32 {
539 panic!("Unavailable: execute_on_dest_context")
540 }
541
542 fn execute_read_only(
543 &self,
544 gas_limit: i64,
545 address_offset: MemPtr,
546 function_offset: MemPtr,
547 function_length: MemLength,
548 num_arguments: i32,
549 arguments_length_offset: MemPtr,
550 data_offset: MemPtr,
551 ) -> i32 {
552 panic!("Unavailable: execute_read_only")
553 }
554
555 fn create_contract(
556 &self,
557 gas_limit: i64,
558 value_offset: MemPtr,
559 code_offset: MemPtr,
560 code_metadata_offset: MemPtr,
561 length: MemLength,
562 result_offset: MemPtr,
563 num_arguments: i32,
564 arguments_length_offset: MemPtr,
565 data_offset: MemPtr,
566 ) -> i32 {
567 panic!("Unavailable: create_contract")
568 }
569
570 fn deploy_from_source_contract(
571 &self,
572 gas_limit: i64,
573 value_offset: MemPtr,
574 source_contract_address_offset: MemPtr,
575 code_metadata_offset: MemPtr,
576 result_address_offset: MemPtr,
577 num_arguments: i32,
578 arguments_length_offset: MemPtr,
579 data_offset: MemPtr,
580 ) -> i32 {
581 panic!("Unavailable: deploy_from_source_contract")
582 }
583
584 fn get_num_return_data(&self) -> i32 {
585 panic!("Unavailable: get_num_return_data")
586 }
587
588 fn get_return_data_size(&self, result_id: i32) -> i32 {
589 panic!("Unavailable: get_return_data_size")
590 }
591
592 fn get_return_data(&self, result_id: i32, data_offset: MemPtr) -> i32 {
593 panic!("Unavailable: get_return_data")
594 }
595
596 fn clean_return_data(&self) {
597 self.handler.clean_return_data();
598 }
599
600 fn delete_from_return_data(&self, result_id: i32) {
601 self.handler.delete_from_return_data(result_id as usize);
602 }
603
604 fn get_original_tx_hash(&self, data_offset: MemPtr) {
605 panic!("Unavailable: get_original_tx_hash");
606 }
607
608 fn get_current_tx_hash(&self, data_offset: MemPtr) {
609 panic!("Unavailable: get_current_tx_hash");
610 }
611
612 fn get_prev_tx_hash(&self, data_offset: MemPtr) {
613 panic!("Unavailable: get_prev_tx_hash");
614 }
615
616 fn managed_sc_address(&self, destination_handle: i32) {
617 self.handler.managed_sc_address(destination_handle);
618 }
619
620 fn managed_owner_address(&self, destination_handle: i32) {
621 self.handler.managed_owner_address(destination_handle);
622 }
623
624 fn managed_caller(&self, destination_handle: i32) {
625 self.handler.managed_caller(destination_handle);
626 }
627
628 fn managed_signal_error(&self, err_handle: i32) {
629 self.handler.signal_error_from_buffer(err_handle);
630 }
631
632 fn managed_write_log(&self, topics_handle: i32, data_handle: i32) {
633 self.handler.managed_write_log(topics_handle, data_handle);
634 }
635
636 fn managed_get_original_tx_hash(&self, result_handle: i32) {
637 self.handler.get_tx_hash(result_handle);
638 }
639
640 fn managed_get_state_root_hash(&self, result_handle: i32) {
641 panic!("Unavailable: managed_get_state_root_hash");
642 }
643
644 fn managed_get_block_random_seed(&self, result_handle: i32) {
645 self.handler.get_block_random_seed(result_handle);
646 }
647
648 fn managed_get_prev_block_random_seed(&self, result_handle: i32) {
649 self.handler.get_prev_block_random_seed(result_handle);
650 }
651
652 fn managed_get_return_data(&self, result_id: i32, result_handle: i32) {
653 panic!("Unavailable: managed_get_return_data");
654 }
655
656 fn managed_get_multi_esdt_call_value(&self, multi_call_value_handle: i32) {
657 self.handler
658 .load_all_esdt_transfers(multi_call_value_handle)
659 }
660
661 fn managed_get_esdt_balance(
662 &self,
663 address_handle: i32,
664 token_id_handle: i32,
665 nonce: i64,
666 value_handle: i32,
667 ) {
668 panic!("Unavailable: managed_get_esdt_balance");
669 }
670
671 fn managed_get_esdt_token_data(
672 &self,
673 address_handle: i32,
674 token_id_handle: i32,
675 nonce: i64,
676 value_handle: i32,
677 properties_handle: i32,
678 hash_handle: i32,
679 name_handle: i32,
680 attributes_handle: i32,
681 creator_handle: i32,
682 royalties_handle: i32,
683 uris_handle: i32,
684 ) {
685 self.handler.managed_get_esdt_token_data(
686 address_handle,
687 token_id_handle,
688 nonce as u64,
689 value_handle,
690 properties_handle,
691 hash_handle,
692 name_handle,
693 attributes_handle,
694 creator_handle,
695 royalties_handle,
696 uris_handle,
697 );
698 }
699
700 fn managed_get_back_transfers(&self, esdt_transfer_value_handle: i32, call_value_handle: i32) {
701 self.handler
702 .managed_get_back_transfers(esdt_transfer_value_handle, call_value_handle);
703 }
704
705 fn managed_async_call(
706 &self,
707 dest_handle: i32,
708 value_handle: i32,
709 function_handle: i32,
710 arguments_handle: i32,
711 ) {
712 self.handler
713 .async_call_raw(dest_handle, value_handle, function_handle, arguments_handle)
714 }
715
716 fn managed_create_async_call(
717 &self,
718 dest_handle: i32,
719 value_handle: i32,
720 function_handle: i32,
721 arguments_handle: i32,
722 success_offset: MemPtr,
723 success_length: MemLength,
724 error_offset: MemPtr,
725 error_length: MemLength,
726 gas: i64,
727 extra_gas_for_callback: i64,
728 callback_closure_handle: i32,
729 ) -> i32 {
730 unsafe {
731 mem_conv::with_bytes(success_offset, success_length, |success_callback| {
732 mem_conv::with_bytes(error_offset, error_length, |error_callback| {
733 self.handler.create_async_call_raw(
734 dest_handle,
735 value_handle,
736 function_handle,
737 arguments_handle,
738 success_callback,
739 error_callback,
740 gas as u64,
741 extra_gas_for_callback as u64,
742 callback_closure_handle,
743 );
744 })
745 })
746 }
747 0
748 }
749
750 fn managed_get_callback_closure(&self, callback_closure_handle: i32) {
751 self.handler
752 .load_callback_closure_buffer(callback_closure_handle)
753 }
754
755 fn managed_upgrade_from_source_contract(
756 &self,
757 dest_handle: i32,
758 gas: i64,
759 value_handle: i32,
760 address_handle: i32,
761 code_metadata_handle: i32,
762 arguments_handle: i32,
763 _result_handle: i32,
764 ) {
765 self.handler.upgrade_from_source_contract(
766 dest_handle,
767 gas as u64,
768 value_handle,
769 address_handle,
770 code_metadata_handle,
771 arguments_handle,
772 );
773 }
774
775 fn managed_upgrade_contract(
776 &self,
777 dest_handle: i32,
778 gas: i64,
779 value_handle: i32,
780 code_handle: i32,
781 code_metadata_handle: i32,
782 arguments_handle: i32,
783 _result_handle: i32,
784 ) {
785 self.handler.upgrade_contract(
786 dest_handle,
787 gas as u64,
788 value_handle,
789 code_handle,
790 code_metadata_handle,
791 arguments_handle,
792 )
793 }
794
795 fn managed_delete_contract(&self, dest_handle: i32, gas_limit: i64, arguments_handle: i32) {
796 panic!("Unavailable: managed_delete_contract");
797 }
798
799 fn managed_deploy_from_source_contract(
800 &self,
801 gas: i64,
802 value_handle: i32,
803 address_handle: i32,
804 code_metadata_handle: i32,
805 arguments_handle: i32,
806 result_address_handle: i32,
807 result_handle: i32,
808 ) -> i32 {
809 self.handler.deploy_from_source_contract(
810 gas as u64,
811 value_handle,
812 address_handle,
813 code_metadata_handle,
814 arguments_handle,
815 result_address_handle,
816 result_handle,
817 );
818 0
819 }
820
821 fn managed_create_contract(
822 &self,
823 gas: i64,
824 value_handle: i32,
825 code_handle: i32,
826 code_metadata_handle: i32,
827 arguments_handle: i32,
828 result_address_handle: i32,
829 result_handle: i32,
830 ) -> i32 {
831 self.handler.deploy_contract(
832 gas as u64,
833 value_handle,
834 code_handle,
835 code_metadata_handle,
836 arguments_handle,
837 result_address_handle,
838 result_handle,
839 );
840 0
841 }
842
843 fn managed_execute_read_only(
844 &self,
845 gas: i64,
846 address_handle: i32,
847 function_handle: i32,
848 arguments_handle: i32,
849 result_handle: i32,
850 ) -> i32 {
851 self.handler.execute_on_dest_context_readonly_raw(
852 gas as u64,
853 address_handle,
854 function_handle,
855 arguments_handle,
856 result_handle,
857 );
858 0
859 }
860
861 fn managed_execute_on_same_context(
862 &self,
863 gas: i64,
864 address_handle: i32,
865 value_handle: i32,
866 function_handle: i32,
867 arguments_handle: i32,
868 result_handle: i32,
869 ) -> i32 {
870 panic!("Unavailable: managed_execute_on_same_context")
871 }
872
873 fn managed_execute_on_dest_context(
874 &self,
875 gas: i64,
876 address_handle: i32,
877 value_handle: i32,
878 function_handle: i32,
879 arguments_handle: i32,
880 result_handle: i32,
881 ) -> i32 {
882 self.handler.execute_on_dest_context_raw(
883 gas as u64,
884 address_handle,
885 value_handle,
886 function_handle,
887 arguments_handle,
888 result_handle,
889 );
890 0
891 }
892
893 fn managed_multi_transfer_esdt_nft_execute(
894 &self,
895 dst_handle: i32,
896 token_transfers_handle: i32,
897 gas_limit: i64,
898 function_handle: i32,
899 arguments_handle: i32,
900 ) -> i32 {
901 self.handler.multi_transfer_esdt_nft_execute(
902 dst_handle,
903 token_transfers_handle,
904 gas_limit as u64,
905 function_handle,
906 arguments_handle,
907 );
908 0
909 }
910
911 fn managed_transfer_value_execute(
912 &self,
913 dst_handle: i32,
914 value_handle: i32,
915 gas_limit: i64,
916 function_handle: i32,
917 arguments_handle: i32,
918 ) -> i32 {
919 self.handler.transfer_value_execute(
920 dst_handle,
921 value_handle,
922 gas_limit as u64,
923 function_handle,
924 arguments_handle,
925 );
926 0
927 }
928
929 fn managed_is_esdt_frozen(&self, address_handle: i32, token_id_handle: i32, nonce: i64) -> i32 {
930 bool_to_i32(
931 self.handler
932 .check_esdt_frozen(address_handle, token_id_handle, nonce as u64),
933 )
934 }
935
936 fn managed_is_esdt_limited_transfer(&self, _token_id_handle: i32) -> i32 {
937 bool_to_i32(false)
938 }
939
940 fn managed_is_esdt_paused(&self, _token_id_handle: i32) -> i32 {
941 bool_to_i32(false)
942 }
943
944 fn managed_buffer_to_hex(&self, source_handle: i32, dest_handle: i32) {
945 self.handler.mb_to_hex(source_handle, dest_handle);
946 }
947
948 fn managed_get_code_metadata(&self, address_handle: i32, response_handle: i32) {
949 self.handler
950 .managed_get_code_metadata(address_handle, response_handle);
951 }
952
953 fn managed_is_builtin_function(&self, function_name_handle: i32) -> i32 {
954 bool_to_i32(
955 self.handler
956 .managed_is_builtin_function(function_name_handle),
957 )
958 }
959
960 fn big_float_new_from_parts(
961 &self,
962 integral_part: i32,
963 fractional_part: i32,
964 exponent: i32,
965 ) -> i32 {
966 self.handler
967 .bf_from_parts(integral_part, fractional_part, exponent)
968 }
969
970 fn big_float_new_from_frac(&self, numerator: i64, denominator: i64) -> i32 {
971 self.handler.bf_from_frac(numerator, denominator)
972 }
973
974 fn big_float_new_from_sci(&self, significand: i64, exponent: i64) -> i32 {
975 self.handler.bf_from_sci(significand, exponent)
976 }
977
978 fn big_float_add(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
979 self.handler
980 .bf_add(destination_handle, op1_handle, op2_handle);
981 }
982
983 fn big_float_sub(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
984 self.handler
985 .bf_sub(destination_handle, op1_handle, op2_handle);
986 }
987
988 fn big_float_mul(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
989 self.handler
990 .bf_mul(destination_handle, op1_handle, op2_handle);
991 }
992
993 fn big_float_div(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
994 self.handler
995 .bf_div(destination_handle, op1_handle, op2_handle);
996 }
997
998 fn big_float_neg(&self, destination_handle: i32, op_handle: i32) {
999 self.handler.bf_neg(destination_handle, op_handle);
1000 }
1001
1002 fn big_float_clone(&self, destination_handle: i32, op_handle: i32) {
1003 self.handler.bf_clone(destination_handle, op_handle);
1004 }
1005
1006 fn big_float_cmp(&self, op1_handle: i32, op2_handle: i32) -> i32 {
1007 self.handler.bf_cmp(op1_handle, op2_handle)
1008 }
1009
1010 fn big_float_abs(&self, destination_handle: i32, op_handle: i32) {
1011 self.handler.bf_abs(destination_handle, op_handle);
1012 }
1013
1014 fn big_float_sign(&self, op_handle: i32) -> i32 {
1015 self.handler.bf_sign(op_handle)
1016 }
1017
1018 fn big_float_sqrt(&self, destination_handle: i32, op_handle: i32) {
1019 self.handler.bf_sqrt(destination_handle, op_handle);
1020 }
1021
1022 fn big_float_pow(&self, destination_handle: i32, op_handle: i32, exponent: i32) {
1023 self.handler.bf_pow(destination_handle, op_handle, exponent);
1024 }
1025
1026 fn big_float_floor(&self, dest_big_int_handle: i32, op_handle: i32) {
1027 self.handler.bf_floor(dest_big_int_handle, op_handle);
1028 }
1029
1030 fn big_float_ceil(&self, dest_big_int_handle: i32, op_handle: i32) {
1031 self.handler.bf_ceil(dest_big_int_handle, op_handle);
1032 }
1033
1034 fn big_float_truncate(&self, dest_big_int_handle: i32, op_handle: i32) {
1035 self.handler.bf_trunc(dest_big_int_handle, op_handle);
1036 }
1037
1038 fn big_float_set_int64(&self, destination_handle: i32, value: i64) {
1039 self.handler.bf_set_i64(destination_handle, value);
1040 }
1041
1042 fn big_float_is_int(&self, op_handle: i32) -> i32 {
1043 bool_to_i32(self.handler.bf_is_bi(op_handle))
1044 }
1045
1046 fn big_float_set_big_int(&self, destination_handle: i32, big_int_handle: i32) {
1047 self.handler.bf_set_bi(destination_handle, big_int_handle);
1048 }
1049
1050 fn big_float_get_const_pi(&self, destination_handle: i32) {
1051 self.handler.bf_get_const_pi(destination_handle);
1052 }
1053
1054 fn big_float_get_const_e(&self, destination_handle: i32) {
1055 self.handler.bf_get_const_e(destination_handle);
1056 }
1057
1058 fn big_int_get_unsigned_argument(&self, id: i32, destination_handle: i32) {
1059 panic!("Unavailable: big_int_get_unsigned_argument");
1060 }
1061
1062 fn big_int_get_signed_argument(&self, id: i32, destination_handle: i32) {
1063 panic!("Unavailable: big_int_get_signed_argument");
1064 }
1065
1066 fn big_int_storage_store_unsigned(
1067 &self,
1068 key_offset: MemPtr,
1069 key_length: MemLength,
1070 source_handle: i32,
1071 ) -> i32 {
1072 panic!("Unavailable: big_int_storage_store_unsigned")
1073 }
1074
1075 fn big_int_storage_load_unsigned(
1076 &self,
1077 key_offset: MemPtr,
1078 key_length: MemLength,
1079 destination_handle: i32,
1080 ) -> i32 {
1081 panic!("Unavailable: big_int_storage_load_unsigned")
1082 }
1083
1084 fn big_int_get_call_value(&self, destination_handle: i32) {
1085 self.handler.load_egld_value(destination_handle);
1086 }
1087
1088 fn big_int_get_esdt_call_value(&self, destination: i32) {
1089 panic!("Unavailable: big_int_get_esdt_call_value");
1090 }
1091
1092 fn big_int_get_esdt_call_value_by_index(&self, destination_handle: i32, index: i32) {
1093 panic!("Unavailable: big_int_get_esdt_call_value_by_index");
1094 }
1095
1096 fn big_int_get_external_balance(&self, address_offset: MemPtr, result: i32) {
1097 unsafe {
1098 mem_conv::with_bytes(address_offset, 32, |address_bytes| {
1099 self.handler.load_balance(address_bytes, result);
1100 })
1101 }
1102 }
1103
1104 fn big_int_get_esdt_external_balance(
1105 &self,
1106 address_offset: MemPtr,
1107 token_id_offset: MemPtr,
1108 token_id_len: MemLength,
1109 nonce: i64,
1110 result_handle: i32,
1111 ) {
1112 unsafe {
1113 mem_conv::with_bytes(address_offset, 32, |address_bytes| {
1114 mem_conv::with_bytes(token_id_offset, token_id_len, |token_id_bytes| {
1115 self.handler.big_int_get_esdt_external_balance(
1116 address_bytes,
1117 token_id_bytes,
1118 nonce as u64,
1119 result_handle,
1120 );
1121 })
1122 })
1123 }
1124 }
1125
1126 fn big_int_new(&self, small_value: i64) -> i32 {
1127 self.handler.bi_new(small_value)
1128 }
1129
1130 fn big_int_unsigned_byte_length(&self, reference_handle: i32) -> i32 {
1131 panic!("Unavailable: big_int_unsigned_byte_length")
1132 }
1133
1134 fn big_int_signed_byte_length(&self, reference_handle: i32) -> i32 {
1135 panic!("Unavailable: big_int_signed_byte_length")
1136 }
1137
1138 fn big_int_get_unsigned_bytes(&self, reference_handle: i32, byte_offset: MemPtr) -> i32 {
1139 panic!("Unavailable: big_int_get_unsigned_bytes")
1140 }
1141
1142 fn big_int_get_signed_bytes(&self, reference_handle: i32, byte_offset: MemPtr) -> i32 {
1143 panic!("Unavailable: big_int_get_signed_bytes")
1144 }
1145
1146 fn big_int_set_unsigned_bytes(
1147 &self,
1148 destination_handle: i32,
1149 byte_offset: MemPtr,
1150 byte_length: MemLength,
1151 ) {
1152 unsafe {
1153 mem_conv::with_bytes_mut(byte_offset, byte_length, |bytes| {
1154 self.handler
1155 .bi_set_unsigned_bytes(destination_handle, bytes);
1156 })
1157 }
1158 }
1159
1160 fn big_int_set_signed_bytes(
1161 &self,
1162 destination_handle: i32,
1163 byte_offset: MemPtr,
1164 byte_length: MemLength,
1165 ) {
1166 unsafe {
1167 mem_conv::with_bytes_mut(byte_offset, byte_length, |bytes| {
1168 self.handler.bi_set_signed_bytes(destination_handle, bytes);
1169 })
1170 }
1171 }
1172
1173 fn big_int_is_int64(&self, destination_handle: i32) -> i32 {
1174 self.handler.bi_is_int64(destination_handle)
1175 }
1176
1177 fn big_int_get_int64(&self, destination_handle: i32) -> i64 {
1178 self.handler.bi_get_int64(destination_handle)
1179 }
1180
1181 fn big_int_set_int64(&self, destination_handle: i32, value: i64) {
1182 self.handler.bi_set_int64(destination_handle, value);
1183 }
1184
1185 fn big_int_add(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1186 self.handler
1187 .bi_add(destination_handle, op1_handle, op2_handle);
1188 }
1189
1190 fn big_int_sub(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1191 self.handler
1192 .bi_sub(destination_handle, op1_handle, op2_handle);
1193 }
1194
1195 fn big_int_mul(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1196 self.handler
1197 .bi_mul(destination_handle, op1_handle, op2_handle);
1198 }
1199
1200 fn big_int_tdiv(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1201 self.handler
1202 .bi_t_div(destination_handle, op1_handle, op2_handle);
1203 }
1204
1205 fn big_int_tmod(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1206 self.handler
1207 .bi_t_mod(destination_handle, op1_handle, op2_handle);
1208 }
1209
1210 fn big_int_ediv(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1211 panic!("Not supported: big_int_ediv");
1212 }
1213
1214 fn big_int_emod(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1215 panic!("Not supported: big_int_emod");
1216 }
1217
1218 fn big_int_sqrt(&self, destination_handle: i32, op_handle: i32) {
1219 self.handler.bi_sqrt(destination_handle, op_handle);
1220 }
1221
1222 fn big_int_pow(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1223 self.handler
1224 .bi_pow(destination_handle, op1_handle, op2_handle);
1225 }
1226
1227 fn big_int_log2(&self, op_handle: i32) -> i32 {
1228 self.handler.bi_log2(op_handle)
1229 }
1230
1231 fn big_int_abs(&self, destination_handle: i32, op_handle: i32) {
1232 self.handler.bi_abs(destination_handle, op_handle);
1233 }
1234
1235 fn big_int_neg(&self, destination_handle: i32, op_handle: i32) {
1236 self.handler.bi_neg(destination_handle, op_handle);
1237 }
1238
1239 fn big_int_sign(&self, op_handle: i32) -> i32 {
1240 self.handler.bi_sign(op_handle)
1241 }
1242
1243 fn big_int_cmp(&self, op1_handle: i32, op2_handle: i32) -> i32 {
1244 self.handler.bi_cmp(op1_handle, op2_handle)
1245 }
1246
1247 fn big_int_not(&self, destination_handle: i32, op_handle: i32) {
1248 panic!("Unavailable: big_int_not");
1249 }
1250
1251 fn big_int_and(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1252 self.handler
1253 .bi_and(destination_handle, op1_handle, op2_handle);
1254 }
1255
1256 fn big_int_or(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1257 self.handler
1258 .bi_or(destination_handle, op1_handle, op2_handle);
1259 }
1260
1261 fn big_int_xor(&self, destination_handle: i32, op1_handle: i32, op2_handle: i32) {
1262 self.handler
1263 .bi_xor(destination_handle, op1_handle, op2_handle);
1264 }
1265
1266 fn big_int_shr(&self, destination_handle: i32, op_handle: i32, bits: i32) {
1267 self.handler
1268 .bi_shr(destination_handle, op_handle, bits as usize);
1269 }
1270
1271 fn big_int_shl(&self, destination_handle: i32, op_handle: i32, bits: i32) {
1272 self.handler
1273 .bi_shl(destination_handle, op_handle, bits as usize);
1274 }
1275
1276 fn big_int_finish_unsigned(&self, reference_handle: i32) {
1277 self.handler.finish_big_uint_raw(reference_handle);
1278 }
1279
1280 fn big_int_finish_signed(&self, reference_handle: i32) {
1281 self.handler.finish_big_int_raw(reference_handle);
1282 }
1283
1284 fn big_int_to_string(&self, big_int_handle: i32, destination_handle: i32) {
1285 self.handler
1286 .bi_to_string(big_int_handle, destination_handle);
1287 }
1288
1289 fn mbuffer_new(&self) -> i32 {
1290 self.handler.mb_new_empty()
1291 }
1292
1293 fn mbuffer_new_from_bytes(&self, data_offset: MemPtr, data_length: MemLength) -> i32 {
1294 unsafe {
1295 mem_conv::with_bytes_mut(data_offset, data_length, |bytes| {
1296 self.handler.mb_new_from_bytes(bytes)
1297 })
1298 }
1299 }
1300
1301 fn mbuffer_get_length(&self, m_buffer_handle: i32) -> i32 {
1302 self.handler.mb_len(m_buffer_handle) as i32
1303 }
1304
1305 fn mbuffer_get_bytes(&self, m_buffer_handle: i32, result_offset: MemPtr) -> i32 {
1306 unsafe {
1307 self.handler
1308 .mb_copy_bytes(m_buffer_handle, result_offset as *mut u8) as i32
1309 }
1310 }
1311
1312 fn mbuffer_get_byte_slice(
1313 &self,
1314 source_handle: i32,
1315 starting_position: i32,
1316 slice_length: i32,
1317 result_offset: MemPtr,
1318 ) -> i32 {
1319 unsafe {
1320 mem_conv::with_bytes_mut(result_offset, slice_length as isize, |bytes| {
1321 self.handler
1322 .mb_load_slice(source_handle, starting_position as usize, bytes)
1323 })
1324 }
1325 }
1326
1327 fn mbuffer_copy_byte_slice(
1328 &self,
1329 source_handle: i32,
1330 starting_position: i32,
1331 slice_length: i32,
1332 destination_handle: i32,
1333 ) -> i32 {
1334 self.handler.mb_copy_slice(
1335 source_handle,
1336 starting_position as usize,
1337 slice_length as usize,
1338 destination_handle,
1339 )
1340 }
1341
1342 fn mbuffer_eq(&self, m_buffer_handle1: i32, m_buffer_handle2: i32) -> i32 {
1343 self.handler.mb_eq(m_buffer_handle1, m_buffer_handle2)
1344 }
1345
1346 fn mbuffer_set_bytes(
1347 &self,
1348 m_buffer_handle: i32,
1349 data_offset: MemPtr,
1350 data_length: MemLength,
1351 ) -> i32 {
1352 unsafe {
1353 mem_conv::with_bytes(data_offset, data_length, |bytes| {
1354 self.handler.mb_set(m_buffer_handle, bytes);
1355 });
1356 }
1357 0
1358 }
1359
1360 fn mbuffer_set_byte_slice(
1361 &self,
1362 m_buffer_handle: i32,
1363 starting_position: i32,
1364 data_length: MemLength,
1365 data_offset: MemPtr,
1366 ) -> i32 {
1367 unsafe {
1368 mem_conv::with_bytes(data_offset, data_length, |bytes| {
1369 self.handler
1370 .mb_set_slice(m_buffer_handle, starting_position as usize, bytes)
1371 })
1372 }
1373 }
1374
1375 fn mbuffer_append(&self, accumulator_handle: i32, data_handle: i32) -> i32 {
1376 self.handler.mb_append(accumulator_handle, data_handle);
1377 0
1378 }
1379
1380 fn mbuffer_append_bytes(
1381 &self,
1382 accumulator_handle: i32,
1383 data_offset: MemPtr,
1384 data_length: MemLength,
1385 ) -> i32 {
1386 unsafe {
1387 mem_conv::with_bytes(data_offset, data_length, |bytes| {
1388 self.handler.mb_append_bytes(accumulator_handle, bytes);
1389 });
1390 }
1391 0
1392 }
1393
1394 fn mbuffer_to_big_int_unsigned(&self, m_buffer_handle: i32, big_int_handle: i32) -> i32 {
1395 self.handler
1396 .mb_to_big_int_unsigned(m_buffer_handle, big_int_handle);
1397 0
1398 }
1399
1400 fn mbuffer_to_big_int_signed(&self, m_buffer_handle: i32, big_int_handle: i32) -> i32 {
1401 self.handler
1402 .mb_to_big_int_signed(m_buffer_handle, big_int_handle);
1403 0
1404 }
1405
1406 fn mbuffer_from_big_int_unsigned(&self, m_buffer_handle: i32, big_int_handle: i32) -> i32 {
1407 self.handler
1408 .mb_from_big_int_unsigned(m_buffer_handle, big_int_handle);
1409 0
1410 }
1411
1412 fn mbuffer_from_big_int_signed(&self, m_buffer_handle: i32, big_int_handle: i32) -> i32 {
1413 self.handler
1414 .mb_from_big_int_signed(m_buffer_handle, big_int_handle);
1415 0
1416 }
1417
1418 fn mbuffer_to_big_float(&self, m_buffer_handle: i32, big_float_handle: i32) -> i32 {
1419 panic!("Unavailable: mbuffer_to_big_float")
1420 }
1421
1422 fn mbuffer_from_big_float(&self, m_buffer_handle: i32, big_float_handle: i32) -> i32 {
1423 panic!("Unavailable: mbuffer_from_big_float")
1424 }
1425
1426 fn mbuffer_storage_store(&self, key_handle: i32, source_handle: i32) -> i32 {
1427 self.handler
1428 .storage_store_managed_buffer_raw(key_handle, source_handle);
1429 0
1430 }
1431
1432 fn mbuffer_storage_load(&self, key_handle: i32, destination_handle: i32) -> i32 {
1433 self.handler
1434 .storage_load_managed_buffer_raw(key_handle, destination_handle);
1435 0
1436 }
1437
1438 fn mbuffer_storage_load_from_address(
1439 &self,
1440 address_handle: i32,
1441 key_handle: i32,
1442 destination_handle: i32,
1443 ) {
1444 self.handler
1445 .storage_load_from_address(address_handle, key_handle, destination_handle);
1446 }
1447
1448 fn mbuffer_get_argument(&self, id: i32, destination_handle: i32) -> i32 {
1449 self.handler
1450 .load_argument_managed_buffer(id, destination_handle);
1451 0
1452 }
1453
1454 fn mbuffer_finish(&self, source_handle: i32) -> i32 {
1455 self.handler.finish_managed_buffer_raw(source_handle);
1456 0
1457 }
1458
1459 fn mbuffer_set_random(&self, destination_handle: i32, length: i32) -> i32 {
1460 self.handler
1461 .mb_set_random(destination_handle, length as usize);
1462 0
1463 }
1464
1465 fn managed_map_new(&self) -> i32 {
1466 self.handler.mm_new()
1467 }
1468
1469 fn managed_map_put(&self, map_handle: i32, key_handle: i32, value_handle: i32) -> i32 {
1470 self.handler.mm_put(map_handle, key_handle, value_handle);
1471 0
1472 }
1473
1474 fn managed_map_get(&self, map_handle: i32, key_handle: i32, out_value_handle: i32) -> i32 {
1475 self.handler
1476 .mm_get(map_handle, key_handle, out_value_handle);
1477 0
1478 }
1479
1480 fn managed_map_remove(&self, map_handle: i32, key_handle: i32, out_value_handle: i32) -> i32 {
1481 self.handler
1482 .mm_remove(map_handle, key_handle, out_value_handle);
1483 0
1484 }
1485
1486 fn managed_map_contains(&self, map_handle: i32, key_handle: i32) -> i32 {
1487 bool_to_i32(self.handler.mm_contains(map_handle, key_handle))
1488 }
1489
1490 fn small_int_get_unsigned_argument(&self, id: i32) -> i64 {
1491 self.handler.get_argument_u64(id) as i64
1492 }
1493
1494 fn small_int_get_signed_argument(&self, id: i32) -> i64 {
1495 self.handler.get_argument_i64(id)
1496 }
1497
1498 fn small_int_finish_unsigned(&self, value: i64) {
1499 self.handler.finish_u64(value as u64);
1500 }
1501
1502 fn small_int_finish_signed(&self, value: i64) {
1503 self.handler.finish_i64(value);
1504 }
1505
1506 fn small_int_storage_store_unsigned(
1507 &self,
1508 key_offset: MemPtr,
1509 key_length: MemLength,
1510 value: i64,
1511 ) -> i32 {
1512 panic!("Unavailable: small_int_storage_store_unsigned")
1513 }
1514
1515 fn small_int_storage_store_signed(
1516 &self,
1517 key_offset: MemPtr,
1518 key_length: MemLength,
1519 value: i64,
1520 ) -> i32 {
1521 panic!("Unavailable: small_int_storage_store_signed")
1522 }
1523
1524 fn small_int_storage_load_unsigned(&self, key_offset: MemPtr, key_length: MemLength) -> i64 {
1525 panic!("Unavailable: small_int_storage_load_unsigned")
1526 }
1527
1528 fn small_int_storage_load_signed(&self, key_offset: MemPtr, key_length: MemLength) -> i64 {
1529 panic!("Unavailable: small_int_storage_load_signed")
1530 }
1531
1532 fn int64get_argument(&self, id: i32) -> i64 {
1533 panic!("Unavailable: int64get_argument")
1534 }
1535
1536 fn int64finish(&self, value: i64) {
1537 panic!("Unavailable: int64finish");
1538 }
1539
1540 fn int64storage_store(&self, key_offset: MemPtr, key_length: MemLength, value: i64) -> i32 {
1541 panic!("Unavailable: int64storage_store")
1542 }
1543
1544 fn int64storage_load(&self, key_offset: MemPtr, key_length: MemLength) -> i64 {
1545 panic!("Unavailable: int64storage_load")
1546 }
1547
1548 fn sha256(&self, data_offset: MemPtr, length: MemLength, result_offset: MemPtr) -> i32 {
1549 panic!("Unavailable: sha256")
1550 }
1551
1552 fn managed_sha256(&self, input_handle: i32, output_handle: i32) -> i32 {
1553 self.handler.sha256_managed(output_handle, input_handle);
1554 0
1555 }
1556
1557 fn keccak256(&self, data_offset: MemPtr, length: MemLength, result_offset: MemPtr) -> i32 {
1558 panic!("Unavailable: keccak256")
1559 }
1560
1561 fn managed_keccak256(&self, input_handle: i32, output_handle: i32) -> i32 {
1562 self.handler.keccak256_managed(output_handle, input_handle);
1563 0
1564 }
1565
1566 fn ripemd160(&self, data_offset: MemPtr, length: MemLength, result_offset: MemPtr) -> i32 {
1567 panic!("Unavailable: ripemd160")
1568 }
1569
1570 fn managed_ripemd160(&self, input_handle: i32, output_handle: i32) -> i32 {
1571 panic!("Unavailable: managed_ripemd160")
1572 }
1573
1574 fn verify_bls(
1575 &self,
1576 key_offset: MemPtr,
1577 message_offset: MemPtr,
1578 message_length: MemLength,
1579 sig_offset: MemPtr,
1580 ) -> i32 {
1581 panic!("Unavailable: verify_bls")
1582 }
1583
1584 fn managed_verify_bls(&self, key_handle: i32, message_handle: i32, sig_handle: i32) -> i32 {
1585 panic!("Unavailable: managed_verify_bls")
1586 }
1587
1588 fn verify_ed25519(
1589 &self,
1590 key_offset: MemPtr,
1591 message_offset: MemPtr,
1592 message_length: MemLength,
1593 sig_offset: MemPtr,
1594 ) -> i32 {
1595 panic!("Unavailable: verify_ed25519")
1596 }
1597
1598 fn managed_verify_ed25519(&self, key_handle: i32, message_handle: i32, sig_handle: i32) -> i32 {
1599 self.handler
1600 .verify_ed25519_managed(key_handle, message_handle, sig_handle);
1601 0
1602 }
1603
1604 fn verify_custom_secp256k1(
1605 &self,
1606 key_offset: MemPtr,
1607 key_length: MemLength,
1608 message_offset: MemPtr,
1609 message_length: MemLength,
1610 sig_offset: MemPtr,
1611 hash_type: i32,
1612 ) -> i32 {
1613 panic!("Unavailable: verify_custom_secp256k1")
1614 }
1615
1616 fn managed_verify_custom_secp256k1(
1617 &self,
1618 key_handle: i32,
1619 message_handle: i32,
1620 sig_handle: i32,
1621 hash_type: i32,
1622 ) -> i32 {
1623 panic!("Unavailable: managed_verify_custom_secp256k1")
1624 }
1625
1626 fn verify_secp256k1(
1627 &self,
1628 key_offset: MemPtr,
1629 key_length: MemLength,
1630 message_offset: MemPtr,
1631 message_length: MemLength,
1632 sig_offset: MemPtr,
1633 ) -> i32 {
1634 panic!("Unavailable: verify_secp256k1")
1635 }
1636
1637 fn managed_verify_secp256k1(
1638 &self,
1639 key_handle: i32,
1640 message_handle: i32,
1641 sig_handle: i32,
1642 ) -> i32 {
1643 panic!("Unavailable: managed_verify_secp256k1")
1644 }
1645
1646 fn encode_secp256k1_der_signature(
1647 &self,
1648 r_offset: MemPtr,
1649 r_length: MemLength,
1650 s_offset: MemPtr,
1651 s_length: MemLength,
1652 sig_offset: MemPtr,
1653 ) -> i32 {
1654 panic!("Unavailable: encode_secp256k1_der_signature")
1655 }
1656
1657 fn managed_encode_secp256k1_der_signature(
1658 &self,
1659 r_handle: i32,
1660 s_handle: i32,
1661 sig_handle: i32,
1662 ) -> i32 {
1663 panic!("Unavailable: managed_encode_secp256k1_der_signature")
1664 }
1665
1666 fn add_ec(
1667 &self,
1668 x_result_handle: i32,
1669 y_result_handle: i32,
1670 ec_handle: i32,
1671 fst_point_xhandle: i32,
1672 fst_point_yhandle: i32,
1673 snd_point_xhandle: i32,
1674 snd_point_yhandle: i32,
1675 ) {
1676 panic!("Unavailable: add_ec");
1677 }
1678
1679 fn double_ec(
1680 &self,
1681 x_result_handle: i32,
1682 y_result_handle: i32,
1683 ec_handle: i32,
1684 point_xhandle: i32,
1685 point_yhandle: i32,
1686 ) {
1687 panic!("Unavailable: double_ec");
1688 }
1689
1690 fn is_on_curve_ec(&self, ec_handle: i32, point_xhandle: i32, point_yhandle: i32) -> i32 {
1691 panic!("Unavailable: is_on_curve_ec")
1692 }
1693
1694 fn scalar_base_mult_ec(
1695 &self,
1696 x_result_handle: i32,
1697 y_result_handle: i32,
1698 ec_handle: i32,
1699 data_offset: MemPtr,
1700 length: MemLength,
1701 ) -> i32 {
1702 panic!("Unavailable: scalar_base_mult_ec")
1703 }
1704
1705 fn managed_scalar_base_mult_ec(
1706 &self,
1707 x_result_handle: i32,
1708 y_result_handle: i32,
1709 ec_handle: i32,
1710 data_handle: i32,
1711 ) -> i32 {
1712 panic!("Unavailable: managed_scalar_base_mult_ec")
1713 }
1714
1715 fn scalar_mult_ec(
1716 &self,
1717 x_result_handle: i32,
1718 y_result_handle: i32,
1719 ec_handle: i32,
1720 point_xhandle: i32,
1721 point_yhandle: i32,
1722 data_offset: MemPtr,
1723 length: MemLength,
1724 ) -> i32 {
1725 panic!("Unavailable: scalar_mult_ec")
1726 }
1727
1728 fn managed_scalar_mult_ec(
1729 &self,
1730 x_result_handle: i32,
1731 y_result_handle: i32,
1732 ec_handle: i32,
1733 point_xhandle: i32,
1734 point_yhandle: i32,
1735 data_handle: i32,
1736 ) -> i32 {
1737 panic!("Unavailable: managed_scalar_mult_ec")
1738 }
1739
1740 fn marshal_ec(
1741 &self,
1742 x_pair_handle: i32,
1743 y_pair_handle: i32,
1744 ec_handle: i32,
1745 result_offset: MemPtr,
1746 ) -> i32 {
1747 panic!("Unavailable: marshal_ec")
1748 }
1749
1750 fn managed_marshal_ec(
1751 &self,
1752 x_pair_handle: i32,
1753 y_pair_handle: i32,
1754 ec_handle: i32,
1755 result_handle: i32,
1756 ) -> i32 {
1757 panic!("Unavailable: managed_marshal_ec")
1758 }
1759
1760 fn marshal_compressed_ec(
1761 &self,
1762 x_pair_handle: i32,
1763 y_pair_handle: i32,
1764 ec_handle: i32,
1765 result_offset: MemPtr,
1766 ) -> i32 {
1767 panic!("Unavailable: marshal_compressed_ec")
1768 }
1769
1770 fn managed_marshal_compressed_ec(
1771 &self,
1772 x_pair_handle: i32,
1773 y_pair_handle: i32,
1774 ec_handle: i32,
1775 result_handle: i32,
1776 ) -> i32 {
1777 panic!("Unavailable: managed_marshal_compressed_ec")
1778 }
1779
1780 fn unmarshal_ec(
1781 &self,
1782 x_result_handle: i32,
1783 y_result_handle: i32,
1784 ec_handle: i32,
1785 data_offset: MemPtr,
1786 length: MemLength,
1787 ) -> i32 {
1788 panic!("Unavailable: unmarshal_ec")
1789 }
1790
1791 fn managed_unmarshal_ec(
1792 &self,
1793 x_result_handle: i32,
1794 y_result_handle: i32,
1795 ec_handle: i32,
1796 data_handle: i32,
1797 ) -> i32 {
1798 panic!("Unavailable: managed_unmarshal_ec")
1799 }
1800
1801 fn unmarshal_compressed_ec(
1802 &self,
1803 x_result_handle: i32,
1804 y_result_handle: i32,
1805 ec_handle: i32,
1806 data_offset: MemPtr,
1807 length: MemLength,
1808 ) -> i32 {
1809 panic!("Unavailable: unmarshal_compressed_ec")
1810 }
1811
1812 fn managed_unmarshal_compressed_ec(
1813 &self,
1814 x_result_handle: i32,
1815 y_result_handle: i32,
1816 ec_handle: i32,
1817 data_handle: i32,
1818 ) -> i32 {
1819 panic!("Unavailable: managed_unmarshal_compressed_ec")
1820 }
1821
1822 fn generate_key_ec(
1823 &self,
1824 x_pub_key_handle: i32,
1825 y_pub_key_handle: i32,
1826 ec_handle: i32,
1827 result_offset: MemPtr,
1828 ) -> i32 {
1829 panic!("Unavailable: generate_key_ec")
1830 }
1831
1832 fn managed_generate_key_ec(
1833 &self,
1834 x_pub_key_handle: i32,
1835 y_pub_key_handle: i32,
1836 ec_handle: i32,
1837 result_handle: i32,
1838 ) -> i32 {
1839 panic!("Unavailable: managed_generate_key_ec")
1840 }
1841
1842 fn create_ec(&self, data_offset: MemPtr, data_length: MemLength) -> i32 {
1843 panic!("Unavailable: create_ec")
1844 }
1845
1846 fn managed_create_ec(&self, data_handle: i32) -> i32 {
1847 panic!("Unavailable: managed_create_ec")
1848 }
1849
1850 fn get_curve_length_ec(&self, ec_handle: i32) -> i32 {
1851 panic!("Unavailable: get_curve_length_ec")
1852 }
1853
1854 fn get_priv_key_byte_length_ec(&self, ec_handle: i32) -> i32 {
1855 panic!("Unavailable: get_priv_key_byte_length_ec")
1856 }
1857
1858 fn elliptic_curve_get_values(
1859 &self,
1860 ec_handle: i32,
1861 field_order_handle: i32,
1862 base_point_order_handle: i32,
1863 eq_constant_handle: i32,
1864 x_base_point_handle: i32,
1865 y_base_point_handle: i32,
1866 ) -> i32 {
1867 panic!("Unavailable: elliptic_curve_get_values")
1868 }
1869
1870 fn is_reserved_function_name(&self, name_handle: i32) -> i32 {
1871 panic!("Unavailable: is_reserved_function_name")
1872 }
1873
1874 fn managed_get_original_caller_addr(&self, destination_handle: i32) {
1875 panic!("Unavailable: managed_get_original_caller_addr")
1876 }
1877
1878 fn managed_get_relayer_addr(&self, destination_handle: i32) {
1879 panic!("Unavailable: managed_get_relayer_addr")
1880 }
1881
1882 fn managed_multi_transfer_esdt_nft_execute_by_user(
1883 &self,
1884 user_handle: i32,
1885 dst_handle: i32,
1886 token_transfers_handle: i32,
1887 gas_limit: i64,
1888 function_handle: i32,
1889 arguments_handle: i32,
1890 ) -> i32 {
1891 panic!("Unavailable: managed_multi_transfer_esdt_nft_execute_by_user")
1892 }
1893
1894 fn managed_verify_secp256r1(
1895 &self,
1896 key_handle: i32,
1897 message_handle: i32,
1898 sig_handle: i32,
1899 ) -> i32 {
1900 panic!("Unavailable: managed_verify_secp256r1")
1901 }
1902 fn managed_verify_blssignature_share(
1903 &self,
1904 key_handle: i32,
1905 message_handle: i32,
1906 sig_handle: i32,
1907 ) -> i32 {
1908 panic!("Unavailable: managed_verify_blssignature_share")
1909 }
1910 fn managed_verify_blsaggregated_signature(
1911 &self,
1912 key_handle: i32,
1913 message_handle: i32,
1914 sig_handle: i32,
1915 ) -> i32 {
1916 panic!("Unavailable: managed_verify_blsaggregated_signature")
1917 }
1918}