Conversation
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly expands the application's capabilities by integrating LDK Node as a new on-device Lightning backend. This integration provides users with an alternative, robust Lightning implementation, supporting a wide array of modern Lightning features like BOLT12 offers and LSPS. The changes also introduce configurable external services for chain synchronization, gossip, and cloud backups, enhancing the wallet's resilience and user control. Furthermore, dedicated tools for monitoring and troubleshooting the LDK Node are now available, ensuring a smoother user experience. Highlights
Changelog
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This is a large and impressive pull request that adds LDK Node as a new on-device backend. The implementation covers both Android and iOS, with extensive changes across the native and React Native layers to support the new backend's features, including BOLT12, LSPS, and VSS for cloud backups. The code is generally well-structured. I've found a few issues, including an incorrect implementation of lnurl-auth and a capability flag that was incorrectly disabled. I've also noted a minor issue with exception handling in the Android log observer. Overall, this is a significant and well-executed feature addition.
Note: Security Review did not run due to the size of the PR.
ajaysehwal
left a comment
There was a problem hiding this comment.
@kaloudis, the UI looks disturbed here.
ajaysehwal
left a comment
There was a problem hiding this comment.
@kaloudis, when switching from embedded LND to LDK, the app takes a long time after these logs:
LOADING CONTACTS.....
Loading notes...
Then the following logs appear:
LDK Node: Initializing...
LDK Node: Network set to Bitcoin
LDK Node: Esplora server set to https://electrs.getalbypro.com
LDK Node: RGS server set to https://rapidsync.lightningdevkit.org/snapshot
LDK Node: LSPS1 liquidity source configured
LDK Node: LSPS2 liquidity source configured
LDK Node: LSPS7 liquidity source configured
After these logs, the app crashes.
Screen.Recording.2026-03-09.at.2.28.04.PM.mov
This one is a limitation of LDK Node. We can modify our fork and potentially submit a PR upstream. Will take a look at that this week. |
ajaysehwal
left a comment
There was a problem hiding this comment.
Screen.Recording.2026-03-10.at.10.48.47.AM.mov
@kaloudis, We are getting an error when creating pay codes. Also, we should make sure to clean up any errors when the pay codes UI unmounts.
Do you have channels set up? |
nope |
ajaysehwal
left a comment
There was a problem hiding this comment.
Screen.Recording.2026-03-10.at.4.19.18.PM.mov
Error initializing seed TypeError: Cannot read property 'map' of undefined
at ?anon_0_ (SeedQRExport.tsx:119:21)
at next (native)
at asyncGeneratorStep (asyncToGenerator.js:3:17)
at _next (asyncToGenerator.js:17:27)
at tryCallOne (address at InternalBytecode.js:1:1274)
at anonymous (address at InternalBytecode.js:1:4865)
ajaysehwal
left a comment
There was a problem hiding this comment.
Screen.Recording.2026-03-10.at.4.30.47.PM.mov
f19c5d7 to
87b23a0
Compare
This one should be resolved now. lmk |
…rtup The VSS key was derived twice during LDK Node startup — once for the storeId and again for auth header generation — each costing ~3.4s of PBKDF2 in JavaScript. Derive once in initNode and pass the precomputed keypair through to generateVssAuthHeaders.
Add a native mnemonicToSeed method (CommonCrypto on iOS, javax.crypto on Android) that performs BIP39 PBKDF2-SHA512 in ~5ms vs ~3.4s in pure JS. The fast BIP32 key derivation and secp256k1 signing remain in JS. Combined with the prior dedup fix, LDK Node startup drops from ~8.6s to ~2.8s (67% faster).
ajaysehwal
left a comment
There was a problem hiding this comment.

Description
Summary
Notable changes
supportsMessageVerification,supportsListingOffers,supportsBolt12Addressbackend capability flagsTest plan
PR Type
Checklist
yarn run tscand made sure my code compiles correctlyyarn run lintand made sure my code didn’t contain any problematic patternsyarn run prettierand made sure my code is formatted correctlyyarn run testand made sure all of the tests passTesting
If you modified or added a utility file, did you add new unit tests?
I have tested this PR on the following platforms (please specify OS version and phone model/VM):
I have tested this PR with the following types of nodes (please specify node version and API version where appropriate):
Locales
Third Party Dependencies and Packages
yarnafter this PR is merged inpackage.jsonandyarn.lockhave been properly updatedOther: