@@ -34,9 +34,12 @@ import (
34
34
"github.com/lightninglabs/lightning-terminal/status"
35
35
"github.com/lightninglabs/lightning-terminal/subservers"
36
36
"github.com/lightninglabs/lndclient"
37
+ taprootassets "github.com/lightninglabs/taproot-assets"
37
38
"github.com/lightningnetwork/lnd"
38
39
"github.com/lightningnetwork/lnd/build"
39
40
"github.com/lightningnetwork/lnd/chainreg"
41
+ "github.com/lightningnetwork/lnd/fn"
42
+ "github.com/lightningnetwork/lnd/funding"
40
43
"github.com/lightningnetwork/lnd/kvdb"
41
44
"github.com/lightningnetwork/lnd/lncfg"
42
45
"github.com/lightningnetwork/lnd/lnrpc"
@@ -49,10 +52,15 @@ import (
49
52
"github.com/lightningnetwork/lnd/lnrpc/walletrpc"
50
53
"github.com/lightningnetwork/lnd/lnrpc/watchtowerrpc"
51
54
"github.com/lightningnetwork/lnd/lnrpc/wtclientrpc"
55
+ "github.com/lightningnetwork/lnd/lnwallet"
52
56
"github.com/lightningnetwork/lnd/lnwallet/btcwallet"
57
+ "github.com/lightningnetwork/lnd/lnwallet/chancloser"
53
58
"github.com/lightningnetwork/lnd/macaroons"
59
+ "github.com/lightningnetwork/lnd/msgmux"
60
+ "github.com/lightningnetwork/lnd/routing"
54
61
"github.com/lightningnetwork/lnd/rpcperms"
55
62
"github.com/lightningnetwork/lnd/signal"
63
+ "github.com/lightningnetwork/lnd/sweep"
56
64
grpcProxy "github.com/mwitkow/grpc-proxy/proxy"
57
65
"google.golang.org/grpc"
58
66
"google.golang.org/grpc/credentials"
@@ -509,13 +517,33 @@ func (g *LightningTerminal) start() error {
509
517
}},
510
518
}
511
519
520
+ var auxComponents lnd.AuxComponents
521
+ switch g .cfg .TaprootAssetsMode {
522
+ case ModeRemote , ModeDisable :
523
+ log .Warnf ("Taproot Assets daemon is either disabled " +
524
+ "or running in remote mode. Taproot Asset " +
525
+ "channel functionality will NOT be " +
526
+ "available. To enable, set Taproot Assets " +
527
+ "mode to 'integrated' in the config file." )
528
+
529
+ case ModeIntegrated :
530
+ components , err := g .buildAuxComponents ()
531
+ if err != nil {
532
+ return fmt .Errorf ("could not build aux " +
533
+ "components: %w" , err )
534
+ }
535
+
536
+ auxComponents = * components
537
+ }
538
+
512
539
implCfg := & lnd.ImplementationCfg {
513
540
GrpcRegistrar : g ,
514
541
RestRegistrar : g ,
515
542
ExternalValidator : g ,
516
543
DatabaseBuilder : g .defaultImplCfg .DatabaseBuilder ,
517
544
WalletConfigBuilder : g ,
518
545
ChainControlBuilder : g .defaultImplCfg .ChainControlBuilder ,
546
+ AuxComponents : auxComponents ,
519
547
}
520
548
521
549
g .wg .Add (1 )
@@ -1296,6 +1324,59 @@ func (g *LightningTerminal) BuildWalletConfig(ctx context.Context,
1296
1324
)
1297
1325
}
1298
1326
1327
+ // buildAuxComponent builds the auxiliary components required by lnd when
1328
+ // running in integrated mode with tapd being the service that provides the
1329
+ // aux component implementations.
1330
+ func (g * LightningTerminal ) buildAuxComponents () (* lnd.AuxComponents , error ) {
1331
+ errNotAvailable := fmt .Errorf ("tapd is not available, both lnd and " +
1332
+ "tapd must be started in integrated mode for Taproot " +
1333
+ "Assets Channels to be available" )
1334
+
1335
+ tapdWrapper , available := g .subServerMgr .GetServer (subservers .TAP )
1336
+ if ! available {
1337
+ return nil , errNotAvailable
1338
+ }
1339
+
1340
+ if tapdWrapper .Remote () {
1341
+ return nil , errNotAvailable
1342
+ }
1343
+
1344
+ tapdOpt := tapdWrapper .Impl ()
1345
+ tapdAny , err := tapdOpt .UnwrapOrErr (errors .New ("tapd not available" ))
1346
+ if err != nil {
1347
+ return nil , err
1348
+ }
1349
+
1350
+ tapd , ok := tapdAny .(* taprootassets.Server )
1351
+ if ! ok {
1352
+ return nil , fmt .Errorf ("tapd is not of the expected type" )
1353
+ }
1354
+
1355
+ router := msgmux .NewMultiMsgRouter ()
1356
+ router .Start ()
1357
+ err = router .RegisterEndpoint (tapd )
1358
+ if err != nil {
1359
+ return nil , fmt .Errorf ("error registering tapd endpoint: %w" ,
1360
+ err )
1361
+ }
1362
+
1363
+ return & lnd.AuxComponents {
1364
+ AuxLeafStore : fn.Some [lnwallet.AuxLeafStore ](tapd ),
1365
+ MsgRouter : fn.Some [msgmux.Router ](router ),
1366
+ AuxFundingController : fn.Some [funding.AuxFundingController ](
1367
+ tapd ,
1368
+ ),
1369
+ AuxSigner : fn.Some [lnwallet.AuxSigner ](tapd ),
1370
+ TrafficShaper : fn.Some [routing.TlvTrafficShaper ](tapd ),
1371
+ AuxDataParser : fn.Some [lnd.AuxDataParser ](tapd ),
1372
+ AuxChanCloser : fn.Some [chancloser.AuxChanCloser ](tapd ),
1373
+ AuxSweeper : fn.Some [sweep.AuxSweeper ](tapd ),
1374
+ AuxContractResolver : fn.Some [lnwallet.AuxContractResolver ](
1375
+ tapd ,
1376
+ ),
1377
+ }, nil
1378
+ }
1379
+
1299
1380
// shutdownSubServers stops all subservers that were started and attached to
1300
1381
// lnd.
1301
1382
func (g * LightningTerminal ) shutdownSubServers () error {
0 commit comments