Commit graph

2546 commits

Author SHA1 Message Date
Slyghtning
508b9dfdc1
multi: require Loop Out permission for Instant Out
The InstantOut RPC accepts a caller-controlled dest_addr that becomes
the output of the cooperative sweepless sweep (and of the htlc success
sweep on the fallback path), so it is a fund-moving operation equivalent
to LoopOut. Until now it required only swap:execute, while LoopOut
requires both swap:execute and loop:out. A macaroon scoped to
swap:execute -- intended for, say, an autoloop scheduler or a quote
poller -- could therefore drain reservation balances to an attacker
address. ReservationRequest is analogous on the inbound side: it
triggers an outgoing LN prepayment, so it also belongs behind loop:out.

We also harden the address handling in instantout.Manager.NewInstantOut
to match validateLoopOutRequest:

  - sweepAddr.IsForNet(m.cfg.Network) is now enforced. btcutil
    .DecodeAddress is more permissive than IsForNet for some formats
    (notably anything that happens to share a network prefix); without
    the explicit network check cross-chain copy-paste mistakes parse
    silently and then sign over an unspendable output.
  - The address must be one of the formats Loop normally accepts: P2TR /
    P2WSH / P2WPKH / P2SH / P2PKH. Anything else (e.g. a future address
    type that the user's wallet would otherwise interpret differently)
    is rejected up front rather than failing later in the signing path.

InstantOutQuote and ReservationQuote stay on swap:read since they are
read-only.
2026-08-11 15:02:42 +02:00
Slyghtning
e4c4e11627
loopd: nil-guard reservation/instant-out RPC handlers
When loopd is started without --experimental the swap client server's
reservationManager and instantOutManager are nil. ListReservations
already returns codes.Unimplemented in that case; the rest of the
instant-out / reservation RPC family didn't, and would dereference a
nil pointer.

Affected handlers (all of which now return the same Unimplemented
status):

  - ReservationRequest (new in PR #883)
  - ReservationQuote   (new in PR #883)
  - InstantOut
  - InstantOutQuote
  - ListInstantOuts

Without this fix an authenticated caller can crash the daemon by
invoking any of these RPCs against a non-experimental loopd. With
default localhost binding the attack surface is small, but loop is
also commonly fronted by lit / LSP wrappers that expose RPCs to other
internal services, so a single packet is enough for a remote DoS.
2026-08-11 14:57:32 +02:00
sputn1ck
56be61c31d
cmd: add new reservation clis 2026-08-11 14:57:32 +02:00
sputn1ck
b48fd9aa7c
looprpc_server: add reservation calls 2026-08-11 14:57:32 +02:00
sputn1ck
04a874e0e1
looprpc: add client calls 2026-08-11 14:57:32 +02:00
sputn1ck
5ca0ccd486
loopd: update reservation cfg 2026-08-11 14:56:59 +02:00
sputn1ck
327d4b42d0
loopdb: store reservation prepay invoice 2026-08-11 14:56:59 +02:00
sputn1ck
4f121287d6
reservation: add client requested reservations to manager 2026-08-11 14:56:59 +02:00
sputn1ck
23e533eebc
reservations: add client requested fsm 2026-08-11 14:56:26 +02:00
sputn1ck
af017413a3
swapserverrpc: add buying reservations 2026-08-11 14:56:26 +02:00
sputn1ck
96572f39ba
reservation: add protocol version 2026-08-11 14:56:25 +02:00
Slyghtning
4f07354ff5
docs: document instant out reliability improvements
Record the reservation and Instant Out validation, recovery, fee-limit,
and lifecycle updates in the next release notes.
2026-08-11 12:16:08 +02:00
Slyghtning
63a0bccf3d
instantout: enforce the accepted swap fee
Carry the accepted quote into each request, persist it, and reject
invoices above that limit while retaining millisatoshi precision.
2026-08-11 12:16:08 +02:00
Slyghtning
cfbf74161b
instantout: recheck reservation timing during recovery
Compare reservation expiry with the current height during recovery and
use the HTLC path when the remaining window is too short.
2026-08-11 12:16:07 +02:00
Slyghtning
adc181ea83
instantout: close unfinished MuSig2 sessions
Clean up abandoned signing sessions on error paths while leaving
completed sessions to lnd.
2026-08-11 12:16:07 +02:00
Slyghtning
e0412ac775
instantout: verify finalized MuSig2 witnesses
Run script validation for every combined signature before accepting a
finalized transaction, surfacing invalid witnesses immediately.
2026-08-11 12:16:07 +02:00
Slyghtning
35a2df080f
instantout: validate MuSig2 response dimensions
Check nonce, signature, session, and transaction input counts before
indexing signing vectors, returning clear errors for incomplete data.
2026-08-11 12:16:06 +02:00
Slyghtning
a491bcc505
reservation: validate confirmed output amounts
Compare each confirmed transaction output with the expected reservation
amount before advancing the state machine.
2026-08-11 12:16:06 +02:00
Slyghtning
94015a5a9a
reservation: bound and prune active state machines
Limit active reservation state machines, remove terminal entries from
memory, and count recovered entries toward the same bound.
2026-08-11 12:16:06 +02:00
Slyghtning
e11c0bdfaf reservation: reject duplicate reservation entries
Check active and persisted reservations before creating a new state
machine, preserving the existing reservation when a duplicate arrives.
2026-08-11 11:32:52 +02:00
Slyghtning
055a80cf4e reservation: isolate asynchronous initialization errors
Use a goroutine-local result for event dispatch so observer errors
remain independent and initialization outcomes stay deterministic.
2026-08-11 11:31:55 +02:00
Slyghtning
a4973caa08 reservation: keep processing after notification errors
Log individual reservation initialization failures and continue
consuming later notifications instead of stopping the manager.
2026-08-11 11:31:08 +02:00
Slyghtning
6825e35594 looprpc: align instant out permissions with loop out
Apply the loop:out permission to Instant Out and reservation RPCs so
their authorization requirements match the rest of the Loop Out API.
2026-08-11 11:30:10 +02:00
Slyghtning
1b81a06b42
Merge pull request #1192 from hieblmi/no-change-label
Some checks failed
CI / Commit Message (push) Has been cancelled
CI / RPC compilation check (push) Has been cancelled
CI / SQL compilation check (push) Has been cancelled
CI / go mod check (push) Has been cancelled
CI / build and lint code (push) Has been cancelled
CI / verify that auto-generated documentation is up-to-date (push) Has been cancelled
CI / run unit-test sqlite3 race (push) Has been cancelled
CI / run unit-test postgres race (push) Has been cancelled
CI / run LiT itests (push) Has been cancelled
CI / run LiT unit tests (push) Has been cancelled
github: allow no-changelog to skip release notes
2026-08-06 11:06:38 +02:00
Slyghtning
57fb007f95
docs: document no-changelog release note opt-out 2026-08-04 11:02:33 +02:00
Slyghtning
6f0d817db4
github: allow no-changelog to skip release notes 2026-08-04 11:02:22 +02:00
Slyghtning
f5f76a61cc
Merge pull request #1191 from hieblmi/docs-gate
Some checks failed
CI / Release Notes (push) Has been cancelled
CI / Commit Message (push) Has been cancelled
CI / RPC compilation check (push) Has been cancelled
CI / SQL compilation check (push) Has been cancelled
CI / go mod check (push) Has been cancelled
CI / build and lint code (push) Has been cancelled
CI / verify that auto-generated documentation is up-to-date (push) Has been cancelled
CI / run unit-test sqlite3 race (push) Has been cancelled
CI / run unit-test postgres race (push) Has been cancelled
CI / run LiT itests (push) Has been cancelled
CI / run LiT unit tests (push) Has been cancelled
github: require release notes for pull requests
2026-08-03 11:48:15 +02:00
Slyghtning
4016f4a8f2
docs: instruct agents to add release notes 2026-08-03 11:18:14 +02:00
Slyghtning
414760c607
github: require release notes for pull requests 2026-08-03 11:17:54 +02:00
Slyghtning
a8e3e9c853
Merge pull request #1189 from hieblmi/tapd-client-fixes
assets: harden tapd client lifecycle and RFQ handling
2026-08-03 11:10:36 +02:00
Slyghtning
b686d97445
docs: note tapd client hardening
Document the RFQ validation, cache responsiveness, and tapd connection
lifecycle fixes in the rolling release notes.
2026-08-03 10:05:06 +02:00
Slyghtning
9e97992e18
assets: validate accepted RFQ asset rates
Validate the bid rate before returning an accepted asset sell quote.
This prevents malformed rates from reaching downstream quote arithmetic,
where nil or non-positive values can panic. Cover valid and malformed
responses with table-driven tests.
2026-08-03 10:05:05 +02:00
Slyghtning
cfbade1239
assets: reject malformed RFQ asset rates
Validate the rate pointer and decimal coefficient before converting
asset units. Return errors for nil, malformed, non-positive, and
oversized-scale rates instead of allowing nil dereferences or
division-by-zero panics. Add regression tests for each case.
2026-08-03 10:05:05 +02:00
Slyghtning
dc39d63d8d
assets: avoid locking cache during RPC
Restrict the asset-name cache mutex to map access so a slow
QueryAssetStats call cannot block cached readers. Use an RWMutex for
independent cache reads and add a concurrent regression test.
2026-08-03 10:05:05 +02:00
Slyghtning
c7d5e466cd
assets: validate RFQ timeout conversion
Convert the configured duration once during client creation. Round
positive fractional durations up to the whole seconds accepted by tapd.
Reject zero, negative, and overflowing values, and cover the conversion
boundaries with unit tests.
2026-08-03 10:05:05 +02:00
Slyghtning
514c3f06ad
loopd: close tapd client connections
Close the TapdClient when daemon initialization fails, during normal
shutdown, and after the view command completes. This prevents gRPC
transport resources from leaking across embedded daemon lifecycles and
error paths.
2026-08-03 10:05:04 +02:00
Slyghtning
8f831e85ae
Merge pull request #1188 from lightninglabs/gateway-v0.6.0
Some checks failed
CI / Commit Message (push) Has been cancelled
CI / RPC compilation check (push) Has been cancelled
CI / SQL compilation check (push) Has been cancelled
CI / go mod check (push) Has been cancelled
CI / build and lint code (push) Has been cancelled
CI / verify that auto-generated documentation is up-to-date (push) Has been cancelled
CI / run unit-test sqlite3 race (push) Has been cancelled
CI / run unit-test postgres race (push) Has been cancelled
CI / run LiT itests (push) Has been cancelled
CI / run LiT unit tests (push) Has been cancelled
github: pin gateway v0.6.0 (Opus 5, /gateway check)
2026-07-28 09:07:41 +02:00
saubyk
2dda482660
github: pin gateway v0.6.0 (Opus 5, /gateway check)
Bumps both pins together: the gateway-action SHA and the runtime_ref it
resolves. runtime_ref is pinned explicitly rather than left to the
action's default, so bumping only the action would leave the job on the
v0.5.0 runtime.

v0.6.0 adds no trigger and no input, so the rest of the shim is
unchanged.

Also corrects a copy-paste artifact in the adjacent comment, which said
runtime upgrades go through an lnd PR.
2026-07-27 20:46:33 -07:00
Slyghtning
dede47e727
Merge pull request #1187 from hieblmi/review-gateway
github: add gateway code-review workflow
2026-07-27 21:53:55 +02:00
Slyghtning
f51148a3a0
github: add gateway code-review workflow 2026-07-27 13:25:29 +02:00
Slyghtning
4acabf72ee
Merge pull request #1181 from hieblmi/release-notes
docs: backdated and new release notes
2026-07-27 12:55:37 +02:00
Slyghtning
6b942941fb
docs: complete historical release notes
Document every published Loop release and preserve authoritative notes.

Add the next-release workflow and rebuild chronological navigation.

Rename the reproducible-build guide for clarity.
2026-07-27 11:54:05 +02:00
Slyghtning
edad26b876
Merge pull request #1165 from GustavoStingelin/feat/monitor-static-address
Some checks failed
CI / Commit Message (push) Has been cancelled
CI / RPC compilation check (push) Has been cancelled
CI / SQL compilation check (push) Has been cancelled
CI / go mod check (push) Has been cancelled
CI / build and lint code (push) Has been cancelled
CI / verify that auto-generated documentation is up-to-date (push) Has been cancelled
CI / run unit-test sqlite3 race (push) Has been cancelled
CI / run unit-test postgres race (push) Has been cancelled
CI / run LiT itests (push) Has been cancelled
CI / run LiT unit tests (push) Has been cancelled
multi: add static address loop in monitor
2026-07-24 15:19:11 +02:00
Slyghtning
4732ec71e9
Merge pull request #1185 from lightninglabs/dependabot/go_modules/swapserverrpc/google.golang.org/grpc-1.82.1
build(deps): bump google.golang.org/grpc from 1.79.3 to 1.82.1 in /swapserverrpc
2026-07-24 10:57:12 +02:00
Slyghtning
4ca7a9c5ec
Merge pull request #1180 from hieblmi/multi-address-proto
Some checks are pending
CI / Commit Message (push) Waiting to run
CI / RPC compilation check (push) Waiting to run
CI / SQL compilation check (push) Waiting to run
CI / go mod check (push) Waiting to run
CI / build and lint code (push) Waiting to run
CI / verify that auto-generated documentation is up-to-date (push) Waiting to run
CI / run unit-test sqlite3 race (push) Waiting to run
CI / run unit-test postgres race (push) Waiting to run
CI / run LiT itests (push) Waiting to run
CI / run LiT unit tests (push) Waiting to run
swapserverrpc: add multi-address proofs
2026-07-23 21:14:50 +02:00
Slyghtning
cb97b2a37f
swapserverrpc: add multi-address proofs
Carry each deposit client derivation key and an optional generated
change descriptor in static-address loop-in and withdrawal requests. The
server can use these fields to validate scripts it does not store
directly.
2026-07-23 20:59:45 +02:00
Boris Nagaev
4161f5d128
multi: bump google.golang.org/grpc to v1.82.1 2026-07-23 13:13:57 -05:00
Alex Bosworth
d80733a710
Merge pull request #1184 from lightninglabs/alexbosworth-patch-19
version: bump version to v0.34.0-beta
2026-07-23 10:10:51 -07:00
Slyghtning
dbf1205b57
Merge pull request #1183 from hieblmi/gate-commit-messages
Some checks are pending
CI / Commit Message (push) Waiting to run
CI / RPC compilation check (push) Waiting to run
CI / SQL compilation check (push) Waiting to run
CI / go mod check (push) Waiting to run
CI / build and lint code (push) Waiting to run
CI / verify that auto-generated documentation is up-to-date (push) Waiting to run
CI / run unit-test sqlite3 race (push) Waiting to run
CI / run unit-test postgres race (push) Waiting to run
CI / run LiT itests (push) Waiting to run
CI / run LiT unit tests (push) Waiting to run
build: add commit message tooling
2026-07-22 21:16:13 +02:00
Alex Bosworth
a463c734ea
version: bump version to v0.34.0-beta 2026-07-22 08:53:15 -07:00