- Fixed cumulative change-address derivation index leak during fee estimation and dry-run
transaction builds. BDK's
TxBuilder::finish()advances the internal (change) keychain index each time it's called; repeated fee estimations would burn through change addresses without broadcasting any transaction. All dry-run and error-after-finish()paths now cancel the PSBT to unmark the change address for reuse. - Bumped
FEE_RATE_CACHE_UPDATE_TIMEOUT_SECSandTX_BROADCAST_TIMEOUT_SECSfrom 5s to 15s. The 5s node-level timeout fires before Electrum can complete a request (10s timeout), causingFeerateEstimationUpdateTimeouton node start. - Fixed external scores sync using
spawn_background_processor_task(reserved for the single LDK background processor), which caused adebug_assertpanic. Switched tospawn_cancellable_background_task. - Fixed
PeerStore::add_peersilently ignoring address updates for existing peers. When a peer's IP address changes (e.g., LSP node migration),add_peernow upserts the socket address and re-persists, instead of returning early. This fixes the issue where ldk-node's reconnection loop would indefinitely use a stale cached IP after an LSP node IP change. (See upstream issue #700) - Backported upstream Electrum sync fix (PR #4341): Skip unconfirmed
get_historyentries inElectrumSyncClient. Previously, mempool entries (height=0 or -1) were incorrectly treated as confirmed, causingget_merkleto fail for 0-conf channel funding transactions. - Fixed duplicate payment events (
PaymentReceived,PaymentSuccessful,PaymentFailed) being emitted when LDK replays events after node restart. - Switched from forked rust-lightning (
ovitrif/rust-lightning#0.2-electrum-fix) back to official upstream crates.io releases. The Electrum sync fix (PR #4341) is now in upstreamlightning-transaction-syncv0.2.1. Also picks uplightningv0.2.2 fixes.
- Added
OnchainPayment::calculate_send_all_fee()to preview the fee for a drain / send-all transaction before broadcasting (fee-calculation counterpart ofsend_all_to_address) - Added runtime APIs for dynamic address type management:
Node::add_address_type_to_monitor()andadd_address_type_to_monitor_with_mnemonic()to add an address type to the monitored setNode::remove_address_type_from_monitor()to unload an address type (persisted state retained for re-add)Node::set_primary_address_type()andset_primary_address_type_with_mnemonic()to change the primary; previous primary is demoted to monitored- New errors:
AddressTypeAlreadyMonitored,AddressTypeIsPrimary,AddressTypeNotMonitored,InvalidSeedBytes - Not persisted across restarts; re-apply on each start or set in
Configfor persistence
- Added multi-address type wallet support with a new
bdk-wallet-aggregatecrate:AddressTypeenum:Legacy,NestedSegwit,NativeSegwit,TaprootNodeBuilder::set_address_type()to configure the primary wallet address typeNodeBuilder::set_address_types_to_monitor()to track funds across multiple address typesNode::get_balance_for_address_type()to query per-wallet balancesNode::list_monitored_address_types()to list loaded wallet typesOnchainPayment::new_address_for_type()to generate addresses for a specific typesend_to_address/send_all_to_address: unified coin selection pools UTXOs from all loaded wallets and selects optimally across the full set;send_alldrains all wallets- RBF and CPFP fee bumping work across wallets (cross-wallet inputs are re-signed)
- Channel funding uses unified coin selection across all SegWit wallets (NestedSegwit can fund channels; Legacy excluded per BOLT 2)
- Channel shutdown and destination scripts always use native witness addresses, with automatic fallback to a loaded NativeSegwit/Taproot wallet when the primary is Legacy or NestedSegwit
- Splicing is restricted to native witness primaries (NativeSegwit/Taproot); non-native primaries return a graceful error
- Change outputs go to the primary wallet
- Monitored wallets are synced in parallel alongside the primary (Esplora and Electrum)
- P2PKH and P2SH UTXOs are now handled in
OutputSpender(previously panicked on non-witness scripts) - Migration-safe persistence: existing NativeSegwit wallet data is read from the legacy (un-namespaced) storage location
- Upgraded to Kotlin 2.2.0 for compatibility with consuming apps using Kotlin 2.x
- Added JitPack support for
ldk-node-jvmmodule to enable unit testing in consuming apps - Added runtime-adjustable wallet sync intervals for battery optimization on mobile:
RuntimeSyncIntervalsstruct with configurableonchain_wallet_sync_interval_secs,lightning_wallet_sync_interval_secs, andfee_rate_cache_update_interval_secsNode::update_sync_intervals()to change intervals while the node is runningNode::current_sync_intervals()to retrieve currently active intervalsRuntimeSyncIntervals::battery_saving()preset (5min onchain, 2min lightning, 30min fees)- Minimum 10-second interval enforced for all values
- Returns
BackgroundSyncNotEnablederror if manual sync mode was configured at build time
- Optimized startup performance by parallelizing VSS reads and caching network graph locally:
- Parallelized early reads (node_metrics, payments, wallet)
- Parallelized channel monitors and scorer reads
- Parallelized tail reads (output_sweeper, event_queue, peer_store)
- Added local caching for network graph to avoid slow VSS reads on startup
- Added
claimable_on_close_satsfield toChannelDetailsstruct. This field contains the amount (in satoshis) that would be claimable if the channel were force-closed now, computed from the channel monitor'sClaimableOnChannelClosebalance. ReturnsNoneif no monitor exists yet (pre-funding). This replaces the workaround of approximating the claimable amount usingoutbound_capacity_msat + counterparty_reserve. - Added reactive event system for wallet monitoring without polling:
- Onchain Transaction Events (fully implemented):
OnchainTransactionReceived: Emitted when a new unconfirmed transaction is first detected in the mempool (instant notification for incoming payments!)OnchainTransactionConfirmed: Emitted when a transaction receives confirmationsOnchainTransactionReplaced: Emitted when a transaction is replaced (via RBF or different transaction using a common input). Includes the replaced transaction ID and the list of conflicting replacement transaction IDs.OnchainTransactionReorged: Emitted when a previously confirmed transaction becomes unconfirmed due to a blockchain reorgOnchainTransactionEvicted: Emitted when a transaction is evicted from the mempool
- Sync Completion Event (fully implemented):
SyncCompleted: Emitted when onchain wallet sync finishes successfully
- Balance Change Event (fully implemented):
BalanceChanged: Emitted when onchain or Lightning balances change, allowing applications to update balance displays immediately without polling
- Onchain Transaction Events (fully implemented):
- Added
TransactionDetails,TxInput, andTxOutputstructs to provide comprehensive transaction information in onchain events, including inputs and outputs. This enables applications to analyze transaction data themselves to detect channel funding, closures, and other transaction types. - Added
Node::get_transaction_details()method to retrieve transaction details for any transaction ID that exists in the wallet, returningNoneif the transaction is not found. - Added
Node::get_address_balance()method to retrieve the current balance (in satoshis) for any Bitcoin address. This queries the chain source (Esplora or Electrum) to get the balance. ThrowsInvalidAddressif the address string cannot be parsed or doesn't match the node's network. Returns 0 if the balance cannot be queried (e.g., chain source unavailable). Note: This method is not available for BitcoindRpc chain source. - Added
SyncTypeenum to distinguish between onchain wallet sync, Lightning wallet sync, and fee rate cache updates. - Balance tracking is now persisted in
NodeMetricsto detect changes across restarts. - Added RBF (Replace-By-Fee) support via
OnchainPayment::bump_fee_by_rbf()to replace unconfirmed transactions with higher fee versions. Prevents RBF of channel funding transactions to protect channel integrity. - Added CPFP (Child-Pays-For-Parent) support via
OnchainPayment::accelerate_by_cpfp()andOnchainPayment::calculate_cpfp_fee_rate()to accelerate unconfirmed transactions by creating child transactions with higher effective fee rates. - Added UTXO management APIs:
OnchainPayment::list_spendable_outputs(): Lists all UTXOs safe to spend (excludes channel funding UTXOs).OnchainPayment::select_utxos_with_algorithm(): Selects UTXOs using configurable coin selection algorithms (BranchAndBound, LargestFirst, OldestFirst, SingleRandomDraw).SpendableUtxostruct andCoinSelectionAlgorithmenum for UTXO management.
- Added fee estimation APIs:
OnchainPayment::calculate_total_fee(): Calculates transaction fees before sending.Bolt11Payment::estimate_routing_fees(): Estimates Lightning routing fees before sending.Bolt11Payment::estimate_routing_fees_using_amount(): Estimates fees for amount-less invoices.
- Enhanced
OnchainPayment::send_to_address()to accept optionalutxos_to_spendparameter for manual UTXO selection. - Added
Config::include_untrusted_pending_in_spendableoption to control whether unconfirmed funds from external sources are included inspendable_onchain_balance_sats. When set totrue, the spendable balance will includeuntrusted_pendingUTXOs (unconfirmed transactions received from external wallets). Default isfalsefor safety, as spending unconfirmed external funds carries risk of double-spending. This affects all balance reporting includinglist_balances()andBalanceChangedevents. - Added
ChannelDataMigrationstruct andBuilder::set_channel_data_migration()method to migrate channel data from external LDK implementations (e.g., react-native-ldk). The channel manager and monitor data is written to the configured storage during build, before channel monitors are read. Storage keys for monitors are derived from the funding outpoint. - Added
derive_node_secret_from_mnemonic()utility function to derive the node's secret key from a BIP39 mnemonic, matching LDK's KeysManager derivation path (m/0'). This enables backup authentication and key verification before the node starts, using the same derivation that a running Node instance would use internally.
This seventh minor release introduces numerous new features, bug fixes, and API improvements. In particular, it adds support for channel Splicing, Async Payments, as well as sourcing chain data from a Bitcoin Core REST backend.
- Experimental support for channel splicing has been added. (#677)
- Note: Splicing-related transactions might currently still get misclassified in the payment store.
- Support for serving and paying static invoices for Async Payments has been added. (#621, #632)
- Sourcing chain data via Bitcoin Core's REST interface is now supported. (#526)
- A new
Builder::set_chain_source_esplora_with_headersmethod has been added that allows specifying headers to be sent to the Esplora backend. (#596) - The ability to import and merge pathfinding scores has been added. (#449)
- Passing a custom pre-image when sending spontaneous payments is now supported. (#549)
- When running in the context of a
tokioruntime, we now attempt to reuse the outer runtime context for our main runtime. (#543) - Specifying a
RouteParametersConfigwhen paying BOLT12 offers or sending refunds is now supported. (#702) - Liquidity service data is now persisted across restarts. (#650)
- The bLIP-52/LSPS2 service now supports the 'client-trusts-LSP' model. (#687)
- The manual-claiming flow is now also supported for JIT invoices. (#608)
- Any key-value stores provided to
Builder::build_with_storeare now required to implement LDK'sKVStoreas well asKVStoreSyncinterfaces. (#633) - The
generate_entropy_mnemonicmethod now supports specifying a word count. (#699)
- Robustness of the shutdown procedure has been improved, minimizing risk of blocking during
Node::stop. (#592, #612, #619, #622) - The VSS storage backend now supports 'lazy' deletes, allowing it to avoid unnecessarily waiting on remote calls for certain operations. (#689, #722)
- The encryption and obfuscation scheme used when storing data against a VSS backend has been improved. (#627)
- Transient errors during
bitcoindRPC chain synchronization are now retried with an exponential back-off. (#588) - Transactions evicted from the mempool are now correctly handled when syncing via
bitcoindRPC/REST. (#605) - When sourcing chain data from a Bitcoin Core backend, we now poll for the
current tip in
Builder::build, avoiding re-validating the chain from genesis on first startup. (#706) - A bug that could result in the node hanging on shutdown when sourcing chain data from a Bitcoin Core backend has been fixed. (#682)
- Unnecessary fee estimation calls to Bitcoin Core RPC are now avoided. (#631)
- The node now persists differential updates instead of re-persisting full channel monitor, reducing IO load. (#661)
- The previously rather restrictive
MaximumFeeEstimatewas relaxed. (#629) - The node now listens on all provided listening addresses. (#644)
- The minimum supported Rust version (MSRV) has been bumped to
rustcv1.85 (#606) - The LDK dependency has been bumped to v0.2.
- The BDK dependency has been bumped to v2.2. (#656)
- The VSS client dependency has been updated to utilize the new
vss-client-ngcrate v0.4. (#627) - The
rust-bitcoindependency has been bumped to v0.32.7. (#656) - The
uniffidependency has been bumped to v0.28.3. (#591) - The
electrum-clientdependency has been bumped to v0.24.0. (#602) - For Kotlin/Android builds we now require 16kb page sizes, ensuring Play Store compatibility. (#625)
In total, this release features 77 files changed, 12350 insertions, 5708 deletions in 264 commits from 14 authors in alphabetical order:
- aagbotemi
- alexanderwiederin
- Andrei
- Artur Gontijo
- benthecarman
- Chuks Agbakuru
- coreyphillips
- Elias Rohrer
- Enigbe
- Joost Jager
- Jeffrey Czyz
- moisesPomilio
- Martin Saposnic
- tosynthegeek
This patch release fixes a panic that could have been hit when syncing to a TLS-enabled Electrum server, as well as some minor issues when shutting down the node.
- If not set by the user, we now install a default
CryptoProviderfor therustlsTLS library. This fixes an issue that would have the node panic whenever they first try to access an Electrum server behind anssl://address. (#600) - We improved robustness of the shutdown procedure. In particular, we now wait for more background tasks to finish processing before shutting down LDK background processing. Previously some tasks were kept running which could have lead to race conditions. (#613)
In total, this release features 12 files changed, 198 insertions, 92 deletions in 13 commits from 2 authors in alphabetical order:
- Elias Rohrer
- moisesPomilio
This patch release fixes minor issues with the recently-exposed Bolt11Invoice
type in bindings.
- The
Bolt11Invoice::descriptionmethod is now exposed asBolt11Invoice::invoice_descriptionin bindings, to avoid collisions with a Swift standard method of same name (#576)
- The
Displayimplementation ofBolt11Invoiceis now exposed in bindings, (re-)allowing to render the invoice as a string. (#574)
In total, this release features 9 files changed, 549 insertions, 83 deletions, in 8 commits from 1 author in alphabetical order:
- Elias Rohrer
This sixth minor release mainly fixes an issue that could have left the on-chain wallet unable to spend funds if transactions that had previously been accepted to the mempool ended up being evicted.
- Onchain addresses are now validated against the expected network before use (#519).
- The API methods on the
Bolt11Invoicetype are now exposed in bindings (#522). - The
UnifiedQrPayment::receiveflow no longer aborts if we're unable to generate a BOLT12 offer (#548).
- Previously, the node could potentially enter a state that would have left the onchain wallet unable spend any funds if previously-generated transactions had been first accepted, and then evicted from the mempool. This has been fixed in BDK 2.0.0, to which we upgrade as part of this release. (#551)
- A bug that had us fail
OnchainPayment::send_allin theretrain_reservesmode when requiring sub-dust-limit anchor reserves has been fixed (#540). - The output of the
logfacade logger has been corrected (#547).
- The BDK dependency has been bumped to
bdk_walletv2.0 (#551).
In total, this release features 20 files changed, 1188 insertions, 447 deletions, in 18 commits from 3 authors in alphabetical order:
- alexanderwiederin
- Camillarhi
- Elias Rohrer
Besides numerous API improvements and bugfixes this fifth minor release notably adds support for sourcing chain and fee rate data from an Electrum backend, requesting channels via the bLIP-51 / LSPS1 protocol, as well as experimental support for operating as a bLIP-52 / LSPS2 service.
- The
PaymentSuccessfulevent now exposes apayment_preimagefield (#392). - The node now emits
PaymentForwardedevents for forwarded payments (#404). - The ability to send custom TLVs as part of spontaneous payments has been added (#411).
- The ability to override the used fee rates for on-chain sending has been added (#434).
- The ability to set a description hash when creating a BOLT11 invoice has been added (#438).
- The ability to export pathfinding scores has been added (#458).
- The ability to request inbound channels from an LSP via the bLIP-51 / LSPS1 protocol has been added (#418).
- The
ChannelDetailsreturned byNode::list_channelsnow exposes fields for the channel's SCIDs (#444). - Lightning peer-to-peer gossip data is now being verified when syncing from a Bitcoin Core RPC backend (#428).
- The logging sub-system was reworked to allow logging to backends using the Rust
logfacade, as well as via a custom logger trait (#407, #450, #454). - On-chain transactions are now added to the internal payment store and exposed via
Node::list_payments(#432). - Inbound announced channels are now rejected if not all requirements for operating as a forwarding node (set listening addresses and node alias) have been met (#467).
- Initial support for operating as an bLIP-52 / LSPS2 service has been added (#420).
- Note: bLIP-52 / LSPS2 support is considered 'alpha'/'experimental' and should not yet be used in production.
- The
Builder::set_entropy_seed_bytesmethod now takes an array rather than aVec(#493). - The builder will now return a
NetworkMismatcherror in case of network switching (#485). - The
Bolt11Jitpayment variant now exposes a field telling how much fee the LSP withheld (#497). - The ability to disable syncing Lightning and on-chain wallets in the background has been added. If it is disabled, the user is responsible for running
Node::sync_walletsmanually (#508). - The ability to configure the node's announcement addresses independently from the listening addresses has been added (#484).
- The ability to choose whether to honor the Anchor reserves when calling
send_all_to_addresshas been added (#345). - The ability to sync the node via an Electrum backend has been added (#486).
- When syncing from Bitcoin Core RPC, syncing mempool entries has been made more efficient (#410, #465).
- We now ensure the our configured fallback rates are used when the configured chain source would return huge bogus values during fee estimation (#430).
- We now re-enabled trying to bump Anchor channel transactions for trusted counterparties in the
ContentiousClaimablecase to reduce the risk of losing funds in certain edge cases (#461). - An issue that would potentially have us panic on retrying the chain listening initialization when syncing from Bitcoin Core RPC has been fixed (#471).
- The
Node::remove_paymentnow also removes the respective entry from the in-memory state, not only from the persisted payment store (#514).
- The filesystem logger was simplified and its default path changed to
ldk_node.login the configured storage directory (#394). - The BDK dependency has been bumped to
bdk_walletv1.0 (#426). - The LDK dependency has been bumped to
lightningv0.1 (#426). - The
rusqlitedependency has been bumped to v0.31 (#403). - The minimum supported Rust version (MSRV) has been bumped to v1.75 (#429).
In total, this release features 53 files changed, 6147 insertions, 1193 deletions, in 191 commits from 14 authors in alphabetical order:
- alexanderwiederin
- Andrei
- Artur Gontijo
- Ayla Greystone
- Elias Rohrer
- elnosh
- Enigbe Ochekliye
- Evan Feenstra
- G8XSU
- Joost Jager
- maan2003
- moisesPompilio
- Rob N
- Vincenzo Palazzo
This patch release fixes the broken Rust build resulting from cargo treating the recent v0.1.0 release of lightning-liquidity as API-compatible with the previous v0.1.0-alpha.6 release (even though it's not).
In total, this release features 1 files changed, 1 insertions, 1 deletions in 1 commits from 1 author, in alphabetical order:
- Elias Rohrer
This patch release fixes an issue that prohibited the node from using available confirmed on-chain funds to spend/bump Anchor outputs (#387).
In total, this release features 1 files changed, 40 insertions, 4 deletions in 3 commits from 3 authors, in alphabetical order:
- Fuyin
- Elias Rohrer
This patch release fixes a wallet syncing issue where full syncs were used instead of incremental syncs, and vice versa (#383).
In total, this release features 3 files changed, 13 insertions, 9 deletions in 6 commits from 3 authors, in alphabetical order:
- Jeffrey Czyz
- Elias Rohrer
- Tommy Volk
Besides numerous API improvements and bugfixes this fourth minor release notably adds support for sourcing chain and fee rate data from a Bitcoin Core RPC backend, as well as experimental support for the VSS remote storage backend.
- Support for multiple chain sources has been added. To this end, Esplora-specific configuration options can now be given via
EsploraSyncConfigtoBuilder::set_chain_source_esplora. Furthermore, all configuration objects (including the mainConfig) is now exposed via theconfigsub-module (#365). - Support for sourcing chain and fee estimation data from a Bitcoin Core RPC backed has been added (#370).
- Initial experimental support for an encrypted VSS remote storage backend has been added (#369, #376, #378).
- Caution: VSS support is in alpha and is considered experimental. Using VSS (or any remote persistence) may cause LDK to panic if persistence failures are unrecoverable, i.e., if they remain unresolved after internal retries are exhausted.
- Support for setting the
NodeAliasin public node announcements as been added. We now ensure that announced channels can only be opened and accepted when the required configuration options to operate as a public forwarding node are set (listening addresses and node alias). As part of thisNode::connect_open_channelwas split intoopen_channelandopen_announced_channelAPI methods. (#330, #366). - The
Nodecan now be started via a newNode::start_with_runtimecall that allows to reuse an outertokioruntime context, avoiding runtime stacking when run inasyncenvironments (#319). - Support for generating and paying unified QR codes has been added (#302).
- Support for
quantityandpayer_notefields when sending or receiving BOLT12 payments has been added (#327). - Support for setting additional parameters when sending BOLT11 payments has been added (#336, #351).
- The
ChannelConfigobject has been refactored, now allowing to query the currently appliedMaxDustHTLCExposurelimit (#350). - A bug potentially leading to panicking on shutdown when stacking
tokioruntime contexts has been fixed (#373). - We now no longer panic when hitting a persistence failure during event handling. Instead, events will be replayed until successful (#374). ,
- The LDK dependency has been updated to version 0.0.125 (#358, #375).
- The BDK dependency has been updated to version 1.0-beta.4 (#358).
- Going forward, the BDK state will be persisted in the configured
KVStorebackend. - Note: The old descriptor state will not be automatically migrated on upgrade, potentially leading to address reuse. Privacy-concious users might want to manually advance the descriptor by requesting new addresses until it reaches the previously observed height.
- After the node as been successfully upgraded users may safely delete
bdk_wallet_*.sqlitefrom the storage path.
- Going forward, the BDK state will be persisted in the configured
- The
rust-bitcoindependency has been updated to version 0.32.2 (#358). - The UniFFI dependency has been updated to version 0.27.3 (#379).
- The
bip21dependency has been updated to version 0.5 (#358). - The
rust-esplora-clienthas been updated to version 0.9 (#358).
In total, this release features 55 files changed, 6134 insertions, 2184 deletions in 166 commits from 6 authors, in alphabetical order:
- G8XSU
- Ian Slane
- jbesraa
- Elias Rohrer
- elnosh
- Enigbe Ochekliye
This third minor release notably adds support for BOLT12 payments, Anchor channels, and sourcing inbound liquidity via LSPS2 just-in-time channels.
- Support for creating and paying BOLT12 offers and refunds has been added (#265).
- Support for Anchor channels has been added (#141).
- Support for sourcing inbound liquidity via LSPS2 just-in-time (JIT) channels has been added (#223).
- The node's local view of the network graph can now be accessed via interface methods (#293).
- A new
next_event_asyncmethod was added that allows polling the event queue asynchronously (#224). - A
default_configmethod was introduced that allows to retrieve sane default values, also in bindings (#242). - The
PaymentFailedandChannelClosedevents now includereasonfields (#260). - All available balances outside of channel balances are now exposed via a unified
list_balancesinterface method (#250). - The maximum in-flight HTLC value has been bumped to 100% of the channel capacity for private outbound channels (#303) and, if JIT channel support is enabled, for inbound channels (#262).
- The fee paid is now exposed via the
PaymentSuccessfulevent (#271). - A
statusmethod has been added allowing to retrieve information about theNode's status (#272). Nodeno longer takes aKVStoretype parameter, allowing to use the filesystem storage backend in bindings (#244).- The payment APIs have been restructured to use per-type (
bolt11,onchain,bolt12, ..) payment handlers which can be accessed via correspondingNode::{type}_paymentmethods (#270). - Fully resolved channel monitors are now eventually moved to an archive location (#307).
- The ability to register and claim from custom payment hashes generated outside of LDK Node has been added (#308).
- Node announcements are now correctly only broadcast if we have any public, sufficiently confirmed channels (#248, #314).
- Falling back to default fee values is now disallowed on mainnet, ensuring we won't startup without a successful fee cache update (#249).
- Persisted peers are now correctly reconnected after startup (#265).
- Concurrent connection attempts to the same peer are no longer overriding each other (#266).
- Several steps have been taken to reduce the risk of blocking node operation on wallet syncing in the face of unresponsive Esplora services (#281).
- LDK has been updated to version 0.0.123 (#291).
In total, this release features 54 files changed, 7282 insertions, 2410 deletions in 165 commits from 3 authors, in alphabetical order:
- Elias Rohrer
- jbesraa
- Srikanth Iyengar
This is a bugfix release that reestablishes compatibility of Swift packages with Xcode 15.3 and later.
- Swift bindings can now be built using Xcode 15.3 and later again (#294)
In total, this release features 5 files changed, 66 insertions, 2 deletions deletions in 2 commits from 1 author, in alphabetical order:
- Elias Rohrer
This is a bugfix release bumping the used LDK and BDK dependencies to the latest stable versions.
- Swift bindings now can be built on macOS again.
- LDK has been updated to version 0.0.121 (#214, #229)
- BDK has been updated to version 0.29.0 (#229)
In total, this release features 30 files changed, 1195 insertions, 1238 deletions in 26 commits from 3 authors, in alphabetical order:
- Elias Rohrer
- GoodDaisy
- Gursharan Singh
- The capability to send pre-flight probes has been added (#147).
- Pre-flight probes will skip outbound channels based on the liquidity available (#156).
- Additional fields are now exposed via
ChannelDetails(#165). - The location of the
logsdirectory is now customizable (#129). - Listening on multiple socket addresses is now supported (#187).
- If available, peer information is now persisted for inbound channels (#170).
- Transaction broadcasting and fee estimation have been reworked and made more robust (#205).
- A module persisting, sweeping, and rebroadcasting output spends has been added (#152).
- No errors are logged anymore when we choose to omit spending of
StaticOutputs (#137). - An inconsistent state of the log file symlink no longer results in an error during startup (#153).
- Our currently supported minimum Rust version (MSRV) is 1.63.0.
- The Rust crate edition has been bumped to 2021.
- Building on Windows is now supported (#160).
- LDK has been updated to version 0.0.118 (#105, #151, #175).
In total, this release features 57 files changed, 7369 insertions, 1738 deletions in 132 commits from 9 authors, in alphabetical order:
- Austin Kelsay
- alexanderwiederin
- Elias Rohrer
- Galder Zamarreño
- Gursharan Singh
- jbesraa
- Justin Moeller
- Max Fang
- Orbital
This is the first non-experimental release of LDK Node.
- Log files are now split based on the start date of the node (#116).
- Support for allowing inbound trusted 0conf channels has been added (#69).
- Non-permanently connected peers are now included in
Node::list_peers(#95). - A utility method for generating a BIP39 mnemonic is now exposed in bindings (#113).
- A
ChannelConfigmay now be specified on channel open or updated afterwards (#122). - Logging has been improved and
Buildernow returns an error rather than panicking if encountering a build failure (#119). - In Rust,
Builder::buildnow returns aNodeobject rather than wrapping it in anArc(#115). - A number of
Configdefaults have been updated and are now exposed in bindings (#124). - The API has been updated to be more aligned between Rust and bindings (#114).
- Our currently supported minimum Rust version (MSRV) is 1.60.0.
- The superfluous
SendingFailedpayment status has been removed, breaking serialization compatibility with alpha releases (#125). - The serialization formats of
PaymentDetailsandEventtypes have been updated, ensuring users upgrading from an alpha release fail to start rather than continuing operating with bogus data. Alpha users should wipe their persisted payment metadata (payments/*) and event queue (events) after the update (#130).
In total, this release includes changes in 52 commits from 2 authors:
- Elias Rohrer
- Richard Ulrich
- Generation of Swift, Kotlin (JVM and Android), and Python bindings is now supported through UniFFI (#25).
- Lists of connected peers and channels may now be retrieved in bindings (#56).
- Gossip data may now be sourced from the P2P network, or a Rapid Gossip Sync server (#70).
- Network addresses are now stored and resolved via a
NetAddresstype (#85). - The
next_eventmethod has been renamedwait_next_eventand a new non-blocking method for event queue access has been introduces asnext_event(#91). - Node announcements are now regularly broadcasted (#93).
- Duplicate payments are now only avoided if we actually sent them out (#96).
- The
Nodemay now be used to sign and verify arbitrary messages (#99). - A
KVStoreinterface is introduced that may be used to implement custom persistence backends (#101). - An
SqliteStorepersistence backend is added and set as the new default (#100). - Successful fee rate updates are now mandatory on
Nodestartup (#102). - The wallet sync intervals are now configurable (#102).
- Granularity of logging can now be configured (#108).
In total, this release includes changes in 64 commits from 4 authors:
- Steve Myers
- Elias Rohrer
- Jurvis Tan
- televis
Note: This release is still considered experimental, should not be run in production, and no compatibility guarantees are given until the release of 0.1.
This is the first alpha release of LDK Node. It features support for sourcing chain data via an Esplora server, file system persistence, gossip sourcing via the Lightning peer-to-peer network, and configurable entropy sources for the integrated LDK and BDK-based wallets.
Note: This release is still considered experimental, should not be run in production, and no compatibility guarantees are given until the release of 0.1.