Skip to content

Commit b8e1fb8

Browse files
authored
Merge pull request #388 from lightninglabs/lnd-0.13
Prepare for lnd v0.13.0 and upcoming LiT version
2 parents 245e6b7 + fdbf7e9 commit b8e1fb8

File tree

9 files changed

+224
-101
lines changed

9 files changed

+224
-101
lines changed

client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ func (s *Client) Run(ctx context.Context,
242242
}
243243

244244
// Log connected node.
245-
log.Infof("Connected to lnd node '%v' with pubkey %x (version %s)",
245+
log.Infof("Connected to lnd node '%v' with pubkey %s (version %s)",
246246
s.lndServices.NodeAlias, s.lndServices.NodePubkey,
247247
lndclient.VersionString(s.lndServices.Version))
248248

go.mod

+14-10
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
11
module github.com/lightninglabs/loop
22

33
require (
4-
github.com/btcsuite/btcd v0.21.0-beta.0.20201208033208-6bd4c64a54fa
4+
github.com/btcsuite/btcd v0.21.0-beta.0.20210429225535-ce697fe7e82b
55
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f
6-
github.com/btcsuite/btcutil v1.0.2
7-
github.com/btcsuite/btcwallet/wtxmgr v1.2.0
6+
github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce
7+
github.com/btcsuite/btcwallet/wtxmgr v1.3.0
88
github.com/coreos/bbolt v1.3.3
99
github.com/fortytw2/leaktest v1.3.0
10-
github.com/golang/protobuf v1.3.2
10+
github.com/golang/protobuf v1.4.3
1111
github.com/grpc-ecosystem/grpc-gateway v1.14.3
1212
github.com/jessevdk/go-flags v1.4.0
1313
github.com/lightninglabs/aperture v0.1.6-beta
14-
github.com/lightninglabs/lndclient v0.11.0-5
15-
github.com/lightninglabs/protobuf-hex-display v1.3.3-0.20191212020323-b444784ce75d
16-
github.com/lightningnetwork/lnd v0.12.0-beta.rc3
14+
github.com/lightninglabs/lndclient v0.11.1-6
15+
github.com/lightninglabs/protobuf-hex-display v1.4.3-hex-display
16+
github.com/lightningnetwork/lnd v0.13.0-beta.rc2
1717
github.com/lightningnetwork/lnd/cert v1.0.3
1818
github.com/lightningnetwork/lnd/clock v1.0.1
1919
github.com/lightningnetwork/lnd/queue v1.0.4
2020
github.com/lightningnetwork/lnd/ticker v1.0.0
21-
github.com/stretchr/testify v1.5.1
21+
github.com/stretchr/testify v1.7.0
2222
github.com/urfave/cli v1.20.0
23-
golang.org/x/net v0.0.0-20191112182307-2180aed22343
23+
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7
2424
google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c
25-
google.golang.org/grpc v1.25.1
25+
google.golang.org/grpc v1.29.1
2626
gopkg.in/macaroon-bakery.v2 v2.0.1
2727
gopkg.in/macaroon.v2 v2.1.0
2828
)
2929

30+
// Fix incompatibility of etcd go.mod package.
31+
// See https://github.com/etcd-io/etcd/issues/11154
32+
replace go.etcd.io/etcd => go.etcd.io/etcd v0.5.0-alpha.5.0.20201125193152-8a03d2e9614b
33+
3034
go 1.15

go.sum

+126-45
Large diffs are not rendered by default.

loopd/daemon.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,10 @@ func (d *Daemon) startWebServers() error {
208208
// With our client created, let's now finish setting up and start our
209209
// RPC server. First we add the security interceptor to our gRPC server
210210
// options that checks the macaroons for validity.
211-
serverOpts := d.macaroonInterceptor()
211+
serverOpts, err := d.macaroonInterceptor()
212+
if err != nil {
213+
return fmt.Errorf("error with macaroon interceptor: %v", err)
214+
}
212215
d.grpcServer = grpc.NewServer(serverOpts...)
213216
looprpc.RegisterSwapClientServer(d.grpcServer, d)
214217

loopd/log.go

+40-23
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,55 @@ import (
77
"github.com/lightninglabs/loop"
88
"github.com/lightninglabs/loop/liquidity"
99
"github.com/lightninglabs/loop/loopdb"
10+
"github.com/lightningnetwork/lnd"
1011
"github.com/lightningnetwork/lnd/build"
12+
"github.com/lightningnetwork/lnd/signal"
1113
)
1214

13-
var (
14-
logWriter = build.NewRotatingLogWriter()
15+
const Subsystem = "LOOPD"
1516

16-
log = build.NewSubLogger("LOOPD", logWriter.GenSubLogger)
17+
var (
18+
logWriter *build.RotatingLogWriter
19+
log btclog.Logger
20+
interceptor signal.Interceptor
1721
)
1822

19-
func init() {
20-
setSubLogger("LOOPD", log, nil)
21-
addSubLogger("LOOP", loop.UseLogger)
22-
addSubLogger("LNDC", lndclient.UseLogger)
23-
addSubLogger("STORE", loopdb.UseLogger)
24-
addSubLogger(lsat.Subsystem, lsat.UseLogger)
25-
addSubLogger(liquidity.Subsystem, liquidity.UseLogger)
26-
}
23+
// SetupLoggers initializes all package-global logger variables.
24+
func SetupLoggers(root *build.RotatingLogWriter, intercept signal.Interceptor) {
25+
genLogger := genSubLogger(root, intercept)
26+
27+
logWriter = root
28+
log = build.NewSubLogger(Subsystem, genLogger)
29+
interceptor = intercept
2730

28-
// addSubLogger is a helper method to conveniently create and register the
29-
// logger of a sub system.
30-
func addSubLogger(subsystem string, useLogger func(btclog.Logger)) {
31-
logger := build.NewSubLogger(subsystem, logWriter.GenSubLogger)
32-
setSubLogger(subsystem, logger, useLogger)
31+
lnd.SetSubLogger(root, Subsystem, log)
32+
lnd.AddSubLogger(root, "LOOP", intercept, loop.UseLogger)
33+
lnd.AddSubLogger(root, "LNDC", intercept, lndclient.UseLogger)
34+
lnd.AddSubLogger(root, "STORE", intercept, loopdb.UseLogger)
35+
lnd.AddSubLogger(root, lsat.Subsystem, intercept, lsat.UseLogger)
36+
lnd.AddSubLogger(
37+
root, liquidity.Subsystem, intercept, liquidity.UseLogger,
38+
)
3339
}
3440

35-
// setSubLogger is a helper method to conveniently register the logger of a sub
36-
// system.
37-
func setSubLogger(subsystem string, logger btclog.Logger,
38-
useLogger func(btclog.Logger)) {
41+
// genSubLogger creates a logger for a subsystem. We provide an instance of
42+
// a signal.Interceptor to be able to shutdown in the case of a critical error.
43+
func genSubLogger(root *build.RotatingLogWriter,
44+
interceptor signal.Interceptor) func(string) btclog.Logger {
45+
46+
// Create a shutdown function which will request shutdown from our
47+
// interceptor if it is listening.
48+
shutdown := func() {
49+
if !interceptor.Listening() {
50+
return
51+
}
52+
53+
interceptor.RequestShutdown()
54+
}
3955

40-
logWriter.RegisterSubLogger(subsystem, logger)
41-
if useLogger != nil {
42-
useLogger(logger)
56+
// Return a function which will create a sublogger from our root
57+
// logger without shutdown fn.
58+
return func(tag string) btclog.Logger {
59+
return root.GenSubLogger(tag, shutdown)
4360
}
4461
}

loopd/macaroons.go

+21-8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/lightninglabs/loop/loopdb"
1111
"github.com/lightningnetwork/lnd/lnrpc"
1212
"github.com/lightningnetwork/lnd/macaroons"
13+
"github.com/lightningnetwork/lnd/rpcperms"
1314
"google.golang.org/grpc"
1415
"gopkg.in/macaroon-bakery.v2/bakery"
1516
)
@@ -210,21 +211,33 @@ func (d *Daemon) stopMacaroonService() error {
210211

211212
// macaroonInterceptor creates gRPC server options with the macaroon security
212213
// interceptors.
213-
func (d *Daemon) macaroonInterceptor() []grpc.ServerOption {
214+
func (d *Daemon) macaroonInterceptor() ([]grpc.ServerOption, error) {
214215
// Add our debug permissions to our main set of required permissions
215216
// if compiled in.
216217
for endpoint, perm := range debugRequiredPermissions {
217218
RequiredPermissions[endpoint] = perm
218219
}
219220

220-
unaryInterceptor := d.macaroonService.UnaryServerInterceptor(
221-
RequiredPermissions,
222-
)
223-
streamInterceptor := d.macaroonService.StreamServerInterceptor(
224-
RequiredPermissions,
225-
)
221+
interceptor := rpcperms.NewInterceptorChain(log, false)
222+
err := interceptor.Start()
223+
if err != nil {
224+
return nil, err
225+
}
226+
227+
interceptor.SetWalletUnlocked()
228+
interceptor.AddMacaroonService(d.macaroonService)
229+
230+
for method, permissions := range RequiredPermissions {
231+
err := interceptor.AddPermission(method, permissions)
232+
if err != nil {
233+
return nil, err
234+
}
235+
}
236+
237+
unaryInterceptor := interceptor.MacaroonUnaryServerInterceptor()
238+
streamInterceptor := interceptor.MacaroonStreamServerInterceptor()
226239
return []grpc.ServerOption{
227240
grpc.UnaryInterceptor(unaryInterceptor),
228241
grpc.StreamInterceptor(streamInterceptor),
229-
}
242+
}, nil
230243
}

loopd/run.go

+15-11
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var (
2626
// listed build tags/subservers need to be enabled.
2727
LoopMinRequiredLndVersion = &verrpc.Version{
2828
AppMajor: 0,
29-
AppMinor: 10,
29+
AppMinor: 11,
3030
AppPatch: 1,
3131
BuildTags: []string{
3232
"signrpc", "walletrpc", "chainrpc", "invoicesrpc",
@@ -115,7 +115,7 @@ func newListenerCfg(config *Config, rpcCfg RPCConfig) *listenerCfg {
115115
// If the client decides to kill loop before
116116
// lnd is synced, we cancel our context, which
117117
// will unblock lndclient.
118-
case <-signal.ShutdownChannel():
118+
case <-interceptor.ShutdownChannel():
119119
cancel()
120120

121121
// If our sync context was cancelled, we know
@@ -187,7 +187,19 @@ func Run(rpcCfg RPCConfig) error {
187187
return err
188188
}
189189

190+
// Start listening for signal interrupts regardless of which command
191+
// we are running. When our command tries to get a lnd connection, it
192+
// blocks until lnd is synced. We listen for interrupts so that we can
193+
// shutdown the daemon while waiting for sync to complete.
194+
shutdownInterceptor, err := signal.Intercept()
195+
if err != nil {
196+
return err
197+
}
198+
190199
// Initialize logging at the default logging level.
200+
logWriter := build.NewRotatingLogWriter()
201+
SetupLoggers(logWriter, shutdownInterceptor)
202+
191203
err = logWriter.InitLogRotator(
192204
filepath.Join(config.LogDir, defaultLogFilename),
193205
config.MaxLogFileSize, config.MaxLogFiles,
@@ -205,14 +217,6 @@ func Run(rpcCfg RPCConfig) error {
205217

206218
lisCfg := newListenerCfg(&config, rpcCfg)
207219

208-
// Start listening for signal interrupts regardless of which command
209-
// we are running. When our command tries to get a lnd connection, it
210-
// blocks until lnd is synced. We listen for interrupts so that we can
211-
// shutdown the daemon while waiting for sync to complete.
212-
if err := signal.Intercept(); err != nil {
213-
return err
214-
}
215-
216220
// Execute command.
217221
if parser.Active == nil {
218222
daemon := New(&config, lisCfg)
@@ -221,7 +225,7 @@ func Run(rpcCfg RPCConfig) error {
221225
}
222226

223227
select {
224-
case <-signal.ShutdownChannel():
228+
case <-interceptor.ShutdownChannel():
225229
log.Infof("Received SIGINT (Ctrl+C).")
226230
daemon.Stop()
227231

release_notes.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ This file tracks release notes for the loop client.
1717
#### New Features
1818

1919
#### Breaking Changes
20+
- Bumped the minimum required version of `lnd` to `v0.11.1-beta`.
2021

2122
#### Bug Fixes

version.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr
2626
const (
2727
// Note: please update release_notes.md when you change these values.
2828
appMajor uint = 0
29-
appMinor uint = 12
30-
appPatch uint = 2
29+
appMinor uint = 13
30+
appPatch uint = 0
3131

3232
// appPreRelease MUST only contain characters from semanticAlphabet per
3333
// the semantic versioning spec.

0 commit comments

Comments
 (0)