Skip to content

Signet with no rgs_url configures no gossip source — hint-less invoices always fail with RouteNotFound #86

Description

@hash-money

Summary

On signet, when no RGS URL is configured, the wallet ends up with no gossip source at all — the network-match falls through to an empty arm:

match config.network {
Network::Bitcoin => {
builder.set_gossip_source_rgs(
"https://rapidsync.lightningdevkit.org/snapshot".to_string(),
);
},
Network::Testnet => {
builder.set_gossip_source_rgs(
"https://rapidsync.lightningdevkit.org/testnet/snapshot".to_string(),
);
},
Network::Testnet4 => {},
Network::Signet => {},
Network::Regtest => {
// We don't want to run an RGS server in tests so just enable p2p gossip
builder.set_gossip_source_p2p();
},
}
},

match config.rgs_url {
    Some(url) => builder.set_gossip_source_rgs(url),
    None => match config.network {
        Network::Bitcoin  => /* RGS default */,
        Network::Testnet  => /* RGS default */,
        Network::Testnet4 => {},
        Network::Signet   => {},          // ← nothing
        Network::Regtest  => builder.set_gossip_source_p2p(),
    },
}

With an empty graph, the wallet can only pay invoices whose route hints bridge from its own LSP channels. Any invoice without an r field — e.g. from a node whose channel to the shared LSP is announced — fails instantly with RouteNotFound, before an HTLC is dispatched.

Why RGS isn't a general answer on signet

On our Mutinynet staging deployment (self-hosted LSPS2 LSP + cdk mint), the LSP/mint island doesn't peer with any public node, so its announced channels never reach the public graph — an RGS snapshot (e.g. rgs.mutinynet.com) would teach the wallet 900+ public channels and none of the ones it actually needs. Small signet deployments like this are common for LSP integration testing.

Proposed fix

Fall back to p2p gossip on signet, like regtest:

Network::Signet => builder.set_gossip_source_p2p(),

The wallet's peers are exactly its LSP (and anything the LSP talks to), so p2p gossip teaches it precisely the local topology it needs to route hint-less invoices within the deployment — and signet graphs are small enough that p2p sync cost is negligible. Configured rgs_url would keep taking precedence, so Mutinynet users who want the public graph can still opt in (a p2p fallback alongside RGS would be even better, but the one-line match-arm change already fixes the stranded-by-default case).

Repro details (timed on-device, decoded invoices confirming absent r fields): https://github.com/emergent-money/graduated-wallet/issues/285. Happy to send the PR if the direction sounds right.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions