What happened?
When sending Lightning payments to Phoenix wallet, payments failed with the generic error "Your instant payment failed, please try again". The actual causes varied by payment size but were never surfaced to the user.
Observed behavior:
Attempted multiple payments to Phoenix wallet (111 sats, 1k, 10k, 15k sats)
All failed with generic error: "Your instant payment failed, please try again"
Eventually succeeded with a 5k sat payment
Error message gave no indication of the actual failure reason
Expected behavior:
The error message should:
Distinguish between routing failures vs recipient rejections
Indicate when retries might help vs when the payment amount is the issue
Provide actionable guidance based on the specific failure type
Root Cause Analysis (from logs)
Two distinct failure modes were observed:
Failure Mode 1: Small payments (111-1000 sats) - Phoenix JIT rejection
Phoenix wallet rejected with TemporaryNodeFailure(0x2002)
LDK marked route hint as failed, couldn't find alternative route
Final error: ROUTE_NOT_FOUND
09:35:04 - Initiated sending 111000 msat
Onion Error[from 02bd5206...: TemporaryNodeFailure(0x2002)]
PaymentFailed { reason: Some(RouteNotFound) }
09:35:23 - Initiated sending 1000000 msat
Onion Error[from 02bd5206...: TemporaryNodeFailure(0x2002)]
PaymentFailed { reason: Some(RouteNotFound) }
Failure Mode 2: Large payments (10k-15k sats) - Routing liquidity issues
Various intermediate routing nodes rejected with TemporaryChannelFailure(0x1007)
LDK exhausted all retry attempts across multiple routes
Final error: RETRIES_EXHAUSTED
09:59:24 - Initiated sending 10000000 msat
Onion Error[from 027e9dd6...: TemporaryChannelFailure(0x1007)]
Onion Error[from 02baa725...: TemporaryChannelFailure(0x1007)]
Onion Error[from 028d1db1...: TemporaryChannelFailure(0x1007)]
Onion Error[from 030ef510...: TemporaryChannelFailure(0x1007)]
PaymentFailed { reason: Some(RetriesExhausted) }
10:02:38 - Initiated sending 15000000 msat
Onion Error[from 02dd3fcd...: TemporaryChannelFailure(0x1007)]
PaymentFailed { reason: Some(RetriesExhausted) }
Successful payment: 5k sats
10:18:49 - Initiated sending 5000000 msat
PaymentSent { amount_msat: Some(5000000), fee_paid_msat: Some(7856) }
Note: This was NOT an insufficient local funds issue. The channel had ~49k sats available.
Full Payment Timeline
Time
Amount
Error
Result
09:35:04
111 sats
TemporaryNodeFailure(0x2002)
RouteNotFound
09:35:23
1,000 sats
TemporaryNodeFailure(0x2002)
RouteNotFound
09:56:01
1,000 sats
TemporaryNodeFailure(0x2002)
RouteNotFound
09:59:24
10,000 sats
TemporaryChannelFailure(0x1007) x4
RetriesExhausted
10:00:14
10,000 sats
TemporaryChannelFailure(0x1007)
RetriesExhausted
10:02:38
15,000 sats
TemporaryChannelFailure(0x1007)
RetriesExhausted
10:05:59
10,000 sats
TemporaryChannelFailure(0x1007)
RetriesExhausted
10:12:28
10,000 sats
TemporaryChannelFailure(0x1007)
RetriesExhausted
10:18:49
5,000 sats
-
SUCCESS
Steps to Reproduce
Open Bitkit with an active Lightning channel (~50k sats balance)
Generate invoice in Phoenix wallet for various amounts
Attempt payments of 10k-15k sats
Observe generic error message regardless of actual failure cause
Try 5k sats - should succeed
Suggested Improvements
Parse the LDK failure reason and map to user-friendly messages:
TemporaryNodeFailure → "Recipient temporarily unavailable. Try again in a moment."
TemporaryChannelFailure + RetriesExhausted → "No route found with sufficient liquidity. Try a smaller amount."
RouteNotFound → "Could not find a payment path to recipient."
For RetriesExhausted, consider suggesting a smaller payment amount
Add expandable "Technical details" section showing the actual error code for debugging
Logs / Screenshots / Recordings
Screen_Recording_20260127_110646_Bitkit.mp4
Environment
Device: Android
Network: Mainnet
Bitkit version: 174
Recipient: Phoenix wallet
What happened?
When sending Lightning payments to Phoenix wallet, payments failed with the generic error "Your instant payment failed, please try again". The actual causes varied by payment size but were never surfaced to the user.
Observed behavior:
Expected behavior:
The error message should:
Root Cause Analysis (from logs)
Two distinct failure modes were observed:
Failure Mode 1: Small payments (111-1000 sats) - Phoenix JIT rejection
TemporaryNodeFailure(0x2002)ROUTE_NOT_FOUNDFailure Mode 2: Large payments (10k-15k sats) - Routing liquidity issues
TemporaryChannelFailure(0x1007)RETRIES_EXHAUSTEDSuccessful payment: 5k sats
Note: This was NOT an insufficient local funds issue. The channel had ~49k sats available.
Full Payment Timeline
TemporaryNodeFailure(0x2002)RouteNotFoundTemporaryNodeFailure(0x2002)RouteNotFoundTemporaryNodeFailure(0x2002)RouteNotFoundTemporaryChannelFailure(0x1007)x4RetriesExhaustedTemporaryChannelFailure(0x1007)RetriesExhaustedTemporaryChannelFailure(0x1007)RetriesExhaustedTemporaryChannelFailure(0x1007)RetriesExhaustedTemporaryChannelFailure(0x1007)RetriesExhaustedSteps to Reproduce
Suggested Improvements
Parse the LDK failure reason and map to user-friendly messages:
TemporaryNodeFailure→ "Recipient temporarily unavailable. Try again in a moment."TemporaryChannelFailure+RetriesExhausted→ "No route found with sufficient liquidity. Try a smaller amount."RouteNotFound→ "Could not find a payment path to recipient."For
RetriesExhausted, consider suggesting a smaller payment amountAdd expandable "Technical details" section showing the actual error code for debugging
Logs / Screenshots / Recordings
Screen_Recording_20260127_110646_Bitkit.mp4
Environment