Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Bitkit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -928,7 +928,7 @@
repositoryURL = "https://github.com/synonymdev/ldk-node";
requirement = {
kind = revision;
revision = c5698d00066e0e50f33696afc562d71023da2373;
revision = 153ecbeb44c8f68fbc8faf1ea6e15c258053507a;
};
};
96DEA0382DE8BBA1009932BF /* XCRemoteSwiftPackageReference "bitkit-core" */ = {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

54 changes: 41 additions & 13 deletions Bitkit/Services/LightningService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,8 @@ class LightningService {
onchainWalletSyncIntervalSecs: Env.walletSyncIntervalSecs,
lightningWalletSyncIntervalSecs: Env.walletSyncIntervalSecs,
feeRateCacheUpdateIntervalSecs: Env.walletSyncIntervalSecs
)
),
connectionTimeoutSecs: 10
)
builder.setChainSourceElectrum(serverUrl: resolvedElectrumServerUrl, config: electrumConfig)

Expand Down Expand Up @@ -124,19 +125,46 @@ class LightningService {
builder.setEntropyBip39Mnemonic(mnemonic: mnemonic, passphrase: passphrase)

try await ServiceQueue.background(.ldk) {
if !lnurlAuthServerUrl.isEmpty {
self.node = try builder.buildWithVssStore(
vssUrl: vssUrl,
storeId: storeId,
lnurlAuthServerUrl: lnurlAuthServerUrl,
fixedHeaders: [:]
)
} else {
self.node = try builder.buildWithVssStoreAndFixedHeaders(
vssUrl: vssUrl,
storeId: storeId,
fixedHeaders: [:]
do {
if !lnurlAuthServerUrl.isEmpty {
self.node = try builder.buildWithVssStore(
vssUrl: vssUrl,
storeId: storeId,
lnurlAuthServerUrl: lnurlAuthServerUrl,
fixedHeaders: [:]
)
} else {
self.node = try builder.buildWithVssStoreAndFixedHeaders(
vssUrl: vssUrl,
storeId: storeId,
fixedHeaders: [:]
)
}
} catch let error as BuildError {
Comment thread
ben-kaufman marked this conversation as resolved.
guard case .DangerousValue = error else { throw error }

// Stale ChannelMonitor vs ChannelManager — retry with accept_stale to recover.
Logger.warn(
"Build failed with DangerousValue. Retrying with accept_stale_channel_monitors for recovery.",
context: "Recovery"
)
builder.setAcceptStaleChannelMonitors(accept: true)

if !lnurlAuthServerUrl.isEmpty {
self.node = try builder.buildWithVssStore(
vssUrl: vssUrl,
storeId: storeId,
lnurlAuthServerUrl: lnurlAuthServerUrl,
fixedHeaders: [:]
)
} else {
self.node = try builder.buildWithVssStoreAndFixedHeaders(
vssUrl: vssUrl,
storeId: storeId,
fixedHeaders: [:]
)
Comment thread
jvsena42 marked this conversation as resolved.
}
Logger.info("Stale monitor recovery: build succeeded with accept_stale", context: "Recovery")
}
}

Expand Down
Loading