@@ -34,9 +34,13 @@ import (
3434	"github.com/lightninglabs/lightning-terminal/status" 
3535	"github.com/lightninglabs/lightning-terminal/subservers" 
3636	"github.com/lightninglabs/lndclient" 
37+ 	taprootassets "github.com/lightninglabs/taproot-assets" 
3738	"github.com/lightningnetwork/lnd" 
3839	"github.com/lightningnetwork/lnd/build" 
3940	"github.com/lightningnetwork/lnd/chainreg" 
41+ 	"github.com/lightningnetwork/lnd/fn" 
42+ 	"github.com/lightningnetwork/lnd/funding" 
43+ 	"github.com/lightningnetwork/lnd/htlcswitch" 
4044	"github.com/lightningnetwork/lnd/kvdb" 
4145	"github.com/lightningnetwork/lnd/lncfg" 
4246	"github.com/lightningnetwork/lnd/lnrpc" 
@@ -49,10 +53,14 @@ import (
4953	"github.com/lightningnetwork/lnd/lnrpc/walletrpc" 
5054	"github.com/lightningnetwork/lnd/lnrpc/watchtowerrpc" 
5155	"github.com/lightningnetwork/lnd/lnrpc/wtclientrpc" 
56+ 	"github.com/lightningnetwork/lnd/lnwallet" 
5257	"github.com/lightningnetwork/lnd/lnwallet/btcwallet" 
58+ 	"github.com/lightningnetwork/lnd/lnwallet/chancloser" 
5359	"github.com/lightningnetwork/lnd/macaroons" 
60+ 	"github.com/lightningnetwork/lnd/msgmux" 
5461	"github.com/lightningnetwork/lnd/rpcperms" 
5562	"github.com/lightningnetwork/lnd/signal" 
63+ 	"github.com/lightningnetwork/lnd/sweep" 
5664	grpcProxy "github.com/mwitkow/grpc-proxy/proxy" 
5765	"google.golang.org/grpc" 
5866	"google.golang.org/grpc/credentials" 
@@ -509,13 +517,33 @@ func (g *LightningTerminal) start() error {
509517			}},
510518		}
511519
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+ 
512539		implCfg  :=  & lnd.ImplementationCfg {
513540			GrpcRegistrar :       g ,
514541			RestRegistrar :       g ,
515542			ExternalValidator :   g ,
516543			DatabaseBuilder :     g .defaultImplCfg .DatabaseBuilder ,
517544			WalletConfigBuilder : g ,
518545			ChainControlBuilder : g .defaultImplCfg .ChainControlBuilder ,
546+ 			AuxComponents :       auxComponents ,
519547		}
520548
521549		g .wg .Add (1 )
@@ -1296,6 +1324,59 @@ func (g *LightningTerminal) BuildWalletConfig(ctx context.Context,
12961324	)
12971325}
12981326
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 [htlcswitch.AuxTrafficShaper ](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+ 
12991380// shutdownSubServers stops all subservers that were started and attached to 
13001381// lnd. 
13011382func  (g  * LightningTerminal ) shutdownSubServers () error  {
0 commit comments