Use sats leeway for amountless swaps and set default (#960)

This commit is contained in:
Daniel Granhão
2025-07-01 11:34:20 +01:00
committed by GitHub
parent e74b62d406
commit e7b2e955e8
15 changed files with 69 additions and 79 deletions

View File

@@ -16,12 +16,12 @@ typedef struct _Dart_Handle* Dart_Handle;
#define ESTIMATED_BTC_CLAIM_TX_VSIZE 111
#define ESTIMATED_BTC_LOCKUP_TX_VSIZE 154
#define LIQUID_FEE_RATE_SAT_PER_VBYTE 0.1
#define LIQUID_FEE_RATE_MSAT_PER_VBYTE (float)(LIQUID_FEE_RATE_SAT_PER_VBYTE * 1000.0)
#define DEFAULT_ONCHAIN_FEE_RATE_LEEWAY_SAT 500
#define MIN_FEE_RATE 0.1
#define WEIGHT_FIXED 222
@@ -716,7 +716,7 @@ typedef struct wire_cst_config {
struct wire_cst_list_prim_u_8_strict *breez_api_key;
struct wire_cst_list_external_input_parser *external_input_parsers;
bool use_default_external_input_parsers;
uint32_t *onchain_fee_rate_leeway_sat_per_vbyte;
uint64_t *onchain_fee_rate_leeway_sat;
struct wire_cst_list_asset_metadata *asset_metadata;
struct wire_cst_list_prim_u_8_strict *sideswap_api_key;
} wire_cst_config;

View File

@@ -343,7 +343,7 @@ dictionary Config {
u64? zero_conf_max_amount_sat;
boolean use_default_external_input_parsers = true;
sequence<ExternalInputParser>? external_input_parsers = null;
u32? onchain_fee_rate_leeway_sat_per_vbyte = null;
u64? onchain_fee_rate_leeway_sat = null;
sequence<AssetMetadata>? asset_metadata = null;
string? sideswap_api_key = null;
};
@@ -355,14 +355,14 @@ enum LiquidNetwork {
};
dictionary ConnectRequest {
Config config;
Config config;
string? mnemonic = null;
string? passphrase = null;
sequence<u8>? seed = null;
};
dictionary ConnectWithSignerRequest {
Config config;
Config config;
};
dictionary AssetBalance {
@@ -717,7 +717,7 @@ interface SdkEvent {
DataSynced(boolean did_pull_new_records);
};
callback interface EventListener {
callback interface EventListener {
void on_event(SdkEvent e);
};
@@ -753,7 +753,7 @@ namespace breez_sdk_liquid {
[Throws=SdkError]
void set_logger(Logger logger);
[Throws=SdkError]
Config default_config(LiquidNetwork network, string? breez_api_key);
@@ -762,7 +762,7 @@ namespace breez_sdk_liquid {
};
[Error]
interface SignerError {
interface SignerError {
Generic(string err);
};

View File

@@ -17,6 +17,7 @@ use tokio::sync::{broadcast, Mutex};
use tokio_with_wasm::alias as tokio;
use crate::error::is_txn_mempool_conflict_error;
use crate::model::DEFAULT_ONCHAIN_FEE_RATE_LEEWAY_SAT;
use crate::{
chain::{bitcoin::BitcoinChainService, liquid::LiquidChainService},
elements, ensure_sdk,
@@ -35,7 +36,6 @@ use crate::{
// Estimates based on https://github.com/BoltzExchange/boltz-backend/blob/ee4c77be1fcb9bb2b45703c542ad67f7efbf218d/lib/rates/FeeProvider.ts#L68
pub const ESTIMATED_BTC_CLAIM_TX_VSIZE: u64 = 111;
pub const ESTIMATED_BTC_LOCKUP_TX_VSIZE: u64 = 154;
pub(crate) struct ChainSwapHandler {
config: Config,
@@ -492,9 +492,8 @@ impl ChainSwapHandler {
// Min auto accept server lockup quote
let server_fees_leeway_sat = self
.config
.onchain_fee_rate_leeway_sat_per_vbyte
.unwrap_or(0) as u64
* ESTIMATED_BTC_LOCKUP_TX_VSIZE;
.onchain_fee_rate_leeway_sat
.unwrap_or(DEFAULT_ONCHAIN_FEE_RATE_LEEWAY_SAT);
let min_auto_accept_server_lockup_amount_sat =
server_lockup_amount_estimate_sat.saturating_sub(server_fees_leeway_sat);

View File

@@ -2636,7 +2636,7 @@ impl SseDecode for crate::model::Config {
let mut var_externalInputParsers =
<Option<Vec<crate::bindings::ExternalInputParser>>>::sse_decode(deserializer);
let mut var_useDefaultExternalInputParsers = <bool>::sse_decode(deserializer);
let mut var_onchainFeeRateLeewaySatPerVbyte = <Option<u32>>::sse_decode(deserializer);
let mut var_onchainFeeRateLeewaySat = <Option<u64>>::sse_decode(deserializer);
let mut var_assetMetadata =
<Option<Vec<crate::model::AssetMetadata>>>::sse_decode(deserializer);
let mut var_sideswapApiKey = <Option<String>>::sse_decode(deserializer);
@@ -2651,7 +2651,7 @@ impl SseDecode for crate::model::Config {
breez_api_key: var_breezApiKey,
external_input_parsers: var_externalInputParsers,
use_default_external_input_parsers: var_useDefaultExternalInputParsers,
onchain_fee_rate_leeway_sat_per_vbyte: var_onchainFeeRateLeewaySatPerVbyte,
onchain_fee_rate_leeway_sat: var_onchainFeeRateLeewaySat,
asset_metadata: var_assetMetadata,
sideswap_api_key: var_sideswapApiKey,
};
@@ -5337,7 +5337,7 @@ impl flutter_rust_bridge::IntoDart for crate::model::Config {
self.use_default_external_input_parsers
.into_into_dart()
.into_dart(),
self.onchain_fee_rate_leeway_sat_per_vbyte
self.onchain_fee_rate_leeway_sat
.into_into_dart()
.into_dart(),
self.asset_metadata.into_into_dart().into_dart(),
@@ -7766,7 +7766,7 @@ impl SseEncode for crate::model::Config {
serializer,
);
<bool>::sse_encode(self.use_default_external_input_parsers, serializer);
<Option<u32>>::sse_encode(self.onchain_fee_rate_leeway_sat_per_vbyte, serializer);
<Option<u64>>::sse_encode(self.onchain_fee_rate_leeway_sat, serializer);
<Option<Vec<crate::model::AssetMetadata>>>::sse_encode(self.asset_metadata, serializer);
<Option<String>>::sse_encode(self.sideswap_api_key, serializer);
}
@@ -10272,9 +10272,7 @@ mod io {
use_default_external_input_parsers: self
.use_default_external_input_parsers
.cst_decode(),
onchain_fee_rate_leeway_sat_per_vbyte: self
.onchain_fee_rate_leeway_sat_per_vbyte
.cst_decode(),
onchain_fee_rate_leeway_sat: self.onchain_fee_rate_leeway_sat.cst_decode(),
asset_metadata: self.asset_metadata.cst_decode(),
sideswap_api_key: self.sideswap_api_key.cst_decode(),
}
@@ -12028,7 +12026,7 @@ mod io {
breez_api_key: core::ptr::null_mut(),
external_input_parsers: core::ptr::null_mut(),
use_default_external_input_parsers: Default::default(),
onchain_fee_rate_leeway_sat_per_vbyte: core::ptr::null_mut(),
onchain_fee_rate_leeway_sat: core::ptr::null_mut(),
asset_metadata: core::ptr::null_mut(),
sideswap_api_key: core::ptr::null_mut(),
}
@@ -14355,7 +14353,7 @@ mod io {
breez_api_key: *mut wire_cst_list_prim_u_8_strict,
external_input_parsers: *mut wire_cst_list_external_input_parser,
use_default_external_input_parsers: bool,
onchain_fee_rate_leeway_sat_per_vbyte: *mut u32,
onchain_fee_rate_leeway_sat: *mut u64,
asset_metadata: *mut wire_cst_list_asset_metadata,
sideswap_api_key: *mut wire_cst_list_prim_u_8_strict,
}

View File

@@ -42,6 +42,7 @@ pub const LIQUID_FEE_RATE_MSAT_PER_VBYTE: f32 = (LIQUID_FEE_RATE_SAT_PER_VBYTE *
pub const BREEZ_SYNC_SERVICE_URL: &str = "https://datasync.breez.technology";
pub const BREEZ_LIQUID_ESPLORA_URL: &str = "https://lq1.breez.technology/liquid/api";
pub const BREEZ_SWAP_PROXY_URL: &str = "https://swap.breez.technology/v2";
pub const DEFAULT_ONCHAIN_FEE_RATE_LEEWAY_SAT: u64 = 500;
const SIDESWAP_API_KEY: &str = "97fb6a1dfa37ee6656af92ef79675cc03b8ac4c52e04655f41edbd5af888dcc2";
@@ -85,12 +86,12 @@ pub struct Config {
/// Set this to false in order to prevent their use.
pub use_default_external_input_parsers: bool,
/// For payments where the onchain fees can only be estimated on creation, this can be used
/// in order to automatically allow slightly more expensive fees. If the actual fee rate ends up
/// in order to automatically allow slightly more expensive fees. If the actual fee ends up
/// being above the sum of the initial estimate and this leeway, the payment will require
/// user fee acceptance. See [WaitingFeeAcceptance](PaymentState::WaitingFeeAcceptance).
///
/// Defaults to zero.
pub onchain_fee_rate_leeway_sat_per_vbyte: Option<u32>,
/// Defaults to [DEFAULT_ONCHAIN_FEE_RATE_LEEWAY_SAT].
pub onchain_fee_rate_leeway_sat: Option<u64>,
/// A set of asset metadata used by [LiquidSdk::parse](crate::sdk::LiquidSdk::parse) when the input is a
/// [LiquidAddressData] and the [asset_id](LiquidAddressData::asset_id) differs from the Liquid Bitcoin asset.
/// See [AssetMetadata] for more details on how define asset metadata.
@@ -118,7 +119,7 @@ impl Config {
breez_api_key,
external_input_parsers: None,
use_default_external_input_parsers: true,
onchain_fee_rate_leeway_sat_per_vbyte: None,
onchain_fee_rate_leeway_sat: None,
asset_metadata: None,
sideswap_api_key: Some(SIDESWAP_API_KEY.to_string()),
}
@@ -142,7 +143,7 @@ impl Config {
breez_api_key,
external_input_parsers: None,
use_default_external_input_parsers: true,
onchain_fee_rate_leeway_sat_per_vbyte: None,
onchain_fee_rate_leeway_sat: None,
asset_metadata: None,
sideswap_api_key: Some(SIDESWAP_API_KEY.to_string()),
}
@@ -165,7 +166,7 @@ impl Config {
breez_api_key,
external_input_parsers: None,
use_default_external_input_parsers: true,
onchain_fee_rate_leeway_sat_per_vbyte: None,
onchain_fee_rate_leeway_sat: None,
asset_metadata: None,
sideswap_api_key: Some(SIDESWAP_API_KEY.to_string()),
}
@@ -189,7 +190,7 @@ impl Config {
breez_api_key,
external_input_parsers: None,
use_default_external_input_parsers: true,
onchain_fee_rate_leeway_sat_per_vbyte: None,
onchain_fee_rate_leeway_sat: None,
asset_metadata: None,
sideswap_api_key: Some(SIDESWAP_API_KEY.to_string()),
}
@@ -212,7 +213,7 @@ impl Config {
breez_api_key: None,
external_input_parsers: None,
use_default_external_input_parsers: true,
onchain_fee_rate_leeway_sat_per_vbyte: None,
onchain_fee_rate_leeway_sat: None,
asset_metadata: None,
sideswap_api_key: None,
}
@@ -236,7 +237,7 @@ impl Config {
breez_api_key: None,
external_input_parsers: None,
use_default_external_input_parsers: true,
onchain_fee_rate_leeway_sat_per_vbyte: None,
onchain_fee_rate_leeway_sat: None,
asset_metadata: None,
sideswap_api_key: None,
}

View File

@@ -4621,6 +4621,7 @@ mod tests {
use crate::test_utils::swapper::ZeroAmountSwapMockConfig;
use crate::test_utils::wallet::TEST_LIQUID_RECEIVE_LOCKUP_TX;
use crate::utils;
use crate::{
bitcoin, elements,
model::{BtcHistory, Direction, LBtcHistory, PaymentState, Swap},
@@ -4634,7 +4635,6 @@ mod tests {
swapper::MockSwapper,
},
};
use crate::{chain_swap::ESTIMATED_BTC_LOCKUP_TX_VSIZE, utils};
use crate::{
model::CreateBolt12InvoiceRequest,
test_utils::chain_swap::{
@@ -5184,7 +5184,7 @@ mod tests {
status_stream.clone(),
liquid_chain_service.clone(),
bitcoin_chain_service.clone(),
None,
Some(0),
)
.await?;
@@ -5232,7 +5232,7 @@ mod tests {
#[sdk_macros::async_test_all]
async fn test_zero_amount_chain_swap_with_leeway() -> Result<()> {
let user_lockup_sat = 50_000;
let onchain_fee_rate_leeway_sat_per_vbyte = 5;
let onchain_fee_rate_leeway_sat = 500;
create_persister!(persister);
let swapper = Arc::new(MockSwapper::new());
@@ -5246,24 +5246,18 @@ mod tests {
status_stream.clone(),
liquid_chain_service.clone(),
bitcoin_chain_service.clone(),
Some(onchain_fee_rate_leeway_sat_per_vbyte),
Some(onchain_fee_rate_leeway_sat),
)
.await?;
LiquidSdk::track_swap_updates(&sdk);
let max_fee_increase_for_auto_accept_sat =
onchain_fee_rate_leeway_sat_per_vbyte as u64 * ESTIMATED_BTC_LOCKUP_TX_VSIZE;
// We spawn a new thread since updates can only be sent when called via async runtimes
tokio::spawn(async move {
// Verify that `TransactionLockupFailed` correctly:
// 1. does not affect state when swapper increases fee by up to sat/vbyte leeway * tx size
// 2. triggers a change to WaitingFeeAcceptance when it is any higher
for fee_increase in [
max_fee_increase_for_auto_accept_sat,
max_fee_increase_for_auto_accept_sat + 1,
] {
for fee_increase in [onchain_fee_rate_leeway_sat, onchain_fee_rate_leeway_sat + 1] {
swapper.set_zero_amount_swap_mock_config(ZeroAmountSwapMockConfig {
user_lockup_sat,
onchain_fee_increase_sat: fee_increase,
@@ -5282,10 +5276,10 @@ mod tests {
None
);
match fee_increase {
val if val == max_fee_increase_for_auto_accept_sat => {
val if val == onchain_fee_rate_leeway_sat => {
assert_eq!(persisted_swap.state, PaymentState::Created);
}
val if val == (max_fee_increase_for_auto_accept_sat + 1) => {
val if val == (onchain_fee_rate_leeway_sat + 1) => {
assert_eq!(persisted_swap.state, PaymentState::WaitingFeeAcceptance);
}
_ => panic!("Unexpected fee_increase"),

View File

@@ -42,7 +42,7 @@ pub(crate) async fn new_liquid_sdk_with_chain_services(
status_stream: Arc<MockStatusStream>,
liquid_chain_service: Arc<MockLiquidChainService>,
bitcoin_chain_service: Arc<MockBitcoinChainService>,
onchain_fee_rate_leeway_sat_per_vbyte: Option<u32>,
onchain_fee_rate_leeway_sat: Option<u64>,
) -> Result<Arc<LiquidSdk>> {
let mut config = Config::testnet_esplora(None);
config.working_dir = persister
@@ -50,7 +50,7 @@ pub(crate) async fn new_liquid_sdk_with_chain_services(
.to_str()
.ok_or(anyhow!("An invalid SDK directory was specified"))?
.to_string();
config.onchain_fee_rate_leeway_sat_per_vbyte = onchain_fee_rate_leeway_sat_per_vbyte;
config.onchain_fee_rate_leeway_sat = onchain_fee_rate_leeway_sat;
let signer: Arc<Box<dyn Signer>> = Arc::new(Box::new(MockSigner::new()?));
let rest_client: Arc<dyn RestClient> = Arc::new(MockRestClient::new());

View File

@@ -311,7 +311,7 @@ pub struct Config {
pub breez_api_key: Option<String>,
pub external_input_parsers: Option<Vec<ExternalInputParser>>,
pub use_default_external_input_parsers: bool,
pub onchain_fee_rate_leeway_sat_per_vbyte: Option<u32>,
pub onchain_fee_rate_leeway_sat: Option<u64>,
pub asset_metadata: Option<Vec<AssetMetadata>>,
pub sideswap_api_key: Option<String>,
}

View File

@@ -1982,7 +1982,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
breezApiKey: dco_decode_opt_String(arr[7]),
externalInputParsers: dco_decode_opt_list_external_input_parser(arr[8]),
useDefaultExternalInputParsers: dco_decode_bool(arr[9]),
onchainFeeRateLeewaySatPerVbyte: dco_decode_opt_box_autoadd_u_32(arr[10]),
onchainFeeRateLeewaySat: dco_decode_opt_box_autoadd_u_64(arr[10]),
assetMetadata: dco_decode_opt_list_asset_metadata(arr[11]),
sideswapApiKey: dco_decode_opt_String(arr[12]),
);
@@ -4056,7 +4056,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
var var_breezApiKey = sse_decode_opt_String(deserializer);
var var_externalInputParsers = sse_decode_opt_list_external_input_parser(deserializer);
var var_useDefaultExternalInputParsers = sse_decode_bool(deserializer);
var var_onchainFeeRateLeewaySatPerVbyte = sse_decode_opt_box_autoadd_u_32(deserializer);
var var_onchainFeeRateLeewaySat = sse_decode_opt_box_autoadd_u_64(deserializer);
var var_assetMetadata = sse_decode_opt_list_asset_metadata(deserializer);
var var_sideswapApiKey = sse_decode_opt_String(deserializer);
return Config(
@@ -4070,7 +4070,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
breezApiKey: var_breezApiKey,
externalInputParsers: var_externalInputParsers,
useDefaultExternalInputParsers: var_useDefaultExternalInputParsers,
onchainFeeRateLeewaySatPerVbyte: var_onchainFeeRateLeewaySatPerVbyte,
onchainFeeRateLeewaySat: var_onchainFeeRateLeewaySat,
assetMetadata: var_assetMetadata,
sideswapApiKey: var_sideswapApiKey,
);
@@ -6609,7 +6609,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_opt_String(self.breezApiKey, serializer);
sse_encode_opt_list_external_input_parser(self.externalInputParsers, serializer);
sse_encode_bool(self.useDefaultExternalInputParsers, serializer);
sse_encode_opt_box_autoadd_u_32(self.onchainFeeRateLeewaySatPerVbyte, serializer);
sse_encode_opt_box_autoadd_u_64(self.onchainFeeRateLeewaySat, serializer);
sse_encode_opt_list_asset_metadata(self.assetMetadata, serializer);
sse_encode_opt_String(self.sideswapApiKey, serializer);
}

View File

@@ -2759,9 +2759,7 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
wireObj.breez_api_key = cst_encode_opt_String(apiObj.breezApiKey);
wireObj.external_input_parsers = cst_encode_opt_list_external_input_parser(apiObj.externalInputParsers);
wireObj.use_default_external_input_parsers = cst_encode_bool(apiObj.useDefaultExternalInputParsers);
wireObj.onchain_fee_rate_leeway_sat_per_vbyte = cst_encode_opt_box_autoadd_u_32(
apiObj.onchainFeeRateLeewaySatPerVbyte,
);
wireObj.onchain_fee_rate_leeway_sat = cst_encode_opt_box_autoadd_u_64(apiObj.onchainFeeRateLeewaySat);
wireObj.asset_metadata = cst_encode_opt_list_asset_metadata(apiObj.assetMetadata);
wireObj.sideswap_api_key = cst_encode_opt_String(apiObj.sideswapApiKey);
}
@@ -7321,7 +7319,7 @@ final class wire_cst_config extends ffi.Struct {
@ffi.Bool()
external bool use_default_external_input_parsers;
external ffi.Pointer<ffi.Uint32> onchain_fee_rate_leeway_sat_per_vbyte;
external ffi.Pointer<ffi.Uint64> onchain_fee_rate_leeway_sat;
external ffi.Pointer<wire_cst_list_asset_metadata> asset_metadata;
@@ -8010,12 +8008,12 @@ final class wire_cst_sign_message_response extends ffi.Struct {
const int ESTIMATED_BTC_CLAIM_TX_VSIZE = 111;
const int ESTIMATED_BTC_LOCKUP_TX_VSIZE = 154;
const double LIQUID_FEE_RATE_SAT_PER_VBYTE = 0.1;
const double LIQUID_FEE_RATE_MSAT_PER_VBYTE = 100.0;
const int DEFAULT_ONCHAIN_FEE_RATE_LEEWAY_SAT = 500;
const double MIN_FEE_RATE = 0.1;
const int WEIGHT_FIXED = 222;

View File

@@ -286,12 +286,12 @@ class Config {
final bool useDefaultExternalInputParsers;
/// For payments where the onchain fees can only be estimated on creation, this can be used
/// in order to automatically allow slightly more expensive fees. If the actual fee rate ends up
/// in order to automatically allow slightly more expensive fees. If the actual fee ends up
/// being above the sum of the initial estimate and this leeway, the payment will require
/// user fee acceptance. See [WaitingFeeAcceptance](PaymentState::WaitingFeeAcceptance).
///
/// Defaults to zero.
final int? onchainFeeRateLeewaySatPerVbyte;
/// Defaults to [DEFAULT_ONCHAIN_FEE_RATE_LEEWAY_SAT].
final BigInt? onchainFeeRateLeewaySat;
/// A set of asset metadata used by [LiquidSdk::parse](crate::sdk::LiquidSdk::parse) when the input is a
/// [LiquidAddressData] and the [asset_id](LiquidAddressData::asset_id) differs from the Liquid Bitcoin asset.
@@ -313,7 +313,7 @@ class Config {
this.breezApiKey,
this.externalInputParsers,
required this.useDefaultExternalInputParsers,
this.onchainFeeRateLeewaySatPerVbyte,
this.onchainFeeRateLeewaySat,
this.assetMetadata,
this.sideswapApiKey,
});
@@ -330,7 +330,7 @@ class Config {
breezApiKey.hashCode ^
externalInputParsers.hashCode ^
useDefaultExternalInputParsers.hashCode ^
onchainFeeRateLeewaySatPerVbyte.hashCode ^
onchainFeeRateLeewaySat.hashCode ^
assetMetadata.hashCode ^
sideswapApiKey.hashCode;
@@ -349,7 +349,7 @@ class Config {
breezApiKey == other.breezApiKey &&
externalInputParsers == other.externalInputParsers &&
useDefaultExternalInputParsers == other.useDefaultExternalInputParsers &&
onchainFeeRateLeewaySatPerVbyte == other.onchainFeeRateLeewaySatPerVbyte &&
onchainFeeRateLeewaySat == other.onchainFeeRateLeewaySat &&
assetMetadata == other.assetMetadata &&
sideswapApiKey == other.sideswapApiKey;
}

View File

@@ -5161,7 +5161,7 @@ final class wire_cst_config extends ffi.Struct {
@ffi.Bool()
external bool use_default_external_input_parsers;
external ffi.Pointer<ffi.Uint32> onchain_fee_rate_leeway_sat_per_vbyte;
external ffi.Pointer<ffi.Uint64> onchain_fee_rate_leeway_sat;
external ffi.Pointer<wire_cst_list_asset_metadata> asset_metadata;
@@ -6142,12 +6142,12 @@ final class UniffiVTableCallbackInterfaceSigner extends ffi.Struct {
const int ESTIMATED_BTC_CLAIM_TX_VSIZE = 111;
const int ESTIMATED_BTC_LOCKUP_TX_VSIZE = 154;
const double LIQUID_FEE_RATE_SAT_PER_VBYTE = 0.1;
const double LIQUID_FEE_RATE_MSAT_PER_VBYTE = 100.0;
const int DEFAULT_ONCHAIN_FEE_RATE_LEEWAY_SAT = 500;
const double MIN_FEE_RATE = 0.1;
const int WEIGHT_FIXED = 222;

View File

@@ -459,13 +459,13 @@ fun asConfig(config: ReadableMap): Config? {
} else {
null
}
val onchainFeeRateLeewaySatPerVbyte =
val onchainFeeRateLeewaySat =
if (hasNonNullKey(
config,
"onchainFeeRateLeewaySatPerVbyte",
"onchainFeeRateLeewaySat",
)
) {
config.getInt("onchainFeeRateLeewaySatPerVbyte").toUInt()
config.getDouble("onchainFeeRateLeewaySat").toULong()
} else {
null
}
@@ -491,7 +491,7 @@ fun asConfig(config: ReadableMap): Config? {
zeroConfMaxAmountSat,
useDefaultExternalInputParsers,
externalInputParsers,
onchainFeeRateLeewaySatPerVbyte,
onchainFeeRateLeewaySat,
assetMetadata,
sideswapApiKey,
)
@@ -509,7 +509,7 @@ fun readableMapOf(config: Config): ReadableMap =
"zeroConfMaxAmountSat" to config.zeroConfMaxAmountSat,
"useDefaultExternalInputParsers" to config.useDefaultExternalInputParsers,
"externalInputParsers" to config.externalInputParsers?.let { readableArrayOf(it) },
"onchainFeeRateLeewaySatPerVbyte" to config.onchainFeeRateLeewaySatPerVbyte,
"onchainFeeRateLeewaySat" to config.onchainFeeRateLeewaySat,
"assetMetadata" to config.assetMetadata?.let { readableArrayOf(it) },
"sideswapApiKey" to config.sideswapApiKey,
)

View File

@@ -558,12 +558,12 @@ enum BreezSDKLiquidMapper {
externalInputParsers = try asExternalInputParserList(arr: externalInputParsersTmp)
}
var onchainFeeRateLeewaySatPerVbyte: UInt32?
if hasNonNilKey(data: config, key: "onchainFeeRateLeewaySatPerVbyte") {
guard let onchainFeeRateLeewaySatPerVbyteTmp = config["onchainFeeRateLeewaySatPerVbyte"] as? UInt32 else {
throw SdkError.Generic(message: errUnexpectedValue(fieldName: "onchainFeeRateLeewaySatPerVbyte"))
var onchainFeeRateLeewaySat: UInt64?
if hasNonNilKey(data: config, key: "onchainFeeRateLeewaySat") {
guard let onchainFeeRateLeewaySatTmp = config["onchainFeeRateLeewaySat"] as? UInt64 else {
throw SdkError.Generic(message: errUnexpectedValue(fieldName: "onchainFeeRateLeewaySat"))
}
onchainFeeRateLeewaySatPerVbyte = onchainFeeRateLeewaySatPerVbyteTmp
onchainFeeRateLeewaySat = onchainFeeRateLeewaySatTmp
}
var assetMetadata: [AssetMetadata]?
if let assetMetadataTmp = config["assetMetadata"] as? [[String: Any?]] {
@@ -578,7 +578,7 @@ enum BreezSDKLiquidMapper {
sideswapApiKey = sideswapApiKeyTmp
}
return Config(liquidExplorer: liquidExplorer, bitcoinExplorer: bitcoinExplorer, workingDir: workingDir, network: network, paymentTimeoutSec: paymentTimeoutSec, syncServiceUrl: syncServiceUrl, breezApiKey: breezApiKey, zeroConfMaxAmountSat: zeroConfMaxAmountSat, useDefaultExternalInputParsers: useDefaultExternalInputParsers, externalInputParsers: externalInputParsers, onchainFeeRateLeewaySatPerVbyte: onchainFeeRateLeewaySatPerVbyte, assetMetadata: assetMetadata, sideswapApiKey: sideswapApiKey)
return Config(liquidExplorer: liquidExplorer, bitcoinExplorer: bitcoinExplorer, workingDir: workingDir, network: network, paymentTimeoutSec: paymentTimeoutSec, syncServiceUrl: syncServiceUrl, breezApiKey: breezApiKey, zeroConfMaxAmountSat: zeroConfMaxAmountSat, useDefaultExternalInputParsers: useDefaultExternalInputParsers, externalInputParsers: externalInputParsers, onchainFeeRateLeewaySat: onchainFeeRateLeewaySat, assetMetadata: assetMetadata, sideswapApiKey: sideswapApiKey)
}
static func dictionaryOf(config: Config) -> [String: Any?] {
@@ -593,7 +593,7 @@ enum BreezSDKLiquidMapper {
"zeroConfMaxAmountSat": config.zeroConfMaxAmountSat == nil ? nil : config.zeroConfMaxAmountSat,
"useDefaultExternalInputParsers": config.useDefaultExternalInputParsers,
"externalInputParsers": config.externalInputParsers == nil ? nil : arrayOf(externalInputParserList: config.externalInputParsers!),
"onchainFeeRateLeewaySatPerVbyte": config.onchainFeeRateLeewaySatPerVbyte == nil ? nil : config.onchainFeeRateLeewaySatPerVbyte,
"onchainFeeRateLeewaySat": config.onchainFeeRateLeewaySat == nil ? nil : config.onchainFeeRateLeewaySat,
"assetMetadata": config.assetMetadata == nil ? nil : arrayOf(assetMetadataList: config.assetMetadata!),
"sideswapApiKey": config.sideswapApiKey == nil ? nil : config.sideswapApiKey,
]

View File

@@ -100,7 +100,7 @@ export interface Config {
zeroConfMaxAmountSat?: number
useDefaultExternalInputParsers: boolean
externalInputParsers?: ExternalInputParser[]
onchainFeeRateLeewaySatPerVbyte?: number
onchainFeeRateLeewaySat?: number
assetMetadata?: AssetMetadata[]
sideswapApiKey?: string
}