useragent-coinpayment 0.1.0

RFC17 CoinPayment host runtime for user-agent owned purses, receivables, cheques, invoices, and clearing state
Documentation
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,
}