mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-06-12 18:01:23 +02:00
multi: use fwding policy from models pkg
This commit is contained in:
parent
59b5fb1565
commit
d5c504c8de
@ -25,7 +25,7 @@ import (
|
|||||||
"github.com/lightningnetwork/lnd/chainntnfs/btcdnotify"
|
"github.com/lightningnetwork/lnd/chainntnfs/btcdnotify"
|
||||||
"github.com/lightningnetwork/lnd/chainntnfs/neutrinonotify"
|
"github.com/lightningnetwork/lnd/chainntnfs/neutrinonotify"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch"
|
"github.com/lightningnetwork/lnd/channeldb/models"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/keychain"
|
"github.com/lightningnetwork/lnd/keychain"
|
||||||
"github.com/lightningnetwork/lnd/kvdb"
|
"github.com/lightningnetwork/lnd/kvdb"
|
||||||
@ -195,7 +195,7 @@ type PartialChainControl struct {
|
|||||||
ChainSource chain.Interface
|
ChainSource chain.Interface
|
||||||
|
|
||||||
// RoutingPolicy is the routing policy we have decided to use.
|
// RoutingPolicy is the routing policy we have decided to use.
|
||||||
RoutingPolicy htlcswitch.ForwardingPolicy
|
RoutingPolicy models.ForwardingPolicy
|
||||||
|
|
||||||
// MinHtlcIn is the minimum HTLC we will accept.
|
// MinHtlcIn is the minimum HTLC we will accept.
|
||||||
MinHtlcIn lnwire.MilliSatoshi
|
MinHtlcIn lnwire.MilliSatoshi
|
||||||
@ -270,7 +270,7 @@ func NewPartialChainControl(cfg *Config) (*PartialChainControl, func(), error) {
|
|||||||
|
|
||||||
switch cfg.PrimaryChain() {
|
switch cfg.PrimaryChain() {
|
||||||
case BitcoinChain:
|
case BitcoinChain:
|
||||||
cc.RoutingPolicy = htlcswitch.ForwardingPolicy{
|
cc.RoutingPolicy = models.ForwardingPolicy{
|
||||||
MinHTLCOut: cfg.Bitcoin.MinHTLCOut,
|
MinHTLCOut: cfg.Bitcoin.MinHTLCOut,
|
||||||
BaseFee: cfg.Bitcoin.BaseFee,
|
BaseFee: cfg.Bitcoin.BaseFee,
|
||||||
FeeRate: cfg.Bitcoin.FeeRate,
|
FeeRate: cfg.Bitcoin.FeeRate,
|
||||||
@ -282,7 +282,7 @@ func NewPartialChainControl(cfg *Config) (*PartialChainControl, func(), error) {
|
|||||||
DefaultBitcoinStaticMinRelayFeeRate,
|
DefaultBitcoinStaticMinRelayFeeRate,
|
||||||
)
|
)
|
||||||
case LitecoinChain:
|
case LitecoinChain:
|
||||||
cc.RoutingPolicy = htlcswitch.ForwardingPolicy{
|
cc.RoutingPolicy = models.ForwardingPolicy{
|
||||||
MinHTLCOut: cfg.Litecoin.MinHTLCOut,
|
MinHTLCOut: cfg.Litecoin.MinHTLCOut,
|
||||||
BaseFee: cfg.Litecoin.BaseFee,
|
BaseFee: cfg.Litecoin.BaseFee,
|
||||||
FeeRate: cfg.Litecoin.FeeRate,
|
FeeRate: cfg.Litecoin.FeeRate,
|
||||||
|
@ -22,7 +22,6 @@ import (
|
|||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
"github.com/lightningnetwork/lnd/channeldb/models"
|
"github.com/lightningnetwork/lnd/channeldb/models"
|
||||||
"github.com/lightningnetwork/lnd/discovery"
|
"github.com/lightningnetwork/lnd/discovery"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch"
|
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/keychain"
|
"github.com/lightningnetwork/lnd/keychain"
|
||||||
"github.com/lightningnetwork/lnd/labels"
|
"github.com/lightningnetwork/lnd/labels"
|
||||||
@ -155,7 +154,7 @@ type reservationWithCtx struct {
|
|||||||
chanAmt btcutil.Amount
|
chanAmt btcutil.Amount
|
||||||
|
|
||||||
// forwardingPolicy is the policy provided by the initFundingMsg.
|
// forwardingPolicy is the policy provided by the initFundingMsg.
|
||||||
forwardingPolicy htlcswitch.ForwardingPolicy
|
forwardingPolicy models.ForwardingPolicy
|
||||||
|
|
||||||
// Constraints we require for the remote.
|
// Constraints we require for the remote.
|
||||||
remoteCsvDelay uint16
|
remoteCsvDelay uint16
|
||||||
@ -433,7 +432,7 @@ type Config struct {
|
|||||||
|
|
||||||
// DefaultRoutingPolicy is the default routing policy used when
|
// DefaultRoutingPolicy is the default routing policy used when
|
||||||
// initially announcing channels.
|
// initially announcing channels.
|
||||||
DefaultRoutingPolicy htlcswitch.ForwardingPolicy
|
DefaultRoutingPolicy models.ForwardingPolicy
|
||||||
|
|
||||||
// DefaultMinHtlcIn is the default minimum incoming htlc value that is
|
// DefaultMinHtlcIn is the default minimum incoming htlc value that is
|
||||||
// set as a channel parameter.
|
// set as a channel parameter.
|
||||||
@ -520,7 +519,7 @@ type Config struct {
|
|||||||
// UpdateForwardingPolicies is used by the manager to update active
|
// UpdateForwardingPolicies is used by the manager to update active
|
||||||
// links with a new policy.
|
// links with a new policy.
|
||||||
UpdateForwardingPolicies func(
|
UpdateForwardingPolicies func(
|
||||||
chanPolicies map[wire.OutPoint]htlcswitch.ForwardingPolicy)
|
chanPolicies map[wire.OutPoint]models.ForwardingPolicy)
|
||||||
|
|
||||||
// OpenChannelPredicate is a predicate on the lnwire.OpenChannel message
|
// OpenChannelPredicate is a predicate on the lnwire.OpenChannel message
|
||||||
// and on the requesting node's public key that returns a bool which
|
// and on the requesting node's public key that returns a bool which
|
||||||
@ -3254,7 +3253,7 @@ func (f *Manager) addToRouterGraph(completeChan *channeldb.OpenChannel,
|
|||||||
// our local policy in the switch to make sure we can forward payments
|
// our local policy in the switch to make sure we can forward payments
|
||||||
// with the correct fees. We can't do this when creating the link
|
// with the correct fees. We can't do this when creating the link
|
||||||
// initially as that only takes the static channel parameters.
|
// initially as that only takes the static channel parameters.
|
||||||
updatedPolicy := map[wire.OutPoint]htlcswitch.ForwardingPolicy{
|
updatedPolicy := map[wire.OutPoint]models.ForwardingPolicy{
|
||||||
completeChan.FundingOutpoint: {
|
completeChan.FundingOutpoint: {
|
||||||
MinHTLCOut: ann.chanUpdateAnn.HtlcMinimumMsat,
|
MinHTLCOut: ann.chanUpdateAnn.HtlcMinimumMsat,
|
||||||
MaxHTLC: ann.chanUpdateAnn.HtlcMaximumMsat,
|
MaxHTLC: ann.chanUpdateAnn.HtlcMaximumMsat,
|
||||||
@ -4624,9 +4623,9 @@ func copyPubKey(pub *btcec.PublicKey) *btcec.PublicKey {
|
|||||||
// defaultForwardingPolicy returns the default forwarding policy based on the
|
// defaultForwardingPolicy returns the default forwarding policy based on the
|
||||||
// default routing policy and our local channel constraints.
|
// default routing policy and our local channel constraints.
|
||||||
func (f *Manager) defaultForwardingPolicy(
|
func (f *Manager) defaultForwardingPolicy(
|
||||||
constraints channeldb.ChannelConstraints) *htlcswitch.ForwardingPolicy {
|
constraints channeldb.ChannelConstraints) *models.ForwardingPolicy {
|
||||||
|
|
||||||
return &htlcswitch.ForwardingPolicy{
|
return &models.ForwardingPolicy{
|
||||||
MinHTLCOut: constraints.MinHTLC,
|
MinHTLCOut: constraints.MinHTLC,
|
||||||
MaxHTLC: constraints.MaxPendingAmount,
|
MaxHTLC: constraints.MaxPendingAmount,
|
||||||
BaseFee: f.cfg.DefaultRoutingPolicy.BaseFee,
|
BaseFee: f.cfg.DefaultRoutingPolicy.BaseFee,
|
||||||
@ -4638,16 +4637,10 @@ func (f *Manager) defaultForwardingPolicy(
|
|||||||
// saveInitialForwardingPolicy saves the forwarding policy for the provided
|
// saveInitialForwardingPolicy saves the forwarding policy for the provided
|
||||||
// chanPoint in the channelOpeningStateBucket.
|
// chanPoint in the channelOpeningStateBucket.
|
||||||
func (f *Manager) saveInitialForwardingPolicy(chanID lnwire.ChannelID,
|
func (f *Manager) saveInitialForwardingPolicy(chanID lnwire.ChannelID,
|
||||||
forwardingPolicy *htlcswitch.ForwardingPolicy) error {
|
forwardingPolicy *models.ForwardingPolicy) error {
|
||||||
|
|
||||||
return f.cfg.ChannelDB.SaveInitialForwardingPolicy(
|
return f.cfg.ChannelDB.SaveInitialForwardingPolicy(
|
||||||
chanID, &models.ForwardingPolicy{
|
chanID, forwardingPolicy,
|
||||||
MinHTLCOut: forwardingPolicy.MinHTLCOut,
|
|
||||||
MaxHTLC: forwardingPolicy.MaxHTLC,
|
|
||||||
BaseFee: forwardingPolicy.BaseFee,
|
|
||||||
FeeRate: forwardingPolicy.FeeRate,
|
|
||||||
TimeLockDelta: forwardingPolicy.TimeLockDelta,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4655,22 +4648,9 @@ func (f *Manager) saveInitialForwardingPolicy(chanID lnwire.ChannelID,
|
|||||||
// channel id from the database which will be applied during the channel
|
// channel id from the database which will be applied during the channel
|
||||||
// announcement phase.
|
// announcement phase.
|
||||||
func (f *Manager) getInitialForwardingPolicy(
|
func (f *Manager) getInitialForwardingPolicy(
|
||||||
chanID lnwire.ChannelID) (*htlcswitch.ForwardingPolicy, error) {
|
chanID lnwire.ChannelID) (*models.ForwardingPolicy, error) {
|
||||||
|
|
||||||
dbPolicy, err := f.cfg.ChannelDB.GetInitialForwardingPolicy(
|
return f.cfg.ChannelDB.GetInitialForwardingPolicy(chanID)
|
||||||
chanID,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &htlcswitch.ForwardingPolicy{
|
|
||||||
MinHTLCOut: dbPolicy.MinHTLCOut,
|
|
||||||
MaxHTLC: dbPolicy.MaxHTLC,
|
|
||||||
BaseFee: dbPolicy.BaseFee,
|
|
||||||
FeeRate: dbPolicy.FeeRate,
|
|
||||||
TimeLockDelta: dbPolicy.TimeLockDelta,
|
|
||||||
}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// deleteInitialForwardingPolicy removes channel fees for this chanID from
|
// deleteInitialForwardingPolicy removes channel fees for this chanID from
|
||||||
|
@ -22,9 +22,9 @@ import (
|
|||||||
"github.com/lightningnetwork/lnd/chainreg"
|
"github.com/lightningnetwork/lnd/chainreg"
|
||||||
acpt "github.com/lightningnetwork/lnd/chanacceptor"
|
acpt "github.com/lightningnetwork/lnd/chanacceptor"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/models"
|
||||||
"github.com/lightningnetwork/lnd/channelnotifier"
|
"github.com/lightningnetwork/lnd/channelnotifier"
|
||||||
"github.com/lightningnetwork/lnd/discovery"
|
"github.com/lightningnetwork/lnd/discovery"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch"
|
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/keychain"
|
"github.com/lightningnetwork/lnd/keychain"
|
||||||
"github.com/lightningnetwork/lnd/lncfg"
|
"github.com/lightningnetwork/lnd/lncfg"
|
||||||
@ -250,7 +250,7 @@ type testNode struct {
|
|||||||
testDir string
|
testDir string
|
||||||
shutdownChannel chan struct{}
|
shutdownChannel chan struct{}
|
||||||
reportScidChan chan struct{}
|
reportScidChan chan struct{}
|
||||||
updatedPolicies chan map[wire.OutPoint]htlcswitch.ForwardingPolicy
|
updatedPolicies chan map[wire.OutPoint]models.ForwardingPolicy
|
||||||
localFeatures []lnwire.FeatureBit
|
localFeatures []lnwire.FeatureBit
|
||||||
remoteFeatures []lnwire.FeatureBit
|
remoteFeatures []lnwire.FeatureBit
|
||||||
|
|
||||||
@ -380,7 +380,7 @@ func createTestFundingManager(t *testing.T, privKey *btcec.PrivateKey,
|
|||||||
shutdownChan := make(chan struct{})
|
shutdownChan := make(chan struct{})
|
||||||
reportScidChan := make(chan struct{})
|
reportScidChan := make(chan struct{})
|
||||||
updatedPolicies := make(
|
updatedPolicies := make(
|
||||||
chan map[wire.OutPoint]htlcswitch.ForwardingPolicy, 1,
|
chan map[wire.OutPoint]models.ForwardingPolicy, 1,
|
||||||
)
|
)
|
||||||
|
|
||||||
wc := &mock.WalletController{
|
wc := &mock.WalletController{
|
||||||
@ -477,7 +477,7 @@ func createTestFundingManager(t *testing.T, privKey *btcec.PrivateKey,
|
|||||||
|
|
||||||
return nil, fmt.Errorf("unable to find channel")
|
return nil, fmt.Errorf("unable to find channel")
|
||||||
},
|
},
|
||||||
DefaultRoutingPolicy: htlcswitch.ForwardingPolicy{
|
DefaultRoutingPolicy: models.ForwardingPolicy{
|
||||||
MinHTLCOut: 5,
|
MinHTLCOut: 5,
|
||||||
BaseFee: 100,
|
BaseFee: 100,
|
||||||
FeeRate: 1000,
|
FeeRate: 1000,
|
||||||
@ -540,7 +540,7 @@ func createTestFundingManager(t *testing.T, privKey *btcec.PrivateKey,
|
|||||||
},
|
},
|
||||||
AliasManager: aliasMgr,
|
AliasManager: aliasMgr,
|
||||||
UpdateForwardingPolicies: func(
|
UpdateForwardingPolicies: func(
|
||||||
p map[wire.OutPoint]htlcswitch.ForwardingPolicy) {
|
p map[wire.OutPoint]models.ForwardingPolicy) {
|
||||||
|
|
||||||
updatedPolicies <- p
|
updatedPolicies <- p
|
||||||
},
|
},
|
||||||
@ -633,7 +633,7 @@ func recreateAliceFundingManager(t *testing.T, alice *testNode) {
|
|||||||
},
|
},
|
||||||
TempChanIDSeed: oldCfg.TempChanIDSeed,
|
TempChanIDSeed: oldCfg.TempChanIDSeed,
|
||||||
FindChannel: oldCfg.FindChannel,
|
FindChannel: oldCfg.FindChannel,
|
||||||
DefaultRoutingPolicy: htlcswitch.ForwardingPolicy{
|
DefaultRoutingPolicy: models.ForwardingPolicy{
|
||||||
MinHTLCOut: 5,
|
MinHTLCOut: 5,
|
||||||
BaseFee: 100,
|
BaseFee: 100,
|
||||||
FeeRate: 1000,
|
FeeRate: 1000,
|
||||||
@ -1146,7 +1146,7 @@ func assertChannelAnnouncements(t *testing.T, alice, bob *testNode,
|
|||||||
// At this point we should also have gotten a policy update that
|
// At this point we should also have gotten a policy update that
|
||||||
// was sent to the switch subsystem. Make sure it contains the
|
// was sent to the switch subsystem. Make sure it contains the
|
||||||
// same values.
|
// same values.
|
||||||
var policyUpdate htlcswitch.ForwardingPolicy
|
var policyUpdate models.ForwardingPolicy
|
||||||
select {
|
select {
|
||||||
case policyUpdateMap := <-node.updatedPolicies:
|
case policyUpdateMap := <-node.updatedPolicies:
|
||||||
require.Len(t, policyUpdateMap, 1)
|
require.Len(t, policyUpdateMap, 1)
|
||||||
@ -1340,7 +1340,7 @@ func assertInitialFwdingPolicyNotFound(t *testing.T, node *testNode,
|
|||||||
|
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
var fwdingPolicy *htlcswitch.ForwardingPolicy
|
var fwdingPolicy *models.ForwardingPolicy
|
||||||
var err error
|
var err error
|
||||||
for i := 0; i < testPollNumTries; i++ {
|
for i := 0; i < testPollNumTries; i++ {
|
||||||
// If this is not the first try, sleep before retrying.
|
// If this is not the first try, sleep before retrying.
|
||||||
@ -3076,7 +3076,7 @@ func TestFundingManagerCustomChannelParameters(t *testing.T) {
|
|||||||
|
|
||||||
// Helper method for checking baseFee and feeRate stored for a
|
// Helper method for checking baseFee and feeRate stored for a
|
||||||
// reservation.
|
// reservation.
|
||||||
assertFees := func(forwardingPolicy *htlcswitch.ForwardingPolicy,
|
assertFees := func(forwardingPolicy *models.ForwardingPolicy,
|
||||||
baseFee, feeRate lnwire.MilliSatoshi) error {
|
baseFee, feeRate lnwire.MilliSatoshi) error {
|
||||||
|
|
||||||
if forwardingPolicy.BaseFee != baseFee {
|
if forwardingPolicy.BaseFee != baseFee {
|
||||||
|
@ -191,7 +191,7 @@ type ChannelLink interface {
|
|||||||
// UpdateForwardingPolicy updates the forwarding policy for the target
|
// UpdateForwardingPolicy updates the forwarding policy for the target
|
||||||
// ChannelLink. Once updated, the link will use the new forwarding
|
// ChannelLink. Once updated, the link will use the new forwarding
|
||||||
// policy to govern if it an incoming HTLC should be forwarded or not.
|
// policy to govern if it an incoming HTLC should be forwarded or not.
|
||||||
UpdateForwardingPolicy(ForwardingPolicy)
|
UpdateForwardingPolicy(models.ForwardingPolicy)
|
||||||
|
|
||||||
// CheckHtlcForward should return a nil error if the passed HTLC details
|
// CheckHtlcForward should return a nil error if the passed HTLC details
|
||||||
// satisfy the current forwarding policy fo the target link. Otherwise,
|
// satisfy the current forwarding policy fo the target link. Otherwise,
|
||||||
|
@ -64,44 +64,6 @@ const (
|
|||||||
DefaultMaxLinkFeeAllocation float64 = 0.5
|
DefaultMaxLinkFeeAllocation float64 = 0.5
|
||||||
)
|
)
|
||||||
|
|
||||||
// ForwardingPolicy describes the set of constraints that a given ChannelLink
|
|
||||||
// is to adhere to when forwarding HTLC's. For each incoming HTLC, this set of
|
|
||||||
// constraints will be consulted in order to ensure that adequate fees are
|
|
||||||
// paid, and our time-lock parameters are respected. In the event that an
|
|
||||||
// incoming HTLC violates any of these constraints, it is to be _rejected_ with
|
|
||||||
// the error possibly carrying along a ChannelUpdate message that includes the
|
|
||||||
// latest policy.
|
|
||||||
type ForwardingPolicy struct {
|
|
||||||
// MinHTLC is the smallest HTLC that is to be forwarded.
|
|
||||||
MinHTLCOut lnwire.MilliSatoshi
|
|
||||||
|
|
||||||
// MaxHTLC is the largest HTLC that is to be forwarded.
|
|
||||||
MaxHTLC lnwire.MilliSatoshi
|
|
||||||
|
|
||||||
// BaseFee is the base fee, expressed in milli-satoshi that must be
|
|
||||||
// paid for each incoming HTLC. This field, combined with FeeRate is
|
|
||||||
// used to compute the required fee for a given HTLC.
|
|
||||||
BaseFee lnwire.MilliSatoshi
|
|
||||||
|
|
||||||
// FeeRate is the fee rate, expressed in milli-satoshi that must be
|
|
||||||
// paid for each incoming HTLC. This field combined with BaseFee is
|
|
||||||
// used to compute the required fee for a given HTLC.
|
|
||||||
FeeRate lnwire.MilliSatoshi
|
|
||||||
|
|
||||||
// TimeLockDelta is the absolute time-lock value, expressed in blocks,
|
|
||||||
// that will be subtracted from an incoming HTLC's timelock value to
|
|
||||||
// create the time-lock value for the forwarded outgoing HTLC. The
|
|
||||||
// following constraint MUST hold for an HTLC to be forwarded:
|
|
||||||
//
|
|
||||||
// * incomingHtlc.timeLock - timeLockDelta = fwdInfo.OutgoingCTLV
|
|
||||||
//
|
|
||||||
// where fwdInfo is the forwarding information extracted from the
|
|
||||||
// per-hop payload of the incoming HTLC's onion packet.
|
|
||||||
TimeLockDelta uint32
|
|
||||||
|
|
||||||
// TODO(roasbeef): add fee module inside of switch
|
|
||||||
}
|
|
||||||
|
|
||||||
// ExpectedFee computes the expected fee for a given htlc amount. The value
|
// ExpectedFee computes the expected fee for a given htlc amount. The value
|
||||||
// returned from this function is to be used as a sanity check when forwarding
|
// returned from this function is to be used as a sanity check when forwarding
|
||||||
// HTLC's to ensure that an incoming HTLC properly adheres to our propagated
|
// HTLC's to ensure that an incoming HTLC properly adheres to our propagated
|
||||||
@ -109,7 +71,7 @@ type ForwardingPolicy struct {
|
|||||||
//
|
//
|
||||||
// TODO(roasbeef): also add in current available channel bandwidth, inverse
|
// TODO(roasbeef): also add in current available channel bandwidth, inverse
|
||||||
// func
|
// func
|
||||||
func ExpectedFee(f ForwardingPolicy,
|
func ExpectedFee(f models.ForwardingPolicy,
|
||||||
htlcAmt lnwire.MilliSatoshi) lnwire.MilliSatoshi {
|
htlcAmt lnwire.MilliSatoshi) lnwire.MilliSatoshi {
|
||||||
|
|
||||||
return f.BaseFee + (htlcAmt*f.FeeRate)/1000000
|
return f.BaseFee + (htlcAmt*f.FeeRate)/1000000
|
||||||
@ -123,7 +85,7 @@ type ChannelLinkConfig struct {
|
|||||||
// deciding whether to forwarding incoming HTLC's or not. This value
|
// deciding whether to forwarding incoming HTLC's or not. This value
|
||||||
// can be updated with subsequent calls to UpdateForwardingPolicy
|
// can be updated with subsequent calls to UpdateForwardingPolicy
|
||||||
// targeted at a given ChannelLink concrete interface implementation.
|
// targeted at a given ChannelLink concrete interface implementation.
|
||||||
FwrdingPolicy ForwardingPolicy
|
FwrdingPolicy models.ForwardingPolicy
|
||||||
|
|
||||||
// Circuits provides restricted access to the switch's circuit map,
|
// Circuits provides restricted access to the switch's circuit map,
|
||||||
// allowing the link to open and close circuits.
|
// allowing the link to open and close circuits.
|
||||||
@ -2522,7 +2484,9 @@ func (l *channelLink) AttachMailBox(mailbox MailBox) {
|
|||||||
// update all of the link's FwrdingPolicy's values.
|
// update all of the link's FwrdingPolicy's values.
|
||||||
//
|
//
|
||||||
// NOTE: Part of the ChannelLink interface.
|
// NOTE: Part of the ChannelLink interface.
|
||||||
func (l *channelLink) UpdateForwardingPolicy(newPolicy ForwardingPolicy) {
|
func (l *channelLink) UpdateForwardingPolicy(
|
||||||
|
newPolicy models.ForwardingPolicy) {
|
||||||
|
|
||||||
l.Lock()
|
l.Lock()
|
||||||
defer l.Unlock()
|
defer l.Unlock()
|
||||||
|
|
||||||
@ -2627,7 +2591,7 @@ func (l *channelLink) CheckHtlcTransit(payHash [32]byte,
|
|||||||
|
|
||||||
// canSendHtlc checks whether the given htlc parameters satisfy
|
// canSendHtlc checks whether the given htlc parameters satisfy
|
||||||
// the channel's amount and time lock constraints.
|
// the channel's amount and time lock constraints.
|
||||||
func (l *channelLink) canSendHtlc(policy ForwardingPolicy,
|
func (l *channelLink) canSendHtlc(policy models.ForwardingPolicy,
|
||||||
payHash [32]byte, amt lnwire.MilliSatoshi, timeout uint32,
|
payHash [32]byte, amt lnwire.MilliSatoshi, timeout uint32,
|
||||||
heightNow uint32, originalScid lnwire.ShortChannelID) *LinkError {
|
heightNow uint32, originalScid lnwire.ShortChannelID) *LinkError {
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
sphinx "github.com/lightningnetwork/lightning-onion"
|
sphinx "github.com/lightningnetwork/lightning-onion"
|
||||||
"github.com/lightningnetwork/lnd/build"
|
"github.com/lightningnetwork/lnd/build"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/models"
|
||||||
"github.com/lightningnetwork/lnd/contractcourt"
|
"github.com/lightningnetwork/lnd/contractcourt"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch/hodl"
|
"github.com/lightningnetwork/lnd/htlcswitch/hodl"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch/hop"
|
"github.com/lightningnetwork/lnd/htlcswitch/hop"
|
||||||
@ -1925,7 +1926,7 @@ func newSingleLinkTestHarness(t *testing.T, chanAmt, chanReserve btcutil.Amount)
|
|||||||
sentMsgs: make(chan lnwire.Message, 2000),
|
sentMsgs: make(chan lnwire.Message, 2000),
|
||||||
quit: make(chan struct{}),
|
quit: make(chan struct{}),
|
||||||
}
|
}
|
||||||
globalPolicy = ForwardingPolicy{
|
globalPolicy = models.ForwardingPolicy{
|
||||||
MinHTLCOut: lnwire.NewMSatFromSatoshis(5),
|
MinHTLCOut: lnwire.NewMSatFromSatoshis(5),
|
||||||
MaxHTLC: lnwire.NewMSatFromSatoshis(chanAmt),
|
MaxHTLC: lnwire.NewMSatFromSatoshis(chanAmt),
|
||||||
BaseFee: lnwire.NewMSatFromSatoshis(1),
|
BaseFee: lnwire.NewMSatFromSatoshis(1),
|
||||||
@ -4374,7 +4375,7 @@ func (h *persistentLinkHarness) restartLink(
|
|||||||
quit: make(chan struct{}),
|
quit: make(chan struct{}),
|
||||||
}
|
}
|
||||||
|
|
||||||
globalPolicy = ForwardingPolicy{
|
globalPolicy = models.ForwardingPolicy{
|
||||||
MinHTLCOut: lnwire.NewMSatFromSatoshis(5),
|
MinHTLCOut: lnwire.NewMSatFromSatoshis(5),
|
||||||
BaseFee: lnwire.NewMSatFromSatoshis(1),
|
BaseFee: lnwire.NewMSatFromSatoshis(1),
|
||||||
TimeLockDelta: 6,
|
TimeLockDelta: 6,
|
||||||
@ -5630,7 +5631,7 @@ func TestExpectedFee(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range testCases {
|
for _, test := range testCases {
|
||||||
f := ForwardingPolicy{
|
f := models.ForwardingPolicy{
|
||||||
BaseFee: test.baseFee,
|
BaseFee: test.baseFee,
|
||||||
FeeRate: test.feeRate,
|
FeeRate: test.feeRate,
|
||||||
}
|
}
|
||||||
@ -5716,7 +5717,7 @@ func TestCheckHtlcForward(t *testing.T) {
|
|||||||
|
|
||||||
link := channelLink{
|
link := channelLink{
|
||||||
cfg: ChannelLinkConfig{
|
cfg: ChannelLinkConfig{
|
||||||
FwrdingPolicy: ForwardingPolicy{
|
FwrdingPolicy: models.ForwardingPolicy{
|
||||||
TimeLockDelta: 20,
|
TimeLockDelta: 20,
|
||||||
MinHTLCOut: 500,
|
MinHTLCOut: 500,
|
||||||
MaxHTLC: 1000,
|
MaxHTLC: 1000,
|
||||||
|
@ -840,7 +840,7 @@ func (f *mockChannelLink) getDustClosure() dustClosure {
|
|||||||
func (f *mockChannelLink) HandleChannelUpdate(lnwire.Message) {
|
func (f *mockChannelLink) HandleChannelUpdate(lnwire.Message) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *mockChannelLink) UpdateForwardingPolicy(_ ForwardingPolicy) {
|
func (f *mockChannelLink) UpdateForwardingPolicy(_ models.ForwardingPolicy) {
|
||||||
}
|
}
|
||||||
func (f *mockChannelLink) CheckHtlcForward([32]byte, lnwire.MilliSatoshi,
|
func (f *mockChannelLink) CheckHtlcForward([32]byte, lnwire.MilliSatoshi,
|
||||||
lnwire.MilliSatoshi, uint32, uint32, uint32,
|
lnwire.MilliSatoshi, uint32, uint32, uint32,
|
||||||
|
@ -611,7 +611,7 @@ func (s *Switch) SendHTLC(firstHop lnwire.ShortChannelID, attemptID uint64,
|
|||||||
// forwarding policies for all links have been updated, or the switch shuts
|
// forwarding policies for all links have been updated, or the switch shuts
|
||||||
// down.
|
// down.
|
||||||
func (s *Switch) UpdateForwardingPolicies(
|
func (s *Switch) UpdateForwardingPolicies(
|
||||||
chanPolicies map[wire.OutPoint]ForwardingPolicy) {
|
chanPolicies map[wire.OutPoint]models.ForwardingPolicy) {
|
||||||
|
|
||||||
log.Tracef("Updating link policies: %v", newLogClosure(func() string {
|
log.Tracef("Updating link policies: %v", newLogClosure(func() string {
|
||||||
return spew.Sdump(chanPolicies)
|
return spew.Sdump(chanPolicies)
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
"github.com/go-errors/errors"
|
"github.com/go-errors/errors"
|
||||||
sphinx "github.com/lightningnetwork/lightning-onion"
|
sphinx "github.com/lightningnetwork/lightning-onion"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/models"
|
||||||
"github.com/lightningnetwork/lnd/contractcourt"
|
"github.com/lightningnetwork/lnd/contractcourt"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch/hop"
|
"github.com/lightningnetwork/lnd/htlcswitch/hop"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
@ -1069,7 +1070,7 @@ func createTwoClusterChannels(t *testing.T, aliceToBob,
|
|||||||
// hopNetwork is the base struct for two and three hop networks
|
// hopNetwork is the base struct for two and three hop networks
|
||||||
type hopNetwork struct {
|
type hopNetwork struct {
|
||||||
feeEstimator *mockFeeEstimator
|
feeEstimator *mockFeeEstimator
|
||||||
globalPolicy ForwardingPolicy
|
globalPolicy models.ForwardingPolicy
|
||||||
obfuscator hop.ErrorEncrypter
|
obfuscator hop.ErrorEncrypter
|
||||||
|
|
||||||
defaultDelta uint32
|
defaultDelta uint32
|
||||||
@ -1078,7 +1079,7 @@ type hopNetwork struct {
|
|||||||
func newHopNetwork() *hopNetwork {
|
func newHopNetwork() *hopNetwork {
|
||||||
defaultDelta := uint32(6)
|
defaultDelta := uint32(6)
|
||||||
|
|
||||||
globalPolicy := ForwardingPolicy{
|
globalPolicy := models.ForwardingPolicy{
|
||||||
MinHTLCOut: lnwire.NewMSatFromSatoshis(5),
|
MinHTLCOut: lnwire.NewMSatFromSatoshis(5),
|
||||||
BaseFee: lnwire.NewMSatFromSatoshis(1),
|
BaseFee: lnwire.NewMSatFromSatoshis(1),
|
||||||
TimeLockDelta: defaultDelta,
|
TimeLockDelta: defaultDelta,
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"github.com/lightningnetwork/lnd/build"
|
"github.com/lightningnetwork/lnd/build"
|
||||||
"github.com/lightningnetwork/lnd/chainntnfs"
|
"github.com/lightningnetwork/lnd/chainntnfs"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/models"
|
||||||
"github.com/lightningnetwork/lnd/channelnotifier"
|
"github.com/lightningnetwork/lnd/channelnotifier"
|
||||||
"github.com/lightningnetwork/lnd/contractcourt"
|
"github.com/lightningnetwork/lnd/contractcourt"
|
||||||
"github.com/lightningnetwork/lnd/discovery"
|
"github.com/lightningnetwork/lnd/discovery"
|
||||||
@ -234,7 +235,7 @@ type Config struct {
|
|||||||
|
|
||||||
// RoutingPolicy is used to set the forwarding policy for links created by
|
// RoutingPolicy is used to set the forwarding policy for links created by
|
||||||
// the Brontide.
|
// the Brontide.
|
||||||
RoutingPolicy htlcswitch.ForwardingPolicy
|
RoutingPolicy models.ForwardingPolicy
|
||||||
|
|
||||||
// Sphinx is used when setting up ChannelLinks so they can decode sphinx
|
// Sphinx is used when setting up ChannelLinks so they can decode sphinx
|
||||||
// onion blobs.
|
// onion blobs.
|
||||||
@ -877,9 +878,9 @@ func (p *Brontide) loadActiveChannels(chans []*channeldb.OpenChannel) (
|
|||||||
// If we don't yet have an advertised routing policy, then
|
// If we don't yet have an advertised routing policy, then
|
||||||
// we'll use the current default, otherwise we'll translate the
|
// we'll use the current default, otherwise we'll translate the
|
||||||
// routing policy into a forwarding policy.
|
// routing policy into a forwarding policy.
|
||||||
var forwardingPolicy *htlcswitch.ForwardingPolicy
|
var forwardingPolicy *models.ForwardingPolicy
|
||||||
if selfPolicy != nil {
|
if selfPolicy != nil {
|
||||||
forwardingPolicy = &htlcswitch.ForwardingPolicy{
|
forwardingPolicy = &models.ForwardingPolicy{
|
||||||
MinHTLCOut: selfPolicy.MinHTLC,
|
MinHTLCOut: selfPolicy.MinHTLC,
|
||||||
MaxHTLC: selfPolicy.MaxHTLC,
|
MaxHTLC: selfPolicy.MaxHTLC,
|
||||||
BaseFee: selfPolicy.FeeBaseMSat,
|
BaseFee: selfPolicy.FeeBaseMSat,
|
||||||
@ -934,7 +935,7 @@ func (p *Brontide) loadActiveChannels(chans []*channeldb.OpenChannel) (
|
|||||||
// addLink creates and adds a new ChannelLink from the specified channel.
|
// addLink creates and adds a new ChannelLink from the specified channel.
|
||||||
func (p *Brontide) addLink(chanPoint *wire.OutPoint,
|
func (p *Brontide) addLink(chanPoint *wire.OutPoint,
|
||||||
lnChan *lnwallet.LightningChannel,
|
lnChan *lnwallet.LightningChannel,
|
||||||
forwardingPolicy *htlcswitch.ForwardingPolicy,
|
forwardingPolicy *models.ForwardingPolicy,
|
||||||
chainEvents *contractcourt.ChainEventSubscription,
|
chainEvents *contractcourt.ChainEventSubscription,
|
||||||
syncStates bool) error {
|
syncStates bool) error {
|
||||||
|
|
||||||
@ -3839,7 +3840,7 @@ func (p *Brontide) addActiveChannel(c *channeldb.OpenChannel) error {
|
|||||||
// the total value of outstanding HTLCs.
|
// the total value of outstanding HTLCs.
|
||||||
fwdMinHtlc := lnChan.FwdMinHtlc()
|
fwdMinHtlc := lnChan.FwdMinHtlc()
|
||||||
defaultPolicy := p.cfg.RoutingPolicy
|
defaultPolicy := p.cfg.RoutingPolicy
|
||||||
forwardingPolicy := &htlcswitch.ForwardingPolicy{
|
forwardingPolicy := &models.ForwardingPolicy{
|
||||||
MinHTLCOut: fwdMinHtlc,
|
MinHTLCOut: fwdMinHtlc,
|
||||||
MaxHTLC: c.LocalChanCfg.MaxPendingAmount,
|
MaxHTLC: c.LocalChanCfg.MaxPendingAmount,
|
||||||
BaseFee: defaultPolicy.BaseFee,
|
BaseFee: defaultPolicy.BaseFee,
|
||||||
|
@ -7,8 +7,8 @@ import (
|
|||||||
|
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/models"
|
||||||
"github.com/lightningnetwork/lnd/discovery"
|
"github.com/lightningnetwork/lnd/discovery"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch"
|
|
||||||
"github.com/lightningnetwork/lnd/kvdb"
|
"github.com/lightningnetwork/lnd/kvdb"
|
||||||
"github.com/lightningnetwork/lnd/lnrpc"
|
"github.com/lightningnetwork/lnd/lnrpc"
|
||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
@ -21,7 +21,7 @@ type Manager struct {
|
|||||||
// UpdateForwardingPolicies is used by the manager to update active
|
// UpdateForwardingPolicies is used by the manager to update active
|
||||||
// links with a new policy.
|
// links with a new policy.
|
||||||
UpdateForwardingPolicies func(
|
UpdateForwardingPolicies func(
|
||||||
chanPolicies map[wire.OutPoint]htlcswitch.ForwardingPolicy)
|
chanPolicies map[wire.OutPoint]models.ForwardingPolicy)
|
||||||
|
|
||||||
// PropagateChanPolicyUpdate is called to persist a new policy to disk
|
// PropagateChanPolicyUpdate is called to persist a new policy to disk
|
||||||
// and broadcast it to the network.
|
// and broadcast it to the network.
|
||||||
@ -66,7 +66,7 @@ func (r *Manager) UpdatePolicy(newSchema routing.ChannelPolicy,
|
|||||||
|
|
||||||
var failedUpdates []*lnrpc.FailedUpdate
|
var failedUpdates []*lnrpc.FailedUpdate
|
||||||
var edgesToUpdate []discovery.EdgeWithInfo
|
var edgesToUpdate []discovery.EdgeWithInfo
|
||||||
policiesToUpdate := make(map[wire.OutPoint]htlcswitch.ForwardingPolicy)
|
policiesToUpdate := make(map[wire.OutPoint]models.ForwardingPolicy)
|
||||||
|
|
||||||
// Next, we'll loop over all the outgoing channels the router knows of.
|
// Next, we'll loop over all the outgoing channels the router knows of.
|
||||||
// If we have a filter then we'll only collected those channels,
|
// If we have a filter then we'll only collected those channels,
|
||||||
@ -106,7 +106,7 @@ func (r *Manager) UpdatePolicy(newSchema routing.ChannelPolicy,
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Add updated policy to list of policies to send to switch.
|
// Add updated policy to list of policies to send to switch.
|
||||||
policiesToUpdate[info.ChannelPoint] = htlcswitch.ForwardingPolicy{
|
policiesToUpdate[info.ChannelPoint] = models.ForwardingPolicy{
|
||||||
BaseFee: edge.FeeBaseMSat,
|
BaseFee: edge.FeeBaseMSat,
|
||||||
FeeRate: edge.FeeProportionalMillionths,
|
FeeRate: edge.FeeProportionalMillionths,
|
||||||
TimeLockDelta: uint32(edge.TimeLockDelta),
|
TimeLockDelta: uint32(edge.TimeLockDelta),
|
||||||
|
@ -7,8 +7,8 @@ import (
|
|||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb/models"
|
||||||
"github.com/lightningnetwork/lnd/discovery"
|
"github.com/lightningnetwork/lnd/discovery"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch"
|
|
||||||
"github.com/lightningnetwork/lnd/kvdb"
|
"github.com/lightningnetwork/lnd/kvdb"
|
||||||
"github.com/lightningnetwork/lnd/lnrpc"
|
"github.com/lightningnetwork/lnd/lnrpc"
|
||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
@ -50,7 +50,7 @@ func TestManager(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateForwardingPolicies := func(
|
updateForwardingPolicies := func(
|
||||||
chanPolicies map[wire.OutPoint]htlcswitch.ForwardingPolicy) {
|
chanPolicies map[wire.OutPoint]models.ForwardingPolicy) {
|
||||||
|
|
||||||
if len(chanPolicies) == 0 {
|
if len(chanPolicies) == 0 {
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user