Skip to main content

useragent_coinpayment/
types.rs

1use serde::{Deserialize, Serialize};
2
3pub type PurseId = u32;
4pub const MAIN_PURSE: PurseId = u32::MAX;
5
6pub type Balance = u32;
7pub type Timestamp = u64;
8pub type ProductId = String;
9pub type Receivable = [u8; 32];
10pub type MerkleRoot = [u8; 32];
11pub type TransactionHash = [u8; 32];
12pub type CoinagePubKey = [u8; 32];
13
14#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
15#[serde(rename_all = "camelCase")]
16pub enum CoinPaymentProfile {
17    Simulated,
18    Staged,
19    Production,
20}
21
22#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
23pub struct CoinPaymentCapability {
24    pub version: u8,
25    pub profile: CoinPaymentProfile,
26    pub supports_statement_store_channel: bool,
27    pub supports_refund: bool,
28    pub supports_finality: bool,
29}
30
31#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
32pub struct PurseInfo {
33    pub name: String,
34    pub created: Timestamp,
35    pub creator: ProductId,
36    pub balance: Balance,
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct Cheque {
41    pub version: u8,
42    pub id: Receivable,
43    pub amount: Balance,
44    pub encrypted_secrets: Vec<u8>,
45}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
48pub struct ClearingReference {
49    pub root: MerkleRoot,
50    pub leaves: Vec<(CoinagePubKey, TransactionHash)>,
51}
52
53#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
54#[serde(tag = "kind", rename_all = "camelCase")]
55pub enum Status {
56    Clearing {
57        clearing: Balance,
58        cleared: Balance,
59    },
60    Failed {
61        error: String,
62        cleared: Balance,
63        reference: ClearingReference,
64    },
65    Done {
66        cleared: Balance,
67        reference: ClearingReference,
68    },
69}
70
71#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
72#[serde(tag = "kind", rename_all = "camelCase")]
73pub enum TransmissionChannel {
74    Standard { sss_topic: [u8; 32] },
75}
76
77#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
78pub struct Invoice {
79    pub version: u8,
80    pub handoff: TransmissionChannel,
81    pub receiver: Receivable,
82    pub amount: Balance,
83}