Skip to content

Commit b26c621

Browse files
committed
multi: Implement peer premium rate deletion
Add a new RPC and CLI command to delete peer-specific premium rates. Ensure default rate usage once the per-peer rate is removed.
1 parent c84e53a commit b26c621

File tree

11 files changed

+569
-227
lines changed

11 files changed

+569
-227
lines changed

clightning/clightning.go

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ var methods = []peerswaprpcMethod{
5151
&SetPremiumRate{},
5252
&GetDefaultPremiumRate{},
5353
&SetDefaultPremiumRate{},
54+
&DeletePremiumRate{},
5455
}
5556

5657
var devmethods = []peerswaprpcMethod{}

clightning/clightning_commands.go

+68-4
Original file line numberDiff line numberDiff line change
@@ -1153,7 +1153,11 @@ func (c *GetPremiumRate) Call() (jrpc2.Result, error) {
11531153
if err != nil {
11541154
return nil, fmt.Errorf("error getting premium rate: %v", err)
11551155
}
1156-
return e.PremiumRatePPM().Value(), nil
1156+
return &peerswaprpc.PremiumRate{
1157+
Asset: peerswaprpc.ToAssetType(e.Asset()),
1158+
Operation: peerswaprpc.ToOperationType(e.Operation()),
1159+
PremiumRatePpm: e.PremiumRatePPM().Value(),
1160+
}, nil
11571161
}
11581162

