rpcserver+routerrpc: thread features + payment addr to SendPayment
This commit is contained in:
parent
0993256b77
commit
f868bc128b
@ -602,6 +602,8 @@ func (r *RouterBackend) extractIntentFromSendRequest(
|
||||
payIntent.RouteHints = append(
|
||||
payIntent.RouteHints, payReq.RouteHints...,
|
||||
)
|
||||
payIntent.DestFeatures = payReq.Features
|
||||
payIntent.PaymentAddr = payReq.PaymentAddr
|
||||
} else {
|
||||
// Otherwise, If the payment request field was not specified
|
||||
// (and a custom route wasn't specified), construct the payment
|
||||
|
@ -98,6 +98,8 @@ func (p *paymentSession) RequestRoute(payment *LightningPayment,
|
||||
LastHop: payment.LastHop,
|
||||
CltvLimit: cltvLimit,
|
||||
DestCustomRecords: payment.DestCustomRecords,
|
||||
DestFeatures: payment.DestFeatures,
|
||||
PaymentAddr: payment.PaymentAddr,
|
||||
}
|
||||
|
||||
// We'll also obtain a set of bandwidthHints from the lower layer for
|
||||
@ -131,9 +133,10 @@ func (p *paymentSession) RequestRoute(payment *LightningPayment,
|
||||
route, err := newRoute(
|
||||
sourceVertex, path, height,
|
||||
finalHopParams{
|
||||
amt: payment.Amount,
|
||||
cltvDelta: finalCltvDelta,
|
||||
records: payment.DestCustomRecords,
|
||||
amt: payment.Amount,
|
||||
cltvDelta: finalCltvDelta,
|
||||
records: payment.DestCustomRecords,
|
||||
paymentAddr: payment.PaymentAddr,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
|
@ -1601,6 +1601,19 @@ type LightningPayment struct {
|
||||
// is reached. If nil, any node may be used.
|
||||
LastHop *route.Vertex
|
||||
|
||||
// DestFeatures specifies the set of features we assume the final node
|
||||
// has for pathfinding. Typically these will be taken directly from an
|
||||
// invoice, but they can also be manually supplied or assumed by the
|
||||
// sender. If a nil feature vector is provided, the router will try to
|
||||
// fallback to the graph in order to load a feature vector for a node in
|
||||
// the public graph.
|
||||
DestFeatures *lnwire.FeatureVector
|
||||
|
||||
// PaymentAddr is the payment address specified by the receiver. This
|
||||
// field should be a random 32-byte nonce presented in the receiver's
|
||||
// invoice to prevent probing of the destination.
|
||||
PaymentAddr *[32]byte
|
||||
|
||||
// PaymentRequest is an optional payment request that this payment is
|
||||
// attempting to complete.
|
||||
PaymentRequest []byte
|
||||
|
@ -3241,6 +3241,8 @@ type rpcPaymentIntent struct {
|
||||
routeHints [][]zpay32.HopHint
|
||||
outgoingChannelID *uint64
|
||||
lastHop *route.Vertex
|
||||
destFeatures *lnwire.FeatureVector
|
||||
paymentAddr *[32]byte
|
||||
payReq []byte
|
||||
|
||||
destCustomRecords record.CustomSet
|
||||
@ -3370,6 +3372,8 @@ func (r *rpcServer) extractPaymentIntent(rpcPayReq *rpcPaymentRequest) (rpcPayme
|
||||
payIntent.cltvDelta = uint16(payReq.MinFinalCLTVExpiry())
|
||||
payIntent.routeHints = payReq.RouteHints
|
||||
payIntent.payReq = []byte(rpcPayReq.PaymentRequest)
|
||||
payIntent.destFeatures = payReq.Features
|
||||
payIntent.paymentAddr = payReq.PaymentAddr
|
||||
|
||||
if err := validateDest(payIntent.dest); err != nil {
|
||||
return payIntent, err
|
||||
@ -3492,6 +3496,8 @@ func (r *rpcServer) dispatchPaymentIntent(
|
||||
PaymentRequest: payIntent.payReq,
|
||||
PayAttemptTimeout: routing.DefaultPayAttemptTimeout,
|
||||
DestCustomRecords: payIntent.destCustomRecords,
|
||||
DestFeatures: payIntent.destFeatures,
|
||||
PaymentAddr: payIntent.paymentAddr,
|
||||
}
|
||||
|
||||
preImage, route, routerErr = r.server.chanRouter.SendPayment(
|
||||
|
Loading…
Reference in New Issue
Block a user