109 lines
2.3 KiB
Swift
109 lines
2.3 KiB
Swift
//
|
|
// Balance.swift
|
|
// secant
|
|
//
|
|
// Created by Francisco Gindre on 8/9/21.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/**
|
|
Funds Expressed in Zatoshis
|
|
*/
|
|
protocol Funds {
|
|
/**
|
|
Confirmed, spendable funds
|
|
*/
|
|
var confirmed: Int64 { get }
|
|
|
|
/**
|
|
Unconfirmed, not yet spendable funds.
|
|
*/
|
|
var unconfirmed: Int64 { get }
|
|
|
|
/**
|
|
Represents a null value of Funds with Zero confirmed and Zero unconfirmed funds.
|
|
*/
|
|
static var noFunds: Funds { get }
|
|
}
|
|
|
|
/**
|
|
Wallet Balance that condenses transparent, Sapling and Orchard funds
|
|
*/
|
|
protocol WalletBalance {
|
|
/**
|
|
Transparent funds. This is the sum of the UTXOs of the user found at a given time
|
|
*/
|
|
var transparent: Funds { get }
|
|
|
|
/**
|
|
Funds on the Sapling shielded pool for a given user.
|
|
*/
|
|
var sapling: Funds { get }
|
|
|
|
/**
|
|
Funds on the Orchard shielded pool for a given user.
|
|
*/
|
|
var orchard: Funds { get }
|
|
|
|
/**
|
|
The sum of all confirmed funds, transparent, sapling and orchard funds (calculated)
|
|
*/
|
|
var totalAvailableBalance: Int64 { get }
|
|
|
|
/**
|
|
The sum of all unconfirmed funds: transparent, sapling, and orchard funds (calculated
|
|
*/
|
|
var totalUnconfirmedBalance: Int64 { get }
|
|
|
|
/**
|
|
The sum of all funds confirmed and unconfirmed of all pools (transparent, sapling and orchard).
|
|
*/
|
|
var totalBalance: Int64 { get }
|
|
|
|
/**
|
|
Represents a the value of Zero funds.
|
|
*/
|
|
static var nullBalance: WalletBalance { get }
|
|
}
|
|
|
|
extension WalletBalance {
|
|
static var nullBalance: WalletBalance {
|
|
Balance(
|
|
transparent: ZcashFunds.noFunds,
|
|
sapling: ZcashFunds.noFunds,
|
|
orchard: ZcashFunds.noFunds
|
|
)
|
|
}
|
|
|
|
var totalAvailableBalance: Int64 {
|
|
transparent.confirmed + sapling.confirmed + orchard.confirmed
|
|
}
|
|
|
|
var totalUnconfirmedBalance: Int64 {
|
|
transparent.unconfirmed + sapling.unconfirmed + orchard.unconfirmed
|
|
}
|
|
|
|
var totalBalance: Int64 {
|
|
totalAvailableBalance + totalUnconfirmedBalance
|
|
}
|
|
}
|
|
|
|
/**
|
|
Concrete Wallet Balance.
|
|
*/
|
|
struct Balance: WalletBalance {
|
|
var transparent: Funds
|
|
var sapling: Funds
|
|
var orchard: Funds
|
|
}
|
|
|
|
struct ZcashFunds: Funds {
|
|
static var noFunds: Funds {
|
|
ZcashFunds(confirmed: 0, unconfirmed: 0)
|
|
}
|
|
|
|
var confirmed: Int64
|
|
var unconfirmed: Int64
|
|
}
|