@@ -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