@@ -741,6 +741,12 @@ func sendAssetKeySendPayment(t *testing.T, src, dst *HarnessNode, amt uint64,
741741		opt (cfg )
742742	}
743743
744+ 	// Nullify assetID if group key is set. RPC methods won't accept both so 
745+ 	// let's prioritize the group key if set. 
746+ 	if  len (cfg .groupKey ) >  0  {
747+ 		assetID  =  nil 
748+ 	}
749+ 
744750	ctxb  :=  context .Background ()
745751	ctxt , cancel  :=  context .WithTimeout (ctxb , defaultTimeout )
746752	defer  cancel ()
@@ -770,6 +776,7 @@ func sendAssetKeySendPayment(t *testing.T, src, dst *HarnessNode, amt uint64,
770776	stream , err  :=  srcTapd .SendPayment (ctxt , & tchrpc.SendPaymentRequest {
771777		AssetId :        assetID ,
772778		AssetAmount :    amt ,
779+ 		GroupKey :       cfg .groupKey ,
773780		PaymentRequest : sendReq ,
774781	})
775782	require .NoError (t , err )
@@ -942,6 +949,7 @@ type payConfig struct {
942949	payStatus          lnrpc.Payment_PaymentStatus 
943950	failureReason      lnrpc.PaymentFailureReason 
944951	rfq                fn.Option [rfqmsg.ID ]
952+ 	groupKey           []byte 
945953}
946954
947955func  defaultPayConfig () * payConfig  {
@@ -956,6 +964,12 @@ func defaultPayConfig() *payConfig {
956964
957965type  payOpt  func (* payConfig )
958966
967+ func  withMaybeGroupKey (groupKey  []byte ) payOpt  {
968+ 	return  func (c  * payConfig ) {
969+ 		c .groupKey  =  groupKey 
970+ 	}
971+ }
972+ 
959973func  withSmallShards () payOpt  {
960974	return  func (c  * payConfig ) {
961975		c .smallShards  =  true 
@@ -1010,6 +1024,12 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
10101024		opt (cfg )
10111025	}
10121026
1027+ 	// Nullify assetID if group key is set. RPC methods won't accept both so 
1028+ 	// let's prioritize the group key if set. 
1029+ 	if  len (cfg .groupKey ) >  0  {
1030+ 		assetID  =  []byte {}
1031+ 	}
1032+ 
10131033	ctxb  :=  context .Background ()
10141034	ctxt , cancel  :=  context .WithTimeout (ctxb , defaultTimeout )
10151035	defer  cancel ()
@@ -1041,6 +1061,7 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
10411061	stream , err  :=  payerTapd .SendPayment (ctxt , & tchrpc.SendPaymentRequest {
10421062		AssetId :        assetID ,
10431063		PeerPubkey :     rfqPeer .PubKey [:],
1064+ 		GroupKey :       cfg .groupKey ,
10441065		PaymentRequest : sendReq ,
10451066		RfqId :          rfqBytes ,
10461067		AllowOverpay :   cfg .allowOverpay ,
@@ -1102,6 +1123,7 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
11021123
11031124type  invoiceConfig  struct  {
11041125	errSubStr  string 
1126+ 	groupKey   []byte 
11051127}
11061128
11071129func  defaultInvoiceConfig () * invoiceConfig  {
@@ -1118,6 +1140,12 @@ func withInvoiceErrSubStr(errSubStr string) invoiceOpt {
11181140	}
11191141}
11201142
1143+ func  withMaybeInvGroupKey (groupKey  []byte ) invoiceOpt  {
1144+ 	return  func (c  * invoiceConfig ) {
1145+ 		c .groupKey  =  groupKey 
1146+ 	}
1147+ }
1148+ 
11211149func  createAssetInvoice (t  * testing.T , dstRfqPeer , dst  * HarnessNode ,
11221150	assetAmount  uint64 , assetID  []byte ,
11231151	opts  ... invoiceOpt ) * lnrpc.AddInvoiceResponse  {
@@ -1127,6 +1155,12 @@ func createAssetInvoice(t *testing.T, dstRfqPeer, dst *HarnessNode,
11271155		opt (cfg )
11281156	}
11291157
1158+ 	// Nullify assetID if group key is set. RPC methods won't accept both so 
1159+ 	// let's prioritize the group key if set. 
1160+ 	if  len (cfg .groupKey ) >  0  {
1161+ 		assetID  =  []byte {}
1162+ 	}
1163+ 
11301164	ctxb  :=  context .Background ()
11311165	ctxt , cancel  :=  context .WithTimeout (ctxb , defaultTimeout )
11321166	defer  cancel ()
@@ -1141,6 +1175,7 @@ func createAssetInvoice(t *testing.T, dstRfqPeer, dst *HarnessNode,
11411175
11421176	resp , err  :=  dstTapd .AddInvoice (ctxt , & tchrpc.AddInvoiceRequest {
11431177		AssetId :     assetID ,
1178+ 		GroupKey :    cfg .groupKey ,
11441179		AssetAmount : assetAmount ,
11451180		PeerPubkey :  dstRfqPeer .PubKey [:],
11461181		InvoiceRequest : & lnrpc.Invoice {
@@ -1185,7 +1220,7 @@ func createAssetInvoice(t *testing.T, dstRfqPeer, dst *HarnessNode,
11851220// individual HTLCs that arrived for it and that they show the correct asset 
11861221// amounts for the given ID when decoded. 
11871222func  assertInvoiceHtlcAssets (t  * testing.T , node  * HarnessNode ,
1188- 	addedInvoice  * lnrpc.AddInvoiceResponse , assetID  []byte ,
1223+ 	addedInvoice  * lnrpc.AddInvoiceResponse , assetID  []byte ,  groupID  [] byte , 
11891224	assetAmount  uint64 ) {
11901225
11911226	ctxb  :=  context .Background ()
@@ -1204,7 +1239,14 @@ func assertInvoiceHtlcAssets(t *testing.T, node *HarnessNode,
12041239
12051240	t .Logf ("Asset invoice: %v" , toProtoJSON (t , invoice ))
12061241
1207- 	targetID  :=  hex .EncodeToString (assetID )
1242+ 	var  targetID  string 
1243+ 	switch  {
1244+ 	case  len (groupID ) >  0 :
1245+ 		targetID  =  hex .EncodeToString (groupID )
1246+ 
1247+ 	case  len (assetID ) >  0 :
1248+ 		targetID  =  hex .EncodeToString (assetID )
1249+ 	}
12081250
12091251	var  totalAssetAmount  uint64 
12101252	for  _ , htlc  :=  range  invoice .Htlcs  {
@@ -1231,7 +1273,7 @@ func assertInvoiceHtlcAssets(t *testing.T, node *HarnessNode,
12311273// individual HTLCs that arrived for it and that they show the correct asset 
12321274// amounts for the given ID when decoded. 
12331275func  assertPaymentHtlcAssets (t  * testing.T , node  * HarnessNode , payHash  []byte ,
1234- 	assetID  []byte , assetAmount  uint64 ) {
1276+ 	assetID  []byte , groupID  [] byte ,  assetAmount  uint64 ) {
12351277
12361278	ctxb  :=  context .Background ()
12371279	ctxt , cancel  :=  context .WithTimeout (ctxb , defaultTimeout )
@@ -1252,7 +1294,14 @@ func assertPaymentHtlcAssets(t *testing.T, node *HarnessNode, payHash []byte,
12521294
12531295	t .Logf ("Asset payment: %v" , toProtoJSON (t , payment ))
12541296
1255- 	targetID  :=  hex .EncodeToString (assetID )
1297+ 	var  targetID  string 
1298+ 	switch  {
1299+ 	case  len (groupID ) >  0 :
1300+ 		targetID  =  hex .EncodeToString (groupID )
1301+ 
1302+ 	case  len (assetID ) >  0 :
1303+ 		targetID  =  hex .EncodeToString (assetID )
1304+ 	}
12561305
12571306	var  totalAssetAmount  uint64 
12581307	for  _ , htlc  :=  range  payment .Htlcs  {
@@ -1282,7 +1331,19 @@ type assetHodlInvoice struct {
12821331}
12831332
12841333func  createAssetHodlInvoice (t  * testing.T , dstRfqPeer , dst  * HarnessNode ,
1285- 	assetAmount  uint64 , assetID  []byte ) assetHodlInvoice  {
1334+ 	assetAmount  uint64 , assetID  []byte ,
1335+ 	opts  ... invoiceOpt ) assetHodlInvoice  {
1336+ 
1337+ 	cfg  :=  defaultInvoiceConfig ()
1338+ 	for  _ , opt  :=  range  opts  {
1339+ 		opt (cfg )
1340+ 	}
1341+ 
1342+ 	// Nullify assetID if group key is set. RPC methods won't accept both so 
1343+ 	// let's prioritize the group key if set. 
1344+ 	if  len (cfg .groupKey ) >  0  {
1345+ 		assetID  =  []byte {}
1346+ 	}
12861347
12871348	ctxb  :=  context .Background ()
12881349	ctxt , cancel  :=  context .WithTimeout (ctxb , defaultTimeout )
@@ -1306,6 +1367,7 @@ func createAssetHodlInvoice(t *testing.T, dstRfqPeer, dst *HarnessNode,
13061367
13071368	resp , err  :=  dstTapd .AddInvoice (ctxt , & tchrpc.AddInvoiceRequest {
13081369		AssetId :     assetID ,
1370+ 		GroupKey :    cfg .groupKey ,
13091371		AssetAmount : assetAmount ,
13101372		PeerPubkey :  dstRfqPeer .PubKey [:],
13111373		InvoiceRequest : & lnrpc.Invoice {
0 commit comments