Skip to main content

PreparedMelt

Struct PreparedMelt 

Source
pub struct PreparedMelt<'a> { /* private fields */ }
Expand description

A prepared melt operation that can be confirmed or cancelled.

Implementations§

Source§

impl<'a> PreparedMelt<'a>

Source

pub fn operation_id(&self) -> Uuid

Get the operation ID

Source

pub fn quote(&self) -> &MeltQuote

Get the quote

Source

pub fn amount(&self) -> Amount

Get the amount to be melted

Source

pub fn proofs(&self) -> &Proofs

Get the proofs that will be used

Source

pub fn proofs_to_swap(&self) -> &Proofs

Get the proofs that need to be swapped

Source

pub fn swap_fee(&self) -> Amount

Get the swap fee

Source

pub fn input_fee(&self) -> Amount

Get the input fee

Source

pub fn total_fee(&self) -> Amount

Get the total fee (with swap, if applicable)

Source

pub fn requires_swap(&self) -> bool

Returns true if a swap would be performed (proofs_to_swap is not empty)

Source

pub fn total_fee_with_swap(&self) -> Amount

Get the total fee if swap is performed (current default behavior)

Source

pub fn input_fee_without_swap(&self) -> Amount

Get the input fee if swap is skipped (fee on all proofs sent directly)

Source

pub fn fee_savings_without_swap(&self) -> Amount

Get the fee savings from skipping the swap

Source

pub fn change_amount_without_swap(&self) -> Amount

Get the expected change amount if swap is skipped

Source

pub async fn confirm(self) -> Result<FinalizedMelt, Error>

Confirm the prepared melt and execute the payment.

This method waits for the payment to complete and returns the finalized melt. If the mint supports async payments (NUT-05), this may complete faster by not blocking on the payment processing.

§Example
use cdk::nuts::PaymentMethod;

let quote = wallet
    .melt_quote(PaymentMethod::BOLT11, "lnbc...", None, None)
    .await?;

// Prepare the melt
let prepared = wallet.prepare_melt(&quote.id, HashMap::new()).await?;

// Confirm and wait for completion
let finalized = prepared.confirm().await?;

println!(
    "Melt completed: state={:?}, amount={}, fee_paid={}",
    finalized.state(),
    finalized.amount(),
    finalized.fee_paid()
);
Source

pub async fn confirm_with_options( self, options: MeltConfirmOptions, ) -> Result<FinalizedMelt, Error>

Confirm the prepared melt with custom options.

This method waits for the payment to complete and returns the finalized melt. If the mint supports async payments (NUT-05), this may complete faster by not blocking on the payment processing.

Source

pub async fn confirm_prefer_async(self) -> Result<MeltOutcome<'a>, Error>

Confirm the prepared melt using async support (NUT-05).

Sends the melt request with a Prefer: respond-async header and waits for the mint’s response. Returns Paid if the payment completed immediately, or Pending if the mint accepted the async request and will process it in the background.

Note: This waits for the mint’s initial response, which may block if the mint does not support async payments. Only returns Pending if the mint explicitly supports and accepts async melt requests.

§Example
use std::collections::HashMap;

use cdk::nuts::PaymentMethod;
use cdk::wallet::MeltOutcome;

let quote = wallet
    .melt_quote(PaymentMethod::BOLT11, "lnbc...", None, None)
    .await?;

// Prepare the melt
let prepared = wallet.prepare_melt(&quote.id, HashMap::new()).await?;

// Confirm with async preference
match prepared.confirm_prefer_async().await? {
    MeltOutcome::Paid(finalized) => {
        println!(
            "Melt completed immediately: state={:?}, amount={}, fee_paid={}",
            finalized.state(),
            finalized.amount(),
            finalized.fee_paid()
        );
    }
    MeltOutcome::Pending(pending) => {
        // You can await the pending melt directly
        let finalized = pending.await?;
        println!(
            "Melt completed after waiting: state={:?}, amount={}, fee_paid={}",
            finalized.state(),
            finalized.amount(),
            finalized.fee_paid()
        );

        // Alternative: Instead of awaiting, you could:
        // 1. Store the quote ID and check status later with:
        //    wallet.check_melt_quote_status(&quote.id).await?
        // 2. Let the wallet's background task handle it via:
        //    wallet.finalize_pending_melts().await?
    }
}
Source

pub async fn confirm_prefer_async_with_options( self, options: MeltConfirmOptions, ) -> Result<MeltOutcome<'a>, Error>

Confirm with async support and custom options.

Sends the melt request with a Prefer: respond-async header and waits for the mint’s response. Returns Paid if the payment completed immediately, or Pending if the mint accepted the async request and will process it in the background.

Note: This waits for the mint’s initial response, which may block if the mint does not support async payments. Only returns Pending if the mint explicitly supports and accepts async melt requests.

Source

pub async fn cancel(self) -> Result<(), Error>

Cancel the prepared melt and release reserved proofs

Trait Implementations§

Source§

impl Debug for PreparedMelt<'_>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for PreparedMelt<'a>

§

impl<'a> !RefUnwindSafe for PreparedMelt<'a>

§

impl<'a> Send for PreparedMelt<'a>

§

impl<'a> Sync for PreparedMelt<'a>

§

impl<'a> Unpin for PreparedMelt<'a>

§

impl<'a> UnsafeUnpin for PreparedMelt<'a>

§

impl<'a> !UnwindSafe for PreparedMelt<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more