1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
#![allow(rustdoc::private_intra_doc_links)]
//! # Breez SDK - Liquid
//!
//! This SDK provides developers with an end-to-end solution for integrating self-custodial Lightning
//! payments into their apps and services. It eliminates the need for third-parties, simplifies the
//! complexities of Bitcoin and Lightning, and enables seamless onboarding for billions of users to
//! the future of peer-to-peer payments.
//!
//! The Liquid implementation is a nodeless Lightning integration. It offers a self-custodial,
//! end-to-end solution for integrating Lightning payments, utilizing the Liquid Network with
//! on-chain interoperability and third-party fiat on-ramps.
//!
//! * Sending payments (via protocols such as: bolt11, lnurl-pay, lightning address, btc address)
//! * Receiving payments (via protocols such as: bolt11, lnurl-withdraw, btc address)
//! * Interacting with a wallet (e.g. balance, max allow to pay, max allow to receive, on-chain balance)
//!
//! ## Getting Started
//!
//! The following code initialize the SDK and make it ready to be used:
//!
//! ```ignore
//! let mnemonic = Mnemonic::generate_in(Language::English, 12)?;
//!
//! // Create the default config
//! let mut config = sdk::LiquidSdk::default_config(LiquidNetwork::Mainnet);
//!
//! // Customize the config object according to your needs
//! config.working_dir = "path to an existing directory".into();
//!
//! let connect_request = ConnectRequest {
//! mnemonic: mnemonic.to_string(),
//! config,
//! };
//! let sdk = sdk::LiquidSdk::connect(connect_request).await?;
//!
//! ```
//!
//! We can now receive payments
//!
//! ```ignore
//! // Fetch the Receive limits
//! let current_limits = sdk.fetch_lightning_limits().await?;
//! info!("Minimum amount: {} sats", current_limits.receive.min_sat);
//! info!("Maximum amount: {} sats", current_limits.receive.max_sat);
//!
//! // Set the amount you wish the payer to send, which should be within the above limits
//! let prepare_receive_response = sdk
//! .prepare_receive_payment(&PrepareReceiveRequest {
//! payment_method: PaymentMethod::Lightning,
//! payer_amount_sat: Some(5_000),
//! })
//! .await?;
//!
//! // If the fees are acceptable, continue to create the Receive Payment
//! let receive_fees_sat = prepare_receive_response.fees_sat;
//!
//! let receive_payment_response = sdk.receive_payment(&ReceivePaymentRequest {
//! description: Some("my description".to_string()),
//! prepare_response: receive_payment_response,
//! }).await?;
//!
//! let destination = receive_payment_response.destination;
//! ```
//!
//! or make payments
//! ```ignore
//! // Set the BOLT11 invoice or Liquid BIP21/address you wish to pay
//! let prepare_send_response = sdk
//! .prepare_send_payment(&PrepareSendRequest {
//! destination: "invoice or Liquid BIP21/address".to_string(),
//! amount_sat: Some(3_000),
//! })
//! .await?;
//!
//! // If the fees are acceptable, continue to create the Send Payment
//! let send_fees_sat = prepare_send_response.fees_sat;
//!
//! let send_response = sdk.send_payment(&SendPayentRequest {
//! prepare_response: prepare_send_response,
//! }).await?;
//! let payment = send_response.payment;
//! ```
//!
//! At any point we can fetch the wallet state
//! ```ignore
//! let wallet_info = sdk.get_info().await?;
//! let balance_sat = wallet_info.balance_sat;
//! let pending_send_sat = wallet_info.pending_send_sat;
//! let pending_receive_sat = wallet_info.pending_receive_sat;
//! ```
//!
//! or fetch other useful infos, like the current mempool [model::RecommendedFees]
//! ```ignore
//! let fees = sdk.recommended_fees().await?;
//! ```
//!
//! These different types of operations are described below in more detail.
//!
//! ### Initializing the SDK
//!
//! There are two simple steps necessary to initialize the SDK:
//!
//! 1. [sdk::LiquidSdk::default_config] to construct the SDK [model::Config]
//! 2. [sdk::LiquidSdk::connect] to initialize the [sdk::LiquidSdk] instance
//!
//! Although you can create your own config from scratch it is recommended to use the
//! [sdk::LiquidSdk::default_config] method and customize it according to your needs.
//! Once the [model::Config] is created it is passed to the [sdk::LiquidSdk::connect] method
//! along with the mnemonic.
//!
//! Now your SDK is ready to be used.
//!
//! ### Sending a Lightning payment
//!
//! * [sdk::LiquidSdk::prepare_send_payment] to check fees
//! * [sdk::LiquidSdk::send_payment] to pay an invoice
//!
//! ### Receiving a Lightning/onchain payment
//!
//! * [sdk::LiquidSdk::prepare_receive_payment] to check fees
//! * [sdk::LiquidSdk::receive_payment] to generate an invoice/Liquid BIP21/Liquid address
//!
//! ### Sending an onchain payment
//!
//! * [sdk::LiquidSdk::prepare_pay_onchain] to check fees
//! * [sdk::LiquidSdk::pay_onchain] to pay to a Bitcoin address
//!
//! ### Refunding a payment
//!
//! * [sdk::LiquidSdk::list_refundables] to get a list of refundable swaps
//! * [sdk::LiquidSdk::prepare_refund] to check the refund fees
//! * [sdk::LiquidSdk::refund] to broadcast a refund transaction
//!
//! ### Using LNURL
//!
//! * [parse] the LNURL endpoint URL to get the workflow parameters
//! * [sdk::LiquidSdk::lnurl_pay] to pay to the parsed LNURL
//! * [sdk::LiquidSdk::lnurl_withdraw] to withdraw from the parsed LNURL
//!
//! ### Supporting fiat currencies
//!
//! * [sdk::LiquidSdk::list_fiat_currencies] to get the supported fiat currencies
//! * [sdk::LiquidSdk::fetch_fiat_rates] to get the current exchange rates
//! ### Utilities
//!
//! * [sdk::LiquidSdk::recommended_fees] for the recommended mempool fees
//! * [parse] to parse a string into an [InputType]
//! * [parse_invoice] to parse a string into an [LNInvoice]
//!
//!
//! ## Bindings
//!
//! * Dart
//! * Flutter
//! * Kotlin
//! * Python
//! * React-Native
//! * Swift
//!
//! ## Support
//!
//! Join this [telegram group](https://t.me/breezsdk).
#[cfg(feature = "frb")]
pub(crate) mod bindings;
pub(crate) mod buy;
pub(crate) mod chain;
pub(crate) mod chain_swap;
pub mod error;
pub(crate) mod event;
#[cfg(feature = "frb")]
pub(crate) mod frb_generated;
pub mod logger;
pub mod model;
pub mod persist;
pub(crate) mod receive_swap;
#[allow(dead_code)]
mod restore;
pub mod sdk;
pub(crate) mod send_swap;
pub(crate) mod swapper;
pub(crate) mod test_utils;
pub(crate) mod utils;
pub(crate) mod wallet;
pub use sdk_common::prelude::*;
#[allow(ambiguous_glob_reexports)]
#[rustfmt::skip]
pub mod prelude {
pub use crate::*;
pub use crate::model::*;
pub use crate::sdk::*;
}