mirror of
https://github.com/aljazceru/lspd.git
synced 2025-12-19 14:54:22 +01:00
make mempool priority configurable
This commit is contained in:
@@ -33,6 +33,10 @@ type NodeConfig struct {
|
|||||||
// Number of blocks after which an opened channel is considered confirmed.
|
// Number of blocks after which an opened channel is considered confirmed.
|
||||||
TargetConf uint32 `json:"targetConf,string"`
|
TargetConf uint32 `json:"targetConf,string"`
|
||||||
|
|
||||||
|
// Minimum number of confirmations inputs for zero conf channel opens should
|
||||||
|
// have.
|
||||||
|
MinConfs uint32 `json:"minConfs,string"`
|
||||||
|
|
||||||
// Smallest htlc amount routed over channels opened with the OpenChannel
|
// Smallest htlc amount routed over channels opened with the OpenChannel
|
||||||
// rpc call.
|
// rpc call.
|
||||||
MinHtlcMsat uint64 `json:"minHtlcMsat,string"`
|
MinHtlcMsat uint64 `json:"minHtlcMsat,string"`
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ var (
|
|||||||
|
|
||||||
var payHashGroup singleflight.Group
|
var payHashGroup singleflight.Group
|
||||||
var feeEstimator chain.FeeEstimator
|
var feeEstimator chain.FeeEstimator
|
||||||
|
var feeStrategy chain.FeeStrategy
|
||||||
|
|
||||||
type interceptResult struct {
|
type interceptResult struct {
|
||||||
action interceptAction
|
action interceptAction
|
||||||
@@ -247,7 +248,7 @@ func openChannel(client LightningClient, config *NodeConfig, paymentHash, destin
|
|||||||
if feeEstimator != nil {
|
if feeEstimator != nil {
|
||||||
fee, err := feeEstimator.EstimateFeeRate(
|
fee, err := feeEstimator.EstimateFeeRate(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
chain.FeeStrategyMinimum,
|
feeStrategy,
|
||||||
)
|
)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
feeEstimation = &fee.SatPerVByte
|
feeEstimation = &fee.SatPerVByte
|
||||||
@@ -269,7 +270,7 @@ func openChannel(client LightningClient, config *NodeConfig, paymentHash, destin
|
|||||||
channelPoint, err := client.OpenChannel(&OpenChannelRequest{
|
channelPoint, err := client.OpenChannel(&OpenChannelRequest{
|
||||||
Destination: destination,
|
Destination: destination,
|
||||||
CapacitySat: uint64(capacity),
|
CapacitySat: uint64(capacity),
|
||||||
MinConfs: 6,
|
MinConfs: config.MinConfs,
|
||||||
IsPrivate: true,
|
IsPrivate: true,
|
||||||
IsZeroConf: true,
|
IsZeroConf: true,
|
||||||
FeeSatPerVByte: feeEstimation,
|
FeeSatPerVByte: feeEstimation,
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ func newLspd(h *lntest.TestHarness, name string, lnd *string, cln *string, envEx
|
|||||||
nodes := fmt.Sprintf(
|
nodes := fmt.Sprintf(
|
||||||
`NODES='[ { "name": "%s", "lspdPrivateKey": "%x", "token": "hello", "host": "host:port",`+
|
`NODES='[ { "name": "%s", "lspdPrivateKey": "%x", "token": "hello", "host": "host:port",`+
|
||||||
` "publicChannelAmount": "1000183", "channelAmount": "100000", "channelPrivate": false,`+
|
` "publicChannelAmount": "1000183", "channelAmount": "100000", "channelPrivate": false,`+
|
||||||
` "targetConf": "6", "minHtlcMsat": "600", "baseFeeMsat": "1000", "feeRate": "0.000001",`+
|
` "targetConf": "6", "minConfs": "1", "minHtlcMsat": "600", "baseFeeMsat": "1000", "feeRate": "0.000001",`+
|
||||||
` "timeLockDelta": "144", "channelFeePermyriad": "40", "channelMinimumFeeMsat": "2000000",`+
|
` "timeLockDelta": "144", "channelFeePermyriad": "40", "channelMinimumFeeMsat": "2000000",`+
|
||||||
` "additionalChannelCapacity": "100000", "maxInactiveDuration": "3888000", %s}]'`,
|
` "additionalChannelCapacity": "100000", "maxInactiveDuration": "3888000", %s}]'`,
|
||||||
name,
|
name,
|
||||||
@@ -112,6 +112,7 @@ func newLspd(h *lntest.TestHarness, name string, lnd *string, cln *string, envEx
|
|||||||
fmt.Sprintf("LISTEN_ADDRESS=%s", grpcAddress),
|
fmt.Sprintf("LISTEN_ADDRESS=%s", grpcAddress),
|
||||||
fmt.Sprintf("USE_MEMPOOL_FEE_ESTIMATION=true"),
|
fmt.Sprintf("USE_MEMPOOL_FEE_ESTIMATION=true"),
|
||||||
fmt.Sprintf("MEMPOOL_API_BASE_URL=https://mempool.space/api/v1/"),
|
fmt.Sprintf("MEMPOOL_API_BASE_URL=https://mempool.space/api/v1/"),
|
||||||
|
fmt.Sprintf("MEMPOOL_PRIORITY=economy"),
|
||||||
}
|
}
|
||||||
|
|
||||||
env = append(env, envExt...)
|
env = append(env, envExt...)
|
||||||
|
|||||||
19
main.go
19
main.go
@@ -6,9 +6,11 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/breez/lspd/chain"
|
||||||
"github.com/breez/lspd/mempool"
|
"github.com/breez/lspd/mempool"
|
||||||
"github.com/btcsuite/btcd/btcec/v2"
|
"github.com/btcsuite/btcd/btcec/v2"
|
||||||
)
|
)
|
||||||
@@ -42,7 +44,22 @@ func main() {
|
|||||||
log.Fatalf("failed to initialize mempool client: %v", err)
|
log.Fatalf("failed to initialize mempool client: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("using mempool api for fee estimation: %v", mempoolUrl)
|
envFeeStrategy := os.Getenv("MEMPOOL_PRIORITY")
|
||||||
|
switch strings.ToLower(envFeeStrategy) {
|
||||||
|
case "minimum":
|
||||||
|
feeStrategy = chain.FeeStrategyMinimum
|
||||||
|
case "economy":
|
||||||
|
feeStrategy = chain.FeeStrategyEconomy
|
||||||
|
case "hour":
|
||||||
|
feeStrategy = chain.FeeStrategyHour
|
||||||
|
case "halfhour":
|
||||||
|
feeStrategy = chain.FeeStrategyHalfHour
|
||||||
|
case "fastest":
|
||||||
|
feeStrategy = chain.FeeStrategyFastest
|
||||||
|
default:
|
||||||
|
feeStrategy = chain.FeeStrategyEconomy
|
||||||
|
}
|
||||||
|
log.Printf("using mempool api for fee estimation: %v, fee strategy: %v:%v", mempoolUrl, envFeeStrategy, feeStrategy)
|
||||||
}
|
}
|
||||||
|
|
||||||
var interceptors []HtlcInterceptor
|
var interceptors []HtlcInterceptor
|
||||||
|
|||||||
@@ -36,6 +36,11 @@ CHANNELMISMATCH_NOTIFICATION_FROM="Name4 <user4@domain.com>"
|
|||||||
USE_MEMPOOL_FEE_ESTIMATION=true
|
USE_MEMPOOL_FEE_ESTIMATION=true
|
||||||
MEMPOOL_API_BASE_URL=https://mempool.space/api/v1/
|
MEMPOOL_API_BASE_URL=https://mempool.space/api/v1/
|
||||||
|
|
||||||
|
# Priority to use for opening channels when using the mempool api.
|
||||||
|
# Valid options are: fastest, halfhour, hour, economy, minimum
|
||||||
|
# Defaults to economy
|
||||||
|
MEMPOOL_PRIORITY=economy
|
||||||
|
|
||||||
# lspd can be connected to multiple nodes at once. The NODES variable takes an
|
# lspd can be connected to multiple nodes at once. The NODES variable takes an
|
||||||
# array of nodes. Each node is either a cln or an lnd node and should have the
|
# array of nodes. Each node is either a cln or an lnd node and should have the
|
||||||
# corresponding "cln" or "lnd" key set.
|
# corresponding "cln" or "lnd" key set.
|
||||||
@@ -53,4 +58,4 @@ MEMPOOL_API_BASE_URL=https://mempool.space/api/v1/
|
|||||||
# from the app to lspd.
|
# from the app to lspd.
|
||||||
#
|
#
|
||||||
# For other specific settings see the fields in `config.go` NodeConfig struct.
|
# For other specific settings see the fields in `config.go` NodeConfig struct.
|
||||||
NODES='[ { "name": "<LSP NAME>", "nodePubkey": "<LIGHTNING NODE PUBKEY>", "lspdPrivateKey": "<LSPD PRIVATE KEY>", "token": "<ACCESS TOKEN>", "host": "<HOSTNAME:PORT for lightning clients>", "publicChannelAmount": "1000183", "channelAmount": "100000", "channelPrivate": false, "targetConf": "6", "minHtlcMsat": "600", "baseFeeMsat": "1000", "feeRate": "0.000001", "timeLockDelta": "144", "channelFeePermyriad": "40", "channelMinimumFeeMsat": "2000000", "additionalChannelCapacity": "100000", "maxInactiveDuration": "3888000", "lnd": { "address": "<HOSTNAME:PORT>", "cert": "<LND_CERT base64>", "macaroon": "<LND_MACAROON hex>" } }, { "name": "<LSP NAME>", "nodePubkey": "<LIGHTNING NODE PUBKEY>", "lspdPrivateKey": "<LSPD PRIVATE KEY>", "token": "<ACCESS TOKEN>", "host": "<HOSTNAME:PORT for lightning clients>", "publicChannelAmount": "1000183", "channelAmount": "100000", "channelPrivate": false, "targetConf": "6", "minHtlcMsat": "600", "baseFeeMsat": "1000", "feeRate": "0.000001", "timeLockDelta": "144", "channelFeePermyriad": "40", "channelMinimumFeeMsat": "2000000", "additionalChannelCapacity": "100000", "maxInactiveDuration": "3888000", "cln": { "pluginAddress": "<address the lsp cln plugin listens on (ip:port)>", "socketPath": "<path to the cln lightning-rpc socket file>" } } ]'
|
NODES='[ { "name": "<LSP NAME>", "nodePubkey": "<LIGHTNING NODE PUBKEY>", "lspdPrivateKey": "<LSPD PRIVATE KEY>", "token": "<ACCESS TOKEN>", "host": "<HOSTNAME:PORT for lightning clients>", "publicChannelAmount": "1000183", "channelAmount": "100000", "channelPrivate": false, "targetConf": "6", "minConfs": "6", "minHtlcMsat": "600", "baseFeeMsat": "1000", "feeRate": "0.000001", "timeLockDelta": "144", "channelFeePermyriad": "40", "channelMinimumFeeMsat": "2000000", "additionalChannelCapacity": "100000", "maxInactiveDuration": "3888000", "lnd": { "address": "<HOSTNAME:PORT>", "cert": "<LND_CERT base64>", "macaroon": "<LND_MACAROON hex>" } }, { "name": "<LSP NAME>", "nodePubkey": "<LIGHTNING NODE PUBKEY>", "lspdPrivateKey": "<LSPD PRIVATE KEY>", "token": "<ACCESS TOKEN>", "host": "<HOSTNAME:PORT for lightning clients>", "publicChannelAmount": "1000183", "channelAmount": "100000", "channelPrivate": false, "targetConf": "6", "minConfs": "6", "minHtlcMsat": "600", "baseFeeMsat": "1000", "feeRate": "0.000001", "timeLockDelta": "144", "channelFeePermyriad": "40", "channelMinimumFeeMsat": "2000000", "additionalChannelCapacity": "100000", "maxInactiveDuration": "3888000", "cln": { "pluginAddress": "<address the lsp cln plugin listens on (ip:port)>", "socketPath": "<path to the cln lightning-rpc socket file>" } } ]'
|
||||||
|
|||||||
Reference in New Issue
Block a user