nut05.rs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //! Melting Tokens
  2. // https://github.com/cashubtc/nuts/blob/main/05.md
  3. use serde::{Deserialize, Serialize};
  4. use super::CurrencyUnit;
  5. use crate::nuts::Proofs;
  6. use crate::types::MeltQuote;
  7. use crate::{Amount, Bolt11Invoice};
  8. /// Melt quote request [NUT-05]
  9. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
  10. pub struct MeltQuoteBolt11Request {
  11. /// Bolt11 invoice to be paid
  12. pub request: Bolt11Invoice,
  13. /// Unit wallet would like to pay with
  14. pub unit: CurrencyUnit,
  15. }
  16. /// Melt quote response [NUT-05]
  17. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
  18. pub struct MeltQuoteBolt11Response {
  19. /// Quote Id
  20. pub quote: String,
  21. /// The amount that needs to be provided
  22. pub amount: u64,
  23. /// The fee reserve that is required
  24. pub fee_reserve: u64,
  25. /// Whether the the request haas be paid
  26. pub paid: bool,
  27. /// Unix timestamp until the quote is valid
  28. pub expiry: u64,
  29. }
  30. impl From<MeltQuote> for MeltQuoteBolt11Response {
  31. fn from(melt_quote: MeltQuote) -> MeltQuoteBolt11Response {
  32. MeltQuoteBolt11Response {
  33. quote: melt_quote.id,
  34. amount: u64::from(melt_quote.amount),
  35. fee_reserve: u64::from(melt_quote.fee_reserve),
  36. paid: melt_quote.paid,
  37. expiry: melt_quote.expiry,
  38. }
  39. }
  40. }
  41. /// Melt Bolt11 Request [NUT-05]
  42. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
  43. pub struct MeltBolt11Request {
  44. /// Quote ID
  45. pub quote: String,
  46. /// Proofs
  47. pub inputs: Proofs,
  48. }
  49. impl MeltBolt11Request {
  50. pub fn proofs_amount(&self) -> Amount {
  51. self.inputs.iter().map(|proof| proof.amount).sum()
  52. }
  53. }
  54. /// Melt Response [NUT-05]
  55. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
  56. pub struct MeltBolt11Response {
  57. /// Indicate if payment was successful
  58. pub paid: bool,
  59. /// Bolt11 preimage
  60. pub payment_preimage: Option<String>,
  61. }
  62. /// Melt Settings
  63. #[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
  64. pub struct Settings {
  65. methods: Vec<(String, CurrencyUnit)>,
  66. }