11591163
func (c *GetPremiumRate) Get(client *ClightningClient) jrpc2.ServerMethod {
@@ -1201,7 +1205,11 @@ func (c *SetPremiumRate) Call() (jrpc2.Result, error) {
12011205
if err != nil {
12021206
return nil, fmt.Errorf("error setting premium rate: %v", err)
12031207
}
1204-
return rate, nil
1208+
return &peerswaprpc.PremiumRate{
1209+
Asset: peerswaprpc.ToAssetType(rate.Asset()),
1210+
Operation: peerswaprpc.ToOperationType(rate.Operation()),
1211+
PremiumRatePpm: rate.PremiumRatePPM().Value(),
1212+
}, nil
12051213
}
12061214

12071215
func (c *SetPremiumRate) Get(client *ClightningClient) jrpc2.ServerMethod {
@@ -1218,6 +1226,54 @@ func (c SetPremiumRate) LongDescription() string {
12181226
return c.Description()
12191227
}
12201228

1229+
type DeletePremiumRate struct {
1230+
PeerID string `json:"peer_id"`
1231+
Asset string `json:"asset"`
1232+
Operation string `json:"operation"`
1233+
cl *ClightningClient `json:"-"`
1234+
}
1235+
1236+
func (c *DeletePremiumRate) Name() string {
1237+
return "peerswap-deletepremiumrate"
1238+
}
1239+
1240+
func (c *DeletePremiumRate) New() interface{} {
1241+
return &DeletePremiumRate{
1242+
cl: c.cl,
1243+
}
1244+
}
1245+
1246+
func (c *DeletePremiumRate) Call() (jrpc2.Result, error) {
1247+
if !c.cl.isReady {
1248+
return nil, ErrWaitingForReady
1249+
}
1250+
err := c.cl.ps.DeleteRate(c.PeerID, toPremiumAssetType(c.Asset),
1251+
toPremiumOperationType(c.Operation))
1252+
if err != nil {
1253+
return nil, fmt.Errorf("error deleting premium rate: %v", err)
1254+
}
1255+
1256+
return &peerswaprpc.PremiumRate{
1257+
Asset: peerswaprpc.ToAssetType(toPremiumAssetType(c.Asset)),
1258+
Operation: peerswaprpc.ToOperationType(toPremiumOperationType(c.Operation)),
1259+
PremiumRatePpm: 0,
1260+
}, nil
1261+
}
1262+
1263+
func (c *DeletePremiumRate) Get(client *ClightningClient) jrpc2.ServerMethod {
1264+
return &DeletePremiumRate{
1265+
cl: client,
1266+
}
1267+
}
1268+
1269+
func (c DeletePremiumRate) Description() string {
1270+
return "Delete the premium rate for a peer"
1271+
}
1272+
1273+
func (c DeletePremiumRate) LongDescription() string {
1274+
return c.Description()
1275+
}
1276+
12211277
type SetDefaultPremiumRate struct {
12221278
Asset string `json:"asset"`
12231279
Operation string `json:"operation"`
@@ -1248,7 +1304,11 @@ func (c *SetDefaultPremiumRate) Call() (jrpc2.Result, error) {
12481304
if err != nil {
12491305
return nil, fmt.Errorf("error setting default premium rate: %v", err)
12501306
}
1251-
return rate, nil
1307+
return &peerswaprpc.PremiumRate{
1308+
Asset: peerswaprpc.ToAssetType(rate.Asset()),
1309+
Operation: peerswaprpc.ToOperationType(rate.Operation()),
1310+
PremiumRatePpm: rate.PremiumRatePPM().Value(),
1311+
}, nil
12521312
}
12531313

12541314
func (c *SetDefaultPremiumRate) Get(client *ClightningClient) jrpc2.ServerMethod {
@@ -1290,7 +1350,11 @@ func (c *GetDefaultPremiumRate) Call() (jrpc2.Result, error) {
12901350
if err != nil {
12911351
return nil, fmt.Errorf("error getting default premium rate: %v", err)
12921352
}
1293-
return rate.PremiumRatePPM().Value(), nil
1353+
return &peerswaprpc.PremiumRate{
1354+
Asset: peerswaprpc.ToAssetType(rate.Asset()),
1355+
Operation: peerswaprpc.ToOperationType(rate.Operation()),
1356+
PremiumRatePpm: rate.PremiumRatePPM().Value(),
1357+
}, nil
12941358
}
12951359

12961360
func (c *GetDefaultPremiumRate) Get(client *ClightningClient) jrpc2.ServerMethod {

cmd/peerswaplnd/pscli/main.go

+30-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func main() {
3333
liquidGetBalanceCommand, liquidGetAddressCommand, liquidSendToAddressCommand,
3434
stopCommand, listActiveSwapsCommand, allowSwapRequestsCommand, addPeerCommand, removePeerCommand,
3535
addSusPeerCommand, removeSusPeerCommand, getDefaultPremiumRateCommand, updateDefaultPremiumRateCommand,
36-
getPeerPremiumRateCommand, updatePremiumRateCommand,
36+
getPeerPremiumRateCommand, updatePremiumRateCommand, deletePeerPremiumRateCommand,
3737
}
3838
app.Version = fmt.Sprintf("commit: %s", GitCommit)
3939
err := app.Run(os.Args)
@@ -245,6 +245,16 @@ var (
245245
},
246246
Action: updateDefaultPremiumRate,
247247
}
248+
deletePeerPremiumRateCommand = cli.Command{
249+
Name: "deletepeerpremiumrate",
250+
Usage: "Delete the premium rate for a specific peer, asset, and operation",
251+
Flags: []cli.Flag{
252+
nodeIdFlag,
253+
assetFlag,
254+
operationFlag,
255+
},
256+
Action: deletePeerPremiumRate,
257+
}
248258
getPeerPremiumRateCommand = cli.Command{
249259
Name: "getpeerpremiumrate",
250260
Usage: "Get the premium rate for a specific peer, asset, and operation",
@@ -627,6 +637,25 @@ func updatePremiumRate(ctx *cli.Context) error {
627637
return nil
628638
}
629639

640+
func deletePeerPremiumRate(ctx *cli.Context) error {
641+
client, cleanup, err := getClient(ctx)
642+
if err != nil {
643+
return err
644+
}
645+
defer cleanup()
646+
647+
res, err := client.DeletePremiumRate(context.Background(), &peerswaprpc.DeletePremiumRateRequest{
648+
NodeId: ctx.String(nodeIdFlag.Name),
649+
Asset: peerswaprpc.AssetType(peerswaprpc.AssetType_value[strings.ToUpper(ctx.String(assetFlag.Name))]),
650+
Operation: peerswaprpc.OperationType(peerswaprpc.OperationType_value[strings.ToUpper(ctx.String(operationFlag.Name))]),
651+
})
652+
if err != nil {
653+
return err
654+
}
655+
printRespJSON(res)
656+
return nil
657+
}
658+
630659
func getClient(ctx *cli.Context) (peerswaprpc.PeerSwapClient, func(), error) {
631660
rpcServer := ctx.GlobalString("rpchost")
632661

docs/usage.md

+14
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,20 @@ For LND:
155155
pscli updatepremiumrate --node_id [node_id] --asset [BTC|LBTC] --operation [SWAP_IN|SWAP_OUT] --rate [premium_rate_ppm]
156156
```
157157

158+
### Delete Peer-Specific Premium Rate
159+
160+
To delete the premium rate for a specific peer, use the following command:
161+
162+
For CLN:
163+
```
164+
lightning-cli peerswap-deletepremiumrate [peer_id] [BTC|LBTC] [SWAP_IN|SWAP_OUT]
165+
```
166+
167+
For LND:
168+
```bash
169+
pscli deletepeerpremiumrate --node_id [node_id] --asset [BTC|LBTC] --operation [SWAP_IN|SWAP_OUT]
170+
```
171+
158172
## Misc
159173

160174
`listpeers` - A command that returns peers that support the PeerSwap protocol. It also gives statistics about received and sent swaps to a peer.

0 commit comments

Comments
 (0)