Repository navigation
Conversation
This was referenced Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs:
This PR adds Arkade (Ark Labs) to bitkit-core as
src/modules/arkade, the engine behind Spending on Arkade in synonymdev/bitkit-android#1731 and synonymdev/bitkit-ios#1169. It builds on arkade-os/rust-sdk 0.12 and is exposed to both apps through UniFFI. Bitkit doesn't embed JS, and rust-sdk has no Arkade Intents Lightning client, so this module adds one.Draft. The wallet, the Lightning address and the Intents Lightning client are all in this head. Wiring into the apps follows.
Description
ArkadeClienton ark-client 0.12, Esplora chain source):m/86'/0'/1'), so no key is shared with Savings (account 0).with_foreign), like the Boltz module.lnurl.arkade.sh(protocol of ArkLabsHQ/lnurl-server):@arkade-os/lnurl-clientderives it, so a restore finds the same address.src/modules/arkade/intents, exported asarkade_receive,arkade_quote_pay,arkade_payandarkade_swaps, with swap events on the listener):beta-solver.refund_locktime.<operator> CHECKSIGVERIFY <owner> CHECKSIG, while Ark Labs' TypeScript SDK and the live operator use owner first. Without the patch, the same keys give different Arkade and boarding addresses than the TypeScript wallet.sqlitefeature off, so SQLite is linked once (bitkit-core'srusqlite). Stage B addsnostr-sdk0.43, with default features off plusnip44.Out of Scope
src/modules/arkade: a unilateral exit runner.lnurl-server.Upstream
Ark Labs (Kukks, 29 Oct) confirms rust-sdk has no Arkade Intents client and would accept one upstream. The Intents client here is written to be contributed to arkade-os/rust-sdk later: it takes the wallet through a small trait, keeps one
ark-core, and is checked against the TypeScript SDK.Answers that shape this PR (Ark Labs, 29 Oct)
renewand the chores loop stay the only renewal path, and nothing more depends ondelegate.arkade.money.export_stateandimport_statecarry swap records, salts included.Still open for Ark Labs
walletMode: "auto"move to HD, and with which derivation?refund_locktimeabout 612,000 s ahead) unless the solver pushes the cooperative refund. Is that intended?Swap-state backup (from Ark Labs' code)
A Lightning swap can't be rebuilt from the seed plus the operator's indexer:
@arkade-os/swaponly rebuilds Arkade-to-Arkade offers, and its swap contracts have no discovery. So these must be backed up per swap:rfqId, kind and state, the amounts and fee, the solver key,lock.hash,lockupAddressandlockupPkScript,refundLocktime,fundingTxid, and the invoicepreimageSaltHex, needed in the default static wallet mode) or the preimage itself when storedThese come back from the seed and the indexer: the refund key (the wallet's identity key), a preimage derived from an HD descriptor, lockup output state, revealed preimages, and the wallet's own addresses and balance.
The TypeScript SDK has no export or import of swap state, and Ark Labs' wallet dropped swaps from its Nostr backup when it moved to Intents (arkade-os/wallet#908). Bitkit's
ARKADE_EXITbackup carries the swap records with all of the above, throughexport_statein #183.Renewal after the delegate (from Ark Labs' code)
The replacement for
delegate.arkade.moneyis public but not released:delegatee.arkade.shreturned 502, while the mutinynet instance answeredPreview
N/A — a library change.
QA Notes
cargo buildandcargo testmust pass, and so mustbuild_android.shandbuild_ios.sh.src/modules/arkade/fixtures).cargo test -- --ignored), which move no money:Gaps
Models used
claude-opus-5-5(reasoning:low)claude-opus-5-5(reasoning:low)