rain_sdk/models/
contracts.rs

1//! Models for contract endpoints
2
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6/// Token information in a contract
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ContractToken {
9    pub address: String,
10    pub balance: String,
11    pub exchange_rate: i64,
12    pub advance_rate: i64,
13}
14
15/// ACH onramp information
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct AchOnramp {
18    pub beneficiary_name: String,
19    pub beneficiary_address: String,
20    pub beneficiary_bank_name: String,
21    pub beneficiary_bank_address: String,
22    pub account_number: String,
23    pub routing_number: String,
24}
25
26/// RTP onramp information
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct RtpOnramp {
29    pub beneficiary_name: String,
30    pub beneficiary_address: String,
31    pub beneficiary_bank_name: String,
32    pub beneficiary_bank_address: String,
33    pub account_number: String,
34    pub routing_number: String,
35}
36
37/// Wire onramp information
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct WireOnramp {
40    pub beneficiary_name: String,
41    pub beneficiary_address: String,
42    pub beneficiary_bank_name: String,
43    pub beneficiary_bank_address: String,
44    pub account_number: String,
45    pub routing_number: String,
46}
47
48/// Onramp information
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct Onramp {
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub ach: Option<AchOnramp>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub rtp: Option<RtpOnramp>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub wire: Option<WireOnramp>,
57}
58
59/// Smart contract information
60#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct Contract {
62    pub id: Uuid,
63    pub chain_id: i64,
64    pub program_address: String,
65    pub controller_address: String,
66    pub proxy_address: String,
67    pub deposit_address: String,
68    pub tokens: Vec<ContractToken>,
69    pub contract_version: i64,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub onramp: Option<Onramp>,
72}
73
74/// Request to create a contract for a company
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct CreateCompanyContractRequest {
77    pub chain_id: i64,
78    pub owner_address: String,
79}
80
81/// Request to create a contract for a user
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct CreateUserContractRequest {
84    pub chain_id: i64,
85}
86
87/// Request to update a contract
88#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct UpdateContractRequest {
90    pub onramp: bool,
91}
92
93/// Response for list of contracts (just an array of contracts)
94pub type ListContractsResponse = Vec<Contract>;