mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-27 06:01:48 +02:00
multi: remove Litecoin config options
This commit removes the `Litecoin`, `LtcMode` and `LitecoindMode` members from the main LND `Config` struct. Since only the bitcoin blockchain is now supported, this commit also deprecates the `cfg.Bitcoin.Active` config option.
This commit is contained in:
committed by
Olaoluwa Osuntokun
parent
ba93cde07a
commit
3912d5a0c6
416
config.go
416
config.go
@@ -252,11 +252,7 @@ var (
|
||||
defaultBtcdDir = btcutil.AppDataDir("btcd", false)
|
||||
defaultBtcdRPCCertFile = filepath.Join(defaultBtcdDir, "rpc.cert")
|
||||
|
||||
defaultLtcdDir = btcutil.AppDataDir("ltcd", false)
|
||||
defaultLtcdRPCCertFile = filepath.Join(defaultLtcdDir, "rpc.cert")
|
||||
|
||||
defaultBitcoindDir = btcutil.AppDataDir("bitcoin", false)
|
||||
defaultLitecoindDir = btcutil.AppDataDir("litecoin", false)
|
||||
defaultBitcoindDir = btcutil.AppDataDir("bitcoin", false)
|
||||
|
||||
defaultTorSOCKS = net.JoinHostPort("localhost", strconv.Itoa(defaultTorSOCKSPort))
|
||||
defaultTorDNS = net.JoinHostPort(defaultTorDNSHost, strconv.Itoa(defaultTorDNSPort))
|
||||
@@ -352,10 +348,6 @@ type Config struct {
|
||||
BitcoindMode *lncfg.Bitcoind `group:"bitcoind" namespace:"bitcoind"`
|
||||
NeutrinoMode *lncfg.Neutrino `group:"neutrino" namespace:"neutrino"`
|
||||
|
||||
Litecoin *lncfg.Chain `group:"Litecoin" namespace:"litecoin"`
|
||||
LtcdMode *lncfg.Btcd `group:"ltcd" namespace:"ltcd"`
|
||||
LitecoindMode *lncfg.Bitcoind `group:"litecoind" namespace:"litecoind"`
|
||||
|
||||
BlockCacheSize uint64 `long:"blockcachesize" description:"The maximum capacity of the block cache"`
|
||||
|
||||
Autopilot *lncfg.AutoPilot `group:"Autopilot" namespace:"autopilot"`
|
||||
@@ -569,26 +561,6 @@ func DefaultConfig() Config {
|
||||
PrunedNodeMaxPeers: defaultPrunedNodeMaxPeers,
|
||||
ZMQReadDeadline: defaultZMQReadDeadline,
|
||||
},
|
||||
Litecoin: &lncfg.Chain{
|
||||
MinHTLCIn: chainreg.DefaultLitecoinMinHTLCInMSat,
|
||||
MinHTLCOut: chainreg.DefaultLitecoinMinHTLCOutMSat,
|
||||
BaseFee: chainreg.DefaultLitecoinBaseFeeMSat,
|
||||
FeeRate: chainreg.DefaultLitecoinFeeRate,
|
||||
TimeLockDelta: chainreg.DefaultLitecoinTimeLockDelta,
|
||||
MaxLocalDelay: defaultMaxLocalCSVDelay,
|
||||
Node: "ltcd",
|
||||
},
|
||||
LtcdMode: &lncfg.Btcd{
|
||||
Dir: defaultLtcdDir,
|
||||
RPCHost: defaultRPCHost,
|
||||
RPCCert: defaultLtcdRPCCertFile,
|
||||
},
|
||||
LitecoindMode: &lncfg.Bitcoind{
|
||||
Dir: defaultLitecoindDir,
|
||||
RPCHost: defaultRPCHost,
|
||||
EstimateMode: defaultBitcoindEstimateMode,
|
||||
PrunedNodeMaxPeers: defaultPrunedNodeMaxPeers,
|
||||
},
|
||||
NeutrinoMode: &lncfg.Neutrino{
|
||||
UserAgentName: neutrino.UserAgentName,
|
||||
UserAgentVersion: neutrino.UserAgentVersion,
|
||||
@@ -949,19 +921,11 @@ func ValidateConfig(cfg Config, interceptor signal.Interceptor, fileParser,
|
||||
cfg.InvoiceMacPath = CleanAndExpandPath(cfg.InvoiceMacPath)
|
||||
cfg.LogDir = CleanAndExpandPath(cfg.LogDir)
|
||||
cfg.BtcdMode.Dir = CleanAndExpandPath(cfg.BtcdMode.Dir)
|
||||
cfg.LtcdMode.Dir = CleanAndExpandPath(cfg.LtcdMode.Dir)
|
||||
cfg.BitcoindMode.Dir = CleanAndExpandPath(cfg.BitcoindMode.Dir)
|
||||
cfg.BitcoindMode.ConfigPath = CleanAndExpandPath(
|
||||
cfg.BitcoindMode.ConfigPath,
|
||||
)
|
||||
cfg.BitcoindMode.RPCCookie = CleanAndExpandPath(cfg.BitcoindMode.RPCCookie)
|
||||
cfg.LitecoindMode.Dir = CleanAndExpandPath(cfg.LitecoindMode.Dir)
|
||||
cfg.LitecoindMode.ConfigPath = CleanAndExpandPath(
|
||||
cfg.LitecoindMode.ConfigPath,
|
||||
)
|
||||
cfg.LitecoindMode.RPCCookie = CleanAndExpandPath(
|
||||
cfg.LitecoindMode.RPCCookie,
|
||||
)
|
||||
cfg.Tor.PrivateKeyPath = CleanAndExpandPath(cfg.Tor.PrivateKeyPath)
|
||||
cfg.Tor.WatchtowerKeyPath = CleanAndExpandPath(cfg.Tor.WatchtowerKeyPath)
|
||||
cfg.Watchtower.TowerDir = CleanAndExpandPath(cfg.Watchtower.TowerDir)
|
||||
@@ -1162,252 +1126,140 @@ func ValidateConfig(cfg Config, interceptor signal.Interceptor, fileParser,
|
||||
"mutually exclusive, only one should be selected")
|
||||
}
|
||||
|
||||
// Determine the active chain configuration and its parameters.
|
||||
switch {
|
||||
// At this moment, multiple active chains are not supported.
|
||||
case cfg.Litecoin.Active && cfg.Bitcoin.Active:
|
||||
str := "Currently both Bitcoin and Litecoin cannot be " +
|
||||
"active together"
|
||||
return nil, mkErr(str)
|
||||
|
||||
// Either Bitcoin must be active, or Litecoin must be active.
|
||||
// Otherwise, we don't know which chain we're on.
|
||||
case !cfg.Bitcoin.Active && !cfg.Litecoin.Active:
|
||||
return nil, mkErr("either bitcoin.active or " +
|
||||
"litecoin.active must be set to 1 (true)")
|
||||
|
||||
case cfg.Litecoin.Active:
|
||||
err := cfg.Litecoin.Validate(
|
||||
minTimeLockDelta, funding.MinLtcRemoteDelay,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("error validating litecoin: %v", err)
|
||||
}
|
||||
|
||||
// Multiple networks can't be selected simultaneously. Count
|
||||
// number of network flags passed; assign active network params
|
||||
// while we're at it.
|
||||
numNets := 0
|
||||
var ltcParams chainreg.LitecoinNetParams
|
||||
if cfg.Litecoin.MainNet {
|
||||
numNets++
|
||||
ltcParams = chainreg.LitecoinMainNetParams
|
||||
}
|
||||
if cfg.Litecoin.TestNet3 {
|
||||
numNets++
|
||||
ltcParams = chainreg.LitecoinTestNetParams
|
||||
}
|
||||
if cfg.Litecoin.RegTest {
|
||||
numNets++
|
||||
ltcParams = chainreg.LitecoinRegTestNetParams
|
||||
}
|
||||
if cfg.Litecoin.SimNet {
|
||||
numNets++
|
||||
ltcParams = chainreg.LitecoinSimNetParams
|
||||
}
|
||||
if cfg.Litecoin.SigNet {
|
||||
return nil, mkErr("litecoin.signet is not supported")
|
||||
}
|
||||
|
||||
if numNets > 1 {
|
||||
str := "The mainnet, testnet, and simnet params " +
|
||||
"can't be used together -- choose one of the " +
|
||||
"three"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
// The target network must be provided, otherwise, we won't
|
||||
// know how to initialize the daemon.
|
||||
if numNets == 0 {
|
||||
str := "either --litecoin.mainnet, or " +
|
||||
"litecoin.testnet must be specified"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
// The litecoin chain is the current active chain. However
|
||||
// throughout the codebase we required chaincfg.Params. So as a
|
||||
// temporary hack, we'll mutate the default net params for
|
||||
// bitcoin with the litecoin specific information.
|
||||
chainreg.ApplyLitecoinParams(&cfg.ActiveNetParams, <cParams)
|
||||
|
||||
switch cfg.Litecoin.Node {
|
||||
case "ltcd":
|
||||
err := parseRPCParams(
|
||||
cfg.Litecoin, cfg.LtcdMode,
|
||||
chainreg.LitecoinChain, cfg.ActiveNetParams,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("unable to load RPC "+
|
||||
"credentials for ltcd: %v", err)
|
||||
}
|
||||
case "litecoind":
|
||||
if cfg.Litecoin.SimNet {
|
||||
return nil, mkErr("litecoind does not " +
|
||||
"support simnet")
|
||||
}
|
||||
err := parseRPCParams(
|
||||
cfg.Litecoin, cfg.LitecoindMode,
|
||||
chainreg.LitecoinChain, cfg.ActiveNetParams,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("unable to load RPC "+
|
||||
"credentials for litecoind: %v", err)
|
||||
}
|
||||
default:
|
||||
str := "only ltcd and litecoind mode supported for " +
|
||||
"litecoin at this time"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
cfg.Litecoin.ChainDir = filepath.Join(
|
||||
cfg.DataDir, defaultChainSubDirname,
|
||||
chainreg.LitecoinChain.String(),
|
||||
)
|
||||
|
||||
// Finally, we'll register the litecoin chain as our current
|
||||
// primary chain.
|
||||
cfg.registeredChains.RegisterPrimaryChain(chainreg.LitecoinChain)
|
||||
MaxFundingAmount = funding.MaxLtcFundingAmount
|
||||
|
||||
case cfg.Bitcoin.Active:
|
||||
// Multiple networks can't be selected simultaneously. Count
|
||||
// number of network flags passed; assign active network params
|
||||
// while we're at it.
|
||||
numNets := 0
|
||||
if cfg.Bitcoin.MainNet {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinMainNetParams
|
||||
}
|
||||
if cfg.Bitcoin.TestNet3 {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinTestNetParams
|
||||
}
|
||||
if cfg.Bitcoin.RegTest {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinRegTestNetParams
|
||||
}
|
||||
if cfg.Bitcoin.SimNet {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinSimNetParams
|
||||
|
||||
// For simnet, the btcsuite chain params uses a
|
||||
// cointype of 115. However, we override this in
|
||||
// chainreg/chainparams.go, but the raw ChainParam
|
||||
// field is used elsewhere. To ensure everything is
|
||||
// consistent, we'll also override the cointype within
|
||||
// the raw params.
|
||||
targetCoinType := chainreg.BitcoinSigNetParams.CoinType
|
||||
cfg.ActiveNetParams.Params.HDCoinType = targetCoinType
|
||||
}
|
||||
if cfg.Bitcoin.SigNet {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinSigNetParams
|
||||
|
||||
// Let the user overwrite the default signet parameters.
|
||||
// The challenge defines the actual signet network to
|
||||
// join and the seed nodes are needed for network
|
||||
// discovery.
|
||||
sigNetChallenge := chaincfg.DefaultSignetChallenge
|
||||
sigNetSeeds := chaincfg.DefaultSignetDNSSeeds
|
||||
if cfg.Bitcoin.SigNetChallenge != "" {
|
||||
challenge, err := hex.DecodeString(
|
||||
cfg.Bitcoin.SigNetChallenge,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("Invalid "+
|
||||
"signet challenge, hex decode "+
|
||||
"failed: %v", err)
|
||||
}
|
||||
sigNetChallenge = challenge
|
||||
}
|
||||
|
||||
if len(cfg.Bitcoin.SigNetSeedNode) > 0 {
|
||||
sigNetSeeds = make([]chaincfg.DNSSeed, len(
|
||||
cfg.Bitcoin.SigNetSeedNode,
|
||||
))
|
||||
for idx, seed := range cfg.Bitcoin.SigNetSeedNode {
|
||||
sigNetSeeds[idx] = chaincfg.DNSSeed{
|
||||
Host: seed,
|
||||
HasFiltering: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
chainParams := chaincfg.CustomSignetParams(
|
||||
sigNetChallenge, sigNetSeeds,
|
||||
)
|
||||
cfg.ActiveNetParams.Params = &chainParams
|
||||
}
|
||||
if numNets > 1 {
|
||||
str := "The mainnet, testnet, regtest, and simnet " +
|
||||
"params can't be used together -- choose one " +
|
||||
"of the four"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
// The target network must be provided, otherwise, we won't
|
||||
// know how to initialize the daemon.
|
||||
if numNets == 0 {
|
||||
str := "either --bitcoin.mainnet, or bitcoin.testnet," +
|
||||
"bitcoin.simnet, or bitcoin.regtest " +
|
||||
"must be specified"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
err := cfg.Bitcoin.Validate(
|
||||
minTimeLockDelta, funding.MinBtcRemoteDelay,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("error validating bitcoin params: %v",
|
||||
err)
|
||||
}
|
||||
|
||||
switch cfg.Bitcoin.Node {
|
||||
case "btcd":
|
||||
err := parseRPCParams(
|
||||
cfg.Bitcoin, cfg.BtcdMode,
|
||||
chainreg.BitcoinChain, cfg.ActiveNetParams,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("unable to load RPC "+
|
||||
"credentials for btcd: %v", err)
|
||||
}
|
||||
case "bitcoind":
|
||||
if cfg.Bitcoin.SimNet {
|
||||
return nil, mkErr("bitcoind does not " +
|
||||
"support simnet")
|
||||
}
|
||||
|
||||
err := parseRPCParams(
|
||||
cfg.Bitcoin, cfg.BitcoindMode,
|
||||
chainreg.BitcoinChain, cfg.ActiveNetParams,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("unable to load RPC "+
|
||||
"credentials for bitcoind: %v", err)
|
||||
}
|
||||
case "neutrino":
|
||||
// No need to get RPC parameters.
|
||||
|
||||
case "nochainbackend":
|
||||
// Nothing to configure, we're running without any chain
|
||||
// backend whatsoever (pure signing mode).
|
||||
|
||||
default:
|
||||
str := "only btcd, bitcoind, and neutrino mode " +
|
||||
"supported for bitcoin at this time"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
cfg.Bitcoin.ChainDir = filepath.Join(
|
||||
cfg.DataDir, defaultChainSubDirname,
|
||||
chainreg.BitcoinChain.String(),
|
||||
)
|
||||
|
||||
// Finally we'll register the bitcoin chain as our current
|
||||
// primary chain.
|
||||
cfg.registeredChains.RegisterPrimaryChain(chainreg.BitcoinChain)
|
||||
// Multiple networks can't be selected simultaneously. Count
|
||||
// number of network flags passed; assign active network params
|
||||
// while we're at it.
|
||||
numNets := 0
|
||||
if cfg.Bitcoin.MainNet {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinMainNetParams
|
||||
}
|
||||
if cfg.Bitcoin.TestNet3 {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinTestNetParams
|
||||
}
|
||||
if cfg.Bitcoin.RegTest {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinRegTestNetParams
|
||||
}
|
||||
if cfg.Bitcoin.SimNet {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinSimNetParams
|
||||
|
||||
// For simnet, the btcsuite chain params uses a
|
||||
// cointype of 115. However, we override this in
|
||||
// chainreg/chainparams.go, but the raw ChainParam
|
||||
// field is used elsewhere. To ensure everything is
|
||||
// consistent, we'll also override the cointype within
|
||||
// the raw params.
|
||||
targetCoinType := chainreg.BitcoinSigNetParams.CoinType
|
||||
cfg.ActiveNetParams.Params.HDCoinType = targetCoinType
|
||||
}
|
||||
if cfg.Bitcoin.SigNet {
|
||||
numNets++
|
||||
cfg.ActiveNetParams = chainreg.BitcoinSigNetParams
|
||||
|
||||
// Let the user overwrite the default signet parameters.
|
||||
// The challenge defines the actual signet network to
|
||||
// join and the seed nodes are needed for network
|
||||
// discovery.
|
||||
sigNetChallenge := chaincfg.DefaultSignetChallenge
|
||||
sigNetSeeds := chaincfg.DefaultSignetDNSSeeds
|
||||
if cfg.Bitcoin.SigNetChallenge != "" {
|
||||
challenge, err := hex.DecodeString(
|
||||
cfg.Bitcoin.SigNetChallenge,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("Invalid "+
|
||||
"signet challenge, hex decode "+
|
||||
"failed: %v", err)
|
||||
}
|
||||
sigNetChallenge = challenge
|
||||
}
|
||||
|
||||
if len(cfg.Bitcoin.SigNetSeedNode) > 0 {
|
||||
sigNetSeeds = make([]chaincfg.DNSSeed, len(
|
||||
cfg.Bitcoin.SigNetSeedNode,
|
||||
))
|
||||
for idx, seed := range cfg.Bitcoin.SigNetSeedNode {
|
||||
sigNetSeeds[idx] = chaincfg.DNSSeed{
|
||||
Host: seed,
|
||||
HasFiltering: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
chainParams := chaincfg.CustomSignetParams(
|
||||
sigNetChallenge, sigNetSeeds,
|
||||
)
|
||||
cfg.ActiveNetParams.Params = &chainParams
|
||||
}
|
||||
if numNets > 1 {
|
||||
str := "The mainnet, testnet, regtest, and simnet " +
|
||||
"params can't be used together -- choose one " +
|
||||
"of the four"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
// The target network must be provided, otherwise, we won't
|
||||
// know how to initialize the daemon.
|
||||
if numNets == 0 {
|
||||
str := "either --bitcoin.mainnet, or bitcoin.testnet," +
|
||||
"bitcoin.simnet, or bitcoin.regtest " +
|
||||
"must be specified"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
err = cfg.Bitcoin.Validate(minTimeLockDelta, funding.MinBtcRemoteDelay)
|
||||
if err != nil {
|
||||
return nil, mkErr("error validating bitcoin params: %v", err)
|
||||
}
|
||||
|
||||
switch cfg.Bitcoin.Node {
|
||||
case "btcd":
|
||||
err := parseRPCParams(
|
||||
cfg.Bitcoin, cfg.BtcdMode,
|
||||
chainreg.BitcoinChain, cfg.ActiveNetParams,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("unable to load RPC "+
|
||||
"credentials for btcd: %v", err)
|
||||
}
|
||||
case "bitcoind":
|
||||
if cfg.Bitcoin.SimNet {
|
||||
return nil, mkErr("bitcoind does not " +
|
||||
"support simnet")
|
||||
}
|
||||
|
||||
err := parseRPCParams(
|
||||
cfg.Bitcoin, cfg.BitcoindMode,
|
||||
chainreg.BitcoinChain, cfg.ActiveNetParams,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, mkErr("unable to load RPC "+
|
||||
"credentials for bitcoind: %v", err)
|
||||
}
|
||||
case "neutrino":
|
||||
// No need to get RPC parameters.
|
||||
|
||||
case "nochainbackend":
|
||||
// Nothing to configure, we're running without any chain
|
||||
// backend whatsoever (pure signing mode).
|
||||
|
||||
default:
|
||||
str := "only btcd, bitcoind, and neutrino mode " +
|
||||
"supported for bitcoin at this time"
|
||||
return nil, mkErr(str)
|
||||
}
|
||||
|
||||
cfg.Bitcoin.ChainDir = filepath.Join(
|
||||
cfg.DataDir, defaultChainSubDirname,
|
||||
chainreg.BitcoinChain.String(),
|
||||
)
|
||||
|
||||
// Finally we'll register the bitcoin chain as our current
|
||||
// primary chain.
|
||||
cfg.registeredChains.RegisterPrimaryChain(chainreg.BitcoinChain)
|
||||
|
||||
// Ensure that the user didn't attempt to specify negative values for
|
||||
// any of the autopilot params.
|
||||
|
Reference in New Issue
Block a user