mint.rs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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::{LnKey, QuoteTTL};
  8. use crate::mint::{self, MintKeySetInfo, MintQuote as MintMintQuote};
  9. use crate::nuts::{
  10. BlindSignature, CurrencyUnit, Id, MeltBolt11Request, MeltQuoteState, MintQuoteState, Proof,
  11. Proofs, PublicKey, State,
  12. };
  13. /// Mint Database trait
  14. #[async_trait]
  15. pub trait Database {
  16. /// Mint Database Error
  17. type Err: Into<Error> + From<Error>;
  18. /// Add Active Keyset
  19. async fn set_active_keyset(&self, unit: CurrencyUnit, id: Id) -> Result<(), Self::Err>;
  20. /// Get Active Keyset
  21. async fn get_active_keyset_id(&self, unit: &CurrencyUnit) -> Result<Option<Id>, Self::Err>;
  22. /// Get all Active Keyset
  23. async fn get_active_keysets(&self) -> Result<HashMap<CurrencyUnit, Id>, Self::Err>;
  24. /// Add [`MintMintQuote`]
  25. async fn add_mint_quote(&self, quote: MintMintQuote) -> Result<(), Self::Err>;
  26. /// Get [`MintMintQuote`]
  27. async fn get_mint_quote(&self, quote_id: &Uuid) -> Result<Option<MintMintQuote>, Self::Err>;
  28. /// Update state of [`MintMintQuote`]
  29. async fn update_mint_quote_state(
  30. &self,
  31. quote_id: &Uuid,
  32. state: MintQuoteState,
  33. ) -> Result<MintQuoteState, Self::Err>;
  34. /// Get all [`MintMintQuote`]s
  35. async fn get_mint_quote_by_request(
  36. &self,
  37. request: &str,
  38. ) -> Result<Option<MintMintQuote>, Self::Err>;
  39. /// Get all [`MintMintQuote`]s
  40. async fn get_mint_quote_by_request_lookup_id(
  41. &self,
  42. request_lookup_id: &str,
  43. ) -> Result<Option<MintMintQuote>, Self::Err>;
  44. /// Get Mint Quotes
  45. async fn get_mint_quotes(&self) -> Result<Vec<MintMintQuote>, Self::Err>;
  46. /// Remove [`MintMintQuote`]
  47. async fn remove_mint_quote(&self, quote_id: &Uuid) -> Result<(), Self::Err>;
  48. /// Add [`mint::MeltQuote`]
  49. async fn add_melt_quote(&self, quote: mint::MeltQuote) -> Result<(), Self::Err>;
  50. /// Get [`mint::MeltQuote`]
  51. async fn get_melt_quote(&self, quote_id: &Uuid) -> Result<Option<mint::MeltQuote>, Self::Err>;
  52. /// Update [`mint::MeltQuote`] state
  53. async fn update_melt_quote_state(
  54. &self,
  55. quote_id: &Uuid,
  56. state: MeltQuoteState,
  57. ) -> Result<MeltQuoteState, Self::Err>;
  58. /// Get all [`mint::MeltQuote`]s
  59. async fn get_melt_quotes(&self) -> Result<Vec<mint::MeltQuote>, Self::Err>;
  60. /// Remove [`mint::MeltQuote`]
  61. async fn remove_melt_quote(&self, quote_id: &Uuid) -> Result<(), Self::Err>;
  62. /// Add melt request
  63. async fn add_melt_request(
  64. &self,
  65. melt_request: MeltBolt11Request<Uuid>,
  66. ln_key: LnKey,
  67. ) -> Result<(), Self::Err>;
  68. /// Get melt request
  69. async fn get_melt_request(
  70. &self,
  71. quote_id: &Uuid,
  72. ) -> Result<Option<(MeltBolt11Request<Uuid>, LnKey)>, Self::Err>;
  73. /// Add [`MintKeySetInfo`]
  74. async fn add_keyset_info(&self, keyset: MintKeySetInfo) -> Result<(), Self::Err>;
  75. /// Get [`MintKeySetInfo`]
  76. async fn get_keyset_info(&self, id: &Id) -> Result<Option<MintKeySetInfo>, Self::Err>;
  77. /// Get [`MintKeySetInfo`]s
  78. async fn get_keyset_infos(&self) -> Result<Vec<MintKeySetInfo>, Self::Err>;
  79. /// Add spent [`Proofs`]
  80. async fn add_proofs(&self, proof: Proofs, quote_id: Option<Uuid>) -> Result<(), Self::Err>;
  81. /// Get [`Proofs`] by ys
  82. async fn get_proofs_by_ys(&self, ys: &[PublicKey]) -> Result<Vec<Option<Proof>>, Self::Err>;
  83. /// Get ys by quote id
  84. async fn get_proof_ys_by_quote_id(&self, quote_id: &Uuid) -> Result<Vec<PublicKey>, Self::Err>;
  85. /// Get [`Proofs`] state
  86. async fn get_proofs_states(&self, ys: &[PublicKey]) -> Result<Vec<Option<State>>, Self::Err>;
  87. /// Get [`Proofs`] state
  88. async fn update_proofs_states(
  89. &self,
  90. ys: &[PublicKey],
  91. proofs_state: State,
  92. ) -> Result<Vec<Option<State>>, Self::Err>;
  93. /// Get [`Proofs`] by state
  94. async fn get_proofs_by_keyset_id(
  95. &self,
  96. keyset_id: &Id,
  97. ) -> Result<(Proofs, Vec<Option<State>>), Self::Err>;
  98. /// Add [`BlindSignature`]
  99. async fn add_blind_signatures(
  100. &self,
  101. blinded_messages: &[PublicKey],
  102. blind_signatures: &[BlindSignature],
  103. quote_id: Option<Uuid>,
  104. ) -> Result<(), Self::Err>;
  105. /// Get [`BlindSignature`]s
  106. async fn get_blind_signatures(
  107. &self,
  108. blinded_messages: &[PublicKey],
  109. ) -> Result<Vec<Option<BlindSignature>>, Self::Err>;
  110. /// Get [`BlindSignature`]s for keyset_id
  111. async fn get_blind_signatures_for_keyset(
  112. &self,
  113. keyset_id: &Id,
  114. ) -> Result<Vec<BlindSignature>, Self::Err>;
  115. /// Get [`BlindSignature`]s for quote
  116. async fn get_blind_signatures_for_quote(
  117. &self,
  118. quote_id: &Uuid,
  119. ) -> Result<Vec<BlindSignature>, Self::Err>;
  120. /// Set [`MintInfo`]
  121. async fn set_mint_info(&self, mint_info: MintInfo) -> Result<(), Self::Err>;
  122. /// Get [`MintInfo`]
  123. async fn get_mint_info(&self) -> Result<MintInfo, Self::Err>;
  124. /// Set [`QuoteTTL`]
  125. async fn set_quote_ttl(&self, quote_ttl: QuoteTTL) -> Result<(), Self::Err>;
  126. /// Get [`QuoteTTL`]
  127. async fn get_quote_ttl(&self) -> Result<QuoteTTL, Self::Err>;
  128. }