diff options
author | Florian Dold <florian@dold.me> | 2022-10-15 11:52:07 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2022-10-15 11:53:16 +0200 |
commit | e075134ffc94fda3582b179122bda594d91a962b (patch) | |
tree | 547920b2aa07bdb9f2c87a0c1f8c35dbcd64c8f7 /packages/taler-util | |
parent | 4d70391f3db386766a516bdecc3d1d265c5d49a1 (diff) |
wallet-core: simplify coin record
we only track the allocation now, not the remaining amount
Diffstat (limited to 'packages/taler-util')
-rw-r--r-- | packages/taler-util/src/backup-types.ts | 11 | ||||
-rw-r--r-- | packages/taler-util/src/taler-types.ts | 54 | ||||
-rw-r--r-- | packages/taler-util/src/wallet-types.ts | 81 |
3 files changed, 86 insertions, 60 deletions
diff --git a/packages/taler-util/src/backup-types.ts b/packages/taler-util/src/backup-types.ts index 6c7b203b5..5d53f178e 100644 --- a/packages/taler-util/src/backup-types.ts +++ b/packages/taler-util/src/backup-types.ts @@ -475,6 +475,7 @@ export interface BackupRecoupGroup { timestamp_finish?: TalerProtocolTimestamp; finish_clock?: TalerProtocolTimestamp; + // FIXME: Use some enum here! finish_is_failure?: boolean; /** @@ -483,7 +484,6 @@ export interface BackupRecoupGroup { coins: { coin_pub: string; recoup_finished: boolean; - old_amount: BackupAmountString; }[]; } @@ -582,9 +582,14 @@ export interface BackupCoin { denom_sig: UnblindedSignature; /** - * Amount that's left on the coin. + * Information about where and how the coin was spent. */ - current_amount: BackupAmountString; + spend_allocation: + | { + id: string; + amount: BackupAmountString; + } + | undefined; /** * Blinding key used when withdrawing the coin. diff --git a/packages/taler-util/src/taler-types.ts b/packages/taler-util/src/taler-types.ts index de88fef69..71ceb7939 100644 --- a/packages/taler-util/src/taler-types.ts +++ b/packages/taler-util/src/taler-types.ts @@ -968,60 +968,6 @@ export class WithdrawBatchResponse { ev_sigs: WithdrawResponse[]; } -/** - * Easy to process format for the public data of coins - * managed by the wallet. - */ -export interface CoinDumpJson { - coins: Array<{ - /** - * The coin's denomination's public key. - */ - denom_pub: DenominationPubKey; - /** - * Hash of denom_pub. - */ - denom_pub_hash: string; - /** - * Value of the denomination (without any fees). - */ - denom_value: string; - /** - * Public key of the coin. - */ - coin_pub: string; - /** - * Base URL of the exchange for the coin. - */ - exchange_base_url: string; - /** - * Remaining value on the coin, to the knowledge of - * the wallet. - */ - remaining_value: string; - /** - * Public key of the parent coin. - * Only present if this coin was obtained via refreshing. - */ - refresh_parent_coin_pub: string | undefined; - /** - * Public key of the reserve for this coin. - * Only present if this coin was obtained via refreshing. - */ - withdrawal_reserve_pub: string | undefined; - /** - * Is the coin suspended? - * Suspended coins are not considered for payments. - */ - coin_suspended: boolean; - - /** - * Information about the age restriction - */ - ageCommitmentProof: AgeCommitmentProof | undefined; - }>; -} - export interface MerchantPayResponse { sig: string; } diff --git a/packages/taler-util/src/wallet-types.ts b/packages/taler-util/src/wallet-types.ts index d4de53972..54f4c54a2 100644 --- a/packages/taler-util/src/wallet-types.ts +++ b/packages/taler-util/src/wallet-types.ts @@ -63,7 +63,10 @@ import { ExchangeAuditor, UnblindedSignature, } from "./taler-types.js"; -import { OrderShortInfo, codecForOrderShortInfo } from "./transactions-types.js"; +import { + OrderShortInfo, + codecForOrderShortInfo, +} from "./transactions-types.js"; import { BackupRecovery } from "./backup-types.js"; import { PaytoUri } from "./payto.js"; import { TalerErrorCode } from "./taler-error-codes.js"; @@ -141,6 +144,77 @@ export function mkAmount( return { value, fraction, currency }; } +/** + * Status of a coin. + */ +export enum CoinStatus { + /** + * Withdrawn and never shown to anybody. + */ + Fresh = "fresh", + + /** + * Fresh, but currently marked as "suspended", thus won't be used + * for spending. Used for testing. + */ + FreshSuspended = "fresh-suspended", + + /** + * A coin that has been spent and refreshed. + */ + Dormant = "dormant", +} + +/** + * Easy to process format for the public data of coins + * managed by the wallet. + */ +export interface CoinDumpJson { + coins: Array<{ + /** + * The coin's denomination's public key. + */ + denom_pub: DenominationPubKey; + /** + * Hash of denom_pub. + */ + denom_pub_hash: string; + /** + * Value of the denomination (without any fees). + */ + denom_value: string; + /** + * Public key of the coin. + */ + coin_pub: string; + /** + * Base URL of the exchange for the coin. + */ + exchange_base_url: string; + /** + * Public key of the parent coin. + * Only present if this coin was obtained via refreshing. + */ + refresh_parent_coin_pub: string | undefined; + /** + * Public key of the reserve for this coin. + * Only present if this coin was obtained via refreshing. + */ + withdrawal_reserve_pub: string | undefined; + coin_status: CoinStatus; + spend_allocation: + | { + id: string; + amount: string; + } + | undefined; + /** + * Information about the age restriction + */ + ageCommitmentProof: AgeCommitmentProof | undefined; + }>; +} + export enum ConfirmPayResultType { Done = "done", Pending = "pending", @@ -568,10 +642,11 @@ export enum RefreshReason { } /** - * Wrapper for coin public keys. + * Request to refresh a single coin. */ -export interface CoinPublicKey { +export interface CoinRefreshRequest { readonly coinPub: string; + readonly amount: AmountJson; } /** |