Skip to content

Commit ef7f4ff

Browse files
authored
Merge pull request #1509 from lightninglabs/rqf-response-matching
rfq+rpcserver: match event to order
2 parents f1f595a + 36c8ab1 commit ef7f4ff

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

rfq/manager.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,6 +1116,24 @@ func (q *PeerAcceptedBuyQuoteEvent) Timestamp() time.Time {
11161116
return q.timestamp.UTC()
11171117
}
11181118

1119+
// MatchesOrder checks if the sell quote matches the provided order.
1120+
func (q *PeerAcceptedBuyQuoteEvent) MatchesOrder(order BuyOrder) bool {
1121+
if q.Request.AssetSpecifier != order.AssetSpecifier {
1122+
return false
1123+
}
1124+
1125+
// If the order has no peer, we accept equality just based on the
1126+
// specifier.
1127+
if order.Peer.IsNone() {
1128+
return true
1129+
}
1130+
1131+
// If a peer is specified, ensure it matches the event's peer.
1132+
return fn.MapOptionZ(order.Peer, func(vertex route.Vertex) bool {
1133+
return q.Peer == vertex
1134+
})
1135+
}
1136+
11191137
// Ensure that the PeerAcceptedBuyQuoteEvent struct implements the Event
11201138
// interface.
11211139
var _ fn.Event = (*PeerAcceptedBuyQuoteEvent)(nil)
@@ -1197,6 +1215,24 @@ func (q *PeerAcceptedSellQuoteEvent) Timestamp() time.Time {
11971215
return q.timestamp.UTC()
11981216
}
11991217

1218+
// MatchesOrder checks if the sell quote matches the provided order.
1219+
func (q *PeerAcceptedSellQuoteEvent) MatchesOrder(order SellOrder) bool {
1220+
if q.Request.AssetSpecifier != order.AssetSpecifier {
1221+
return false
1222+
}
1223+
1224+
// If the order has no peer, we accept equality just based on the
1225+
// specifier.
1226+
if order.Peer.IsNone() {
1227+
return true
1228+
}
1229+
1230+
// If a peer is specified, ensure it matches the event's peer.
1231+
return fn.MapOptionZ(order.Peer, func(vertex route.Vertex) bool {
1232+
return q.Peer == vertex
1233+
})
1234+
}
1235+
12001236
// Ensure that the PeerAcceptedSellQuoteEvent struct implements the Event
12011237
// interface.
12021238
var _ fn.Event = (*PeerAcceptedSellQuoteEvent)(nil)

rpcserver.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6853,8 +6853,26 @@ func (r *rpcServer) AddAssetBuyOrder(ctx context.Context,
68536853
timeout := time.After(time.Second * time.Duration(req.TimeoutSeconds))
68546854

68556855
for {
6856+
type targetEventType = *rfq.PeerAcceptedBuyQuoteEvent
68566857
select {
68576858
case event := <-eventSubscriber.NewItemCreated.ChanOut():
6859+
acceptedQuote, ok := event.(targetEventType)
6860+
if !ok {
6861+
rpcsLog.Debugf("Received event of type %T "+
6862+
"but expected accepted sell quote, "+
6863+
"skipping", event)
6864+
6865+
continue
6866+
}
6867+
6868+
if !acceptedQuote.MatchesOrder(*buyOrder) {
6869+
rpcsLog.Debugf("Received event of type %T "+
6870+
"but order doesn't match, skipping",
6871+
event)
6872+
6873+
continue
6874+
}
6875+
68586876
resp, err := rfq.NewAddAssetBuyOrderResponse(event)
68596877
if err != nil {
68606878
return nil, fmt.Errorf("error marshalling "+
@@ -7027,8 +7045,26 @@ func (r *rpcServer) AddAssetSellOrder(ctx context.Context,
70277045
timeout := time.After(time.Second * time.Duration(req.TimeoutSeconds))
70287046

70297047
for {
7048+
type targetEventType = *rfq.PeerAcceptedSellQuoteEvent
70307049
select {
70317050
case event := <-eventSubscriber.NewItemCreated.ChanOut():
7051+
acceptedQuote, ok := event.(targetEventType)
7052+
if !ok {
7053+
rpcsLog.Debugf("Received event of type %T "+
7054+
"but expected accepted sell quote, "+
7055+
"skipping", event)
7056+
7057+
continue
7058+
}
7059+
7060+
if !acceptedQuote.MatchesOrder(*sellOrder) {
7061+
rpcsLog.Debugf("Received event of type %T "+
7062+
"but order doesn't match, skipping",
7063+
event)
7064+
7065+
continue
7066+
}
7067+
70327068
resp, err := rfq.NewAddAssetSellOrderResponse(event)
70337069
if err != nil {
70347070
return nil, fmt.Errorf("error marshalling "+

0 commit comments

Comments
 (0)