⚡ Lightning Network · Routing Innovation

Trampoline Routing

How lightweight mobile nodes route payments across the Lightning Network without storing the full 500MB+ channel graph — by delegating path computation to well-connected "trampoline" nodes.

BOLT Draft Light Clients Mobile Wallets Phoenix Wallet Two-Level Routing Nested Onion MPP Compatible

1 · The Problem — Mobile Nodes Can't Know Everything

To send a Lightning payment, a node must compute a route through the network. Route computation requires knowing the full channel graph — every channel, its capacity, fees, and CLTV parameters.

Current Routing Requirements

Data Volume

The Lightning Network channel graph contains 50,000+ active channels and grows by hundreds of channel_update messages per minute. Storing and indexing this data requires 500MB+ of gossip state.

Compute Overhead

Dijkstra or modified Bellman-Ford over 20,000+ nodes requires meaningful CPU. For battery-powered devices and browser contexts, this is expensive — especially repeated per payment.

Sync Requirement

To have a current graph, a node must process channel_announcement, channel_update, and node_announcement messages continuously. Offline nodes miss updates and hold stale routing tables.

Full Node vs. Light Node

Full Routing Node
💾500MB+ gossip store
Full channel graph
Self-computed routes
No routing trust needed
Best privacy (Sphinx)
Always-online required
Server/desktop hardware
Light Node — The Problem
💾~0MB channel graph
Cannot compute routes
Cannot send independently
Depends on external server
Privacy leak to server
Mobile / browser / IoT
Low resource usage

The Workaround: Server-Assisted Routing (Neutrino + Route Servers)

Today's light clients solve the routing problem by asking a server to compute the route. The client sends the payment intent to the server, which returns a route. This works but has a critical flaw:

Privacy Leak — The Server Learns Everything
Alice (mobile)
→ "Route me to Dave, 50,000 sats" →
Routing Server
→ Learns: sender=Alice, receiver=Dave, amount=50k

The server acts as a surveillance point. Every payment Alice makes is visible: who she pays, how much, and when. This defeats the privacy guarantees that Sphinx onion routing was designed to provide.

Impacted Device Categories

📱

Mobile Phones

Limited RAM, background process restrictions, intermittent connectivity. Cannot maintain a live gossip connection or store 500MB of channel data.

🌐

Browser Wallets

Browser storage limits, no persistent TCP connections for gossip, no background processing. WebSocket gossip sync is technically infeasible at scale.

⚙️

IoT / Embedded

Raspberry Pi-class devices running payment processing with micro-controllers. Constrained RAM and flash storage make full graph storage impossible.

2 · Trampoline Routing — The Solution

Trampoline routing solves the light-client routing problem by introducing a two-level routing architecture. Alice computes only a high-level route through a small set of well-connected "trampoline nodes" — and each trampoline node computes the detailed inner route for its segment.

Core Insight: Alice doesn't need to know how to get to Dave. She only needs to know a trampoline node T1 that she can reach, and trust that T1 knows how to reach Dave (or another trampoline T2 who knows Dave). The full graph knowledge lives at the trampolines, not at Alice.

Two-Level Routing Architecture

Level 1 — Alice's Outer Route (Trampoline Hops Only)
📱Alicelight node
🔄T1 (ACINQ)trampoline
🔄T2 (Bitfinex)trampoline
👤Daverecipient
Level 2 — T1's Inner Route (Computed by T1 Using Full Graph)
🔄T1
Bobrouting node
Carolrouting node
🔄T2

What Alice Needs to Know

  • A few trampoline node public keys (cached, rarely updated)
  • That a trampoline node has enough connectivity to reach any destination
  • The trampoline's declared fee rates (public, gossiped separately)
  • The final recipient's pubkey (from invoice)
Alice stores ~1MB of trampoline metadata instead of 500MB of full graph.

