Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
3ce094b
fix: wait for on-chain broadcast results
ovitrif Sep 2, 2026
eb11f21
fix: classify broadcast backend results
ovitrif Sep 2, 2026
42f0151
fix: prioritize safety-critical broadcasts
ovitrif Sep 2, 2026
7d5e475
chore: refresh broadcast result artifacts
ovitrif Sep 2, 2026
37064e5
test: cover wire-level electrum rejection
ovitrif Sep 2, 2026
055cae6
chore: refresh exact-head Swift artifact
ovitrif Sep 2, 2026
606603d
docs: place broadcast fixes in current changelog
ovitrif Sep 2, 2026
bca2a15
fix: make explicit broadcast retries safe
ovitrif Sep 2, 2026
c89d696
fix: persist unresolved broadcast intents
ovitrif Sep 2, 2026
bff7f68
fix: require backend evidence before reconciliation
ovitrif Sep 2, 2026
d681253
fix: bound broadcast intent reconciliation
ovitrif Sep 2, 2026
f861323
fix: close unresolved broadcast lifecycles
ovitrif Sep 2, 2026
92a71c1
fix: reconcile ordinary RBF predecessors
ovitrif Sep 2, 2026
4ed56dc
fix: persist canonical RBF payment state
ovitrif Sep 2, 2026
f8dc9d8
fix: retain accepted RBF ancestry
ovitrif Sep 2, 2026
c507ade
Make broadcast lineage recovery crash-safe
ovitrif Sep 2, 2026
8510197
Persist canonical payment before lineage cleanup
ovitrif Sep 2, 2026
527bb32
Require durable wallet confirmation before cleanup
ovitrif Sep 2, 2026
96a83ab
Regenerate UniFFI bindings
ovitrif Sep 2, 2026
935f64d
Update eviction test for eager send indexing
ovitrif Sep 2, 2026
25cab2a
Make transaction abandonment timestamp safe
ovitrif Sep 2, 2026
96db49e
Refresh bindings after abandonment fix
ovitrif Sep 2, 2026
f89f90a
fix: address on-chain broadcast review
ovitrif Sep 2, 2026
9489e9f
fix: address remaining broadcast review
ovitrif Sep 3, 2026
a7c7ce3
fix: gate received on broadcast outcome
ovitrif Sep 3, 2026
054bd6d
fix: resolve stack rebase conflicts
ovitrif Sep 4, 2026
7a580fa
fix: restore rebroadcast event after restart
ovitrif Sep 5, 2026
dcf6611
chore: refresh rc.67 binding artifacts
ovitrif Sep 5, 2026
63b045f
fix: harden pending broadcast lifecycle
ovitrif Sep 7, 2026
23652b2
fix: retain broadcast dispatch outcomes
ovitrif Sep 7, 2026
073a3d9
chore: sync main
ovitrif Sep 7, 2026
2eb27d4
fix: close broadcast delivery gaps
ovitrif Sep 7, 2026
62fac5c
fix: serialize event queue persistence
ovitrif Sep 8, 2026
e1b0667
docs: normalize fork changelog
ovitrif Sep 8, 2026
6b60fe0
feat: persist broadcast outcomes
ovitrif Sep 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 19 additions & 12 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,30 @@
# 0.7.0-rc.66 (Synonym Fork)
# 0.7.0-rc.67 (Synonym Fork)

## Bug Fixes
## Synonym Fork Additions

