1use crate::{
2 helper::{serialize_bool_as_string, serialize_datetime_as_string, PaginationParams},
3 types::Blockchain,
4};
5use chrono::{DateTime, Utc};
6use serde::{Deserialize, Serialize};
7
8#[derive(Clone, Debug, Serialize)]
9#[serde(rename_all = "UPPERCASE")]
10pub enum FeeLevel {
11 Low,
12 Medium,
13 High,
14}
15
16impl FeeLevel {
17 pub fn as_str(&self) -> &'static str {
18 match self {
19 FeeLevel::Low => "LOW",
20 FeeLevel::Medium => "MEDIUM",
21 FeeLevel::High => "HIGH",
22 }
23 }
24}
25
26#[derive(Debug, Serialize)]
28#[serde(rename_all = "camelCase")]
29pub struct CreateDevWalletRequest {
30 pub wallet_set_id: String,
32
33 pub entity_secret_ciphertext: String,
35
36 pub blockchains: Vec<Blockchain>,
38
39 pub idempotency_key: String,
41
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub account_type: Option<String>,
45
46 #[serde(skip_serializing_if = "Option::is_none")]
48 pub count: Option<u32>,
49
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub metadata: Option<Vec<DevWalletMetadata>>,
53
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub name: Option<String>,
57
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub ref_id: Option<String>,
61}
62
63#[derive(Debug, Serialize, Deserialize, Clone)]
65#[serde(rename_all = "camelCase")]
66pub struct DevWalletMetadata {
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub name: Option<String>,
70
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub ref_id: Option<String>,
74}
75
76#[derive(Debug, Serialize)]
78#[serde(rename_all = "camelCase")]
79pub struct UpdateDevWalletRequest {
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub name: Option<String>,
83
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub ref_id: Option<String>,
87}
88
89#[derive(Debug, Deserialize, Serialize)]
91#[serde(rename_all = "camelCase")]
92pub struct DevWalletResponse {
93 pub wallet: DevWallet,
94}
95
96#[derive(Debug, Deserialize, Serialize, Clone)]
98#[serde(rename_all = "camelCase")]
99pub struct DevWallet {
100 pub id: String,
102
103 pub address: String,
105
106 pub blockchain: Blockchain,
108
109 pub create_date: DateTime<Utc>,
111
112 pub update_date: DateTime<Utc>,
114
115 pub custody_type: String,
117
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub name: Option<String>,
121
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub ref_id: Option<String>,
125
126 pub state: String,
128
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub user_id: Option<String>,
132
133 pub wallet_set_id: String,
135
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub initial_public_key: Option<String>,
139
140 pub account_type: String,
142}
143
144#[derive(Debug, Serialize)]
146#[serde(rename_all = "camelCase")]
147pub struct SignMessageRequest {
148 pub entity_secret_ciphertext: String,
150
151 pub message: String,
153
154 pub wallet_id: String,
156
157 #[serde(skip_serializing_if = "Option::is_none")]
159 pub encoded_by_hex: Option<bool>,
160
161 #[serde(skip_serializing_if = "Option::is_none")]
163 pub memo: Option<String>,
164}
165
166#[derive(Debug, Serialize)]
168#[serde(rename_all = "camelCase")]
169pub struct SignDataRequest {
170 pub entity_secret_ciphertext: String,
172
173 pub data: String,
175
176 pub wallet_id: String,
178
179 #[serde(skip_serializing_if = "Option::is_none")]
181 pub memo: Option<String>,
182}
183
184#[derive(Debug, Serialize)]
186#[serde(rename_all = "camelCase")]
187pub struct SignTransactionRequest {
188 pub entity_secret_ciphertext: String,
190
191 #[serde(skip_serializing_if = "Option::is_none")]
193 pub raw_transaction: Option<String>,
194
195 #[serde(skip_serializing_if = "Option::is_none")]
197 pub transaction: Option<String>,
198
199 pub wallet_id: String,
201
202 #[serde(skip_serializing_if = "Option::is_none")]
204 pub memo: Option<String>,
205}
206
207#[derive(Debug, Deserialize)]
209#[serde(rename_all = "camelCase")]
210pub struct SignTransactionResponse {
211 pub signature: String,
213
214 pub signed_transaction: String,
216
217 #[serde(skip_serializing_if = "Option::is_none")]
219 pub tx_hash: Option<String>,
220}
221
222#[derive(Debug, Serialize)]
224#[serde(rename_all = "camelCase")]
225pub struct SignDelegateRequest {
226 pub entity_secret_ciphertext: String,
228
229 pub unsigned_delegate_action: String,
231
232 pub wallet_id: String,
234}
235
236#[derive(Debug, Deserialize)]
238#[serde(rename_all = "camelCase")]
239pub struct SignDelegateResponse {
240 pub signature: String,
242
243 pub signed_delegate_action: String,
245}
246
247#[derive(Debug, Deserialize, Serialize)]
249pub struct DevWalletsResponse {
250 pub wallets: Vec<DevWallet>,
251}
252
253#[derive(Debug, Deserialize, Serialize)]
255pub struct SignatureResponse {
256 pub signature: String,
258}
259
260pub enum AccountType {
262 Eoa,
263 Sca,
264}
265
266impl AccountType {
267 pub fn as_str(&self) -> &'static str {
268 match self {
269 AccountType::Eoa => "EOA",
270 AccountType::Sca => "SCA",
271 }
272 }
273}
274
275#[derive(Debug, Serialize, Default)]
277#[serde(rename_all = "camelCase")]
278pub struct ListDevWalletsParams {
279 #[serde(skip_serializing_if = "Option::is_none")]
281 pub address: Option<String>,
282
283 #[serde(skip_serializing_if = "Option::is_none")]
285 pub blockchain: Option<String>,
286
287 #[serde(skip_serializing_if = "Option::is_none")]
289 pub sca_core: Option<String>,
290
291 #[serde(rename = "walletSetId", skip_serializing_if = "Option::is_none")]
293 pub wallet_set_id: Option<String>,
294
295 #[serde(rename = "refId", skip_serializing_if = "Option::is_none")]
297 pub ref_id: Option<String>,
298
299 #[serde(
301 skip_serializing_if = "Option::is_none",
302 serialize_with = "serialize_datetime_as_string"
303 )]
304 pub from: Option<DateTime<Utc>>,
305
306 #[serde(
308 skip_serializing_if = "Option::is_none",
309 serialize_with = "serialize_datetime_as_string"
310 )]
311 pub to: Option<DateTime<Utc>>,
312
313 #[serde(flatten)]
315 pub pagination: PaginationParams,
316
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub order: Option<String>,
319}
320
321#[derive(Debug, Serialize, Default)]
323#[serde(rename_all = "camelCase")]
324pub struct ListWalletsWithBalancesParams {
325 pub blockchain: String,
327
328 #[serde(skip_serializing_if = "Option::is_none")]
330 pub address: Option<String>,
331
332 #[serde(skip_serializing_if = "Option::is_none")]
334 pub sca_core: Option<String>,
335
336 #[serde(skip_serializing_if = "Option::is_none")]
338 pub wallet_set_id: Option<String>,
339
340 #[serde(skip_serializing_if = "Option::is_none")]
342 pub ref_id: Option<String>,
343
344 #[serde(skip_serializing_if = "Option::is_none", rename = "amount__gte")]
348 pub amount_gte: Option<String>,
349
350 #[serde(skip_serializing_if = "Option::is_none")]
352 pub token_address: Option<String>,
353
354 #[serde(
356 skip_serializing_if = "Option::is_none",
357 serialize_with = "serialize_datetime_as_string"
358 )]
359 pub from: Option<DateTime<Utc>>,
360
361 #[serde(
363 skip_serializing_if = "Option::is_none",
364 serialize_with = "serialize_datetime_as_string"
365 )]
366 pub to: Option<DateTime<Utc>>,
367
368 #[serde(flatten)]
370 pub pagination: PaginationParams,
371}
372
373#[derive(Debug, Serialize, Default)]
375#[serde(rename_all = "camelCase")]
376pub struct QueryParams {
377 #[serde(
379 skip_serializing_if = "Option::is_none",
380 serialize_with = "serialize_bool_as_string"
381 )]
382 pub include_all: Option<bool>,
383
384 #[serde(skip_serializing_if = "Option::is_none")]
386 pub name: Option<String>,
387
388 #[serde(skip_serializing_if = "Option::is_none")]
390 pub token_address: Option<String>,
391
392 #[serde(skip_serializing_if = "Option::is_none")]
396 pub standard: Option<String>,
397
398 #[serde(flatten)]
400 pub pagination: PaginationParams,
401}
402
403#[derive(Debug, Serialize, Default)]
405#[serde(rename_all = "camelCase")]
406pub struct ListTransactionsParams {
407 #[serde(skip_serializing_if = "Option::is_none")]
409 pub blockchain: Option<String>,
410
411 #[serde(skip_serializing_if = "Option::is_none")]
413 pub custody_type: Option<String>,
414
415 #[serde(skip_serializing_if = "Option::is_none")]
417 pub destination_address: Option<String>,
418
419 #[serde(
421 skip_serializing_if = "Option::is_none",
422 serialize_with = "serialize_bool_as_string"
423 )]
424 pub include_all: Option<bool>,
425
426 #[serde(skip_serializing_if = "Option::is_none")]
428 pub operation: Option<String>,
429
430 #[serde(skip_serializing_if = "Option::is_none")]
432 pub state: Option<String>,
433
434 #[serde(skip_serializing_if = "Option::is_none")]
436 pub tx_hash: Option<String>,
437
438 #[serde(skip_serializing_if = "Option::is_none")]
440 pub tx_type: Option<String>,
441
442 #[serde(skip_serializing_if = "Option::is_none")]
444 pub wallet_ids: Option<String>,
445
446 #[serde(
448 skip_serializing_if = "Option::is_none",
449 serialize_with = "serialize_datetime_as_string"
450 )]
451 pub from: Option<DateTime<Utc>>,
452
453 #[serde(
455 skip_serializing_if = "Option::is_none",
456 serialize_with = "serialize_datetime_as_string"
457 )]
458 pub to: Option<DateTime<Utc>>,
459
460 #[serde(skip_serializing_if = "Option::is_none")]
463 pub order: Option<String>,
464
465 #[serde(flatten)]
467 pub pagination: PaginationParams,
468}
469
470#[derive(Debug, Serialize, Default)]
472#[serde(rename_all = "camelCase")]
473pub struct TransactionParams {
474 pub tx_type: String,
476}
477
478#[derive(Debug, Deserialize, Serialize)]
480#[serde(rename_all = "camelCase")]
481pub struct TokenBalancesResponse {
482 pub token_balances: Vec<TokenBalance>,
483}
484
485#[derive(Debug, Deserialize, Serialize)]
487#[serde(rename_all = "camelCase")]
488pub struct TokenBalance {
489 pub amount: String,
491
492 pub token: Token,
494
495 pub update_date: DateTime<Utc>,
497}
498
499#[derive(Debug, Deserialize, Serialize)]
501#[serde(rename_all = "camelCase")]
502pub struct Token {
503 pub id: String,
505
506 pub name: Option<String>,
508
509 pub standard: Option<String>,
511
512 pub blockchain: String,
514
515 pub decimals: Option<u32>,
517
518 pub is_native: bool,
520
521 pub symbol: Option<String>,
523
524 pub token_address: Option<String>,
526
527 pub update_date: DateTime<Utc>,
529
530 pub create_date: DateTime<Utc>,
532}
533
534#[derive(Debug, Deserialize, Serialize)]
536#[serde(rename_all = "camelCase")]
537pub struct WalletsWithBalancesResponse {
538 pub wallets: Vec<WalletWithBalances>,
539}
540
541#[derive(Debug, Deserialize, Serialize)]
543#[serde(rename_all = "camelCase")]
544pub struct WalletWithBalances {
545 pub id: String,
547
548 pub address: String,
550
551 pub blockchain: String,
553
554 pub create_date: DateTime<Utc>,
556
557 pub update_date: DateTime<Utc>,
559
560 pub custody_type: String,
562
563 #[serde(skip_serializing_if = "Option::is_none")]
565 pub name: Option<String>,
566
567 #[serde(skip_serializing_if = "Option::is_none")]
569 pub ref_id: Option<String>,
570
571 pub state: String,
573
574 #[serde(skip_serializing_if = "Option::is_none")]
576 pub user_id: Option<String>,
577
578 pub wallet_set_id: String,
580
581 #[serde(skip_serializing_if = "Option::is_none")]
583 pub initial_public_key: Option<String>,
584
585 pub account_type: String,
587
588 pub token_balances: Vec<TokenBalance>,
590}
591
592#[derive(Debug, Deserialize, Serialize)]
594#[serde(rename_all = "camelCase")]
595pub struct NftsResponse {
596 pub nfts: Vec<Nft>,
597}
598
599#[derive(Debug, Deserialize, Serialize)]
601#[serde(rename_all = "camelCase")]
602pub struct Nft {
603 pub amount: String,
605
606 pub metadata: Option<String>,
608
609 pub nft_token_id: Option<String>,
611
612 pub token: Token,
614
615 pub update_date: DateTime<Utc>,
617}
618
619#[derive(Debug, Deserialize, Serialize)]
621#[serde(rename_all = "camelCase")]
622pub struct TransactionsResponse {
623 pub transactions: Vec<Transaction>,
624}
625
626#[derive(Debug, Deserialize, Serialize)]
628#[serde(rename_all = "camelCase")]
629pub struct TransactionResponse {
630 pub transaction: Transaction,
631}
632
633#[derive(Debug, Deserialize, Serialize)]
635#[serde(rename_all = "camelCase")]
636pub struct Transaction {
637 pub id: String,
639
640 #[serde(skip_serializing_if = "Option::is_none")]
642 pub abi_function_signature: Option<String>,
643
644 #[serde(skip_serializing_if = "Option::is_none")]
646 pub abi_parameters: Option<Vec<serde_json::Value>>,
647
648 #[serde(skip_serializing_if = "Option::is_none")]
650 pub amounts: Option<Vec<String>>,
651
652 #[serde(skip_serializing_if = "Option::is_none")]
654 pub amount_in_usd: Option<String>,
655
656 #[serde(skip_serializing_if = "Option::is_none")]
658 pub block_hash: Option<String>,
659
660 #[serde(skip_serializing_if = "Option::is_none")]
662 pub block_height: Option<i64>,
663
664 pub blockchain: String,
666
667 #[serde(skip_serializing_if = "Option::is_none")]
669 pub contract_address: Option<String>,
670
671 pub create_date: DateTime<Utc>,
673
674 #[serde(skip_serializing_if = "Option::is_none")]
676 pub custody_type: Option<String>,
677
678 #[serde(skip_serializing_if = "Option::is_none")]
680 pub destination_address: Option<String>,
681
682 #[serde(skip_serializing_if = "Option::is_none")]
684 pub error_reason: Option<String>,
685
686 #[serde(skip_serializing_if = "Option::is_none")]
688 pub error_details: Option<String>,
689
690 #[serde(skip_serializing_if = "Option::is_none")]
692 pub estimated_fee: Option<EstimatedFee>,
693
694 #[serde(skip_serializing_if = "Option::is_none")]
696 pub first_confirm_date: Option<DateTime<Utc>>,
697
698 #[serde(skip_serializing_if = "Option::is_none")]
700 pub network_fee: Option<String>,
701
702 #[serde(skip_serializing_if = "Option::is_none")]
704 pub network_fee_in_usd: Option<String>,
705
706 #[serde(skip_serializing_if = "Option::is_none")]
708 pub nfts: Option<Vec<String>>,
709
710 #[serde(skip_serializing_if = "Option::is_none")]
712 pub operation: Option<String>,
713
714 #[serde(skip_serializing_if = "Option::is_none")]
716 pub ref_id: Option<String>,
717
718 #[serde(skip_serializing_if = "Option::is_none")]
720 pub source_address: Option<String>,
721
722 pub state: String,
724
725 #[serde(skip_serializing_if = "Option::is_none")]
727 pub token_id: Option<String>,
728
729 pub transaction_type: String,
731
732 #[serde(skip_serializing_if = "Option::is_none")]
734 pub tx_hash: Option<String>,
735
736 pub update_date: DateTime<Utc>,
738
739 #[serde(skip_serializing_if = "Option::is_none")]
741 pub user_id: Option<String>,
742
743 #[serde(skip_serializing_if = "Option::is_none")]
745 pub wallet_id: Option<String>,
746
747 #[serde(skip_serializing_if = "Option::is_none")]
749 pub transaction_screening_evaluation: Option<TransactionScreeningEvaluation>,
750}
751
752#[derive(Debug, Deserialize, Serialize)]
754#[serde(rename_all = "camelCase")]
755pub struct EstimatedFee {
756 #[serde(skip_serializing_if = "Option::is_none")]
758 pub gas_limit: Option<String>,
759
760 #[serde(skip_serializing_if = "Option::is_none")]
762 pub gas_price: Option<String>,
763
764 #[serde(skip_serializing_if = "Option::is_none")]
766 pub max_fee: Option<String>,
767
768 #[serde(skip_serializing_if = "Option::is_none")]
770 pub priority_fee: Option<String>,
771
772 #[serde(skip_serializing_if = "Option::is_none")]
774 pub base_fee: Option<String>,
775
776 #[serde(skip_serializing_if = "Option::is_none")]
778 pub network_fee: Option<String>,
779
780 #[serde(skip_serializing_if = "Option::is_none")]
782 pub network_fee_raw: Option<String>,
783
784 #[serde(skip_serializing_if = "Option::is_none")]
786 pub fee_level: Option<String>,
787}
788
789#[derive(Debug, Deserialize, Serialize)]
791#[serde(rename_all = "camelCase")]
792pub struct TransactionScreeningEvaluation {
793 #[serde(skip_serializing_if = "Option::is_none")]
795 pub rule_name: Option<String>,
796
797 #[serde(skip_serializing_if = "Option::is_none")]
799 pub actions: Option<Vec<String>>,
800
801 #[serde(skip_serializing_if = "Option::is_none")]
803 pub screening_date: Option<DateTime<Utc>>,
804
805 #[serde(skip_serializing_if = "Option::is_none")]
807 pub reasons: Option<Vec<RiskSignal>>,
808}
809
810#[derive(Debug, Deserialize, Serialize)]
812#[serde(rename_all = "camelCase")]
813pub struct RiskSignal {
814 pub source: String,
816
817 pub source_value: String,
819
820 pub risk_score: String,
822
823 pub risk_categories: Vec<String>,
825
826 pub r#type: String,
828}
829
830#[derive(Debug, Serialize)]
832#[serde(rename_all = "camelCase")]
833pub struct CreateTransferTransactionRequest {
834 pub wallet_id: String,
836
837 pub entity_secret_ciphertext: String,
839
840 pub destination_address: String,
842
843 pub idempotency_key: String,
845
846 pub amounts: Vec<String>,
848
849 #[serde(skip_serializing_if = "Option::is_none")]
852 pub fee_level: Option<FeeLevel>,
853
854 #[serde(skip_serializing_if = "Option::is_none")]
856 pub gas_limit: Option<String>,
857
858 #[serde(skip_serializing_if = "Option::is_none")]
861 pub gas_price: Option<String>,
862
863 #[serde(skip_serializing_if = "Option::is_none")]
866 pub max_fee: Option<String>,
867
868 #[serde(skip_serializing_if = "Option::is_none")]
871 pub priority_fee: Option<String>,
872
873 #[serde(skip_serializing_if = "Option::is_none")]
876 pub nft_token_ids: Option<Vec<String>>,
877
878 #[serde(skip_serializing_if = "Option::is_none")]
880 pub ref_id: Option<String>,
881
882 #[serde(skip_serializing_if = "Option::is_none")]
884 pub token_id: Option<String>,
885
886 #[serde(skip_serializing_if = "Option::is_none")]
888 pub token_address: Option<String>,
889
890 #[serde(skip_serializing_if = "Option::is_none")]
893 pub blockchain: Option<Blockchain>,
894}
895
896#[derive(Debug, Deserialize, Serialize)]
899#[serde(rename_all = "camelCase")]
900pub struct CreateTransferTransactionResponse {
901 pub id: String,
903
904 pub state: String,
906}
907
908#[derive(Debug, Serialize)]
910pub struct ValidateAddressBody {
911 pub address: String,
912}
913
914#[derive(Debug, Deserialize, Serialize)]
916#[serde(rename_all = "camelCase")]
917pub struct ValidateAddressResponse {
918 pub is_valid: bool,
919}
920
921#[derive(Debug, Serialize, Clone)]
923#[serde(untagged)]
924pub enum AbiParameter {
925 String(String),
926 Integer(i64),
927 Boolean(bool),
928 Array(Vec<AbiParameter>),
929}
930
931#[derive(Debug, Serialize)]
933#[serde(rename_all = "camelCase")]
934pub struct EstimateContractExecutionFeeBody {
935 pub contract_address: String,
937
938 #[serde(skip_serializing_if = "Option::is_none")]
941 pub abi_function_signature: Option<String>,
942
943 #[serde(skip_serializing_if = "Option::is_none")]
946 pub abi_parameters: Option<Vec<AbiParameter>>,
947
948 #[serde(skip_serializing_if = "Option::is_none")]
951 pub call_data: Option<String>,
952
953 #[serde(skip_serializing_if = "Option::is_none")]
955 pub amount: Option<String>,
956
957 #[serde(skip_serializing_if = "Option::is_none")]
960 pub blockchain: Option<String>,
961
962 #[serde(skip_serializing_if = "Option::is_none")]
965 pub source_address: Option<String>,
966
967 #[serde(skip_serializing_if = "Option::is_none")]
970 pub wallet_id: Option<String>,
971}
972
973#[derive(Debug, Deserialize, Serialize)]
975#[serde(rename_all = "camelCase")]
976pub struct EstimateContractExecutionFeeResponse {
977 pub high: EstimatedFee,
979
980 pub low: EstimatedFee,
982
983 pub medium: EstimatedFee,
985
986 #[serde(skip_serializing_if = "Option::is_none")]
988 pub call_gas_limit: Option<String>,
989
990 #[serde(skip_serializing_if = "Option::is_none")]
992 pub verification_gas_limit: Option<String>,
993
994 #[serde(skip_serializing_if = "Option::is_none")]
996 pub pre_verification_gas: Option<String>,
997}
998
999#[derive(Debug, Serialize)]
1001#[serde(rename_all = "camelCase")]
1002pub struct EstimateTransferFeeRequest {
1003 pub destination_address: String,
1005
1006 pub amounts: Vec<String>,
1009
1010 #[serde(skip_serializing_if = "Option::is_none")]
1013 pub nft_token_ids: Option<Vec<String>>,
1014
1015 #[serde(skip_serializing_if = "Option::is_none")]
1018 pub source_address: Option<String>,
1019
1020 #[serde(skip_serializing_if = "Option::is_none")]
1023 pub token_id: Option<String>,
1024
1025 #[serde(skip_serializing_if = "Option::is_none")]
1028 pub token_address: Option<String>,
1029
1030 #[serde(skip_serializing_if = "Option::is_none")]
1033 pub blockchain: Option<String>,
1034
1035 #[serde(skip_serializing_if = "Option::is_none")]
1038 pub wallet_id: Option<String>,
1039}
1040
1041pub type EstimateTransferFeeResponse = EstimateContractExecutionFeeResponse;
1044
1045#[derive(Debug, Serialize, Clone)]
1047#[serde(untagged)]
1048pub enum ContractAbiParameter {
1049 String(String),
1050 Integer(i64),
1051 Boolean(bool),
1052 Array(Vec<ContractAbiParameter>),
1053}
1054
1055#[derive(Debug, Serialize)]
1057#[serde(rename_all = "camelCase")]
1058pub struct QueryContractRequest {
1059 pub blockchain: String,
1061
1062 pub address: String,
1064
1065 #[serde(skip_serializing_if = "Option::is_none")]
1068 pub abi_function_signature: Option<String>,
1069
1070 #[serde(skip_serializing_if = "Option::is_none")]
1073 pub abi_parameters: Option<Vec<ContractAbiParameter>>,
1074
1075 #[serde(skip_serializing_if = "Option::is_none")]
1077 pub abi_json: Option<String>,
1078
1079 #[serde(skip_serializing_if = "Option::is_none")]
1082 pub call_data: Option<String>,
1083
1084 #[serde(skip_serializing_if = "Option::is_none")]
1086 pub from_address: Option<String>,
1087}
1088
1089#[derive(Debug, Deserialize, Serialize, Clone)]
1091#[serde(untagged)]
1092pub enum ContractOutputValue {
1093 String(String),
1094 Number(f64),
1095 Boolean(bool),
1096}
1097
1098#[derive(Debug, Deserialize, Serialize)]
1100#[serde(rename_all = "camelCase")]
1101pub struct QueryContractResponse {
1102 #[serde(skip_serializing_if = "Option::is_none")]
1105 pub output_values: Option<Vec<ContractOutputValue>>,
1106
1107 pub output_data: String,
1109}
1110
1111#[derive(Debug, Clone, Serialize)]
1113pub enum ScaCore {
1114 #[serde(rename = "circle_6900_singleowner_v3")]
1115 Circle6900SingleownerV3,
1116}
1117
1118impl ScaCore {
1119 pub fn as_str(&self) -> &'static str {
1120 match self {
1121 ScaCore::Circle6900SingleownerV3 => "circle_6900_singleowner_v3",
1122 }
1123 }
1124}
1125
1126#[derive(Debug, Serialize)]
1128#[serde(rename_all = "camelCase")]
1129pub struct CreateWalletUpgradeTransactionRequest {
1130 pub wallet_id: String,
1132
1133 pub entity_secret_ciphertext: String,
1135
1136 pub new_sca_core: String,
1138
1139 pub idempotency_key: String,
1141
1142 #[serde(skip_serializing_if = "Option::is_none")]
1145 pub fee_level: Option<FeeLevel>,
1146
1147 #[serde(skip_serializing_if = "Option::is_none")]
1149 pub gas_limit: Option<String>,
1150
1151 #[serde(skip_serializing_if = "Option::is_none")]
1154 pub gas_price: Option<String>,
1155
1156 #[serde(skip_serializing_if = "Option::is_none")]
1159 pub max_fee: Option<String>,
1160
1161 #[serde(skip_serializing_if = "Option::is_none")]
1164 pub priority_fee: Option<String>,
1165
1166 #[serde(skip_serializing_if = "Option::is_none")]
1168 pub ref_id: Option<String>,
1169}
1170
1171#[derive(Debug, Deserialize, Serialize)]
1173#[serde(rename_all = "camelCase")]
1174pub struct CreateWalletUpgradeTransactionResponse {
1175 pub id: String,
1177
1178 pub state: String,
1180}
1181
1182#[derive(Debug, Serialize)]
1184#[serde(rename_all = "camelCase")]
1185pub struct CreateContractExecutionTransactionRequest {
1186 pub wallet_id: String,
1188
1189 pub entity_secret_ciphertext: String,
1191
1192 pub contract_address: String,
1194
1195 pub idempotency_key: String,
1197
1198 #[serde(skip_serializing_if = "Option::is_none")]
1201 pub abi_function_signature: Option<String>,
1202
1203 #[serde(skip_serializing_if = "Option::is_none")]
1206 pub abi_parameters: Option<Vec<AbiParameter>>,
1207
1208 #[serde(skip_serializing_if = "Option::is_none")]
1211 pub call_data: Option<String>,
1212
1213 #[serde(skip_serializing_if = "Option::is_none")]
1215 pub amount: Option<String>,
1216
1217 #[serde(skip_serializing_if = "Option::is_none")]
1220 pub fee_level: Option<FeeLevel>,
1221
1222 #[serde(skip_serializing_if = "Option::is_none")]
1224 pub gas_limit: Option<String>,
1225
1226 #[serde(skip_serializing_if = "Option::is_none")]
1229 pub gas_price: Option<String>,
1230
1231 #[serde(skip_serializing_if = "Option::is_none")]
1234 pub max_fee: Option<String>,
1235
1236 #[serde(skip_serializing_if = "Option::is_none")]
1239 pub priority_fee: Option<String>,
1240
1241 #[serde(skip_serializing_if = "Option::is_none")]
1243 pub ref_id: Option<String>,
1244}
1245
1246#[derive(Debug, Deserialize, Serialize)]
1248#[serde(rename_all = "camelCase")]
1249pub struct CreateContractExecutionTransactionResponse {
1250 pub id: String,
1252
1253 pub state: String,
1255}
1256
1257#[derive(Debug, Serialize)]
1259#[serde(rename_all = "camelCase")]
1260pub struct CancelTransactionRequest {
1261 pub entity_secret_ciphertext: String,
1263
1264 pub idempotency_key: String,
1266}
1267
1268#[derive(Debug, Deserialize, Serialize)]
1270#[serde(rename_all = "camelCase")]
1271pub struct CancelTransactionResponse {
1272 pub id: String,
1274
1275 pub state: String,
1277}
1278
1279#[derive(Debug, Serialize)]
1281#[serde(rename_all = "camelCase")]
1282pub struct AccelerateTransactionRequest {
1283 pub entity_secret_ciphertext: String,
1285
1286 pub idempotency_key: String,
1288}
1289
1290#[derive(Debug, Deserialize, Serialize)]
1292#[serde(rename_all = "camelCase")]
1293pub struct AccelerateTransactionResponse {
1294 pub id: String,
1296}
1297
1298#[derive(Debug, Serialize, Clone)]
1300#[serde(rename_all = "camelCase")]
1301pub struct RequestTestnetTokensRequest {
1302 pub blockchain: Blockchain,
1304
1305 pub address: String,
1307
1308 #[serde(skip_serializing_if = "Option::is_none")]
1310 pub native: Option<bool>,
1311
1312 #[serde(skip_serializing_if = "Option::is_none")]
1314 pub usdc: Option<bool>,
1315
1316 #[serde(skip_serializing_if = "Option::is_none")]
1318 pub eurc: Option<bool>,
1319}