| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 
							- //! CDK Database
 
- use std::collections::HashMap;
 
- use std::fmt::Debug;
 
- use async_trait::async_trait;
 
- use cashu::KeySet;
 
- use super::Error;
 
- use crate::common::ProofInfo;
 
- use crate::mint_url::MintUrl;
 
- use crate::nuts::{
 
-     CurrencyUnit, Id, KeySetInfo, Keys, MintInfo, PublicKey, SpendingConditions, State,
 
- };
 
- use crate::wallet::{
 
-     self, MintQuote as WalletMintQuote, Transaction, TransactionDirection, TransactionId,
 
- };
 
- /// Wallet Database trait
 
- #[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
 
- #[cfg_attr(not(target_arch = "wasm32"), async_trait)]
 
- pub trait Database: Debug {
 
-     /// Wallet Database Error
 
-     type Err: Into<Error> + From<Error>;
 
-     /// Add Mint to storage
 
-     async fn add_mint(
 
-         &self,
 
-         mint_url: MintUrl,
 
-         mint_info: Option<MintInfo>,
 
-     ) -> Result<(), Self::Err>;
 
-     /// Remove Mint from storage
 
-     async fn remove_mint(&self, mint_url: MintUrl) -> Result<(), Self::Err>;
 
-     /// Get mint from storage
 
-     async fn get_mint(&self, mint_url: MintUrl) -> Result<Option<MintInfo>, Self::Err>;
 
-     /// Get all mints from storage
 
-     async fn get_mints(&self) -> Result<HashMap<MintUrl, Option<MintInfo>>, Self::Err>;
 
-     /// Update mint url
 
-     async fn update_mint_url(
 
-         &self,
 
-         old_mint_url: MintUrl,
 
-         new_mint_url: MintUrl,
 
-     ) -> Result<(), Self::Err>;
 
-     /// Add mint keyset to storage
 
-     async fn add_mint_keysets(
 
-         &self,
 
-         mint_url: MintUrl,
 
-         keysets: Vec<KeySetInfo>,
 
-     ) -> Result<(), Self::Err>;
 
-     /// Get mint keysets for mint url
 
-     async fn get_mint_keysets(
 
-         &self,
 
-         mint_url: MintUrl,
 
-     ) -> Result<Option<Vec<KeySetInfo>>, Self::Err>;
 
-     /// Get mint keyset by id
 
-     async fn get_keyset_by_id(&self, keyset_id: &Id) -> Result<Option<KeySetInfo>, Self::Err>;
 
-     /// Add mint quote to storage
 
-     async fn add_mint_quote(&self, quote: WalletMintQuote) -> Result<(), Self::Err>;
 
-     /// Get mint quote from storage
 
-     async fn get_mint_quote(&self, quote_id: &str) -> Result<Option<WalletMintQuote>, Self::Err>;
 
-     /// Get mint quotes from storage
 
-     async fn get_mint_quotes(&self) -> Result<Vec<WalletMintQuote>, Self::Err>;
 
-     /// Remove mint quote from storage
 
-     async fn remove_mint_quote(&self, quote_id: &str) -> Result<(), Self::Err>;
 
-     /// Add melt quote to storage
 
-     async fn add_melt_quote(&self, quote: wallet::MeltQuote) -> Result<(), Self::Err>;
 
-     /// Get melt quote from storage
 
-     async fn get_melt_quote(&self, quote_id: &str) -> Result<Option<wallet::MeltQuote>, Self::Err>;
 
-     /// Get melt quotes from storage
 
-     async fn get_melt_quotes(&self) -> Result<Vec<wallet::MeltQuote>, Self::Err>;
 
-     /// Remove melt quote from storage
 
-     async fn remove_melt_quote(&self, quote_id: &str) -> Result<(), Self::Err>;
 
-     /// Add [`Keys`] to storage
 
-     async fn add_keys(&self, keyset: KeySet) -> Result<(), Self::Err>;
 
-     /// Get [`Keys`] from storage
 
-     async fn get_keys(&self, id: &Id) -> Result<Option<Keys>, Self::Err>;
 
-     /// Remove [`Keys`] from storage
 
-     async fn remove_keys(&self, id: &Id) -> Result<(), Self::Err>;
 
-     /// Update the proofs in storage by adding new proofs or removing proofs by
 
-     /// their Y value.
 
-     async fn update_proofs(
 
-         &self,
 
-         added: Vec<ProofInfo>,
 
-         removed_ys: Vec<PublicKey>,
 
-     ) -> Result<(), Self::Err>;
 
-     /// Get proofs from storage
 
-     async fn get_proofs(
 
-         &self,
 
-         mint_url: Option<MintUrl>,
 
-         unit: Option<CurrencyUnit>,
 
-         state: Option<Vec<State>>,
 
-         spending_conditions: Option<Vec<SpendingConditions>>,
 
-     ) -> Result<Vec<ProofInfo>, Self::Err>;
 
-     /// Update proofs state in storage
 
-     async fn update_proofs_state(&self, ys: Vec<PublicKey>, state: State) -> Result<(), Self::Err>;
 
-     /// Atomically increment Keyset counter and return new value
 
-     async fn increment_keyset_counter(&self, keyset_id: &Id, count: u32) -> Result<u32, Self::Err>;
 
-     /// Add transaction to storage
 
-     async fn add_transaction(&self, transaction: Transaction) -> Result<(), Self::Err>;
 
-     /// Get transaction from storage
 
-     async fn get_transaction(
 
-         &self,
 
-         transaction_id: TransactionId,
 
-     ) -> Result<Option<Transaction>, Self::Err>;
 
-     /// List transactions from storage
 
-     async fn list_transactions(
 
-         &self,
 
-         mint_url: Option<MintUrl>,
 
-         direction: Option<TransactionDirection>,
 
-         unit: Option<CurrencyUnit>,
 
-     ) -> Result<Vec<Transaction>, Self::Err>;
 
-     /// Remove transaction from storage
 
-     async fn remove_transaction(&self, transaction_id: TransactionId) -> Result<(), Self::Err>;
 
- }
 
 
  |