- Added durable `broadcast_outcome` reconciliation by any RBF-lineage transaction ID with explicit
`Pending`, `Accepted`, and `Abandoned` states. Acceptance-unknown outcomes survive restart and
confirmation until the consumer calls `acknowledge_broadcast_outcome`.
- `list_pending_broadcasts` now returns each unresolved spend's complete RBF lineage so callers can
independently reconcile every replacement before `abandon_pending_broadcast`.
- Explicit on-chain sends now return a transaction ID only after the configured backend accepts
the transaction. Transaction-keyed rejected, not-dispatched, acceptance-unknown failure, and
acceptance-unknown timeout outcomes are distinct. Uncertain signed transactions remain reserved
in a durable intent store for enumeration, exact-byte rebroadcast, sync reconciliation, and
recovery after restart. Callers can explicitly abandon an externally reconciled intent, and RBF
replacements use the same result-bearing, durable lifecycle while exposing only the canonical
transaction in payment history.
- `NodeError` is now a fielded bindings error type so broadcast failures can expose their
transaction ID. Swift error cases no longer contain the legacy generated `message` associated
value, while fieldless Kotlin and Python exceptions have an empty generated message; callers
should match the error variant and use its typed fields.
- Electrum transaction rejections are now logged as failures instead of successful broadcasts.
- Prevent native SIGABRT crashes when stopping and rebuilding the node by making runtime teardown deterministic.
- Keep exported payment and liquidity handles from calling into a shutting-down runtime, refuse restart while detached work is still live, and stop Electrum confirm gating from blocking or panicking shutdown.
- Add keep consumer rules for JNA types UniFFI needs under R8.

# 0.7.0-rc.64 (Synonym Fork)

## Bug Fixes

- The Android AAR now ships targeted R8 consumer keep rules for the UniFFI/JNA FFI surface.

# 0.7.0-rc.63 (Synonym Fork)

## Bug Fixes

- Moved peer persistence to async KV storage so slow writes no longer hold the peer-store lock.
- Prevented Electrum runtime self-drop crashes and unbounded shutdown waits.
- Scaled Electrum full-scan timeouts for additional wallets with the configured stop gap and batch
Expand Down Expand Up @@ -82,8 +91,6 @@
and skips the channel manager when one already exists. Read or deserialization failures fail-closed
to prevent silent data loss.

## Synonym Fork Additions

- Removed `set_accept_stale_channel_monitors` and the patched Synonym `rust-lightning` branch.
Stale channel-monitor mismatches now fail closed with `BuildError::DangerousValue`.
Lightning crates come from crates.io `0.2.0` again.
Expand Down
3 changes: 2 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ exclude = ["bindings/uniffi-bindgen"]

[package]
name = "ldk-node"
version = "0.7.0-rc.66"
version = "0.7.0-rc.67"
authors = ["Elias Rohrer <dev@tnull.de>"]
homepage = "https://lightningdevkit.org/"
license = "MIT OR Apache-2.0"
Expand Down Expand Up @@ -63,6 +63,7 @@ rand = { version = "0.9.2", default-features = false, features = ["std", "thread
chrono = { version = "0.4", default-features = false, features = ["clock"] }
tokio = { version = "1.37", default-features = false, features = [ "rt-multi-thread", "time", "sync", "macros" ] }
tokio-util = { version = "0.7.10", default-features = false, features = ["rt"] }
futures-util = "0.3"
esplora-client = { version = "0.12", default-features = false, features = ["tokio", "async-https-rustls"] }
electrum-client = { version = "0.24.0", default-features = false, features = ["proxy", "use-rustls-ring"] }
libc = "0.2"
Expand Down
4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@

import PackageDescription

let tag = "v0.7.0-rc.66"
let checksum = "21ac13bfdc9fdd3099a688bd0053f8b14c74b5957943b2f09624886e65556a8e"
let tag = "v0.7.0-rc.67"
let checksum = "549f7a962f7b4262ef77b7e65abd6fe588be87801bee35da6295571c141f183b"
let url = "https://github.com/synonymdev/ldk-node/releases/download/\(tag)/LDKNodeFFI.xcframework.zip"

let package = Package(
Expand Down
2 changes: 1 addition & 1 deletion bindings/kotlin/ldk-node-android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ android.useAndroidX=true
android.enableJetifier=true
kotlin.code.style=official
group=com.synonym
version=0.7.0-rc.66
version=0.7.0-rc.67
Loading