@@ -7687,13 +7687,30 @@ 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
+ // asset.NewSpecifierFromGroupKey()
7706
+ groupKey , err := btcec .ParsePubKey (req .GroupKey )
7707
+ if err != nil {
7708
+ return nil , fmt .Errorf ("failed to parse group key: %w" ,
7709
+ err )
7710
+ }
7711
+ specifier = asset .NewSpecifierFromGroupKey (* groupKey )
7712
+
7694
7713
}
7695
- var assetID asset.ID
7696
- copy (assetID [:], req .AssetId )
7697
7714
7698
7715
// The peer public key is optional if there is only a single asset
7699
7716
// channel.
@@ -7708,8 +7725,6 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
7708
7725
peerPubKey = & parsedKey
7709
7726
}
7710
7727
7711
- specifier := asset .NewSpecifierFromId (assetID )
7712
-
7713
7728
// We can now query the asset channels we have.
7714
7729
assetChan , err := r .rfqChannel (
7715
7730
ctx , specifier , peerPubKey , ReceiveIntention ,
@@ -7731,15 +7746,32 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
7731
7746
time .Duration (expirySeconds ) * time .Second ,
7732
7747
)
7733
7748
7734
- resp , err := r .AddAssetBuyOrder (ctx , & rfqrpc.AddAssetBuyOrderRequest {
7735
- AssetSpecifier : & rfqrpc.AssetSpecifier {
7749
+ var rpcSpecifier rfqrpc.AssetSpecifier
7750
+
7751
+ switch {
7752
+ case specifier .HasId ():
7753
+ assetID := specifier .UnwrapIdToPtr ()
7754
+ rpcSpecifier = rfqrpc.AssetSpecifier {
7736
7755
Id : & rfqrpc.AssetSpecifier_AssetId {
7737
7756
AssetId : assetID [:],
7738
7757
},
7739
- },
7740
- AssetMaxAmt : req .AssetAmount ,
7741
- Expiry : uint64 (expiryTimestamp .Unix ()),
7742
- PeerPubKey : peerPubKey [:],
7758
+ }
7759
+
7760
+ case specifier .HasGroupPubKey ():
7761
+ groupKey := specifier .UnwrapGroupKeyToPtr ()
7762
+ groupKeyBytes := groupKey .SerializeCompressed ()
7763
+ rpcSpecifier = rfqrpc.AssetSpecifier {
7764
+ Id : & rfqrpc.AssetSpecifier_GroupKey {
7765
+ GroupKey : groupKeyBytes ,
7766
+ },
7767
+ }
7768
+ }
7769
+
7770
+ resp , err := r .AddAssetBuyOrder (ctx , & rfqrpc.AddAssetBuyOrderRequest {
7771
+ AssetSpecifier : & rpcSpecifier ,
7772
+ AssetMaxAmt : req .AssetAmount ,
7773
+ Expiry : uint64 (expiryTimestamp .Unix ()),
7774
+ PeerPubKey : peerPubKey [:],
7743
7775
TimeoutSeconds : uint32 (
7744
7776
rfq .DefaultTimeout .Seconds (),
7745
7777
),
0 commit comments