use serde::{Deserialize, Serialize};
pub type PurseId = u32;
pub const MAIN_PURSE: PurseId = u32::MAX;
pub type Balance = u32;
pub type Timestamp = u64;
pub type ProductId = String;
pub type Receivable = [u8; 32];
pub type MerkleRoot = [u8; 32];
pub type TransactionHash = [u8; 32];
pub type CoinagePubKey = [u8; 32];
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum CoinPaymentProfile {
Simulated,
Staged,
Production,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CoinPaymentCapability {
pub version: u8,
pub profile: CoinPaymentProfile,
pub supports_statement_store_channel: bool,
pub supports_refund: bool,
pub supports_finality: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PurseInfo {
pub name: String,
pub created: Timestamp,
pub creator: ProductId,
pub balance: Balance,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Cheque {
pub version: u8,
pub id: Receivable,
pub amount: Balance,
pub encrypted_secrets: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ClearingReference {
pub root: MerkleRoot,
pub leaves: Vec<(CoinagePubKey, TransactionHash)>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "camelCase")]
pub enum Status {
Clearing {
clearing: Balance,
cleared: Balance,
},
Failed {
error: String,
cleared: Balance,
reference: ClearingReference,
},
Done {
cleared: Balance,
reference: ClearingReference,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "camelCase")]
pub enum TransmissionChannel {
Standard { sss_topic: [u8; 32] },
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Invoice {
pub version: u8,
pub handoff: TransmissionChannel,
pub receiver: Receivable,
pub amount: Balance,
}