github joinmarket-ng/joinmarket-ng 0.42.0

latest release: 0.42.1
4 hours ago

Fix log flooding caused by a new DoS attack, and harden DoS resistance. New opt-in --view full layout for jm-wallet info --extended with a pipe-table layout, compact status vocabulary, and a dedicated fidelity-bond table. Alognside dependency updates, new configuration options, and several bug fixes.

Added

  • Make maker orderbook response burst capacities and refill rates configurable (8d19eeeb)
  • Add opt-in --view full layout for jm-wallet info --extended: pipe-table layout with compact status vocabulary and a dedicated fidelity-bond table; new wallet.info_show_fidelity_bonds setting (42fda31a)
  • Enable Tor introduction-point rate limiting for the Docker directory server (9b6d7958)

Fixed

  • Allow spending fidelity bonds locked until 2038-02 or later (73c5cd57)
  • Update checks (check_for_updates) are now independent of notifications.use_tor. Operators using use_tor = false for a LAN notification endpoint previously had update checks silently skipped; they now run, always through Tor, whenever check_for_updates is enabled. (8070f185)
  • Preserve frozen fidelity bond indicators and exact confirmations in the full wallet info view (8bd572c0)
  • Fidelity bonds can be frozen/unfrozen in the freeze manager; footer and markers reflect bond state (b3c36501)
  • CLI sweeps fall back to expired, unfrozen fidelity bonds when no regular coins are spendable (d0b02fba)
  • Use the actual home directory in the standalone TUI on macOS and custom-home Linux installations. (8bec3740)
  • Keep selected UTXOs visible above the freeze-manager footer (de5c2e10)
  • Fidelity bonds (expired or not) can no longer be selected as CoinJoin inputs with --select-utxos; the taker now rejects them before contacting makers instead of failing at signing time (d31f2e8a)
  • Fidelity bond UTXOs are never chosen as the PoDLE commitment UTXO (dc5deada)
  • Stop repeating the fidelity bond proof mode in maker debug logs (35f67899)
  • Close direct connections that send traffic without a handshake and reduce the related log noise (a9d5aa21)
  • Clarify which CoinJoin attempts count in maker summaries (f05430d0)
  • Close direct connections that keep flooding after the rate limit and stop logging each dropped line (b4dced34)
  • Replace per-message directory relay logging with a periodic traffic summary (4f864868)
  • Reconnect to directories in parallel and keep in-flight directory handshakes at startup (c8f07386)
  • Clarify that the Tor PoW defense is only effective on Tor builds with the pow module (a8e0df5d)
  • Unify spend/frozn vocabulary for fidelity bonds in the (bed9d990)
  • Redesign the wallet balance footer as a sums-first (bed9d990)
  • Correct bond spendability timing in wallet info and clarify bond-only sweeps (0039b751)
  • Announce offers to reconnected directories as soon as each handshake completes, and run the first reconnect pass sooner after startup (2d1a3d87)

Configuration Changes

Existing config.toml files are not updated automatically. Review the bundled template changes below and apply the relevant options manually.

--- config.toml.template (0.41.0)
+++ config.toml.template (0.42.0)
@@ -256,6 +256,13 @@ [wallet]
 # Increase only if you have a deliberate need to pay fees above 1000 sat/vB.
 # max_fee_rate_sat_vb = 1000

+# Show the fidelity bond branch in the extended wallet info views
+# (`jm-wallet info --extended`). Fidelity bonds are managed separately via
+# `jm-wallet bonds`; set to false to keep the day-to-day view free of bond
+# addresses. When hidden, a one-line notice still points out funded bonds
+# (active/expired count and total sats) so they do not vanish silently.
+# info_show_fidelity_bonds = true
+
 # Mnemonic file settings (optional defaults)
 # mnemonic_file = ""            # Path to mnemonic file
 # Enable BIP39 onboarding and prompting for unregistered wallets. Default: false.
@@ -330,6 +337,8 @@ [notifications]
 # Set to false to keep the ID in local logs only.
 # include_coinjoin_id = true
 # include_nick = true
+# Route notification delivery through Tor. Set to false for a notification server
+# on your LAN. Update checks (below) always use Tor regardless of this setting.
 # use_tor = true

 # Verify TLS certificates of notification servers. Set to false when your
@@ -356,15 +365,17 @@ [notifications]
 # notify_startup = true

 # Periodic summary notifications (enabled by default)
+# Maker summaries count attempts where inputs and output addresses were disclosed.
+# Requests rejected before disclosure are excluded, not counted as missed opportunities.
 # notify_summary = true  # Send periodic CoinJoin stats summary (set to false to disable)
 # notify_summary_balance = false  # Include total balance and UTXO count in summary (privacy risk)
 # summary_interval_hours = 24  # Interval: 24 (daily), 168 (weekly), or custom (1-168)

 # Update checks (opt-in, disabled by default)
 # PRIVACY WARNING: When enabled, this contacts github.com each summary interval
-# to check for new releases. The request is always routed through Tor and is skipped
-# when use_tor = false or the Tor proxy is unavailable. GitHub will still see the
-# Tor exit node IP.
+# to check for new releases. The request is always routed through Tor, even when
+# use_tor = false (which only affects notification delivery), and is skipped when
+# the Tor proxy is unavailable. GitHub will still see the Tor exit node IP.
 # check_for_updates = false

 # Retry failed notifications in the background (recommended for Tor)
@@ -508,7 +519,15 @@ [maker]
 # message_rate_limit = 10   # Messages per second per peer (sustained)
 # message_burst_limit = 100 # Max burst messages per peer

-# Orderbook rate limiting (protects against orderbook spam attacks)
+# Maker-wide response budgets, independent for directory and direct requests.
+# Positive burst capacities (requests) and finite, positive refill rates (requests/second).
+# Higher values permit more signing/network load under spam. Restart the maker to apply.
+# directory_orderbook_response_burst = 200
+# directory_orderbook_response_refill_per_second = 20.0
+# direct_orderbook_response_burst = 20
+# direct_orderbook_response_refill_per_second = 2.0
+
+# Per-peer orderbook rate limiting (protects against orderbook spam attacks)
 # orderbook_rate_limit = 1                  # Max responses per peer per interval
 # orderbook_rate_interval = 10.0            # Interval in seconds
 # orderbook_violation_warning_threshold = 10 # Start exponential backoff after N violations

Don't miss a new joinmarket-ng release

NewReleases is sending notifications on new releases.