@@ -468,6 +468,7 @@ extension AppViewModel {
468468 data = try await decode ( invoice: uri)
469469try ensureScannedDataHandlingOwnership ( handlingId, claimedContactPaymentContext: claimedContactPaymentContext)
470470}
471+ let requestedAmount = contactPaymentContext? . incomingPaymentRequest? . amountSats
471472
472473switch data {
473474 // BIP21 (Unified) invoice handling
@@ -500,7 +501,7 @@ extension AppViewModel {
500501if nodeIsRunning {
501502 // Node is running → we have fresh balances; validate immediately.
502503 // Prefer lightning; if insufficient or no channels/capacity, fall back to onchain.
503- let canSendLightning = lightningService. canSend ( amountSats: lightningInvoice. amountSatoshis)
504+ let canSendLightning = lightningService. canSend ( amountSats: requestedAmount ?? lightningInvoice. amountSatoshis)
504505
505506if canSendLightning {
506507handleScannedLightningInvoice ( lightningInvoice, bolt11: lnInvoice, onchainInvoice: invoice)
@@ -520,7 +521,10 @@ extension AppViewModel {
520521 // usable channels without capacity).
521522 // Fall back to onchain and validate onchain balance immediately.
522523let onchainBalance = lightningService. balances? . spendableOnchainBalanceSats ?? 0
523- guard validateOnchainBalance ( invoiceAmount: invoice. amountSatoshis, onchainBalance: onchainBalance) else {
524+ guard validateOnchainBalance (
525+ invoiceAmount: requestedAmount ?? invoice. amountSatoshis,
526+ onchainBalance: onchainBalance
527+ ) else {
524528return
525529}
526530
@@ -544,7 +548,10 @@ extension AppViewModel {
544548 // If node is running, validate balance immediately
545549if lightningService. status? . isRunning == true {
546550let onchainBalance = lightningService. balances? . spendableOnchainBalanceSats ?? 0
547- guard validateOnchainBalance ( invoiceAmount: invoice. amountSatoshis, onchainBalance: onchainBalance) else {
551+ guard validateOnchainBalance (
552+ invoiceAmount: requestedAmount ?? invoice. amountSatoshis,
553+ onchainBalance: onchainBalance
554+ ) else {
548555return
549556}
550557}
@@ -575,20 +582,21 @@ extension AppViewModel {
575582
576583 // If node is running, we can check for channels and validate immediately
577584if lightningService. status? . isRunning == true {
585+ let paymentAmount = requestedAmount ?? invoice. amountSatoshis
578586 // If user has no channels at all, they can never pay a pure lightning invoice.
579587 // Show insufficient spending toast and do not navigate to the send flow.
580588let hasAnyChannels = ( lightningService. channels? . isEmpty == false )
581589if !hasAnyChannels {
582590let spendingBalance = lightningService. balances? . totalLightningBalanceSats ?? 0
583- showInsufficientSpendingToast ( invoiceAmount: invoice . amountSatoshis , spendingBalance: spendingBalance)
591+ showInsufficientSpendingToast ( invoiceAmount: paymentAmount , spendingBalance: spendingBalance)
584592return
585593}
586594
587595 // If channels are usable, validate capacity immediately
588596if let channels = lightningService. channels, channels. contains ( where: \. isUsable) {
589- guard lightningService. canSend ( amountSats: invoice . amountSatoshis ) else {
597+ guard lightningService. canSend ( amountSats: paymentAmount ) else {
590598let spendingBalance = lightningService. balances? . totalLightningBalanceSats ?? 0
591- showInsufficientSpendingToast ( invoiceAmount: invoice . amountSatoshis , spendingBalance: spendingBalance)
599+ showInsufficientSpendingToast ( invoiceAmount: paymentAmount , spendingBalance: spendingBalance)
592600return
593601}
594602}
0 commit comments