@@ -12,6 +12,7 @@ import (
12
12
13
13
"github.com/elementsproject/peerswap/log"
14
14
"github.com/elementsproject/peerswap/peerswaprpc"
15
+ "github.com/elementsproject/peerswap/premium"
15
16
16
17
"github.com/elementsproject/glightning/glightning"
17
18
"github.com/elementsproject/glightning/jrpc2"
@@ -628,11 +629,13 @@ func (l *ListPeers) Call() (jrpc2.Result, error) {
628
629
SatsOut : ReceiverSatsOut ,
629
630
SatsIn : ReceiverSatsIn ,
630
631
},
631
- PaidFee : paidFees ,
632
- BTCSwapInPremiumRatePPM : p .BTCSwapInPremiumRatePPM ,
633
- BTCSwapOutPremiumRatePPM : p .BTCSwapOutPremiumRatePPM ,
634
- LBTCSwapInPremiumRatePPM : p .LBTCSwapInPremiumRatePPM ,
635
- LBTCSwapOutPremiumRatePPM : p .LBTCSwapOutPremiumRatePPM ,
632
+ PaidFee : paidFees ,
633
+ PeerPremium : & Premium {
634
+ BTCSwapInPremiumRatePPM : p .BTCSwapInPremiumRatePPM ,
635
+ BTCSwapOutPremiumRatePPM : p .BTCSwapOutPremiumRatePPM ,
636
+ LBTCSwapInPremiumRatePPM : p .LBTCSwapInPremiumRatePPM ,
637
+ LBTCSwapOutPremiumRatePPM : p .LBTCSwapOutPremiumRatePPM ,
638
+ },
636
639
}
637
640
channels , err := l .cl .glightning .ListChannelsBySource (peer .Id )
638
641
if err != nil {
@@ -1102,6 +1105,208 @@ func (c ListConfig) LongDescription() string {
1102
1105
return c .Description ()
1103
1106
}
1104
1107
1108
+ func toPremiumAssetType (asset string ) premium.AssetType {
1109
+ switch strings .ToUpper (asset ) {
1110
+ case "BTC" :
1111
+ return premium .BTC
1112
+ case "LBTC" :
1113
+ return premium .LBTC
1114
+ default :
1115
+ return premium .AsserUnspecified
1116
+ }
1117
+ }
1118
+
1119
+ func toPremiumOperationType (operation string ) premium.OperationType {
1120
+ switch strings .ToUpper (operation ) {
1121
+ case "SWAP_IN" :
1122
+ return premium .SwapIn
1123
+ case "SWAP_OUT" :
1124
+ return premium .SwapOut
1125
+ default :
1126
+ return premium .OperationUnspecified
1127
+ }
1128
+ }
1129
+
1130
+ type GetPremiumRateRequest struct {
1131
+ PeerID string `json:"peer_id"`
1132
+ Asset string `json:"asset"`
1133
+ OperationType string `json:"operation"`
1134
+ cl * ClightningClient
1135
+ }
1136
+
1137
+ func (c * GetPremiumRateRequest ) Name () string {
1138
+ return "peerswap-getpremiumrate"
1139
+ }
1140
+
1141
+ func (c * GetPremiumRateRequest ) New () interface {} {
1142
+ return & GetPremiumRateRequest {
1143
+ cl : c .cl ,
1144
+ }
1145
+ }
1146
+
1147
+ func (c * GetPremiumRateRequest ) Call () (jrpc2.Result , error ) {
1148
+ if ! c .cl .isReady {
1149
+ return nil , ErrWaitingForReady
1150
+ }
1151
+ e , err := c .cl .ps .GetRate (c .PeerID , toPremiumAssetType (c .Asset ),
1152
+ toPremiumOperationType (c .OperationType ))
1153
+ if err != nil {
1154
+ return nil , fmt .Errorf ("error getting premium rate: %v" , err )
1155
+ }
1156
+ return e .PremiumRatePPM ().Value (), nil
1157
+ }
1158
+
1159
+ func (c * GetPremiumRateRequest ) Get (client * ClightningClient ) jrpc2.ServerMethod {
1160
+ return & GetPremiumRateRequest {
1161
+ cl : client ,
1162
+ }
1163
+ }
1164
+
1165
+ func (c GetPremiumRateRequest ) Description () string {
1166
+ return "Get the premium rate for a peer"
1167
+ }
1168
+
1169
+ func (c GetPremiumRateRequest ) LongDescription () string {
1170
+ return c .Description ()
1171
+ }
1172
+
1173
+ type SetPremiumRateRequest struct {
1174
+ PeerID string `json:"peer_id"`
1175
+ Asset string `json:"asset"`
1176
+ OperationType string `json:"operation"`
1177
+ PremiumRatePPM int64 `json:"premium_rate_ppm"`
1178
+ cl * ClightningClient
1179
+ }
1180
+
1181
+ func (c * SetPremiumRateRequest ) Name () string {
1182
+ return "peerswap-setpremiumrate"
1183
+ }
1184
+
1185
+ func (c * SetPremiumRateRequest ) New () interface {} {
1186
+ return & SetPremiumRateRequest {
1187
+ cl : c .cl ,
1188
+ }
1189
+ }
1190
+
1191
+ func (c * SetPremiumRateRequest ) Call () (jrpc2.Result , error ) {
1192
+ if ! c .cl .isReady {
1193
+ return nil , ErrWaitingForReady
1194
+ }
1195
+ rate , err := premium .NewPremiumRate (toPremiumAssetType (c .Asset ),
1196
+ toPremiumOperationType (c .OperationType ), premium .NewPPM (c .PremiumRatePPM ))
1197
+ if err != nil {
1198
+ return nil , fmt .Errorf ("error creating premium rate: %v" , err )
1199
+ }
1200
+ err = c .cl .ps .SetRate (c .PeerID , rate )
1201
+ if err != nil {
1202
+ return nil , fmt .Errorf ("error setting premium rate: %v" , err )
1203
+ }
1204
+ return rate , nil
1205
+ }
1206
+
1207
+ func (c * SetPremiumRateRequest ) Get (client * ClightningClient ) jrpc2.ServerMethod {
1208
+ return & SetPremiumRateRequest {
1209
+ cl : client ,
1210
+ }
1211
+ }
1212
+
1213
+ func (c SetPremiumRateRequest ) Description () string {
1214
+ return "Set the premium rate for a peer"
1215
+ }
1216
+
1217
+ func (c SetPremiumRateRequest ) LongDescription () string {
1218
+ return c .Description ()
1219
+ }
1220
+
1221
+ type SetDefaultPremiumRateRequest struct {
1222
+ Asset string `json:"asset"`
1223
+ OperationType string `json:"operation"`
1224
+ PremiumRatePPM int64 `json:"premium_rate_ppm"`
1225
+ cl * ClightningClient
1226
+ }
1227
+
1228
+ func (c * SetDefaultPremiumRateRequest ) Name () string {
1229
+ return "peerswap-setdefaultpremiumrate"
1230
+ }
1231
+
1232
+ func (c * SetDefaultPremiumRateRequest ) New () interface {} {
1233
+ return & SetDefaultPremiumRateRequest {
1234
+ cl : c .cl ,
1235
+ }
1236
+ }
1237
+
1238
+ func (c * SetDefaultPremiumRateRequest ) Call () (jrpc2.Result , error ) {
1239
+ if ! c .cl .isReady {
1240
+ return nil , ErrWaitingForReady
1241
+ }
1242
+ rate , err := premium .NewPremiumRate (toPremiumAssetType (c .Asset ),
1243
+ toPremiumOperationType (c .OperationType ), premium .NewPPM (c .PremiumRatePPM ))
1244
+ if err != nil {
1245
+ return nil , fmt .Errorf ("error creating premium rate: %v" , err )
1246
+ }
1247
+ err = c .cl .ps .SetDefaultRate (rate )
1248
+ if err != nil {
1249
+ return nil , fmt .Errorf ("error setting default premium rate: %v" , err )
1250
+ }
1251
+ return rate , nil
1252
+ }
1253
+
1254
+ func (c * SetDefaultPremiumRateRequest ) Get (client * ClightningClient ) jrpc2.ServerMethod {
1255
+ return & SetDefaultPremiumRateRequest {
1256
+ cl : client ,
1257
+ }
1258
+ }
1259
+
1260
+ func (c SetDefaultPremiumRateRequest ) Description () string {
1261
+ return "Set the default premium rate"
1262
+ }
1263
+
1264
+ func (c SetDefaultPremiumRateRequest ) LongDescription () string {
1265
+ return c .Description ()
1266
+ }
1267
+
1268
+ type GetDefaultPremiumRateRequest struct {
1269
+ Asset string `json:"asset"`
1270
+ OperationType string `json:"operation"`
1271
+ cl * ClightningClient
1272
+ }
1273
+
1274
+ func (c * GetDefaultPremiumRateRequest ) Name () string {
1275
+ return "peerswap-getdefaultpremiumrate"
1276
+ }
1277
+
1278
+ func (c * GetDefaultPremiumRateRequest ) New () interface {} {
1279
+ return & GetDefaultPremiumRateRequest {
1280
+ cl : c .cl ,
1281
+ }
1282
+ }
1283
+
1284
+ func (c * GetDefaultPremiumRateRequest ) Call () (jrpc2.Result , error ) {
1285
+ if ! c .cl .isReady {
1286
+ return nil , ErrWaitingForReady
1287
+ }
1288
+ rate , err := c .cl .ps .GetDefaultRate (toPremiumAssetType (c .Asset ),
1289
+ toPremiumOperationType (c .OperationType ))
1290
+ if err != nil {
1291
+ return nil , fmt .Errorf ("error getting default premium rate: %v" , err )
1292
+ }
1293
+ return rate .PremiumRatePPM ().Value (), nil
1294
+ }
1295
+
1296
+ func (c * GetDefaultPremiumRateRequest ) Get (client * ClightningClient ) jrpc2.ServerMethod {
1297
+ return & GetDefaultPremiumRateRequest {
1298
+ cl : client ,
1299
+ }
1300
+ }
1301
+
1302
+ func (c GetDefaultPremiumRateRequest ) Description () string {
1303
+ return "Get the default premium rate"
1304
+ }
1305
+
1306
+ func (c GetDefaultPremiumRateRequest ) LongDescription () string {
1307
+ return c .Description ()
1308
+ }
1309
+
1105
1310
type PeerSwapPeerChannel struct {
1106
1311
ChannelId string `json:"short_channel_id"`
1107
1312
LocalBalance uint64 `json:"local_balance"`
@@ -1116,18 +1321,22 @@ type SwapStats struct {
1116
1321
SatsIn uint64 `json:"total_sats_swapped_in"`
1117
1322
}
1118
1323
1324
+ type Premium struct {
1325
+ BTCSwapInPremiumRatePPM int64 `json:"btc_swap_in_premium_rate_ppm"`
1326
+ BTCSwapOutPremiumRatePPM int64 `json:"btc_swap_out_premium_rate_ppm"`
1327
+ LBTCSwapInPremiumRatePPM int64 `json:"lbtc_swap_in_premium_rate_ppm"`
1328
+ LBTCSwapOutPremiumRatePPM int64 `json:"lbtc_swap_out_premium_rate_ppm"`
1329
+ }
1330
+
1119
1331
type PeerSwapPeer struct {
1120
- NodeId string `json:"nodeid"`
1121
- SwapsAllowed bool `json:"swaps_allowed"`
1122
- SupportedAssets []string `json:"supported_assets"`
1123
- Channels []* PeerSwapPeerChannel `json:"channels"`
1124
- AsSender * SwapStats `json:"sent,omitempty"`
1125
- AsReceiver * SwapStats `json:"received,omitempty"`
1126
- PaidFee uint64 `json:"total_fee_paid,omitempty"`
1127
- BTCSwapInPremiumRatePPM int64 `json:"btc_swap_in_premium_rate_ppm"`
1128
- BTCSwapOutPremiumRatePPM int64 `json:"btc_swap_out_premium_rate_ppm"`
1129
- LBTCSwapInPremiumRatePPM int64 `json:"lbtc_swap_in_premium_rate_ppm"`
1130
- LBTCSwapOutPremiumRatePPM int64 `json:"lbtc_swap_out_premium_rate_ppm"`
1332
+ NodeId string `json:"nodeid"`
1333
+ SwapsAllowed bool `json:"swaps_allowed"`
1334
+ SupportedAssets []string `json:"supported_assets"`
1335
+ Channels []* PeerSwapPeerChannel `json:"channels"`
1336
+ AsSender * SwapStats `json:"sent,omitempty"`
1337
+ AsReceiver * SwapStats `json:"received,omitempty"`
1338
+ PaidFee uint64 `json:"total_fee_paid,omitempty"`
1339
+ PeerPremium * Premium `json:"premium,omitempty"`
1131
1340
}
1132
1341
1133
1342
// checkFeatures checks if a node runs the peerswap Plugin
0 commit comments