1use crate::{helper::PaginationParams, types::Blockchain};
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize)]
7#[serde(rename_all = "camelCase")]
8pub struct EstimateTemplateDeploymentFeeBody {
9 pub blockchain: Blockchain,
11
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub constructor_params: Option<Vec<serde_json::Value>>,
15
16 pub wallet_id: String,
18}
19
20#[derive(Debug, Serialize)]
22#[serde(rename_all = "camelCase")]
23pub struct DeployContractFromTemplateRequest {
24 pub entity_secret_ciphertext: String,
26
27 pub name: String,
29
30 pub wallet_id: String,
32
33 pub blockchain: String,
35
36 pub idempotency_key: String,
38
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub description: Option<String>,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub template_parameters: Option<serde_json::Value>,
46
47 #[serde(skip_serializing_if = "Option::is_none")]
49 pub fee_level: Option<String>,
50
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub gas_limit: Option<String>,
54
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub gas_price: Option<String>,
58
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub max_fee: Option<String>,
62
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub priority_fee: Option<String>,
66
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub ref_id: Option<String>,
70}
71
72#[derive(Debug, Serialize)]
74#[serde(rename_all = "camelCase")]
75pub struct ImportContractRequest {
76 pub blockchain: Blockchain,
78
79 pub address: String,
81
82 pub name: String,
84
85 pub idempotency_key: String,
87
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub description: Option<String>,
91}
92
93#[derive(Debug, Serialize)]
95#[serde(rename_all = "camelCase")]
96pub struct UpdateContractRequest {
97 #[serde(skip_serializing_if = "Option::is_none")]
99 pub name: Option<String>,
100
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub ref_id: Option<String>,
104}
105
106#[derive(Debug, Deserialize)]
108#[serde(rename_all = "camelCase")]
109pub struct FeeLevelEstimate {
110 pub gas_limit: String,
112
113 #[serde(skip_serializing_if = "Option::is_none")]
115 pub base_fee: Option<String>,
116
117 #[serde(skip_serializing_if = "Option::is_none")]
119 pub priority_fee: Option<String>,
120
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub max_fee: Option<String>,
124
125 #[serde(skip_serializing_if = "Option::is_none")]
127 pub gas_price: Option<String>,
128
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub network_fee: Option<String>,
132
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub network_fee_raw: Option<String>,
136}
137
138#[derive(Debug, Deserialize)]
140#[serde(rename_all = "camelCase")]
141pub struct FeeEstimation {
142 pub low: FeeLevelEstimate,
144
145 pub medium: FeeLevelEstimate,
147
148 pub high: FeeLevelEstimate,
150}
151
152#[derive(Debug, Deserialize, Serialize)]
154#[serde(rename_all = "camelCase")]
155pub struct Contract {
156 #[serde(skip_serializing_if = "Option::is_none")]
158 pub id: Option<String>,
159
160 #[serde(skip_serializing_if = "Option::is_none")]
162 pub address: Option<String>,
163
164 #[serde(skip_serializing_if = "Option::is_none")]
166 pub contract_address: Option<String>,
167
168 #[serde(skip_serializing_if = "Option::is_none")]
170 pub blockchain: Option<String>,
171
172 #[serde(skip_serializing_if = "Option::is_none")]
174 pub create_date: Option<DateTime<Utc>>,
175
176 #[serde(skip_serializing_if = "Option::is_none")]
178 pub update_date: Option<DateTime<Utc>>,
179
180 #[serde(skip_serializing_if = "Option::is_none")]
182 pub name: Option<String>,
183
184 #[serde(skip_serializing_if = "Option::is_none")]
186 pub ref_id: Option<String>,
187
188 #[serde(skip_serializing_if = "Option::is_none")]
190 pub state: Option<String>,
191
192 #[serde(skip_serializing_if = "Option::is_none")]
194 pub status: Option<String>,
195
196 #[serde(skip_serializing_if = "Option::is_none")]
198 pub template_id: Option<String>,
199
200 #[serde(skip_serializing_if = "Option::is_none")]
202 pub deployer_wallet_id: Option<String>,
203
204 #[serde(skip_serializing_if = "Option::is_none")]
206 pub deployment_transaction_id: Option<String>,
207
208 #[serde(skip_serializing_if = "Option::is_none")]
210 pub deployment_tx_hash: Option<String>,
211
212 #[serde(skip_serializing_if = "Option::is_none")]
214 pub contract_input_type: Option<String>,
215
216 #[serde(skip_serializing_if = "Option::is_none")]
218 pub archived: Option<bool>,
219
220 #[serde(skip_serializing_if = "Option::is_none")]
222 pub abi: Option<serde_json::Value>,
223
224 #[serde(skip_serializing_if = "Option::is_none")]
226 pub abi_json: Option<String>,
227
228 #[serde(skip_serializing_if = "Option::is_none")]
230 pub bytecode: Option<String>,
231
232 #[serde(skip_serializing_if = "Option::is_none")]
234 pub functions: Option<serde_json::Value>,
235
236 #[serde(skip_serializing_if = "Option::is_none")]
238 pub events: Option<serde_json::Value>,
239
240 #[serde(skip_serializing_if = "Option::is_none")]
242 pub verification_status: Option<String>,
243
244 #[serde(skip_serializing_if = "Option::is_none")]
246 pub source_code: Option<serde_json::Value>,
247
248 #[serde(skip_serializing_if = "Option::is_none")]
250 pub implementation_contract: Option<Box<Contract>>,
251}
252
253#[derive(Debug, Serialize, Deserialize)]
255#[serde(rename_all = "camelCase")]
256pub struct TemplateContractDeploymentResponse {
257 pub contract_ids: Vec<String>,
259
260 pub transaction_id: String,
262}
263
264#[derive(Debug, Serialize, Deserialize)]
266#[serde(rename_all = "camelCase")]
267pub struct ContractDeploymentResponse {
268 pub contract_id: String,
270
271 pub transaction_id: String,
273}
274
275#[derive(Debug, Serialize, Deserialize)]
277#[serde(rename_all = "camelCase")]
278pub struct QueryContractResponse {
279 #[serde(default)]
282 pub output_values: Option<Vec<serde_json::Value>>,
283
284 pub output_data: String,
286}
287
288#[derive(Debug, Serialize)]
290#[serde(rename_all = "camelCase")]
291pub struct DeployContractRequest {
292 pub entity_secret_ciphertext: String,
294
295 pub bytecode: String,
297
298 pub abi_json: String,
300
301 pub wallet_id: String,
303
304 pub name: String,
306
307 pub blockchain: Blockchain,
309
310 pub idempotency_key: String,
312
313 #[serde(skip_serializing_if = "Option::is_none")]
315 pub description: Option<String>,
316
317 #[serde(skip_serializing_if = "Option::is_none")]
319 pub constructor_parameters: Option<Vec<serde_json::Value>>,
320
321 #[serde(skip_serializing_if = "Option::is_none")]
323 pub fee_level: Option<String>,
324
325 #[serde(skip_serializing_if = "Option::is_none")]
327 pub gas_limit: Option<String>,
328
329 #[serde(skip_serializing_if = "Option::is_none")]
331 pub gas_price: Option<String>,
332
333 #[serde(skip_serializing_if = "Option::is_none")]
335 pub max_fee: Option<String>,
336
337 #[serde(skip_serializing_if = "Option::is_none")]
339 pub priority_fee: Option<String>,
340
341 #[serde(skip_serializing_if = "Option::is_none")]
343 pub ref_id: Option<String>,
344}
345
346#[derive(Debug, Deserialize, Serialize)]
348#[serde(rename_all = "camelCase")]
349pub struct ContractResponse {
350 pub contract: Contract,
352}
353
354#[derive(Debug, Deserialize, Serialize)]
356pub struct ContractsResponse {
357 pub contracts: Vec<Contract>,
358}
359
360#[derive(Debug, Serialize, Default)]
362#[serde(rename_all = "camelCase")]
363pub struct ListContractsParams {
364 #[serde(skip_serializing_if = "Option::is_none")]
366 pub address: Option<String>,
367
368 #[serde(skip_serializing_if = "Option::is_none")]
370 pub blockchain: Option<Blockchain>,
371
372 #[serde(rename = "templateId", skip_serializing_if = "Option::is_none")]
374 pub template_id: Option<String>,
375
376 #[serde(rename = "refId", skip_serializing_if = "Option::is_none")]
378 pub ref_id: Option<String>,
379
380 #[serde(skip_serializing_if = "Option::is_none")]
382 pub from: Option<DateTime<Utc>>,
383
384 #[serde(skip_serializing_if = "Option::is_none")]
386 pub to: Option<DateTime<Utc>>,
387
388 #[serde(flatten)]
390 pub pagination: PaginationParams,
391}
392
393#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
395#[serde(rename_all = "camelCase")]
396pub enum NotificationType {
397 #[serde(rename = "*")]
399 All,
400
401 #[serde(rename = "transactions.*")]
403 TransactionsAll,
404
405 #[serde(rename = "transactions.inbound")]
407 TransactionsInbound,
408
409 #[serde(rename = "transactions.outbound")]
411 TransactionsOutbound,
412
413 #[serde(rename = "challenges.*")]
415 ChallengesAll,
416
417 #[serde(rename = "challenges.accelerateTransaction")]
419 ChallengesAccelerateTransaction,
420
421 #[serde(rename = "challenges.cancelTransaction")]
423 ChallengesCancelTransaction,
424
425 #[serde(rename = "challenges.changePin")]
427 ChallengesChangePin,
428
429 #[serde(rename = "challenges.contractExecution")]
431 ChallengesContractExecution,
432
433 #[serde(rename = "challenges.createTransaction")]
435 ChallengesCreateTransaction,
436
437 #[serde(rename = "challenges.createWallet")]
439 ChallengesCreateWallet,
440
441 #[serde(rename = "challenges.initialize")]
443 ChallengesInitialize,
444
445 #[serde(rename = "challenges.restorePin")]
447 ChallengesRestorePin,
448
449 #[serde(rename = "challenges.setPin")]
451 ChallengesSetPin,
452
453 #[serde(rename = "challenges.setSecurityQuestions")]
455 ChallengesSetSecurityQuestions,
456
457 #[serde(rename = "contracts.*")]
459 ContractsAll,
460
461 #[serde(rename = "contracts.eventLog")]
463 ContractsEventLog,
464
465 #[serde(rename = "modularWallet.*")]
467 ModularWalletAll,
468
469 #[serde(rename = "modularWallet.userOperation")]
471 ModularWalletUserOperation,
472
473 #[serde(rename = "modularWallet.inboundTransfer")]
475 ModularWalletInboundTransfer,
476
477 #[serde(rename = "modularWallet.outboundTransfer")]
479 ModularWalletOutboundTransfer,
480
481 #[serde(rename = "travelRule.*")]
483 TravelRuleAll,
484
485 #[serde(rename = "travelRule.statusUpdate")]
487 TravelRuleStatusUpdate,
488
489 #[serde(rename = "travelRule.deny")]
491 TravelRuleDeny,
492
493 #[serde(rename = "travelRule.approve")]
495 TravelRuleApprove,
496
497 #[serde(rename = "rampSession.*")]
499 RampSessionAll,
500
501 #[serde(rename = "rampSession.completed")]
503 RampSessionCompleted,
504
505 #[serde(rename = "rampSession.depositReceived")]
507 RampSessionDepositReceived,
508
509 #[serde(rename = "rampSession.expired")]
511 RampSessionExpired,
512
513 #[serde(rename = "rampSession.failed")]
515 RampSessionFailed,
516
517 #[serde(rename = "rampSession.kycApproved")]
519 RampSessionKycApproved,
520
521 #[serde(rename = "rampSession.kycRejected")]
523 RampSessionKycRejected,
524
525 #[serde(rename = "rampSession.kycSubmitted")]
527 RampSessionKycSubmitted,
528}
529
530impl NotificationType {
531 pub fn as_str(&self) -> &'static str {
533 match self {
534 Self::All => "*",
535 Self::TransactionsAll => "transactions.*",
536 Self::TransactionsInbound => "transactions.inbound",
537 Self::TransactionsOutbound => "transactions.outbound",
538 Self::ChallengesAll => "challenges.*",
539 Self::ChallengesAccelerateTransaction => "challenges.accelerateTransaction",
540 Self::ChallengesCancelTransaction => "challenges.cancelTransaction",
541 Self::ChallengesChangePin => "challenges.changePin",
542 Self::ChallengesContractExecution => "challenges.contractExecution",
543 Self::ChallengesCreateTransaction => "challenges.createTransaction",
544 Self::ChallengesCreateWallet => "challenges.createWallet",
545 Self::ChallengesInitialize => "challenges.initialize",
546 Self::ChallengesRestorePin => "challenges.restorePin",
547 Self::ChallengesSetPin => "challenges.setPin",
548 Self::ChallengesSetSecurityQuestions => "challenges.setSecurityQuestions",
549 Self::ContractsAll => "contracts.*",
550 Self::ContractsEventLog => "contracts.eventLog",
551 Self::ModularWalletAll => "modularWallet.*",
552 Self::ModularWalletUserOperation => "modularWallet.userOperation",
553 Self::ModularWalletInboundTransfer => "modularWallet.inboundTransfer",
554 Self::ModularWalletOutboundTransfer => "modularWallet.outboundTransfer",
555 Self::TravelRuleAll => "travelRule.*",
556 Self::TravelRuleStatusUpdate => "travelRule.statusUpdate",
557 Self::TravelRuleDeny => "travelRule.deny",
558 Self::TravelRuleApprove => "travelRule.approve",
559 Self::RampSessionAll => "rampSession.*",
560 Self::RampSessionCompleted => "rampSession.completed",
561 Self::RampSessionDepositReceived => "rampSession.depositReceived",
562 Self::RampSessionExpired => "rampSession.expired",
563 Self::RampSessionFailed => "rampSession.failed",
564 Self::RampSessionKycApproved => "rampSession.kycApproved",
565 Self::RampSessionKycRejected => "rampSession.kycRejected",
566 Self::RampSessionKycSubmitted => "rampSession.kycSubmitted",
567 }
568 }
569}
570
571#[derive(Debug, Deserialize, Serialize)]
573#[serde(rename_all = "camelCase")]
574pub struct NotificationSubscription {
575 pub id: String,
577
578 pub name: String,
580
581 pub endpoint: String,
583
584 pub enabled: bool,
586
587 pub create_date: DateTime<Utc>,
589
590 pub update_date: DateTime<Utc>,
592
593 pub notification_types: Vec<NotificationType>,
595
596 pub restricted: bool,
598}
599
600#[derive(Debug, Serialize)]
602#[serde(rename_all = "camelCase")]
603pub struct CreateNotificationSubscriptionBody {
604 pub endpoint: String,
606
607 #[serde(skip_serializing_if = "Option::is_none")]
609 pub notification_types: Option<Vec<NotificationType>>,
610}
611
612pub type CreateNotificationSubscriptionResponse = NotificationSubscription;
615
616#[derive(Debug, Serialize)]
618#[serde(rename_all = "camelCase")]
619pub struct UpdateNotificationSubscriptionBody {
620 pub enabled: bool,
622
623 pub name: String,
625}
626
627pub type UpdateNotificationSubscriptionResponse = NotificationSubscription;
630
631#[derive(Debug, Deserialize, Serialize)]
633pub struct PingResponse {
634 pub message: String,
636}
637
638#[derive(Debug, Deserialize, Serialize)]
640#[serde(rename_all = "camelCase")]
641pub struct EventMonitor {
642 pub id: String,
644
645 pub blockchain: Blockchain,
647
648 pub contract_address: String,
650
651 pub event_signature: String,
653
654 pub event_signature_hash: String,
656
657 pub is_enabled: bool,
659
660 #[serde(skip_serializing_if = "Option::is_none")]
662 pub create_date: Option<DateTime<Utc>>,
663
664 #[serde(skip_serializing_if = "Option::is_none")]
666 pub update_date: Option<DateTime<Utc>>,
667}
668
669#[derive(Debug, Serialize)]
671#[serde(rename_all = "camelCase")]
672pub struct CreateEventMonitorRequest {
673 pub idempotency_key: String,
675
676 pub event_signature: String,
678
679 pub contract_address: String,
681
682 pub blockchain: Blockchain,
684}
685
686#[derive(Debug, Deserialize, Serialize)]
688#[serde(rename_all = "camelCase")]
689pub struct EventMonitorResponse {
690 pub event_monitor: EventMonitor,
692}
693
694#[derive(Debug, Serialize)]
696#[serde(rename_all = "camelCase")]
697pub struct UpdateEventMonitorRequest {
698 pub is_enabled: bool,
700}
701
702#[derive(Debug, Deserialize, Serialize)]
704#[serde(rename_all = "camelCase")]
705pub struct EventMonitorsResponse {
706 pub event_monitors: Vec<EventMonitor>,
708}
709
710#[derive(Debug, Serialize, Default)]
712#[serde(rename_all = "camelCase")]
713pub struct ListEventMonitorsParams {
714 #[serde(skip_serializing_if = "Option::is_none")]
716 pub contract_address: Option<String>,
717
718 #[serde(skip_serializing_if = "Option::is_none")]
720 pub blockchain: Option<Blockchain>,
721
722 #[serde(skip_serializing_if = "Option::is_none")]
724 pub event_signature: Option<String>,
725
726 #[serde(skip_serializing_if = "Option::is_none")]
728 pub from: Option<DateTime<Utc>>,
729
730 #[serde(skip_serializing_if = "Option::is_none")]
732 pub to: Option<DateTime<Utc>>,
733
734 #[serde(flatten)]
736 pub pagination: PaginationParams,
737}
738
739#[derive(Debug, Deserialize, Serialize)]
741#[serde(rename_all = "camelCase")]
742pub struct EventLog {
743 pub id: String,
745
746 pub block_hash: String,
748
749 pub block_height: i64,
751
752 pub blockchain: Blockchain,
754
755 pub contract_address: String,
757
758 pub data: String,
760
761 pub event_signature: String,
763
764 pub event_signature_hash: String,
766
767 pub log_index: String,
769
770 pub topics: Vec<String>,
772
773 pub tx_hash: String,
775
776 pub user_op_hash: String,
778
779 pub first_confirm_date: String,
781}
782
783#[derive(Debug, Deserialize, Serialize)]
785#[serde(rename_all = "camelCase")]
786pub struct EventLogsResponse {
787 pub event_logs: Vec<EventLog>,
789}
790
791#[derive(Debug, Serialize, Default, Clone)]
793#[serde(rename_all = "camelCase")]
794pub struct ListEventLogsParams {
795 #[serde(skip_serializing_if = "Option::is_none")]
797 pub contract_address: Option<String>,
798
799 #[serde(skip_serializing_if = "Option::is_none")]
801 pub blockchain: Option<Blockchain>,
802
803 #[serde(skip_serializing_if = "Option::is_none")]
805 pub from: Option<DateTime<Utc>>,
806
807 #[serde(skip_serializing_if = "Option::is_none")]
809 pub to: Option<DateTime<Utc>>,
810
811 #[serde(flatten)]
813 pub pagination: PaginationParams,
814}