If we are a hop hint, use alternate form of estimateRouteFee (#1854)
				
					
				
			* untested draft * handle empty routes
This commit is contained in:
		
							parent
							
								
									efdcbef733
								
							
						
					
					
						commit
						074f0c0634
					
				@ -1,7 +1,7 @@
 | 
			
		||||
import { cachedFetcher } from '@/lib/fetch'
 | 
			
		||||
import { toPositiveNumber } from '@/lib/format'
 | 
			
		||||
import { authenticatedLndGrpc } from '@/lib/lnd'
 | 
			
		||||
import { getIdentity, getHeight, getWalletInfo, getNode, getPayment } from 'ln-service'
 | 
			
		||||
import { getIdentity, getHeight, getWalletInfo, getNode, getPayment, parsePaymentRequest } from 'ln-service'
 | 
			
		||||
import { datePivot } from '@/lib/time'
 | 
			
		||||
import { LND_PATHFINDING_TIMEOUT_MS } from '@/lib/constants'
 | 
			
		||||
 | 
			
		||||
@ -23,11 +23,34 @@ getWalletInfo({ lnd }, (err, result) => {
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
export async function estimateRouteFee ({ lnd, destination, tokens, mtokens, request, timeout }) {
 | 
			
		||||
  // if the payment request includes us as route hint, we needd to use the destination and amount
 | 
			
		||||
  // otherwise, this will fail with a self-payment error
 | 
			
		||||
  if (request) {
 | 
			
		||||
    const inv = parsePaymentRequest({ request })
 | 
			
		||||
    const ourPubkey = await getOurPubkey({ lnd })
 | 
			
		||||
    if (Array.isArray(inv.routes)) {
 | 
			
		||||
      for (const route of inv.routes) {
 | 
			
		||||
        if (Array.isArray(route)) {
 | 
			
		||||
          for (const hop of route) {
 | 
			
		||||
            if (hop.public_key === ourPubkey) {
 | 
			
		||||
              console.log('estimateRouteFee ignoring self-payment route')
 | 
			
		||||
              request = false
 | 
			
		||||
              break
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return await new Promise((resolve, reject) => {
 | 
			
		||||
    const params = {}
 | 
			
		||||
 | 
			
		||||
    if (request) {
 | 
			
		||||
      console.log('estimateRouteFee using payment request')
 | 
			
		||||
      params.payment_request = request
 | 
			
		||||
    } else {
 | 
			
		||||
      console.log('estimateRouteFee using destination and amount')
 | 
			
		||||
      params.dest = Buffer.from(destination, 'hex')
 | 
			
		||||
      params.amt_sat = tokens ? toPositiveNumber(tokens) : toPositiveNumber(BigInt(mtokens) / BigInt(1e3))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user