itest: break down open channel fee policy
This commit is contained in:
2 files changed
+275
-151
No files matched your search
@@ -512,10 +512,6 @@ var allTestCases = []*lntest.TestCase{
|
|||||||
Name: "trackpayments compatible",
|
Name: "trackpayments compatible",
|
||||||
TestFunc: testTrackPaymentsCompatible,
|
TestFunc: testTrackPaymentsCompatible,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
Name: "open channel fee policy",
|
|
||||||
TestFunc: testOpenChannelUpdateFeePolicy,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
Name: "custom message",
|
Name: "custom message",
|
||||||
TestFunc: testCustomMessage,
|
TestFunc: testCustomMessage,
|
||||||
@@ -683,4 +679,5 @@ func init() {
|
|||||||
allTestCases = append(allTestCases, channelRestoreTestCases...)
|
allTestCases = append(allTestCases, channelRestoreTestCases...)
|
||||||
allTestCases = append(allTestCases, fundUtxoSelectionTestCases...)
|
allTestCases = append(allTestCases, fundUtxoSelectionTestCases...)
|
||||||
allTestCases = append(allTestCases, zeroConfPolicyTestCases...)
|
allTestCases = append(allTestCases, zeroConfPolicyTestCases...)
|
||||||
|
allTestCases = append(allTestCases, channelFeePolicyTestCases...)
|
||||||
}
|
}
|
||||||
+274
-147
@@ -3,7 +3,6 @@ package itest
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/btcsuite/btcd/btcutil"
|
"github.com/btcsuite/btcd/btcutil"
|
||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
@@ -18,6 +17,31 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// channelFeePolicyTestCases defines a set of tests to check the update channel
|
||||||
|
// policy fee behavior.
|
||||||
|
var channelFeePolicyTestCases = []*lntest.TestCase{
|
||||||
|
{
|
||||||
|
Name: "channel fee policy default",
|
||||||
|
TestFunc: testChannelFeePolicyDefault,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channel fee policy base fee",
|
||||||
|
TestFunc: testChannelFeePolicyBaseFee,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channel fee policy fee rate",
|
||||||
|
TestFunc: testChannelFeePolicyFeeRate,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channel fee policy base fee and fee rate",
|
||||||
|
TestFunc: testChannelFeePolicyBaseFeeAndFeeRate,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channel fee policy low base fee and fee rate",
|
||||||
|
TestFunc: testChannelFeePolicyLowBaseFeeAndFeeRate,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
// testOpenChannelAfterReorg tests that in the case where we have an open
|
// testOpenChannelAfterReorg tests that in the case where we have an open
|
||||||
// channel where the funding tx gets reorged out, the channel will no
|
// channel where the funding tx gets reorged out, the channel will no
|
||||||
// longer be present in the node's routing table.
|
// longer be present in the node's routing table.
|
||||||
@@ -123,32 +147,14 @@ func testOpenChannelAfterReorg(ht *lntest.HarnessTest) {
|
|||||||
ht.AssertTxInBlock(block, *fundingTxID)
|
ht.AssertTxInBlock(block, *fundingTxID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// testOpenChannelFeePolicy checks if different channel fee scenarios are
|
// testChannelFeePolicyDefault check when no params provided to
|
||||||
// correctly handled when the optional channel fee parameters baseFee and
|
// OpenChannelRequest: ChannelUpdate --> defaultBaseFee, defaultFeeRate.
|
||||||
// feeRate are provided. If the OpenChannelRequest is not provided with a value
|
func testChannelFeePolicyDefault(ht *lntest.HarnessTest) {
|
||||||
// for baseFee/feeRate the expectation is that the default baseFee/feeRate is
|
|
||||||
// applied.
|
|
||||||
//
|
|
||||||
// 1. No params provided to OpenChannelRequest:
|
|
||||||
// ChannelUpdate --> defaultBaseFee, defaultFeeRate
|
|
||||||
// 2. Only baseFee provided to OpenChannelRequest:
|
|
||||||
// ChannelUpdate --> provided baseFee, defaultFeeRate
|
|
||||||
// 3. Only feeRate provided to OpenChannelRequest:
|
|
||||||
// ChannelUpdate --> defaultBaseFee, provided FeeRate
|
|
||||||
// 4. baseFee and feeRate provided to OpenChannelRequest:
|
|
||||||
// ChannelUpdate --> provided baseFee, provided feeRate
|
|
||||||
// 5. Both baseFee and feeRate are set to a value lower than the default:
|
|
||||||
// ChannelUpdate --> provided baseFee, provided feeRate
|
|
||||||
func testOpenChannelUpdateFeePolicy(ht *lntest.HarnessTest) {
|
|
||||||
const (
|
const (
|
||||||
defaultBaseFee = 1000
|
defaultBaseFee = 1000
|
||||||
defaultFeeRate = 1
|
defaultFeeRate = 1
|
||||||
defaultTimeLockDelta = chainreg.DefaultBitcoinTimeLockDelta
|
defaultTimeLockDelta = chainreg.DefaultBitcoinTimeLockDelta
|
||||||
defaultMinHtlc = 1000
|
defaultMinHtlc = 1000
|
||||||
optionalBaseFee = 1337
|
|
||||||
optionalFeeRate = 1337
|
|
||||||
lowBaseFee = 0
|
|
||||||
lowFeeRate = 900
|
|
||||||
)
|
)
|
||||||
|
|
||||||
defaultMaxHtlc := lntest.CalculateMaxHtlc(funding.MaxBtcFundingAmount)
|
defaultMaxHtlc := lntest.CalculateMaxHtlc(funding.MaxBtcFundingAmount)
|
||||||
@@ -156,81 +162,19 @@ func testOpenChannelUpdateFeePolicy(ht *lntest.HarnessTest) {
|
|||||||
chanAmt := funding.MaxBtcFundingAmount
|
chanAmt := funding.MaxBtcFundingAmount
|
||||||
pushAmt := chanAmt / 2
|
pushAmt := chanAmt / 2
|
||||||
|
|
||||||
feeScenarios := []lntest.OpenChannelParams{
|
feeScenario := lntest.OpenChannelParams{
|
||||||
{
|
Amt: chanAmt,
|
||||||
Amt: chanAmt,
|
PushAmt: pushAmt,
|
||||||
PushAmt: pushAmt,
|
UseBaseFee: false,
|
||||||
UseBaseFee: false,
|
UseFeeRate: false,
|
||||||
UseFeeRate: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Amt: chanAmt,
|
|
||||||
PushAmt: pushAmt,
|
|
||||||
BaseFee: optionalBaseFee,
|
|
||||||
UseBaseFee: true,
|
|
||||||
UseFeeRate: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Amt: chanAmt,
|
|
||||||
PushAmt: pushAmt,
|
|
||||||
FeeRate: optionalFeeRate,
|
|
||||||
UseBaseFee: false,
|
|
||||||
UseFeeRate: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Amt: chanAmt,
|
|
||||||
PushAmt: pushAmt,
|
|
||||||
BaseFee: optionalBaseFee,
|
|
||||||
FeeRate: optionalFeeRate,
|
|
||||||
UseBaseFee: true,
|
|
||||||
UseFeeRate: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Amt: chanAmt,
|
|
||||||
PushAmt: pushAmt,
|
|
||||||
BaseFee: lowBaseFee,
|
|
||||||
FeeRate: lowFeeRate,
|
|
||||||
UseBaseFee: true,
|
|
||||||
UseFeeRate: true,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedPolicies := []lnrpc.RoutingPolicy{
|
expectedPolicy := lnrpc.RoutingPolicy{
|
||||||
{
|
FeeBaseMsat: defaultBaseFee,
|
||||||
FeeBaseMsat: defaultBaseFee,
|
FeeRateMilliMsat: defaultFeeRate,
|
||||||
FeeRateMilliMsat: defaultFeeRate,
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
TimeLockDelta: defaultTimeLockDelta,
|
MinHtlc: defaultMinHtlc,
|
||||||
MinHtlc: defaultMinHtlc,
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
MaxHtlcMsat: defaultMaxHtlc,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
FeeBaseMsat: optionalBaseFee,
|
|
||||||
FeeRateMilliMsat: defaultFeeRate,
|
|
||||||
TimeLockDelta: defaultTimeLockDelta,
|
|
||||||
MinHtlc: defaultMinHtlc,
|
|
||||||
MaxHtlcMsat: defaultMaxHtlc,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
FeeBaseMsat: defaultBaseFee,
|
|
||||||
FeeRateMilliMsat: optionalFeeRate,
|
|
||||||
TimeLockDelta: defaultTimeLockDelta,
|
|
||||||
MinHtlc: defaultMinHtlc,
|
|
||||||
MaxHtlcMsat: defaultMaxHtlc,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
FeeBaseMsat: optionalBaseFee,
|
|
||||||
FeeRateMilliMsat: optionalFeeRate,
|
|
||||||
TimeLockDelta: defaultTimeLockDelta,
|
|
||||||
MinHtlc: defaultMinHtlc,
|
|
||||||
MaxHtlcMsat: defaultMaxHtlc,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
FeeBaseMsat: lowBaseFee,
|
|
||||||
FeeRateMilliMsat: lowFeeRate,
|
|
||||||
TimeLockDelta: defaultTimeLockDelta,
|
|
||||||
MinHtlc: defaultMinHtlc,
|
|
||||||
MaxHtlcMsat: defaultMaxHtlc,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bobExpectedPolicy := lnrpc.RoutingPolicy{
|
bobExpectedPolicy := lnrpc.RoutingPolicy{
|
||||||
@@ -241,65 +185,248 @@ func testOpenChannelUpdateFeePolicy(ht *lntest.HarnessTest) {
|
|||||||
MaxHtlcMsat: defaultMaxHtlc,
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
}
|
}
|
||||||
|
|
||||||
runTestCase := func(ht *lntest.HarnessTest,
|
runChannelFeePolicyTest(
|
||||||
chanParams lntest.OpenChannelParams,
|
ht, feeScenario, &expectedPolicy, &bobExpectedPolicy,
|
||||||
alicePolicy, bobPolicy *lnrpc.RoutingPolicy) {
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// In this basic test, we'll need a third node, Carol, so we
|
// testChannelFeePolicyBaseFee checks only baseFee provided to
|
||||||
// can forward a payment through the channel we'll open with
|
// OpenChannelRequest: ChannelUpdate --> provided baseFee, defaultFeeRate.
|
||||||
// the different fee policies.
|
func testChannelFeePolicyBaseFee(ht *lntest.HarnessTest) {
|
||||||
alice := ht.NewNodeWithCoins("Alice", nil)
|
const (
|
||||||
bob := ht.NewNode("Bob", nil)
|
defaultBaseFee = 1000
|
||||||
carol := ht.NewNodeWithCoins("Carol", nil)
|
defaultFeeRate = 1
|
||||||
|
defaultTimeLockDelta = chainreg.DefaultBitcoinTimeLockDelta
|
||||||
|
defaultMinHtlc = 1000
|
||||||
|
optionalBaseFee = 1337
|
||||||
|
)
|
||||||
|
|
||||||
ht.EnsureConnected(alice, bob)
|
defaultMaxHtlc := lntest.CalculateMaxHtlc(funding.MaxBtcFundingAmount)
|
||||||
ht.EnsureConnected(alice, carol)
|
|
||||||
|
|
||||||
nodes := []*node.HarnessNode{alice, bob, carol}
|
chanAmt := funding.MaxBtcFundingAmount
|
||||||
|
pushAmt := chanAmt / 2
|
||||||
|
|
||||||
// Create a channel Alice->Bob.
|
feeScenario := lntest.OpenChannelParams{
|
||||||
chanPoint := ht.OpenChannel(alice, bob, chanParams)
|
Amt: chanAmt,
|
||||||
|
PushAmt: pushAmt,
|
||||||
// Create a channel Carol->Alice.
|
BaseFee: optionalBaseFee,
|
||||||
ht.OpenChannel(
|
UseBaseFee: true,
|
||||||
carol, alice, lntest.OpenChannelParams{
|
UseFeeRate: false,
|
||||||
Amt: 500000,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
// Alice and Bob should see each other's ChannelUpdates,
|
|
||||||
// advertising the preferred routing policies.
|
|
||||||
assertNodesPolicyUpdate(
|
|
||||||
ht, nodes, alice, alicePolicy, chanPoint,
|
|
||||||
)
|
|
||||||
assertNodesPolicyUpdate(ht, nodes, bob, bobPolicy, chanPoint)
|
|
||||||
|
|
||||||
// They should now know about the default policies.
|
|
||||||
for _, n := range nodes {
|
|
||||||
ht.AssertChannelPolicy(
|
|
||||||
n, alice.PubKeyStr, alicePolicy, chanPoint,
|
|
||||||
)
|
|
||||||
ht.AssertChannelPolicy(
|
|
||||||
n, bob.PubKeyStr, bobPolicy, chanPoint,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// We should be able to forward a payment from Carol to Bob
|
|
||||||
// through the new channel we opened.
|
|
||||||
payReqs, _, _ := ht.CreatePayReqs(bob, paymentAmt, 1)
|
|
||||||
ht.CompletePaymentRequests(carol, payReqs)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, feeScenario := range feeScenarios {
|
expectedPolicy := lnrpc.RoutingPolicy{
|
||||||
ht.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
|
FeeBaseMsat: optionalBaseFee,
|
||||||
st := ht.Subtest(t)
|
FeeRateMilliMsat: defaultFeeRate,
|
||||||
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
runTestCase(
|
MinHtlc: defaultMinHtlc,
|
||||||
st, feeScenario,
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
&expectedPolicies[i], &bobExpectedPolicy,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bobExpectedPolicy := lnrpc.RoutingPolicy{
|
||||||
|
FeeBaseMsat: defaultBaseFee,
|
||||||
|
FeeRateMilliMsat: defaultFeeRate,
|
||||||
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
|
MinHtlc: defaultMinHtlc,
|
||||||
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
|
}
|
||||||
|
|
||||||
|
runChannelFeePolicyTest(
|
||||||
|
ht, feeScenario, &expectedPolicy, &bobExpectedPolicy,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// testChannelFeePolicyFeeRate checks if only feeRate provided to
|
||||||
|
// OpenChannelRequest: ChannelUpdate --> defaultBaseFee, provided FeeRate.
|
||||||
|
func testChannelFeePolicyFeeRate(ht *lntest.HarnessTest) {
|
||||||
|
const (
|
||||||
|
defaultBaseFee = 1000
|
||||||
|
defaultFeeRate = 1
|
||||||
|
defaultTimeLockDelta = chainreg.DefaultBitcoinTimeLockDelta
|
||||||
|
defaultMinHtlc = 1000
|
||||||
|
optionalFeeRate = 1337
|
||||||
|
)
|
||||||
|
|
||||||
|
defaultMaxHtlc := lntest.CalculateMaxHtlc(funding.MaxBtcFundingAmount)
|
||||||
|
|
||||||
|
chanAmt := funding.MaxBtcFundingAmount
|
||||||
|
pushAmt := chanAmt / 2
|
||||||
|
|
||||||
|
feeScenario := lntest.OpenChannelParams{
|
||||||
|
Amt: chanAmt,
|
||||||
|
PushAmt: pushAmt,
|
||||||
|
FeeRate: optionalFeeRate,
|
||||||
|
UseBaseFee: false,
|
||||||
|
UseFeeRate: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedPolicy := lnrpc.RoutingPolicy{
|
||||||
|
FeeBaseMsat: defaultBaseFee,
|
||||||
|
FeeRateMilliMsat: optionalFeeRate,
|
||||||
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
|
MinHtlc: defaultMinHtlc,
|
||||||
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
|
}
|
||||||
|
|
||||||
|
bobExpectedPolicy := lnrpc.RoutingPolicy{
|
||||||
|
FeeBaseMsat: defaultBaseFee,
|
||||||
|
FeeRateMilliMsat: defaultFeeRate,
|
||||||
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
|
MinHtlc: defaultMinHtlc,
|
||||||
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
|
}
|
||||||
|
|
||||||
|
runChannelFeePolicyTest(
|
||||||
|
ht, feeScenario, &expectedPolicy, &bobExpectedPolicy,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// testChannelFeePolicyBaseFeeAndFeeRate checks if baseFee and feeRate provided
|
||||||
|
// to OpenChannelRequest: ChannelUpdate --> provided baseFee, provided feeRate.
|
||||||
|
func testChannelFeePolicyBaseFeeAndFeeRate(ht *lntest.HarnessTest) {
|
||||||
|
const (
|
||||||
|
defaultBaseFee = 1000
|
||||||
|
defaultFeeRate = 1
|
||||||
|
defaultTimeLockDelta = chainreg.DefaultBitcoinTimeLockDelta
|
||||||
|
defaultMinHtlc = 1000
|
||||||
|
optionalBaseFee = 1337
|
||||||
|
optionalFeeRate = 1337
|
||||||
|
)
|
||||||
|
|
||||||
|
defaultMaxHtlc := lntest.CalculateMaxHtlc(funding.MaxBtcFundingAmount)
|
||||||
|
|
||||||
|
chanAmt := funding.MaxBtcFundingAmount
|
||||||
|
pushAmt := chanAmt / 2
|
||||||
|
|
||||||
|
feeScenario := lntest.OpenChannelParams{
|
||||||
|
Amt: chanAmt,
|
||||||
|
PushAmt: pushAmt,
|
||||||
|
BaseFee: optionalBaseFee,
|
||||||
|
FeeRate: optionalFeeRate,
|
||||||
|
UseBaseFee: true,
|
||||||
|
UseFeeRate: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedPolicy := lnrpc.RoutingPolicy{
|
||||||
|
FeeBaseMsat: optionalBaseFee,
|
||||||
|
FeeRateMilliMsat: optionalFeeRate,
|
||||||
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
|
MinHtlc: defaultMinHtlc,
|
||||||
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
|
}
|
||||||
|
|
||||||
|
bobExpectedPolicy := lnrpc.RoutingPolicy{
|
||||||
|
FeeBaseMsat: defaultBaseFee,
|
||||||
|
FeeRateMilliMsat: defaultFeeRate,
|
||||||
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
|
MinHtlc: defaultMinHtlc,
|
||||||
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
|
}
|
||||||
|
|
||||||
|
runChannelFeePolicyTest(
|
||||||
|
ht, feeScenario, &expectedPolicy, &bobExpectedPolicy,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// testChannelFeePolicyLowBaseFeeAndFeeRate checks if both baseFee and feeRate
|
||||||
|
// are set to a value lower than the default: ChannelUpdate --> provided
|
||||||
|
// baseFee, provided feeRate.
|
||||||
|
func testChannelFeePolicyLowBaseFeeAndFeeRate(ht *lntest.HarnessTest) {
|
||||||
|
const (
|
||||||
|
defaultBaseFee = 1000
|
||||||
|
defaultFeeRate = 1
|
||||||
|
defaultTimeLockDelta = chainreg.DefaultBitcoinTimeLockDelta
|
||||||
|
defaultMinHtlc = 1000
|
||||||
|
lowBaseFee = 0
|
||||||
|
lowFeeRate = 900
|
||||||
|
)
|
||||||
|
|
||||||
|
defaultMaxHtlc := lntest.CalculateMaxHtlc(funding.MaxBtcFundingAmount)
|
||||||
|
|
||||||
|
chanAmt := funding.MaxBtcFundingAmount
|
||||||
|
pushAmt := chanAmt / 2
|
||||||
|
|
||||||
|
feeScenario := lntest.OpenChannelParams{
|
||||||
|
Amt: chanAmt,
|
||||||
|
PushAmt: pushAmt,
|
||||||
|
BaseFee: lowBaseFee,
|
||||||
|
FeeRate: lowFeeRate,
|
||||||
|
UseBaseFee: true,
|
||||||
|
UseFeeRate: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedPolicy := lnrpc.RoutingPolicy{
|
||||||
|
FeeBaseMsat: lowBaseFee,
|
||||||
|
FeeRateMilliMsat: lowFeeRate,
|
||||||
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
|
MinHtlc: defaultMinHtlc,
|
||||||
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
|
}
|
||||||
|
|
||||||
|
bobExpectedPolicy := lnrpc.RoutingPolicy{
|
||||||
|
FeeBaseMsat: defaultBaseFee,
|
||||||
|
FeeRateMilliMsat: defaultFeeRate,
|
||||||
|
TimeLockDelta: defaultTimeLockDelta,
|
||||||
|
MinHtlc: defaultMinHtlc,
|
||||||
|
MaxHtlcMsat: defaultMaxHtlc,
|
||||||
|
}
|
||||||
|
|
||||||
|
runChannelFeePolicyTest(
|
||||||
|
ht, feeScenario, &expectedPolicy, &bobExpectedPolicy,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// runChannelFeePolicyTest checks if different channel fee scenarios are
|
||||||
|
// correctly handled when the optional channel fee parameters baseFee and
|
||||||
|
// feeRate are provided. If the OpenChannelRequest is not provided with a value
|
||||||
|
// for baseFee/feeRate the expectation is that the default baseFee/feeRate is
|
||||||
|
// applied.
|
||||||
|
func runChannelFeePolicyTest(ht *lntest.HarnessTest,
|
||||||
|
chanParams lntest.OpenChannelParams,
|
||||||
|
alicePolicy, bobPolicy *lnrpc.RoutingPolicy) {
|
||||||
|
|
||||||
|
// In this basic test, we'll need a third node, Carol, so we can
|
||||||
|
// forward a payment through the channel we'll open with the different
|
||||||
|
// fee policies.
|
||||||
|
alice := ht.NewNodeWithCoins("Alice", nil)
|
||||||
|
bob := ht.NewNode("Bob", nil)
|
||||||
|
carol := ht.NewNodeWithCoins("Carol", nil)
|
||||||
|
|
||||||
|
ht.EnsureConnected(alice, bob)
|
||||||
|
ht.EnsureConnected(alice, carol)
|
||||||
|
|
||||||
|
nodes := []*node.HarnessNode{alice, bob, carol}
|
||||||
|
|
||||||
|
// Create a channel Alice->Bob.
|
||||||
|
chanPoint := ht.OpenChannel(alice, bob, chanParams)
|
||||||
|
|
||||||
|
// Create a channel Carol->Alice.
|
||||||
|
ht.OpenChannel(
|
||||||
|
carol, alice, lntest.OpenChannelParams{
|
||||||
|
Amt: 500000,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
// Alice and Bob should see each other's ChannelUpdates, advertising
|
||||||
|
// the preferred routing policies.
|
||||||
|
assertNodesPolicyUpdate(
|
||||||
|
ht, nodes, alice, alicePolicy, chanPoint,
|
||||||
|
)
|
||||||
|
assertNodesPolicyUpdate(ht, nodes, bob, bobPolicy, chanPoint)
|
||||||
|
|
||||||
|
// They should now know about the default policies.
|
||||||
|
for _, n := range nodes {
|
||||||
|
ht.AssertChannelPolicy(
|
||||||
|
n, alice.PubKeyStr, alicePolicy, chanPoint,
|
||||||
|
)
|
||||||
|
ht.AssertChannelPolicy(
|
||||||
|
n, bob.PubKeyStr, bobPolicy, chanPoint,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// We should be able to forward a payment from Carol to Bob
|
||||||
|
// through the new channel we opened.
|
||||||
|
payReqs, _, _ := ht.CreatePayReqs(bob, paymentAmt, 1)
|
||||||
|
ht.CompletePaymentRequests(carol, payReqs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// testBasicChannelCreationAndUpdates tests multiple channel opening and
|
// testBasicChannelCreationAndUpdates tests multiple channel opening and
|
||||||
|
|||||||
Reference in new issue
Block a user