What T1 (Trampoline) Does

  • Maintains the full channel graph (it's a full node)
  • Decrypts Alice's outer trampoline layer → sees next hop (T2 or Dave)
  • Runs Dijkstra / modified pathfinding from itself to next trampoline
  • Constructs a regular Sphinx onion from T1→Dave
  • Forwards the inner payment — Dave sees a normal payment from T1

Nested Onion Architecture

Outer Trampoline Onion (constructed by Alice) Inner Route Onion (computed by T1) 📱 Alice light node 🔄 T1 ACINQ 🔄 T2 Bitfinex 👤 Dave recipient Bob Carol trampoline hop Outer onion (Alice's view) Inner route (T1's computation)

3 · Trampoline Onion Packet Structure

Trampoline routing extends the existing Sphinx onion format with a new trampoline payload type. Alice constructs a nested onion: an outer trampoline onion with a small number of hops, and inside each trampoline payload, an encrypted blob that the trampoline uses to construct the inner Sphinx onion.

Trampoline TLV Payload (per BOLT draft)
// Alice constructs trampoline_packet for T1:
type 66531 // trampoline_onion_packet
  version: 0x00
  public_key: 33 bytes (ephemeral)
  hops_data: // encrypted for T1
    next_node: T2_pubkey // or Dave if final hop
    amt_to_forward: 50_500 sats
    outgoing_cltv: 740 blocks
    invoice_features: 0x0022 // MPP etc.
    inner_payload: // encrypted for T2
      next_node: Dave_pubkey
      amt_to_forward: 50_000 sats
      outgoing_cltv: 700 blocks
  hmac: 32 bytes

Key Design Properties

Trampoline Peels One Layer

When T1 receives the payment, it decrypts its trampoline payload. It sees the next trampoline (T2) and an encrypted inner blob. T1 then:

  1. Uses its full graph to find a path T1 → T2
  2. Constructs a new regular Sphinx onion from T1 to T2
  3. Passes along the remaining encrypted trampoline blob for T2
  4. Forwards the payment on the computed inner route

Dave Sees Nothing Special

From Dave's perspective, the payment arrives as a standard Sphinx onion from T2. Dave has no idea:

  • That Alice used trampoline routing
  • That ACINQ (T1) was involved in routing
  • That Alice is a light node with no graph
  • How many trampolines were in Alice's path
Dave compatibility: any existing LN recipient works with trampoline — no changes needed.

Privacy Analysis: Sphinx vs. Trampoline

Property Standard Sphinx Trampoline (1 hop) Trampoline (2 hops)
Sender identity to routing nodes Hidden T1 knows Alice T1 knows Alice
Recipient identity to routing nodes Hidden T1 knows Dave T1 knows T2 only
Recipient identity to first trampoline Fully exposed Hidden behind T2
Payment amount to routing nodes Approximate only T1 sees full amount T1 sees T2 amount
Graph knowledge required by sender Full graph (500MB+) Trampoline list only Trampoline list only

4 · Interactive Trampoline Payment Demo

📱
Alice
light node
🔄
T1 (ACINQ)
trampoline
🔄
T2 (Bitfinex)
trampoline
👤
Dave
recipient
Bob
Carol
Eve
Ready — Choose a routing method above
00:00System ready. Alice wants to send 50,000 sats to Dave.

5 · Trampoline vs. Other Light Client Approaches

Approach Storage Privacy Offline Support Trust Needed Example
Full Node 500MB+ Best (Sphinx) Needs online None LND, CLN, Eclair
Trampoline ~1MB Good (2 trampolines) Excellent Trampoline nodes Phoenix Wallet
Server Routing ~0MB Poor (server knows all) Good Routing server Custodial apps
Neutrino + Server ~50MB Medium Good Block filter server Breez (old)
Partial Graph Sync ~5–20MB Good Partial Gossip peers LDK-based wallets

When to Use Trampoline

  • Mobile wallets — battery, bandwidth, storage constraints
  • Infrequent senders — not worth syncing full graph
  • Privacy-sensitive users — server routing is worse
  • IoT / embedded — cannot maintain gossip state
  • Browser wallets — no background process for sync
  • Phoenix Wallet is the primary real-world example

When NOT to Use Trampoline

  • Routing nodes — need full graph to earn routing fees
  • High-frequency traders — extra latency from trampoline computation adds up
  • Fee-critical applications — 2–3× overhead vs. direct routing
  • Maximum privacy requirements — trampoline learns more than normal routing nodes
  • Custom route optimization — can't control inner path

6 · Fee Structure in Trampoline Routing

Trampoline routing introduces a two-layer fee problem: Alice pays fees for both the outer trampoline hops and the inner routing hops that T1 computes. The challenge is that T1 doesn't know the exact inner route cost until it computes it at payment time.

Fee Decomposition

  • Alice → T1 segment fee: standard routing fees for channels between Alice and T1
  • T1 trampoline fee: T1's declared fee for the trampoline service (covers inner route + profit)
  • T1 → T2 inner route fee: embedded within T1's trampoline fee buffer
  • T2 → Dave segment fee: T2's inner routing costs

The Buffer Mechanism

T1 declares a trampoline fee rate (e.g. 500 ppm). Alice includes enough sats to cover T1's estimated inner route cost plus T1's declared fee.

  • If inner route is cheaper than estimated → T1 keeps difference (profit)
  • If inner route is more expensive → T1 absorbs the difference (risk)
Implication: Trampolines are incentivized to overestimate fees slightly to protect against expensive inner routes.

Interactive Fee Calculator

50,000 sats
500 ppm
3 hops
100 ppm
Direct Routing Fee
50 sats
100 ppm
Trampoline Fee (total)
315 sats
630 ppm
Overhead vs Direct
+265 sats
6.3× higher
Direct routing 100 ppm
Trampoline routing 630 ppm
Note: Even with 3–5× higher fees, trampoline fees on small payments are tiny in absolute terms. 500 sats on a 50k sat payment = ~$0.002 at $40k/BTC. The convenience-privacy tradeoff typically outweighs the fee overhead for light clients.

7 · Multi-Path Payments (MPP) with Trampoline

MPP splits a payment across multiple routes to improve success rates and enable larger payments. For light nodes, MPP is even harder than single-path — you'd need to find multiple disjoint routes in the full graph. Trampoline makes MPP practical for light clients.

The MPP Problem for Light Nodes

Traditional MPP requires Alice to:

  • Know the full graph to find multiple routes
  • Estimate available capacity on each path
  • Ensure disjoint paths to avoid correlation
  • Coordinate payment parts atomically

All of these require graph knowledge — impossible for light nodes.

Trampoline + MPP Solution

Alice creates multiple trampoline paths to different trampolines. Each trampoline independently routes its part to Dave. Dave sees normal MPP parts:

  • Alice → T1 (Part 1, 40k sats) → T1 finds path → Dave
  • Alice → T2 (Part 2, 35k sats) → T2 finds path → Dave
  • Alice → T3 (Part 3, 25k sats) → T3 finds path → Dave
  • Dave aggregates: 40k + 35k + 25k = 100k sats
Atomicity preserved: All MPP parts use the same payment hash (from Dave's invoice). Dave only releases the preimage when all parts arrive — standard MPP aggregation works unchanged with trampoline.

Trampoline MPP Animation

Total: 100,000 sats → Dave
Path 1 — via T1 (ACINQ) 40,000 sats
Alice T1 (ACINQ) Bob Carol Dave
Path 2 — via T2 (Bitfinex) 35,000 sats
Alice T2 (Bitfinex) Eve Frank Dave
Path 3 — via T3 (River LN) 25,000 sats
Alice T3 (River) Grace Dave
Dave's Total Received
0 sats

8 · Current Deployment & Future

Phoenix Wallet — The Leading Trampoline Implementation

Phoenix by ACINQ is the most widely used mobile Lightning wallet and the primary real-world deployment of trampoline routing. It uses ACINQ's own infrastructure as the default trampoline node, enabling a seamless mobile experience without requiring users to sync any channel graph.

  • Trampoline node: ACINQ's node (automatically used, no config needed)
  • Privacy tradeoff: ACINQ sees Alice's sender identity and Dave's receiver identity for every payment
  • UX benefit: Zero graph sync — app works immediately after install
  • Self-custody: User holds their own keys despite light client architecture

Who Uses Trampoline Today

  • Phoenix Wallet — Production, millions of payments
  • Eclair — Desktop client, trampoline sender + receiver support
  • ACINQ — Primary trampoline node operator
  • BOLT status: Draft proposal, not yet merged into official BOLTs
  • Eclair and Phoenix use a shared Scala implementation

BOLT Standardization Status

  • Original proposal by Bastien Teinturier (ACINQ) — 2019
  • Multiple revisions incorporating community feedback
  • Eclair implementation as reference
  • Not yet in numbered BOLTs (BOLT #11 candidate area)
  • Interoperability test vectors shared publicly
Status: Trampoline is production-deployed but not yet standardized. Other implementations (LND, CLN, LDK) do not yet support it.

Privacy Evolution Timeline

Past — 2019–2022
Single trampoline (ACINQ). T1 knows Alice, amount, and Dave. Phoenix ships this for maximum UX convenience over privacy.
Current — 2023–2025
Phoenix 2.0 with optional 2-trampoline paths. T1 knows Alice but not Dave's final identity (only T2). Significant privacy improvement for minimal fee overhead.
Near Future
Multi-trampoline selection algorithms. Alice chooses trampolines from a growing set of operators, breaking ACINQ's single-party visibility. Reputation/fee-based selection.
Long Term
Trampoline anonymity sets — groups of trampolines rotate within a payment, making it impossible for any single trampoline to link sender and receiver. Zero-knowledge route verification proposals.

Future Improvements

Multi-Trampoline Privacy

Instead of a single ACINQ trampoline, Alice routes through 2–3 trampolines from different operators:

📱Alice
🔄T1
🔄T2
👤Dave

T1 (ACINQ) learns only that Alice paid toward T2. T2 (Bitfinex) learns only that T1 paid toward Dave. Neither knows the full sender-receiver pair.

Trampoline Anonymity Sets

A group of trampoline nodes form an "anonymity set" — Alice addresses her payment to the group, and any member can process it. The selected member changes per payment.

  • Alice: "Route to {T1, T2, T3} group"
  • Network selects one trampoline probabilistically
  • No single operator can build a payment history graph
  • Similar concept to Tor's guard node rotation

9 · Privacy Analysis Deep Dive

Trampoline routing improves on server-assisted routing but introduces a new trusted party — the trampoline node. Understanding exactly what each party learns is critical for privacy-conscious users and wallet designers.

Information Flow: What Each Party Learns

Alice
T1 pubkey T2 pubkey Payment hash H Inner route T1→T2 T2's inner path to Dave
T1 (ACINQ)
Alice pubkey (direct connect) T2 as next trampoline Amount forwarded to T2 Payment hash H T2's route to Dave Dave's identity (if 2-hop)
T2 (Bitfinex)
Prev: T1 Next: Dave pubkey Amount to Dave Payment hash H Alice's identity Alice → T1 path
Routing Nodes (inner path)
Prev hop pubkey Next hop pubkey HTLC amount (their segment) Alice (sender) Dave (recipient) Full route length
Dave
Payment amount Payment hash H Alice's identity Trampoline routing used Route taken
1-Trampoline Privacy (Phoenix Classic)
T1 knows both sender (Alice) AND recipient (Dave) — complete payment surveillance for every transaction. ACINQ builds a comprehensive payment graph.
Amount fully visible to T1
Payment timing and frequency visible
Inner route nodes don't learn Alice or Dave
Better than server routing (cryptographic guarantees vs. plaintext request)
2-Trampoline Privacy (Phoenix 2.0 style)
T1 knows Alice (sender) — unavoidable, she connects to T1 directly
T1 does NOT know Dave — only knows next trampoline T2
T2 knows Dave (recipient) — unavoidable for last-hop trampoline
T2 does NOT know Alice — only knows T1 as previous hop
No single entity sees both sender and receiver

Privacy Improvement Tricks

Dummy Trampoline Hops

Alice adds extra (fake) trampoline layers before T1. T1 can't tell how many trampolines Alice originally included. This provides padding against timing and hop-count analysis.

Alice → T_dummy → T1 → T2 → Dave

T_dummy is actually T1 itself — it peels the dummy layer and sees T2 as next trampoline. T1 doesn't know it was the dummy target.

Fake Entry Trampolines

Alice constructs the onion as if she's connecting from a non-existent previous trampoline. T1 receives the payment thinking it came from a trampoline before Alice.

This confuses observers trying to correlate Alice's outgoing payments with their trampoline entry point.

Trampoline Rotation

Alice maintains a list of multiple trampoline nodes and rotates between them per payment:

  • Payment 1 → T1 (ACINQ)
  • Payment 2 → T2 (Bitfinex)
  • Payment 3 → T3 (River)

No single trampoline builds a complete payment history. Similar to VPN provider rotation.

Comparison: Trampoline vs. Route Blinding

Route Blinding (BOLT #4 extension) solves the recipient privacy problem: Dave can hide his node identity from Alice using blinded paths. Trampoline solves the sender routing capability problem: Alice can route without the full graph. These two techniques are complementary — a trampoline payment can include a route-blinded final segment to Dave, providing both light-client routing and recipient privacy simultaneously.
Technique Solves Privacy Benefit Requirement
Trampoline Light client routing Hides route from Alice's routing nodes Trampoline node support
Route Blinding Recipient identity protection Hides Dave from Alice and routing nodes Receiver-side support
Trampoline + Blinding Both Best of both worlds Both sides must support
Standard Sphinx Routing node privacy Each node sees only prev+next Full graph at sender