Very interesting article by dannybuntu from Wallet Scrutiny about the nature of Spark custody (it's a bit slop, but the point is interesting):
Spark works by having your own keys plus a separate Spark service/operator infrastructure jointly authorize your everyday transfers. It’s not even a simple “one company cooperates with you” setup: Breez SDK Spark’s default configuration pools three independent operators — Lightspark, Breez’s own, and Flashnet — confirmed directly in the SDK’s default config, and requires 2 of those 3 to agree (split_secret_threshold: 2), on top of your own key. Whatever the exact internal shape, the practical fact holds: your key alone isn’t enough for a normal transaction; outside infrastructure has to cooperate too.There has been some discussion of unilateral exit from Spark to Bitcoin mainchain - #1518557 - and how it may not be as easy as advertised.
Dannybuntu looks at the recently released Radar App - #1520895 - and determines that while the Breeze SDK on which it is built does allow for a path for collaborative exit to the mainchain, Radar doesn't give users a way to access this path.
But it gets worse when Danny examines the unilateral exit code:
Unilateral exit isn’t reachable at all — and this time it’s not Radar’s choice. The underlying Spark protocol genuinely has aunilateral_exit()function. But it lives inside an internal Rust crate that the SDK’s ownbreez-sdk-sparklayer never re-exports through UniFFI at version0.14.0. Reading every function actually marked for export (there are about 30, covering payments, contacts, deposits, lightning addresses, and wallet sync) confirmsunilateral_exitisn’t among them. Even a hypothetical, more ambitious version of Radar couldn’t wire up a “recover my funds independently” button today — the tool to build it with doesn’t exist yet in the SDK version both its apps depend on.
You might think you could take the seed phrase Radar App generates and use it to restore your wallet in some other Spark based wallet or on chain, but that is not what a seed phrase does in Radar:
It proves the funds are yours in the sense of restoring access — it is not, by itself, a way to move bitcoin to a normal on-chain address if the Spark service Radar depends on ever goes offline or refuses to cooperate.
The moral of the story seems to be: seed phrases in Spark wallets may restore your access to your Spark wallet, but they don't necessarily mean you can exit to the chain.
While Spark does seem to have a path for unilateral exit, few if any Spark based wallets are built in such a way as to allow users access to this path.
This buries the lead and implies it's fixable.
Grubles may not have realized it, but he pointed out the real flaw:
See, it doesn't matter that the clients didn't cache recovery information from the server, or know how to use it... It's the fact that you need that information from the server at all.
It's not self-custody because there is still a data availability dependency, server only needs to withhold the latest leaf and you can't exit.
Trustodial at its finest!! and yet Bitcoiners embrace it!
Truly is the wildest thing ever.
I'm not sure it's useless. It's like ecash. There's a trust trade off, but maybe it makes sense for some people.
Unfortunately, they're using self custody language to market it.
Trust is not useless.
Crypto theater to make trust sound like innovating is useless.
It's not self-custody because there is still a data availability dependency, server only needs to withhold the latest leaf and you can't exit.
That's it, hinges exactly on the meaning of this word
The entire fake-L2 industrial complex relies on twisting the meanings of words to take advantage of unsophisticated users / cryptophile idiots
Is this akin to having the keys to a multisig but not having the descriptor?
No, much worse.
A descriptor doesn't change after every tx, you have the descriptor when you setup the key. With fake L2's, your key is useless without server cooperation after every tx.
Here is @januszgrze doing a unilateral exit:
source
And @notgrubles's commentary on this helpful too:
source
https://twiiit.com/januszg_/status/2074792673383223367
Roy addressed it here: https://x.com/roy_breez/status/2074754021223489911
Thanks for posting. Here's Roy's post in case people don't want to click through:
I also saw this from Openoms, but I couldnt get his links to work:
source
🫡
https://twiiit.com/openoms/status/2074873145203233012
https://twiiit.com/roy_breez/status/2074754021223489911
Sort of expected as much. Odd trade-off, I gotta say... yey, messaging app with money but oh oops can't really access the money