f03533c67a
Modify the routerrpc SendPayment api to asynchronous. This allows callers to pick up a payment after the rpc connection was lost or lnd was restarted.
87 lines
3.3 KiB
Go
87 lines
3.3 KiB
Go
// +build routerrpc
|
|
|
|
package routerrpc
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/btcsuite/btcutil"
|
|
"github.com/lightningnetwork/lnd/lnwire"
|
|
"github.com/lightningnetwork/lnd/macaroons"
|
|
"github.com/lightningnetwork/lnd/routing"
|
|
)
|
|
|
|
// Config is the main configuration file for the router RPC server. It contains
|
|
// all the items required for the router RPC server to carry out its duties.
|
|
// The fields with struct tags are meant to be parsed as normal configuration
|
|
// options, while if able to be populated, the latter fields MUST also be
|
|
// specified.
|
|
type Config struct {
|
|
// RouterMacPath is the path for the router macaroon. If unspecified
|
|
// then we assume that the macaroon will be found under the network
|
|
// directory, named DefaultRouterMacFilename.
|
|
RouterMacPath string `long:"routermacaroonpath" description:"Path to the router macaroon"`
|
|
|
|
// MinProbability is the minimum required route success probability to
|
|
// attempt the payment.
|
|
MinRouteProbability float64 `long:"minrtprob" description:"Minimum required route success probability to attempt the payment"`
|
|
|
|
// AprioriHopProbability is the assumed success probability of a hop in
|
|
// a route when no other information is available.
|
|
AprioriHopProbability float64 `long:"apriorihopprob" description:"Assumed success probability of a hop in a route when no other information is available."`
|
|
|
|
// PenaltyHalfLife defines after how much time a penalized node or
|
|
// channel is back at 50% probability.
|
|
PenaltyHalfLife time.Duration `long:"penaltyhalflife" description:"Defines the duration after which a penalized node or channel is back at 50% probability"`
|
|
|
|
// AttemptCost is the virtual cost in path finding weight units of
|
|
// executing a payment attempt that fails. It is used to trade off
|
|
// potentially better routes against their probability of succeeding.
|
|
AttemptCost int64 `long:"attemptcost" description:"The (virtual) cost in sats of a failed payment attempt"`
|
|
|
|
// NetworkDir is the main network directory wherein the router rpc
|
|
// server will find the macaroon named DefaultRouterMacFilename.
|
|
NetworkDir string
|
|
|
|
// MacService is the main macaroon service that we'll use to handle
|
|
// authentication for the Router rpc server.
|
|
MacService *macaroons.Service
|
|
|
|
// Router is the main channel router instance that backs this RPC
|
|
// server.
|
|
//
|
|
// TODO(roasbeef): make into pkg lvl interface?
|
|
//
|
|
// TODO(roasbeef): assumes router handles saving payment state
|
|
Router *routing.ChannelRouter
|
|
|
|
// RouterBackend contains shared logic between this sub server and the
|
|
// main rpc server.
|
|
RouterBackend *RouterBackend
|
|
}
|
|
|
|
// DefaultConfig defines the config defaults.
|
|
func DefaultConfig() *Config {
|
|
return &Config{
|
|
AprioriHopProbability: routing.DefaultAprioriHopProbability,
|
|
MinRouteProbability: routing.DefaultMinRouteProbability,
|
|
PenaltyHalfLife: routing.DefaultPenaltyHalfLife,
|
|
AttemptCost: int64(
|
|
routing.DefaultPaymentAttemptPenalty.ToSatoshis(),
|
|
),
|
|
}
|
|
}
|
|
|
|
// GetMissionControlConfig returns the mission control config based on this sub
|
|
// server config.
|
|
func GetMissionControlConfig(cfg *Config) *routing.MissionControlConfig {
|
|
return &routing.MissionControlConfig{
|
|
AprioriHopProbability: cfg.AprioriHopProbability,
|
|
MinRouteProbability: cfg.MinRouteProbability,
|
|
PaymentAttemptPenalty: lnwire.NewMSatFromSatoshis(
|
|
btcutil.Amount(cfg.AttemptCost),
|
|
),
|
|
PenaltyHalfLife: cfg.PenaltyHalfLife,
|
|
}
|
|
}
|