@@ -24,6 +24,7 @@ import org.lightningdevkit.ldknode.ElectrumSyncConfig
2424import org.lightningdevkit.ldknode.Event
2525import org.lightningdevkit.ldknode.FeeRate
2626import org.lightningdevkit.ldknode.Node
27+ import org.lightningdevkit.ldknode.NodeEntropy
2728import org.lightningdevkit.ldknode.NodeException
2829import org.lightningdevkit.ldknode.NodeStatus
2930import org.lightningdevkit.ldknode.PaymentDetails
@@ -78,15 +79,29 @@ class LightningService @Inject constructor(
7879 customServerUrl : String? = null,
7980 customRgsServerUrl : String? = null,
8081 ) {
81- val mnemonic = keychain.loadString(Keychain .Key .BIP39_MNEMONIC .name) ? : throw ServiceError .MnemonicNotFound
82- val passphrase = keychain.loadString(Keychain .Key .BIP39_PASSPHRASE .name)
82+ Logger .debug(" Building node…" )
8383
84- // TODO get trustedLnPeers from blocktank info
85- this .trustedPeers = Env .trustedLnPeers
84+ val config = config(walletIndex)
85+ node = build(
86+ walletIndex,
87+ customServerUrl,
88+ customRgsServerUrl,
89+ config,
90+ )
91+
92+ Logger .info(" LDK node setup" )
93+ }
94+
95+ private fun config (
96+ walletIndex : Int ,
97+ ): Config {
8698 val dirPath = Env .ldkStoragePath(walletIndex)
8799
100+ // TODO get trustedLnPeers from blocktank info
101+ this .trustedPeers = Env .trustedLnPeers
88102 val trustedPeerNodeIds = trustedPeers.map { it.nodeId }
89- val config = defaultConfig().copy(
103+
104+ return defaultConfig().copy(
90105 storageDirPath = dirPath,
91106 network = Env .network,
92107 trustedPeers0conf = trustedPeerNodeIds,
@@ -95,46 +110,52 @@ class LightningService @Inject constructor(
95110 perChannelReserveSats = 1u ,
96111 ),
97112 )
113+ }
114+
115+ private suspend fun build (
116+ walletIndex : Int ,
117+ customServerUrl : String? ,
118+ customRgsServerUrl : String? ,
119+ config : Config ,
120+ ): Node = ServiceQueue .LDK .background {
121+ val nodeEntropy = NodeEntropy .fromBip39Mnemonic(
122+ mnemonic = keychain.loadString(Keychain .Key .BIP39_MNEMONIC .name) ? : throw ServiceError .MnemonicNotFound ,
123+ passphrase = keychain.loadString(Keychain .Key .BIP39_PASSPHRASE .name),
124+ )
98125
99126 val builder = Builder .fromConfig(config).apply {
100127 setCustomLogger(LdkLogWriter ())
101-
102128 configureChainSource(customServerUrl)
103129 configureGossipSource(customRgsServerUrl)
104-
105- setEntropyBip39Mnemonic(mnemonic, passphrase)
106130 }
107-
108- Logger .debug(" Building node…" )
109-
110- val vssStoreId = vssStoreIdProvider.getVssStoreId(walletIndex)
111-
112- ServiceQueue .LDK .background {
113- node = try {
114- val lnurlAuthServerUrl = Env .lnurlAuthServerUrl
115- val vssUrl = Env .vssServerUrl
116- Logger .verbose(" Building ldk-node with vssUrl: '$vssUrl '" )
117- Logger .verbose(" Building ldk-node with lnurlAuthServerUrl: '$lnurlAuthServerUrl '" )
118- if (lnurlAuthServerUrl.isNotEmpty()) {
119- builder.buildWithVssStore(
120- vssUrl = vssUrl,
121- storeId = vssStoreId,
122- lnurlAuthServerUrl = lnurlAuthServerUrl,
123- fixedHeaders = emptyMap(),
124- )
125- } else {
126- builder.buildWithVssStoreAndFixedHeaders(
127- vssUrl = vssUrl,
128- storeId = vssStoreId,
129- fixedHeaders = emptyMap(),
130- )
131- }
132- } catch (e: BuildException ) {
133- throw LdkError (e)
131+ try {
132+ val vssStoreId = vssStoreIdProvider.getVssStoreId(walletIndex)
133+ val lnurlAuthServerUrl = Env .lnurlAuthServerUrl
134+ val vssUrl = Env .vssServerUrl
135+ Logger .verbose(" Building ldk-node with vssUrl: '$vssUrl '" )
136+ Logger .verbose(" Building ldk-node with lnurlAuthServerUrl: '$lnurlAuthServerUrl '" )
137+ if (lnurlAuthServerUrl.isNotEmpty()) {
138+ builder.buildWithVssStore(
139+ vssUrl = vssUrl,
140+ storeId = vssStoreId,
141+ lnurlAuthServerUrl = lnurlAuthServerUrl,
142+ fixedHeaders = emptyMap(),
143+ nodeEntropy = nodeEntropy,
144+ )
145+ } else {
146+ builder.buildWithVssStoreAndFixedHeaders(
147+ vssUrl = vssUrl,
148+ storeId = vssStoreId,
149+ fixedHeaders = emptyMap(),
150+ nodeEntropy = nodeEntropy,
151+ )
134152 }
153+ } catch (e: BuildException ) {
154+ throw LdkError (e)
155+ } finally {
156+ // cleanup sensitive data
157+ nodeEntropy.destroy()
135158 }
136-
137- Logger .info(" LDK node setup" )
138159 }
139160
140161 private suspend fun Builder.configureGossipSource (customRgsServerUrl : String? ) {
0 commit comments