@@ -7687,13 +7687,29 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
7687
7687
}
7688
7688
iReq := req .InvoiceRequest
7689
7689
7690
- // Do some preliminary checks on the asset ID and make sure we have any
7691
- // balance for that asset.
7692
- if len (req .AssetId ) != sha256 .Size {
7693
- return nil , fmt .Errorf ("asset ID must be 32 bytes" )
7690
+ var specifier asset.Specifier
7691
+
7692
+ switch {
7693
+ case len (req .AssetId ) > 0 && len (req .GroupKey ) > 0 :
7694
+ return nil , fmt .Errorf ("cannot set both asset id and group key" )
7695
+
7696
+ case len (req .AssetId ) > 0 :
7697
+ if len (req .AssetId ) != sha256 .Size {
7698
+ return nil , fmt .Errorf ("asset ID must be 32 bytes" )
7699
+ }
7700
+ var assetID asset.ID
7701
+ copy (assetID [:], req .AssetId )
7702
+ specifier = asset .NewSpecifierFromId (assetID )
7703
+
7704
+ case len (req .GroupKey ) > 0 :
7705
+ groupKey , err := btcec .ParsePubKey (req .GroupKey )
7706
+ if err != nil {
7707
+ return nil , fmt .Errorf ("failed to parse group key: %w" ,
7708
+ err )
7709
+ }
7710
+ specifier = asset .NewSpecifierFromGroupKey (* groupKey )
7711
+
7694
7712
}
7695
- var assetID asset.ID
7696
- copy (assetID [:], req .AssetId )
7697
7713
7698
7714
// The peer public key is optional if there is only a single asset
7699
7715
// channel.
@@ -7708,8 +7724,6 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
7708
7724
peerPubKey = & parsedKey
7709
7725
}
7710
7726
7711
- specifier := asset .NewSpecifierFromId (assetID )
7712
-
7713
7727
// We can now query the asset channels we have.
7714
7728
assetChan , err := r .rfqChannel (
7715
7729
ctx , specifier , peerPubKey , ReceiveIntention ,
@@ -7731,15 +7745,32 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
7731
7745
time .Duration (expirySeconds ) * time .Second ,
7732
7746
)
7733
7747
7734
- resp , err := r .AddAssetBuyOrder (ctx , & rfqrpc.AddAssetBuyOrderRequest {
7735
- AssetSpecifier : & rfqrpc.AssetSpecifier {
7748
+ var rpcSpecifier rfqrpc.AssetSpecifier
7749
+
7750
+ switch {
7751
+ case specifier .HasId ():
7752
+ assetID := specifier .UnwrapIdToPtr ()
7753
+ rpcSpecifier = rfqrpc.AssetSpecifier {
7736
7754
Id : & rfqrpc.AssetSpecifier_AssetId {
7737
7755
AssetId : assetID [:],
7738
7756
},
7739
- },
7740
- AssetMaxAmt : req .AssetAmount ,
7741
- Expiry : uint64 (expiryTimestamp .Unix ()),
7742
- PeerPubKey : peerPubKey [:],
7757
+ }
7758
+
7759
+ case specifier .HasGroupPubKey ():
7760
+ groupKey := specifier .UnwrapGroupKeyToPtr ()
7761
+ groupKeyBytes := groupKey .SerializeCompressed ()
7762
+ rpcSpecifier = rfqrpc.AssetSpecifier {
7763
+ Id : & rfqrpc.AssetSpecifier_GroupKey {
7764
+ GroupKey : groupKeyBytes ,
7765
+ },
7766
+ }
7767
+ }
7768
+
7769
+ resp , err := r .AddAssetBuyOrder (ctx , & rfqrpc.AddAssetBuyOrderRequest {
7770
+ AssetSpecifier : & rpcSpecifier ,
7771
+ AssetMaxAmt : req .AssetAmount ,
7772
+ Expiry : uint64 (expiryTimestamp .Unix ()),
7773
+ PeerPubKey : peerPubKey [:],
7743
7774
TimeoutSeconds : uint32 (
7744
7775
rfq .DefaultTimeout .Seconds (),
7745
7776
),
0 commit comments