mod.rs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. //! CDK Database
  2. use std::collections::HashMap;
  3. use async_trait::async_trait;
  4. use cashu::MintInfo;
  5. use uuid::Uuid;
  6. use super::Error;
  7. use crate::common::{PaymentProcessorKey, QuoteTTL};
  8. use crate::mint::{self, MintKeySetInfo, MintQuote as MintMintQuote};
  9. use crate::nuts::{
  10. BlindSignature, CurrencyUnit, Id, MeltQuoteState, MeltRequest, MintQuoteState, Proof, Proofs,
  11. PublicKey, State,
  12. };
  13. #[cfg(feature = "auth")]
  14. mod auth;
  15. #[cfg(feature = "test")]
  16. pub mod test;
  17. #[cfg(feature = "auth")]
  18. pub use auth::MintAuthDatabase;
  19. /// Mint Keys Database trait
  20. #[async_trait]
  21. pub trait KeysDatabase {
  22. /// Mint Keys Database Error
  23. type Err: Into<Error> + From<Error>;
  24. /// Add Active Keyset
  25. async fn set_active_keyset(&self, unit: CurrencyUnit, id: Id) -> Result<(), Self::Err>;
  26. /// Get Active Keyset
  27. async fn get_active_keyset_id(&self, unit: &CurrencyUnit) -> Result<Option<Id>, Self::Err>;
  28. /// Get all Active Keyset
  29. async fn get_active_keysets(&self) -> Result<HashMap<CurrencyUnit, Id>, Self::Err>;
  30. /// Add [`MintKeySetInfo`]
  31. async fn add_keyset_info(&self, keyset: MintKeySetInfo) -> Result<(), Self::Err>;
  32. /// Get [`MintKeySetInfo`]
  33. async fn get_keyset_info(&self, id: &Id) -> Result<Option<MintKeySetInfo>, Self::Err>;
  34. /// Get [`MintKeySetInfo`]s
  35. async fn get_keyset_infos(&self) -> Result<Vec<MintKeySetInfo>, Self::Err>;
  36. }
  37. /// Mint Quote Database trait
  38. #[async_trait]
  39. pub trait QuotesDatabase {
  40. /// Mint Quotes Database Error
  41. type Err: Into<Error> + From<Error>;
  42. /// Add [`MintMintQuote`]
  43. async fn add_mint_quote(&self, quote: MintMintQuote) -> Result<(), Self::Err>;
  44. /// Get [`MintMintQuote`]
  45. async fn get_mint_quote(&self, quote_id: &Uuid) -> Result<Option<MintMintQuote>, Self::Err>;
  46. /// Update state of [`MintMintQuote`]
  47. async fn update_mint_quote_state(
  48. &self,
  49. quote_id: &Uuid,
  50. state: MintQuoteState,
  51. ) -> Result<MintQuoteState, Self::Err>;
  52. /// Get all [`MintMintQuote`]s
  53. async fn get_mint_quote_by_request(
  54. &self,
  55. request: &str,
  56. ) -> Result<Option<MintMintQuote>, Self::Err>;
  57. /// Get all [`MintMintQuote`]s
  58. async fn get_mint_quote_by_request_lookup_id(
  59. &self,
  60. request_lookup_id: &str,
  61. ) -> Result<Option<MintMintQuote>, Self::Err>;
  62. /// Get Mint Quotes
  63. async fn get_mint_quotes(&self) -> Result<Vec<MintMintQuote>, Self::Err>;
  64. /// Get Mint Quotes with state
  65. async fn get_mint_quotes_with_state(
  66. &self,
  67. state: MintQuoteState,
  68. ) -> Result<Vec<MintMintQuote>, Self::Err>;
  69. /// Remove [`MintMintQuote`]
  70. async fn remove_mint_quote(&self, quote_id: &Uuid) -> Result<(), Self::Err>;
  71. /// Add [`mint::MeltQuote`]
  72. async fn add_melt_quote(&self, quote: mint::MeltQuote) -> Result<(), Self::Err>;
  73. /// Get [`mint::MeltQuote`]
  74. async fn get_melt_quote(&self, quote_id: &Uuid) -> Result<Option<mint::MeltQuote>, Self::Err>;
  75. /// Update [`mint::MeltQuote`] state
  76. async fn update_melt_quote_state(
  77. &self,
  78. quote_id: &Uuid,
  79. state: MeltQuoteState,
  80. ) -> Result<MeltQuoteState, Self::Err>;
  81. /// Get all [`mint::MeltQuote`]s
  82. async fn get_melt_quotes(&self) -> Result<Vec<mint::MeltQuote>, Self::Err>;
  83. /// Remove [`mint::MeltQuote`]
  84. async fn remove_melt_quote(&self, quote_id: &Uuid) -> Result<(), Self::Err>;
  85. /// Add melt request
  86. async fn add_melt_request(
  87. &self,
  88. melt_request: MeltRequest<Uuid>,
  89. ln_key: PaymentProcessorKey,
  90. ) -> Result<(), Self::Err>;
  91. /// Get melt request
  92. async fn get_melt_request(
  93. &self,
  94. quote_id: &Uuid,
  95. ) -> Result<Option<(MeltRequest<Uuid>, PaymentProcessorKey)>, Self::Err>;
  96. }
  97. /// Mint Proof Database trait
  98. #[async_trait]
  99. pub trait ProofsDatabase {
  100. /// Mint Proof Database Error
  101. type Err: Into<Error> + From<Error>;
  102. /// Add [`Proofs`]
  103. async fn add_proofs(&self, proof: Proofs, quote_id: Option<Uuid>) -> Result<(), Self::Err>;
  104. /// Remove [`Proofs`]
  105. async fn remove_proofs(
  106. &self,
  107. ys: &[PublicKey],
  108. quote_id: Option<Uuid>,
  109. ) -> Result<(), Self::Err>;
  110. /// Get [`Proofs`] by ys
  111. async fn get_proofs_by_ys(&self, ys: &[PublicKey]) -> Result<Vec<Option<Proof>>, Self::Err>;
  112. /// Get ys by quote id
  113. async fn get_proof_ys_by_quote_id(&self, quote_id: &Uuid) -> Result<Vec<PublicKey>, Self::Err>;
  114. /// Get [`Proofs`] state
  115. async fn get_proofs_states(&self, ys: &[PublicKey]) -> Result<Vec<Option<State>>, Self::Err>;
  116. /// Get [`Proofs`] state
  117. async fn update_proofs_states(
  118. &self,
  119. ys: &[PublicKey],
  120. proofs_state: State,
  121. ) -> Result<Vec<Option<State>>, Self::Err>;
  122. /// Get [`Proofs`] by state
  123. async fn get_proofs_by_keyset_id(
  124. &self,
  125. keyset_id: &Id,
  126. ) -> Result<(Proofs, Vec<Option<State>>), Self::Err>;
  127. }
  128. #[async_trait]
  129. /// Mint Signatures Database trait
  130. pub trait SignaturesDatabase {
  131. /// Mint Signature Database Error
  132. type Err: Into<Error> + From<Error>;
  133. /// Add [`BlindSignature`]
  134. async fn add_blind_signatures(
  135. &self,
  136. blinded_messages: &[PublicKey],
  137. blind_signatures: &[BlindSignature],
  138. quote_id: Option<Uuid>,
  139. ) -> Result<(), Self::Err>;
  140. /// Get [`BlindSignature`]s
  141. async fn get_blind_signatures(
  142. &self,
  143. blinded_messages: &[PublicKey],
  144. ) -> Result<Vec<Option<BlindSignature>>, Self::Err>;
  145. /// Get [`BlindSignature`]s for keyset_id
  146. async fn get_blind_signatures_for_keyset(
  147. &self,
  148. keyset_id: &Id,
  149. ) -> Result<Vec<BlindSignature>, Self::Err>;
  150. /// Get [`BlindSignature`]s for quote
  151. async fn get_blind_signatures_for_quote(
  152. &self,
  153. quote_id: &Uuid,
  154. ) -> Result<Vec<BlindSignature>, Self::Err>;
  155. }
  156. /// Mint Database trait
  157. #[async_trait]
  158. pub trait Database<Error>:
  159. KeysDatabase<Err = Error>
  160. + QuotesDatabase<Err = Error>
  161. + ProofsDatabase<Err = Error>
  162. + SignaturesDatabase<Err = Error>
  163. {
  164. /// Set [`MintInfo`]
  165. async fn set_mint_info(&self, mint_info: MintInfo) -> Result<(), Error>;
  166. /// Get [`MintInfo`]
  167. async fn get_mint_info(&self) -> Result<MintInfo, Error>;
  168. /// Set [`QuoteTTL`]
  169. async fn set_quote_ttl(&self, quote_ttl: QuoteTTL) -> Result<(), Error>;
  170. /// Get [`QuoteTTL`]
  171. async fn get_quote_ttl(&self) -> Result<QuoteTTL, Error>;
  172. }