mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-27 14:11:04 +02:00
Merge pull request #3133 from cfromknecht/wt-polish
watchtower: integrate altruist watchtower and watchtower client
This commit is contained in:
69
lnd.go
69
lnd.go
@@ -36,6 +36,7 @@ import (
|
||||
"google.golang.org/grpc/credentials"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/wallet"
|
||||
proxy "github.com/grpc-ecosystem/grpc-gateway/runtime"
|
||||
"github.com/lightninglabs/neutrino"
|
||||
@@ -51,6 +52,8 @@ import (
|
||||
"github.com/lightningnetwork/lnd/macaroons"
|
||||
"github.com/lightningnetwork/lnd/signal"
|
||||
"github.com/lightningnetwork/lnd/walletunlocker"
|
||||
"github.com/lightningnetwork/lnd/watchtower"
|
||||
"github.com/lightningnetwork/lnd/watchtower/wtdb"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -313,11 +316,65 @@ func Main() error {
|
||||
"is proxying over Tor as well", cfg.Tor.StreamIsolation)
|
||||
}
|
||||
|
||||
// If the watchtower client should be active, open the client database.
|
||||
// This is done here so that Close always executes when lndMain returns.
|
||||
var towerClientDB *wtdb.ClientDB
|
||||
if cfg.WtClient.IsActive() {
|
||||
var err error
|
||||
towerClientDB, err = wtdb.OpenClientDB(graphDir)
|
||||
if err != nil {
|
||||
ltndLog.Errorf("Unable to open watchtower client db: %v", err)
|
||||
}
|
||||
defer towerClientDB.Close()
|
||||
}
|
||||
|
||||
var tower *watchtower.Standalone
|
||||
if cfg.Watchtower.Active {
|
||||
// Segment the watchtower directory by chain and network.
|
||||
towerDBDir := filepath.Join(
|
||||
cfg.Watchtower.TowerDir,
|
||||
registeredChains.PrimaryChain().String(),
|
||||
normalizeNetwork(activeNetParams.Name),
|
||||
)
|
||||
|
||||
towerDB, err := wtdb.OpenTowerDB(towerDBDir)
|
||||
if err != nil {
|
||||
ltndLog.Errorf("Unable to open watchtower db: %v", err)
|
||||
return err
|
||||
}
|
||||
defer towerDB.Close()
|
||||
|
||||
wtConfig, err := cfg.Watchtower.Apply(&watchtower.Config{
|
||||
BlockFetcher: activeChainControl.chainIO,
|
||||
DB: towerDB,
|
||||
EpochRegistrar: activeChainControl.chainNotifier,
|
||||
Net: cfg.net,
|
||||
NewAddress: func() (btcutil.Address, error) {
|
||||
return activeChainControl.wallet.NewAddress(
|
||||
lnwallet.WitnessPubKey, false,
|
||||
)
|
||||
},
|
||||
NodePrivKey: idPrivKey,
|
||||
PublishTx: activeChainControl.wallet.PublishTransaction,
|
||||
ChainHash: *activeNetParams.GenesisHash,
|
||||
}, lncfg.NormalizeAddresses)
|
||||
if err != nil {
|
||||
ltndLog.Errorf("Unable to configure watchtower: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
tower, err = watchtower.New(wtConfig)
|
||||
if err != nil {
|
||||
ltndLog.Errorf("Unable to create watchtower: %v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Set up the core server which will listen for incoming peer
|
||||
// connections.
|
||||
server, err := newServer(
|
||||
cfg.Listeners, chanDB, activeChainControl, idPrivKey,
|
||||
walletInitParams.ChansToRestore,
|
||||
cfg.Listeners, chanDB, towerClientDB, activeChainControl,
|
||||
idPrivKey, walletInitParams.ChansToRestore,
|
||||
)
|
||||
if err != nil {
|
||||
srvrLog.Errorf("unable to create server: %v\n", err)
|
||||
@@ -418,6 +475,14 @@ func Main() error {
|
||||
}
|
||||
}
|
||||
|
||||
if cfg.Watchtower.Active {
|
||||
if err := tower.Start(); err != nil {
|
||||
ltndLog.Errorf("Unable to start watchtower: %v", err)
|
||||
return err
|
||||
}
|
||||
defer tower.Stop()
|
||||
}
|
||||
|
||||
// Wait for shutdown signal from either a graceful server stop or from
|
||||
// the interrupt handler.
|
||||
<-signal.ShutdownChannel()
|
||||
|
Reference in New Issue
Block a user