Skip to content

Multi rfq send itest #1097

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,22 @@ require (
github.com/lightninglabs/lightning-terminal/litrpc v1.0.2
github.com/lightninglabs/lightning-terminal/perms v1.0.1
github.com/lightninglabs/lndclient v0.19.0-7
github.com/lightninglabs/loop v0.31.2-beta
github.com/lightninglabs/loop v0.31.2-beta.0.20250623124517-3714ad8c90be
github.com/lightninglabs/loop/looprpc v1.0.8
github.com/lightninglabs/loop/swapserverrpc v1.0.15
github.com/lightninglabs/pool v0.6.6-beta
github.com/lightninglabs/pool/auctioneerrpc v1.1.3
github.com/lightninglabs/pool/poolrpc v1.0.1
github.com/lightninglabs/taproot-assets v0.6.0
github.com/lightninglabs/taproot-assets/taprpc v1.0.7
github.com/lightninglabs/taproot-assets v0.6.1-0.20250623121023-2bb2369190e8
github.com/lightninglabs/taproot-assets/taprpc v1.0.8-0.20250623121023-2bb2369190e8
github.com/lightningnetwork/lnd v0.19.1-beta
github.com/lightningnetwork/lnd/cert v1.2.2
github.com/lightningnetwork/lnd/clock v1.1.1
github.com/lightningnetwork/lnd/fn v1.2.3
github.com/lightningnetwork/lnd/fn/v2 v2.0.8
github.com/lightningnetwork/lnd/kvdb v1.4.16
github.com/lightningnetwork/lnd/sqldb v1.0.9
github.com/lightningnetwork/lnd/tlv v1.3.1
github.com/lightningnetwork/lnd/sqldb v1.0.10
github.com/lightningnetwork/lnd/tlv v1.3.2
github.com/lightningnetwork/lnd/tor v1.1.6
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f
github.com/mwitkow/grpc-proxy v0.0.0-20230212185441-f345521cb9c9
Expand Down Expand Up @@ -148,7 +148,7 @@ require (
github.com/lightninglabs/lightning-node-connect/hashmailrpc v1.0.3 // indirect
github.com/lightninglabs/neutrino v0.16.1 // indirect
github.com/lightninglabs/neutrino/cache v1.1.2 // indirect
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240712235311-98bd56499dfb // indirect
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9 // indirect
github.com/lightningnetwork/lnd/healthcheck v1.2.6 // indirect
github.com/lightningnetwork/lnd/queue v1.1.1 // indirect
github.com/lightningnetwork/lnd/ticker v1.1.1 // indirect
Expand Down Expand Up @@ -247,3 +247,7 @@ replace google.golang.org/protobuf => github.com/lightninglabs/protobuf-go-hex-d
// it is a replace in the tapd repository, it doesn't get propagated here
// automatically, so we need to add it manually.
replace github.com/golang-migrate/migrate/v4 => github.com/lightninglabs/migrate/v4 v4.18.2-9023d66a-fork-pr-2

replace github.com/lightningnetwork/lnd => github.com/GeorgeTsagk/lnd v0.0.0-20250623110101-626dfaed57d1

replace github.com/lightningnetwork/lnd/sqldb => github.com/GeorgeTsagk/lnd/sqldb v0.0.0-20250623110101-626dfaed57d1
26 changes: 14 additions & 12 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,10 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/GeorgeTsagk/lnd v0.0.0-20250623110101-626dfaed57d1 h1:Q7mi/xfU5oVlJN7wE2GfVwRrBAzIeL1M4JMJ2O6Ui0s=
github.com/GeorgeTsagk/lnd v0.0.0-20250623110101-626dfaed57d1/go.mod h1:FelbuiQdzwyEbHng3XsODMBKfXUGgz6JZcWtN9uwuE4=
github.com/GeorgeTsagk/lnd/sqldb v0.0.0-20250623110101-626dfaed57d1 h1:pTu6woAcuq3OO38GHsie5TUVRodTBW+PAhsdKXrbubQ=
github.com/GeorgeTsagk/lnd/sqldb v0.0.0-20250623110101-626dfaed57d1/go.mod h1:c/vWoQfcxu6FAfHzGajkIQi7CEIeIZFhhH4DYh1BJpc=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g=
Expand Down Expand Up @@ -1154,6 +1158,8 @@ github.com/lightninglabs/lndclient v0.19.0-7 h1:8+wGQnO8KSUq9elzGLscBUGchID+bWvr
github.com/lightninglabs/lndclient v0.19.0-7/go.mod h1:35d50tEMFxlJlKTZGYA6EdOllPsbxS4FUmEVbETUx+Q=
github.com/lightninglabs/loop v0.31.2-beta h1:lm5t5FqDpSfQCxoz/vTvXpylxSgU+gvJJIbfJiKeyUk=
github.com/lightninglabs/loop v0.31.2-beta/go.mod h1:xnPKuZmLusNERwzz15RZ7mpQ8xuSqqh3g8Qw/PRyiRE=
github.com/lightninglabs/loop v0.31.2-beta.0.20250623124517-3714ad8c90be h1:Xoq4cSKbxuuwLewh7+C7VdBiSUwVND6h9waSuOeWqSk=
github.com/lightninglabs/loop v0.31.2-beta.0.20250623124517-3714ad8c90be/go.mod h1:BleoAw0V7NFw0K1COMiIZE2nS606HfW4RO3yYl0C7hg=
github.com/lightninglabs/loop/looprpc v1.0.8 h1:OFmJNLjem6fLuH1YUO+3G6QA1wmjAd0zyhvdHONOBDs=
github.com/lightninglabs/loop/looprpc v1.0.8/go.mod h1:c7WykKQZ3PspCMVvv2kr9o4l3bgJBEBVv0SOoBOjPOw=
github.com/lightninglabs/loop/swapserverrpc v1.0.15 h1:vEZBF65Lv0T7MPydCRxHSIlEJzHBkZ4I8FtSD6OJK88=
Expand All @@ -1172,14 +1178,12 @@ github.com/lightninglabs/pool/poolrpc v1.0.1 h1:XbNx28TYwEj/PVsnnF9TnveVCMCYfS1v
github.com/lightninglabs/pool/poolrpc v1.0.1/go.mod h1:836icifg/SBnZbiae0v3jeRRzCrT6LWo32SqCS/JiGk=
github.com/lightninglabs/protobuf-go-hex-display v1.34.2-hex-display h1:w7FM5LH9Z6CpKxl13mS48idsu6F+cEZf0lkyiV+Dq9g=
github.com/lightninglabs/protobuf-go-hex-display v1.34.2-hex-display/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
github.com/lightninglabs/taproot-assets v0.6.0 h1:nHloX+QR2PbUmogry1T+LiYh1TWBoFnTMHOy4Hyq1VM=
github.com/lightninglabs/taproot-assets v0.6.0/go.mod h1:CkK0drLPo5M6ib9YRE3lD+znOfe0Oxh6zMvGN1SJXDo=
github.com/lightninglabs/taproot-assets/taprpc v1.0.7 h1:yUG9vdpajiU0gp4wDkTPz/6BI8Vr52OM2paahlVrAys=
github.com/lightninglabs/taproot-assets/taprpc v1.0.7/go.mod h1:vOM2Ap2wYhEZjiJU7bNNg+e5tDxkvRAuyXwf/KQ4tgo=
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240712235311-98bd56499dfb h1:yfM05S8DXKhuCBp5qSMZdtSwvJ+GFzl94KbXMNB1JDY=
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240712235311-98bd56499dfb/go.mod h1:c0kvRShutpj3l6B9WtTsNTBUtjSmjZXbJd9ZBRQOSKI=
github.com/lightningnetwork/lnd v0.19.1-beta h1:lIixXD/CemfvFFU2pWzGciOGRZ8vuQNPCzpKn/xt8zA=
github.com/lightningnetwork/lnd v0.19.1-beta/go.mod h1:iHZ/FHFK00BqV6qgDkZZfqWE3LGtgE0U5KdO5WrM+eQ=
github.com/lightninglabs/taproot-assets v0.6.1-0.20250623121023-2bb2369190e8 h1:fOSaX6R/ErrY48JVTCMb/sET78iu/R+iyVVa805FSow=
github.com/lightninglabs/taproot-assets v0.6.1-0.20250623121023-2bb2369190e8/go.mod h1:yb0xMwjL1Hl7pw6WKxzhqVKMBkLLL6vHsWBkCBWdaeM=
github.com/lightninglabs/taproot-assets/taprpc v1.0.8-0.20250623121023-2bb2369190e8 h1:p+H73wNUe4+qMWgx49BNHch7Wqp1W6GFznIx7X0fWoI=
github.com/lightninglabs/taproot-assets/taprpc v1.0.8-0.20250623121023-2bb2369190e8/go.mod h1:vOM2Ap2wYhEZjiJU7bNNg+e5tDxkvRAuyXwf/KQ4tgo=
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9 h1:6D3LrdagJweLLdFm1JNodZsBk6iU4TTsBBFLQ4yiXfI=
github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9/go.mod h1:EDqJ3MuZIbMq0QI1czTIKDJ/GS8S14RXPwapHw8cw6w=
github.com/lightningnetwork/lnd/cert v1.2.2 h1:71YK6hogeJtxSxw2teq3eGeuy4rHGKcFf0d0Uy4qBjI=
github.com/lightningnetwork/lnd/cert v1.2.2/go.mod h1:jQmFn/Ez4zhDgq2hnYSw8r35bqGVxViXhX6Cd7HXM6U=
github.com/lightningnetwork/lnd/clock v1.1.1 h1:OfR3/zcJd2RhH0RU+zX/77c0ZiOnIMsDIBjgjWdZgA0=
Expand All @@ -1194,12 +1198,10 @@ github.com/lightningnetwork/lnd/kvdb v1.4.16 h1:9BZgWdDfjmHRHLS97cz39bVuBAqMc4/p
github.com/lightningnetwork/lnd/kvdb v1.4.16/go.mod h1:HW+bvwkxNaopkz3oIgBV6NEnV4jCEZCACFUcNg4xSjM=
github.com/lightningnetwork/lnd/queue v1.1.1 h1:99ovBlpM9B0FRCGYJo6RSFDlt8/vOkQQZznVb18iNMI=
github.com/lightningnetwork/lnd/queue v1.1.1/go.mod h1:7A6nC1Qrm32FHuhx/mi1cieAiBZo5O6l8IBIoQxvkz4=
github.com/lightningnetwork/lnd/sqldb v1.0.9 h1:7OHi+Hui823mB/U9NzCdlZTAGSVdDCbjp33+6d/Q+G0=
github.com/lightningnetwork/lnd/sqldb v1.0.9/go.mod h1:OG09zL/PHPaBJefp4HsPz2YLUJ+zIQHbpgCtLnOx8I4=
github.com/lightningnetwork/lnd/ticker v1.1.1 h1:J/b6N2hibFtC7JLV77ULQp++QLtCwT6ijJlbdiZFbSM=
github.com/lightningnetwork/lnd/ticker v1.1.1/go.mod h1:waPTRAAcwtu7Ji3+3k+u/xH5GHovTsCoSVpho0KDvdA=
github.com/lightningnetwork/lnd/tlv v1.3.1 h1:o7CZg06y+rJZfUMAo0WzBLr0pgBWCzrt0f9gpujYUzk=
github.com/lightningnetwork/lnd/tlv v1.3.1/go.mod h1:pJuiBj1ecr1WWLOtcZ+2+hu9Ey25aJWFIsjmAoPPnmc=
github.com/lightningnetwork/lnd/tlv v1.3.2 h1:MO4FCk7F4k5xPMqVZF6Nb/kOpxlwPrUQpYjmyKny5s0=
github.com/lightningnetwork/lnd/tlv v1.3.2/go.mod h1:pJuiBj1ecr1WWLOtcZ+2+hu9Ey25aJWFIsjmAoPPnmc=
github.com/lightningnetwork/lnd/tor v1.1.6 h1:WHUumk7WgU6BUFsqHuqszI9P6nfhMeIG+rjJBlVE6OE=
github.com/lightningnetwork/lnd/tor v1.1.6/go.mod h1:qSRB8llhAK+a6kaTPWOLLXSZc6Hg8ZC0mq1sUQ/8JfI=
github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796 h1:sjOGyegMIhvgfq5oaue6Td+hxZuf3tDC8lAPrFldqFw=
Expand Down
12 changes: 8 additions & 4 deletions itest/assets_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1686,14 +1686,18 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
sendReq.MaxShardSizeMsat = 80_000_000
}

var rfqBytes []byte
var rfqBytes, peerPubKey []byte
cfg.rfq.WhenSome(func(i rfqmsg.ID) {
rfqBytes = make([]byte, len(i[:]))
copy(rfqBytes, i[:])
})

if rfqPeer != nil {
peerPubKey = rfqPeer.PubKey[:]
}

request := &tchrpc.SendPaymentRequest{
PeerPubkey: rfqPeer.PubKey[:],
PeerPubkey: peerPubKey,
PaymentRequest: sendReq,
RfqId: rfqBytes,
AllowOverpay: cfg.allowOverpay,
Expand Down Expand Up @@ -1732,8 +1736,8 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
acceptedQuote := quoteMsg.GetAcceptedSellOrder()
require.NotNil(t, acceptedQuote)

peerPubKey := acceptedQuote.Peer
require.Equal(t, peerPubKey, rfqPeer.PubKeyStr)
// peerPubKey := acceptedQuote.Peer
// require.Equal(t, peerPubKey, rfqPeer.PubKeyStr)

rpcRate := acceptedQuote.BidAssetRate
rate, err := rpcutils.UnmarshalRfqFixedPoint(rpcRate)
Expand Down
80 changes: 77 additions & 3 deletions itest/litd_custom_channels_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3068,7 +3068,6 @@ func testCustomChannelsMultiRFQReceive(ctx context.Context, net *NetworkHarness,
t.t, charlie, &lnrpc.AddInvoiceResponse{
PaymentRequest: hodlInv.payReq,
},
withGroupKey(groupID),
withFailure(lnrpc.Payment_IN_FLIGHT, failureNone),
)

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

payInvoiceWithSatoshi(
t.t, charlie, invoiceResp, withGroupKey(groupID),
t.t, charlie, invoiceResp,
)

logBalance(t.t, nodes, assetID, "after multi-rfq receive")

// Now we'll test that sending with multiple rfq quotes works.

// Let's start by providing some liquidity to Charlie's peers, in order
// for them to be able to push some amount if Fabia picks them as part
// of the route.
sendKeySendPayment(t.t, charlie, erin, 800_000)
sendKeySendPayment(t.t, charlie, dave, 800_000)
sendKeySendPayment(t.t, charlie, yara, 800_000)

// Let's ask for the rough equivalent of ~15k assets. Fabia, who's going
// to pay the invoice, only has parts of assets that are less than 10k
// in channels with one of the 3 intermediate peers. The only way to
// pay this invoice is by splitting the payment across multiple peers by
// using multiple RFQ quotes.
invAmt := int64(15_000 * 17)

iResp, err := charlie.AddHoldInvoice(
ctx, &invoicesrpc.AddHoldInvoiceRequest{
Memo: "",
Value: invAmt,
Hash: payHash[:],
},
)
require.NoError(t.t, err)

payReq := iResp.PaymentRequest

payInvoiceWithAssets(
t.t, fabia, nil, payReq, assetID,
withFailure(lnrpc.Payment_IN_FLIGHT, failureNone),
)

assertMinNumHtlcs(t.t, charlie, 2)
assertMinNumHtlcs(t.t, fabia, 2)

logBalance(t.t, nodes, assetID, "multi-rfq send in-flight")

_, err = charlie.SettleInvoice(ctx, &invoicesrpc.SettleInvoiceMsg{
Preimage: hodlInv.preimage[:],
})
require.NoError(t.t, err)

assertNumHtlcs(t.t, charlie, 0)
assertNumHtlcs(t.t, fabia, 0)

logBalance(t.t, nodes, assetID, "after multi-rfq send")

// Let's make another round-trip involving multi-rfq functionality.
// Let's have Fabia receive another large payment and send it back
// again, this time with a greater amount.
invoiceResp = createAssetInvoice(t.t, nil, fabia, 25_000, assetID)

payInvoiceWithSatoshi(
t.t, charlie, invoiceResp,
)

logBalance(t.t, nodes, assetID, "after multi-rfq receive (2nd)")

// Let's bump up the invoice amount a bit, to roughly ~22k assets.
invAmt = 22_000 * 17
inv, err := charlie.AddInvoice(ctx, &lnrpc.Invoice{
Value: invAmt,
})
require.NoError(t.t, err)

payReq = inv.PaymentRequest

payInvoiceWithAssets(
t.t, fabia, nil, payReq, nil, withGroupKey(groupID),
)

logBalance(t.t, nodes, assetID, "after multi-rfq send (2nd)")
}

// testCustomChannelsStrictForwarding is a test that tests the strict forwarding
Expand Down
Loading