mod.rs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. pub mod memory;
  2. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  3. pub mod redb_store;
  4. use std::collections::HashMap;
  5. use std::num::ParseIntError;
  6. use async_trait::async_trait;
  7. pub use memory::MemoryLocalStore;
  8. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  9. pub use redb_store::RedbLocalStore;
  10. use thiserror::Error;
  11. use crate::nuts::nut02::mint::KeySet;
  12. use crate::nuts::{BlindSignature, CurrencyUnit, Id, MintInfo, Proof, PublicKey};
  13. use crate::secret::Secret;
  14. use crate::types::{MeltQuote, MintQuote};
  15. #[derive(Debug, Error)]
  16. pub enum Error {
  17. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  18. #[error(transparent)]
  19. Redb(#[from] redb::Error),
  20. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  21. #[error(transparent)]
  22. Database(#[from] redb::DatabaseError),
  23. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  24. #[error(transparent)]
  25. Transaction(#[from] redb::TransactionError),
  26. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  27. #[error(transparent)]
  28. Commit(#[from] redb::CommitError),
  29. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  30. #[error(transparent)]
  31. Table(#[from] redb::TableError),
  32. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  33. #[error(transparent)]
  34. Storage(#[from] redb::StorageError),
  35. #[cfg(all(not(target_arch = "wasm32"), feature = "redb"))]
  36. #[error(transparent)]
  37. Serde(#[from] serde_json::Error),
  38. #[error(transparent)]
  39. ParseInt(#[from] ParseIntError),
  40. #[error("Unknown Mint Info")]
  41. UnknownMintInfo,
  42. #[error(transparent)]
  43. Cashu(#[from] crate::error::Error),
  44. #[error(transparent)]
  45. NUT00(#[from] crate::nuts::nut00::Error),
  46. #[error(transparent)]
  47. CashuNut02(#[from] crate::nuts::nut02::Error),
  48. #[error(transparent)]
  49. Secret(#[from] crate::secret::Error),
  50. }
  51. #[async_trait]
  52. pub trait LocalStore {
  53. async fn set_mint_info(&self, mint_info: &MintInfo) -> Result<(), Error>;
  54. async fn get_mint_info(&self) -> Result<MintInfo, Error>;
  55. async fn add_active_keyset(&self, unit: CurrencyUnit, id: Id) -> Result<(), Error>;
  56. async fn get_active_keyset_id(&self, unit: &CurrencyUnit) -> Result<Option<Id>, Error>;
  57. async fn get_active_keysets(&self) -> Result<HashMap<CurrencyUnit, Id>, Error>;
  58. async fn add_mint_quote(&self, quote: MintQuote) -> Result<(), Error>;
  59. async fn get_mint_quote(&self, quote_id: &str) -> Result<Option<MintQuote>, Error>;
  60. async fn get_mint_quotes(&self) -> Result<Vec<MintQuote>, Error>;
  61. async fn remove_mint_quote(&self, quote_id: &str) -> Result<(), Error>;
  62. async fn add_melt_quote(&self, quote: MeltQuote) -> Result<(), Error>;
  63. async fn get_melt_quote(&self, quote_id: &str) -> Result<Option<MeltQuote>, Error>;
  64. async fn get_melt_quotes(&self) -> Result<Vec<MeltQuote>, Error>;
  65. async fn remove_melt_quote(&self, quote_id: &str) -> Result<(), Error>;
  66. async fn add_keyset(&self, keyset: KeySet) -> Result<(), Error>;
  67. async fn get_keyset(&self, id: &Id) -> Result<Option<KeySet>, Error>;
  68. async fn get_keysets(&self) -> Result<Vec<KeySet>, Error>;
  69. async fn add_spent_proof(&self, proof: Proof) -> Result<(), Error>;
  70. async fn get_spent_proof_by_secret(&self, secret: &Secret) -> Result<Option<Proof>, Error>;
  71. async fn get_spent_proof_by_y(&self, y: &PublicKey) -> Result<Option<Proof>, Error>;
  72. async fn add_pending_proof(&self, proof: Proof) -> Result<(), Error>;
  73. async fn get_pending_proof_by_secret(&self, secret: &Secret) -> Result<Option<Proof>, Error>;
  74. async fn get_pending_proof_by_y(&self, y: &PublicKey) -> Result<Option<Proof>, Error>;
  75. async fn remove_pending_proof(&self, secret: &Secret) -> Result<(), Error>;
  76. async fn add_blinded_signature(
  77. &self,
  78. blinded_message: PublicKey,
  79. blinded_signature: BlindSignature,
  80. ) -> Result<(), Error>;
  81. async fn get_blinded_signature(
  82. &self,
  83. blinded_message: &PublicKey,
  84. ) -> Result<Option<BlindSignature>, Error>;
  85. async fn get_blinded_signatures(
  86. &self,
  87. blinded_messages: Vec<PublicKey>,
  88. ) -> Result<Vec<Option<BlindSignature>>, Error>;
  89. }