Repository navigation
Conversation
This was referenced Oct 29, 2026
This was referenced Nov 2, 2026
Mainnet reads go to mempool.space and move to blockstream.info when it times out, refuses the connection or answers with an error; the explorer that answers stays in use. A timeout or refused connection is no longer retried on the same server, and a read gives up after 10 s instead of 30.
The history watch and chores read each boarding address every few seconds, past what public explorers allow per IP (blockstream.info: 700 an hour). Spent outputs and confirmed transactions are now cached for good, the tip and address histories for 60 s, the history watch runs every 30 s instead of 15, a rate-limited explorer is skipped instead of retried, and mempool.emzy.de is a third explorer.
The operator refused every boarding from the test Pixel with INVALID_INTENT_TIMERANGE (proof of ownership not yet valid): ark-client 0.12 makes a batch intent valid from the device's current second, and that phone runs about 2 s ahead. A vendored ark-client makes the intent valid from a minute earlier. Boarding, renewal and offboarding all join batches this way.
Collaborator
Author
|
Closing this PR: after a full mainnet QA run on Android and iOS, Bitkit goes with Spark for Lightning. Arkade worked end to end with real funds (LN send and receive, Lightning address, transfers to and from Savings), but it needs too much built and run on our side: chain access through block explorers, our own LN swap client and the activity history. The branch stays for reference. |
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, and both app drafts run on it. The prerelease
0.8.0-arkade.2(tagv0.8.0-arkade.2) carries it to their CI.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:regtest_tests.rs; the header says how to run it). Passed on7a6a4e0:Gaps
Models used
claude-opus-5-5(reasoning:low)claude-opus-5-5(reasoning:low)