mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-06-29 18:10:48 +02:00
lnd+server+watchtower: allow Standalone access to the tor controller
This commit lets the watchtower automatically create hidden services by giving it a pointer to a TorController. The server was also slightly refactored so that it was not the sole owner of the TorController.
This commit is contained in:
44
lnd.go
44
lnd.go
@ -45,6 +45,7 @@ import (
|
||||
"github.com/lightningnetwork/lnd/lnwallet/btcwallet"
|
||||
"github.com/lightningnetwork/lnd/macaroons"
|
||||
"github.com/lightningnetwork/lnd/signal"
|
||||
"github.com/lightningnetwork/lnd/tor"
|
||||
"github.com/lightningnetwork/lnd/walletunlocker"
|
||||
"github.com/lightningnetwork/lnd/watchtower"
|
||||
"github.com/lightningnetwork/lnd/watchtower/wtdb"
|
||||
@ -473,6 +474,28 @@ func Main(lisCfg ListenerCfg) error {
|
||||
defer towerClientDB.Close()
|
||||
}
|
||||
|
||||
// If tor is active and either v2 or v3 onion services have been specified,
|
||||
// make a tor controller and pass it into both the watchtower server and
|
||||
// the regular lnd server.
|
||||
var torController *tor.Controller
|
||||
if cfg.Tor.Active && (cfg.Tor.V2 || cfg.Tor.V3) {
|
||||
torController = tor.NewController(
|
||||
cfg.Tor.Control, cfg.Tor.TargetIPAddress, cfg.Tor.Password,
|
||||
)
|
||||
|
||||
// Start the tor controller before giving it to any other subsystems.
|
||||
if err := torController.Start(); err != nil {
|
||||
err := fmt.Errorf("unable to initialize tor controller: %v", err)
|
||||
ltndLog.Error(err)
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := torController.Stop(); err != nil {
|
||||
ltndLog.Errorf("error stopping tor controller: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
var tower *watchtower.Standalone
|
||||
if cfg.Watchtower.Active {
|
||||
// Segment the watchtower directory by chain and network.
|
||||
@ -506,7 +529,7 @@ func Main(lisCfg ListenerCfg) error {
|
||||
return err
|
||||
}
|
||||
|
||||
wtConfig, err := cfg.Watchtower.Apply(&watchtower.Config{
|
||||
wtCfg := &watchtower.Config{
|
||||
BlockFetcher: activeChainControl.chainIO,
|
||||
DB: towerDB,
|
||||
EpochRegistrar: activeChainControl.chainNotifier,
|
||||
@ -519,7 +542,23 @@ func Main(lisCfg ListenerCfg) error {
|
||||
NodePrivKey: towerPrivKey,
|
||||
PublishTx: activeChainControl.wallet.PublishTransaction,
|
||||
ChainHash: *activeNetParams.GenesisHash,
|
||||
}, lncfg.NormalizeAddresses)
|
||||
}
|
||||
|
||||
// If there is a tor controller (user wants auto hidden services), then
|
||||
// store a pointer in the watchtower config.
|
||||
if torController != nil {
|
||||
wtCfg.TorController = torController
|
||||
wtCfg.WatchtowerKeyPath = cfg.Tor.WatchtowerKeyPath
|
||||
|
||||
switch {
|
||||
case cfg.Tor.V2:
|
||||
wtCfg.Type = tor.V2
|
||||
case cfg.Tor.V3:
|
||||
wtCfg.Type = tor.V3
|
||||
}
|
||||
}
|
||||
|
||||
wtConfig, err := cfg.Watchtower.Apply(wtCfg, lncfg.NormalizeAddresses)
|
||||
if err != nil {
|
||||
err := fmt.Errorf("Unable to configure watchtower: %v",
|
||||
err)
|
||||
@ -543,6 +582,7 @@ func Main(lisCfg ListenerCfg) error {
|
||||
server, err := newServer(
|
||||
cfg.Listeners, chanDB, towerClientDB, activeChainControl,
|
||||
idPrivKey, walletInitParams.ChansToRestore, chainedAcceptor,
|
||||
torController,
|
||||
)
|
||||
if err != nil {
|
||||
err := fmt.Errorf("Unable to create server: %v", err)
|
||||
|
Reference in New Issue
Block a user