Skip to content

Commit 32cd575

Browse files
committed
itest: enhance multi-rfq itest with sending
1 parent b4abc01 commit 32cd575

File tree

2 files changed

+83
-8
lines changed

2 files changed

+83
-8
lines changed

itest/litd_custom_channels_test.go

Lines changed: 82 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2971,10 +2971,11 @@ func testCustomChannelsLiquidityEdgeCasesGroup(ctx context.Context,
29712971
testCustomChannelsLiquidityEdgeCasesCore(ctx, net, t, true)
29722972
}
29732973

2974-
// testCustomChannelsMultiRFQReceive tests that a node creating an invoice with
2975-
// multiple RFQ quotes can actually guide the payer into using multiple private
2976-
// taproot asset channels to pay the invoice.
2977-
func testCustomChannelsMultiRFQReceive(ctx context.Context, net *NetworkHarness,
2974+
// testCustomChannelsMultiRFQ tests that sending and receiving payments works
2975+
// when using the multi-rfq features of tapd. This means that liquidity across
2976+
// multiple channels and peers can be used to send out a payment, or receive to
2977+
// an invoice.
2978+
func testCustomChannelsMultiRFQ(ctx context.Context, net *NetworkHarness,
29782979
t *harnessTest) {
29792980

29802981
lndArgs := slices.Clone(lndArgsTemplate)
@@ -3068,7 +3069,6 @@ func testCustomChannelsMultiRFQReceive(ctx context.Context, net *NetworkHarness,
30683069
t.t, charlie, &lnrpc.AddInvoiceResponse{
30693070
PaymentRequest: hodlInv.payReq,
30703071
},
3071-
withGroupKey(groupID),
30723072
withFailure(lnrpc.Payment_IN_FLIGHT, failureNone),
30733073
)
30743074

@@ -3100,13 +3100,88 @@ func testCustomChannelsMultiRFQReceive(ctx context.Context, net *NetworkHarness,
31003100
// Now let's create a normal invoice that will be settled once all the
31013101
// HTLCs have been received. This is only possible because the payer
31023102
// uses multiple bolt11 hop hints to reach the destination.
3103-
invoiceResp := createAssetInvoice(t.t, nil, fabia, 15_000, assetID)
3103+
invoiceResp := createAssetInvoice(
3104+
t.t, nil, fabia, 15_000, nil, withInvGroupKey(groupID),
3105+
)
31043106

31053107
payInvoiceWithSatoshi(
3106-
t.t, charlie, invoiceResp, withGroupKey(groupID),
3108+
t.t, charlie, invoiceResp,
31073109
)
31083110

31093111
logBalance(t.t, nodes, assetID, "after multi-rfq receive")
3112+
3113+
// Now we'll test that sending with multiple rfq quotes works.
3114+
3115+
// Let's start by providing some liquidity to Charlie's peers, in order
3116+
// for them to be able to push some amount if Fabia picks them as part
3117+
// of the route.
3118+
sendKeySendPayment(t.t, charlie, erin, 800_000)
3119+
sendKeySendPayment(t.t, charlie, dave, 800_000)
3120+
sendKeySendPayment(t.t, charlie, yara, 800_000)
3121+
3122+
// Let's ask for the rough equivalent of ~15k assets. Fabia, who's going
3123+
// to pay the invoice, only has parts of assets that are less than 10k
3124+
// in channels with one of the 3 intermediate peers. The only way to
3125+
// pay this invoice is by splitting the payment across multiple peers by
3126+
// using multiple RFQ quotes.
3127+
invAmt := int64(15_000 * 17)
3128+
3129+
iResp, err := charlie.AddHoldInvoice(
3130+
ctx, &invoicesrpc.AddHoldInvoiceRequest{
3131+
Memo: "",
3132+
Value: invAmt,
3133+
Hash: payHash[:],
3134+
},
3135+
)
3136+
require.NoError(t.t, err)
3137+
3138+
payReq := iResp.PaymentRequest
3139+
3140+
payInvoiceWithAssets(
3141+
t.t, fabia, nil, payReq, assetID,
3142+
withFailure(lnrpc.Payment_IN_FLIGHT, failureNone),
3143+
)
3144+
3145+
assertMinNumHtlcs(t.t, charlie, 2)
3146+
assertMinNumHtlcs(t.t, fabia, 2)
3147+
3148+
logBalance(t.t, nodes, assetID, "multi-rfq send in-flight")
3149+
3150+
_, err = charlie.SettleInvoice(ctx, &invoicesrpc.SettleInvoiceMsg{
3151+
Preimage: hodlInv.preimage[:],
3152+
})
3153+
require.NoError(t.t, err)
3154+
3155+
assertNumHtlcs(t.t, charlie, 0)
3156+
assertNumHtlcs(t.t, fabia, 0)
3157+
3158+
logBalance(t.t, nodes, assetID, "after multi-rfq send")
3159+
3160+
// Let's make another round-trip involving multi-rfq functionality.
3161+
// Let's have Fabia receive another large payment and send it back
3162+
// again, this time with a greater amount.
3163+
invoiceResp = createAssetInvoice(t.t, nil, fabia, 25_000, assetID)
3164+
3165+
payInvoiceWithSatoshi(
3166+
t.t, charlie, invoiceResp,
3167+
)
3168+
3169+
logBalance(t.t, nodes, assetID, "after multi-rfq receive (2nd)")
3170+
3171+
// Let's bump up the invoice amount a bit, to roughly ~22k assets.
3172+
invAmt = 22_000 * 17
3173+
inv, err := charlie.AddInvoice(ctx, &lnrpc.Invoice{
3174+
Value: invAmt,
3175+
})
3176+
require.NoError(t.t, err)
3177+
3178+
payReq = inv.PaymentRequest
3179+
3180+
payInvoiceWithAssets(
3181+
t.t, fabia, nil, payReq, nil, withGroupKey(groupID),
3182+
)
3183+
3184+
logBalance(t.t, nodes, assetID, "after multi-rfq send (2nd)")
31103185
}
31113186

31123187
// testCustomChannelsStrictForwarding is a test that tests the strict forwarding

itest/litd_test_list_on_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ var allTestCases = []*testCase{
130130
},
131131
{
132132
name: "custom channels multi rfq",
133-
test: testCustomChannelsMultiRFQReceive,
133+
test: testCustomChannelsMultiRFQ,
134134
noAliceBob: true,
135135
},
136136
{

0 commit comments

Comments
 (0)