Integrate basic configuration functionality
This commit is contained in:
parent
48667bdcbe
commit
e07086a523
104
config.go
104
config.go
@ -1 +1,105 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/btcsuite/btcd/chaincfg"
|
||||||
|
"github.com/btcsuite/btcutil"
|
||||||
|
flags "github.com/btcsuite/go-flags"
|
||||||
|
"path/filepath"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
defaultConfigFilename = "lnwallet.conf"
|
||||||
|
defaultDataDirname = "test_wal"
|
||||||
|
defaultRPCPort = 10009
|
||||||
|
defaultSPVMode = false
|
||||||
|
defaultPeerPort = 10011
|
||||||
|
defaultBTCDHost = "localhost:18334"
|
||||||
|
defaultBTCDUser = "user"
|
||||||
|
defaultBTCDPass = "passwd"
|
||||||
|
defaultBTCDCACertPath = ""
|
||||||
|
defaultUseRegtest = false
|
||||||
|
defaultSPVHostAdr = "localhost:18333"
|
||||||
|
defaultBTCDNoTLS = false
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
lnwalletHomeDir = btcutil.AppDataDir("lnwallet", false)
|
||||||
|
defaultConfigFile = filepath.Join(lnwalletHomeDir, defaultConfigFilename)
|
||||||
|
defaultDataDir = filepath.Join(lnwalletHomeDir, defaultDataDirname)
|
||||||
|
)
|
||||||
|
|
||||||
|
type config struct {
|
||||||
|
ConfigFile string `short:"C" long:"configfile" description:"Path to configuration file"`
|
||||||
|
DataDir string `short:"b" long:"datadir" description:"The directory to store lnd's data within"`
|
||||||
|
PeerPort int `long:"peerport" description:"The port to listen on for incoming p2p connections"`
|
||||||
|
RPCPort int `long:"rpcport" description:"The port for the rpc server"`
|
||||||
|
SPVMode bool `long:"spv" description:"assert to enter spv wallet mode"`
|
||||||
|
BTCDHost string `long:"btcdhost" description:"The BTCD RPC address. "`
|
||||||
|
BTCDUser string `long:"btcduser" description:"The BTCD RPC user"`
|
||||||
|
BTCDPass string `long:"btcdpass" description:"The BTCD RPC password"`
|
||||||
|
BTCDNoTLS bool `long:"btcdnotls" description:"Do not use TLS for RPC connection to BTCD"`
|
||||||
|
BTCDCACertPath string `long:"btcdcacert" description:"Path to certificate for BTCD RPC"`
|
||||||
|
UseRegtest bool `long:"regtest" description:"Use RegNet. If not specified TestNet3 is used"`
|
||||||
|
SPVHostAdr string `long:"spvhostadr" description:"Address of full bitcoin node. It is used in SPV mode."`
|
||||||
|
NetParams *chaincfg.Params
|
||||||
|
BTCDCACert []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// loadConfig initializes and parses the config using a config file and command
|
||||||
|
// line options.
|
||||||
|
//
|
||||||
|
// The configuration proceeds as follows:
|
||||||
|
// 1) Start with a default config with sane settings
|
||||||
|
// 2) Pre-parse the command line to check for an alternative config file
|
||||||
|
// 3) Load configuration file overwriting defaults with any specified options
|
||||||
|
// 4) Parse CLI options and overwrite/add any specified options
|
||||||
|
func loadConfig() (*config, error) {
|
||||||
|
defaultCfg := config{
|
||||||
|
ConfigFile: defaultConfigFile,
|
||||||
|
DataDir: defaultDataDir,
|
||||||
|
PeerPort: defaultPeerPort,
|
||||||
|
RPCPort: defaultRPCPort,
|
||||||
|
SPVMode: defaultSPVMode,
|
||||||
|
BTCDHost: defaultBTCDHost,
|
||||||
|
BTCDUser: defaultBTCDUser,
|
||||||
|
BTCDPass: defaultBTCDPass,
|
||||||
|
BTCDNoTLS: defaultBTCDNoTLS,
|
||||||
|
BTCDCACertPath: defaultBTCDCACertPath,
|
||||||
|
UseRegtest: defaultUseRegtest,
|
||||||
|
SPVHostAdr: defaultSPVHostAdr,
|
||||||
|
}
|
||||||
|
preCfg := defaultCfg
|
||||||
|
_, err := flags.Parse(&preCfg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cfg := defaultCfg
|
||||||
|
err = flags.IniParse(preCfg.ConfigFile, &cfg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_, err = flags.Parse(&cfg)
|
||||||
|
// Determine net parameters
|
||||||
|
if cfg.UseRegtest {
|
||||||
|
cfg.NetParams = &chaincfg.RegressionNetParams
|
||||||
|
} else {
|
||||||
|
cfg.NetParams = &chaincfg.TestNet3Params
|
||||||
|
}
|
||||||
|
// Read certificate if needed
|
||||||
|
if cfg.BTCDCACertPath!=""{
|
||||||
|
f, err := os.Open(cfg.BTCDCACertPath)
|
||||||
|
defer f.Close()
|
||||||
|
if err!=nil{
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cert, err := ioutil.ReadAll(f)
|
||||||
|
if err!=nil{
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cfg.BTCDCACert = cert
|
||||||
|
}
|
||||||
|
|
||||||
|
return &cfg, nil
|
||||||
|
}
|
||||||
|
45
lnd.go
45
lnd.go
@ -1,33 +1,30 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/grpclog"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
|
|
||||||
"github.com/btcsuite/btcd/chaincfg"
|
|
||||||
"github.com/lightningnetwork/lnd/lnrpc"
|
"github.com/lightningnetwork/lnd/lnrpc"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet"
|
"github.com/lightningnetwork/lnd/lnwallet"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
rpcPort = flag.Int("rpcport", 10009, "The port for the rpc server")
|
|
||||||
peerPort = flag.String("peerport", "10011", "The port to listen on for incoming p2p connections")
|
|
||||||
dataDir = flag.String("datadir", "test_wal", "The directory to store lnd's data within")
|
|
||||||
spvMode = flag.Bool("spv", false, "assert to enter spv wallet mode")
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
if *spvMode == true {
|
loadedConfig, err := loadConfig()
|
||||||
shell()
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("unable to load config: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
if loadedConfig.SPVMode == true {
|
||||||
|
shell(loadedConfig.SPVHostAdr, loadedConfig.NetParams)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,8 +40,16 @@ func main() {
|
|||||||
// logic, and exposes control via proxy state machines.
|
// logic, and exposes control via proxy state machines.
|
||||||
// TODO(roasbeef): accept config via cli flags, move to real config file
|
// TODO(roasbeef): accept config via cli flags, move to real config file
|
||||||
// afterwards
|
// afterwards
|
||||||
config := &lnwallet.Config{PrivatePass: []byte("hello"), DataDir: *dataDir}
|
config := &lnwallet.Config{
|
||||||
|
PrivatePass: []byte("hello"),
|
||||||
|
DataDir: loadedConfig.DataDir,
|
||||||
|
RpcHost: loadedConfig.BTCDHost,
|
||||||
|
RpcUser: loadedConfig.BTCDUser,
|
||||||
|
RpcPass: loadedConfig.BTCDPass,
|
||||||
|
RpcNoTLS: loadedConfig.BTCDNoTLS,
|
||||||
|
CACert: loadedConfig.BTCDCACert,
|
||||||
|
NetParams: loadedConfig.NetParams,
|
||||||
|
}
|
||||||
lnwallet, db, err := lnwallet.NewLightningWallet(config)
|
lnwallet, db, err := lnwallet.NewLightningWallet(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("unable to create wallet: %v\n", err)
|
fmt.Printf("unable to create wallet: %v\n", err)
|
||||||
@ -61,8 +66,8 @@ func main() {
|
|||||||
|
|
||||||
// Set up the core server which will listen for incoming peer
|
// Set up the core server which will listen for incoming peer
|
||||||
// connections.
|
// connections.
|
||||||
defaultListenAddr := []string{net.JoinHostPort("", *peerPort)}
|
defaultListenAddr := []string{net.JoinHostPort("", strconv.Itoa(loadedConfig.PeerPort))}
|
||||||
server, err := newServer(defaultListenAddr, &chaincfg.TestNet3Params,
|
server, err := newServer(defaultListenAddr, loadedConfig.NetParams,
|
||||||
lnwallet)
|
lnwallet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("unable to create server: %v\n", err)
|
fmt.Printf("unable to create server: %v\n", err)
|
||||||
@ -76,7 +81,7 @@ func main() {
|
|||||||
lnrpc.RegisterLightningServer(grpcServer, server.rpcServer)
|
lnrpc.RegisterLightningServer(grpcServer, server.rpcServer)
|
||||||
|
|
||||||
// Finally, start the grpc server listening for HTTP/2 connections.
|
// Finally, start the grpc server listening for HTTP/2 connections.
|
||||||
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *rpcPort))
|
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", loadedConfig.RPCPort))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
grpclog.Fatalf("failed to listen: %v", err)
|
grpclog.Fatalf("failed to listen: %v", err)
|
||||||
fmt.Printf("failed to listen: %v", err)
|
fmt.Printf("failed to listen: %v", err)
|
||||||
|
@ -40,6 +40,7 @@ type Config struct {
|
|||||||
RpcHost string // localhost:18334
|
RpcHost string // localhost:18334
|
||||||
RpcUser string
|
RpcUser string
|
||||||
RpcPass string
|
RpcPass string
|
||||||
|
RpcNoTLS bool
|
||||||
|
|
||||||
RPCCert string
|
RPCCert string
|
||||||
RPCKey string
|
RPCKey string
|
||||||
|
2
shell.go
2
shell.go
@ -34,7 +34,7 @@ var (
|
|||||||
SCon uspv.SPVCon // global here for now
|
SCon uspv.SPVCon // global here for now
|
||||||
)
|
)
|
||||||
|
|
||||||
func shell() {
|
func shell(SPVHostAdr string, Params *chaincfg.Params) {
|
||||||
fmt.Printf("LND spv shell v0.0\n")
|
fmt.Printf("LND spv shell v0.0\n")
|
||||||
fmt.Printf("Not yet well integrated, but soon.\n")
|
fmt.Printf("Not yet well integrated, but soon.\n")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user