@@ -97,7 +97,8 @@ pub use pocketclient::FiatTopupInfo;
97
97
use pocketclient:: PocketClient ;
98
98
99
99
pub use breez_sdk_core:: error:: ReceiveOnchainError as SwapError ;
100
- use breez_sdk_core:: error:: { ReceiveOnchainError , SendPaymentError } ;
100
+ pub use breez_sdk_core:: error:: RedeemOnchainError as SweepError ;
101
+ use breez_sdk_core:: error:: { ReceiveOnchainError , RedeemOnchainError , SendPaymentError } ;
101
102
pub use breez_sdk_core:: HealthCheckStatus as BreezHealthCheckStatus ;
102
103
pub use breez_sdk_core:: ReverseSwapStatus ;
103
104
use breez_sdk_core:: {
@@ -1954,29 +1955,27 @@ impl LightningNode {
1954
1955
/// the sweep transaction.
1955
1956
///
1956
1957
/// Requires network: **yes**
1957
- pub fn prepare_sweep ( & self , address : String , onchain_fee_rate : u32 ) -> Result < SweepInfo > {
1958
- let res = self
1959
- . rt
1960
- . handle ( )
1961
- . block_on (
1962
- self . sdk
1963
- . prepare_redeem_onchain_funds ( PrepareRedeemOnchainFundsRequest {
1958
+ pub fn prepare_sweep (
1959
+ & self ,
1960
+ address : String ,
1961
+ onchain_fee_rate : u32 ,
1962
+ ) -> std:: result:: Result < SweepInfo , RedeemOnchainError > {
1963
+ let res =
1964
+ self . rt
1965
+ . handle ( )
1966
+ . block_on ( self . sdk . prepare_redeem_onchain_funds (
1967
+ PrepareRedeemOnchainFundsRequest {
1964
1968
to_address : address. clone ( ) ,
1965
1969
sat_per_vbyte : onchain_fee_rate,
1966
- } ) ,
1967
- )
1968
- . map_to_runtime_error (
1969
- RuntimeErrorCode :: NodeUnavailable ,
1970
- "Failed to prepare sweep transaction" ,
1971
- ) ?;
1970
+ } ,
1971
+ ) ) ?;
1972
1972
1973
1973
let onchain_balance_sat = self
1974
1974
. sdk
1975
1975
. node_info ( )
1976
- . map_to_runtime_error (
1977
- RuntimeErrorCode :: NodeUnavailable ,
1978
- "Failed to fetch on-chain balance" ,
1979
- ) ?
1976
+ . map_err ( |e| RedeemOnchainError :: ServiceConnectivity {
1977
+ err : format ! ( "Failed to fetch on-chain balance: {e}" ) ,
1978
+ } ) ?
1980
1979
. onchain_balance_msat
1981
1980
. as_msats ( )
1982
1981
. to_amount_down ( & None )
@@ -1987,7 +1986,9 @@ impl LightningNode {
1987
1986
// Add the amount that won't be possible to be swept due to CLN's min-emergency limit (546 sats)
1988
1987
// TODO: remove CLN_DUST_LIMIT_SAT addition if/when
1989
1988
// https://github.com/ElementsProject/lightning/issues/7131 is addressed
1990
- let utxos = self . get_node_utxos ( ) ?;
1989
+ let utxos = self
1990
+ . get_node_utxos ( )
1991
+ . map_err ( |e| RedeemOnchainError :: Generic { err : e. to_string ( ) } ) ?;
1991
1992
let onchain_fee_sat = if utxos
1992
1993
. iter ( )
1993
1994
. any ( |u| u. amount_millisatoshi == CLN_DUST_LIMIT_SAT * 1_000 )
@@ -2215,9 +2216,11 @@ impl LightningNode {
2215
2216
sat_per_vbyte,
2216
2217
) {
2217
2218
Ok ( s) => s,
2218
- // TODO: Stop parsing error string when https://github.com/breez/breez-sdk/issues/1059 is addressed
2219
- Err ( e) if e. to_string ( ) . contains ( "Insufficient funds to pay fees" ) => return Ok ( None ) ,
2220
- Err ( e) => return Err ( e) ,
2219
+ Err ( RedeemOnchainError :: InsufficientFunds { .. } ) => return Ok ( None ) ,
2220
+ Err ( e) => runtime_error ! (
2221
+ RuntimeErrorCode :: NodeUnavailable ,
2222
+ "Failed to prepare sweep: {e}"
2223
+ ) ,
2221
2224
} ;
2222
2225
2223
2226
// Require onchain fees to be less than half of the onchain balance to leave some leeway
@@ -2280,10 +2283,14 @@ impl LightningNode {
2280
2283
& self ,
2281
2284
sat_per_vbyte : u32 ,
2282
2285
lsp_fee_params : Option < OpeningFeeParams > ,
2283
- ) -> std:: result:: Result < String , ReceiveOnchainError > {
2286
+ ) -> std:: result:: Result < String , RedeemOnchainError > {
2284
2287
let onchain_balance = self . sdk . node_info ( ) ?. onchain_balance_msat . as_msats ( ) ;
2285
2288
2286
- let swap_address_info = self . generate_swap_address ( lsp_fee_params. clone ( ) ) ?;
2289
+ let swap_address_info =
2290
+ self . generate_swap_address ( lsp_fee_params. clone ( ) )
2291
+ . map_err ( |e| RedeemOnchainError :: Generic {
2292
+ err : format ! ( "Couldn't generate swap address: {}" , e) ,
2293
+ } ) ?;
2287
2294
2288
2295
let prepare_response =
2289
2296
self . rt
@@ -2301,7 +2308,7 @@ impl LightningNode {
2301
2308
- prepare_response. tx_fee_sat ;
2302
2309
2303
2310
if swap_address_info. min_deposit . sats > send_amount_sats {
2304
- return Err ( ReceiveOnchainError :: Generic {
2311
+ return Err ( RedeemOnchainError :: InsufficientFunds {
2305
2312
err : format ! (
2306
2313
"Not enough funds ({} sats after onchain fees) available for min swap amount({} sats)" ,
2307
2314
send_amount_sats,
@@ -2311,7 +2318,7 @@ impl LightningNode {
2311
2318
}
2312
2319
2313
2320
if swap_address_info. max_deposit . sats < send_amount_sats {
2314
- return Err ( ReceiveOnchainError :: Generic {
2321
+ return Err ( RedeemOnchainError :: Generic {
2315
2322
err : format ! (
2316
2323
"Available funds ({} sats after onchain fees) exceed limit for swap ({} sats)" ,
2317
2324
send_amount_sats, swap_address_info. max_deposit. sats,
@@ -2321,13 +2328,13 @@ impl LightningNode {
2321
2328
2322
2329
let lsp_fees = self
2323
2330
. calculate_lsp_fee ( send_amount_sats)
2324
- . map_err ( |_| ReceiveOnchainError :: ServiceConnectivity {
2331
+ . map_err ( |_| RedeemOnchainError :: ServiceConnectivity {
2325
2332
err : "Could not get lsp fees" . to_string ( ) ,
2326
2333
} ) ?
2327
2334
. lsp_fee
2328
2335
. sats ;
2329
2336
if lsp_fees >= send_amount_sats {
2330
- return Err ( ReceiveOnchainError :: Generic {
2337
+ return Err ( RedeemOnchainError :: InsufficientFunds {
2331
2338
err : format ! (
2332
2339
"Available funds ({} sats after onchain fees) are not enough for lsp fees ({} sats)" ,
2333
2340
send_amount_sats, lsp_fees,
0 commit comments