I just force-exited a non-custodial Blink wallet (using Spark) on Bitcoin mainnet. Seed only - no operator cooperation: recovery bundle, fee funding, CPFP signing and sweep all derived from the wallet seed. The honest numbers for a 100k sat wallet: • 22 leaves, 253 tx packages to exit fully • only 4 leaves (90% of the value) were worth exiting - fees would have eaten the other18 • ~9.4k sats in fees to recover 90.1k, one package per block per chain, then a ~2-week timelock Non-custodial means you can always leave. But the fire escape is narrow - full case study with costs, failures and lessons: image

Replies (38)

9.4k sats to recover 90.1k is real-world data people need to see. the 18-leaf dust problem is the honest cost of leaf-based state. good that the seed alone was enough, no operator needed.
The data-availability dependency is real and worth stating exactly, so let's state it. Operators never hold your key and can't move funds without your signature - that part is unconditional. Unilateral exit works through pre-signed refund txs that pay to a key only you control, and those txs plus their ancestors are the "leaf data" in question: your device co-signs them at claim time, ancestors come from a query. Until a wallet persists that data, forcing your funds on-chain depends on operator liveness. Grubles is right that no wallet ships this today. That gap is the entire reason I built and published this tooling instead of just claiming "non-custodial" in marketing copy. What the dependency actually is, once you persist the data: Bounded: everything covered by your last refresh exits without any operator, forever. Exposure is only what changed since then. With refresh wired into every claim, that window is one transaction. Detectable: withholding means your refresh fails right after your claim succeeded. You notice, you stop receiving, you exit with what you have. - Compare a custodian, where withholding looks like normal operation until the withdrawal freeze. So on the spectrum: weaker than Lightning, where your node holds channel state by construction. Much stronger than custodial, where they hold both keys and data and you detect nothing. "Self-custody of keys with a bounded, detectable data-availability dependency" is the honest label. Wallets that don't manage that dependency for users are shipping the weak end of the spectrum. Mine included, today. That is what is being fixed, and the case study is the receipt that the exit half already works:
Problem is any time you transact (and sometimes other times!) the “recovery bundle” changes. So you can’t back it up/download it, your wallet needs to support this natively (and I don’t believe any do).
Honestly why bother? No one uses Spark on the assumption that they can exit or that it’s somehow trustless, the point is that it’s better than custodial and Lightspark is taking on the legal risk instead of someone else. If you actually care about trustless something you’ve gotta do a graduated wallet or LN+Ark.
Can’t understand why all custodial “wallets” are choosing Spark over Ark to go “non custodial”. Ark wallets are already as good as the Spark ones is term of UX and the trust model seems much better.
@openoms if only 90 percent is worth exiting and fees eat the rest, is that still meaningfully self custodial or just barely? the narrow fire escape is the part nobody markets
Default avatar
cocktailsk 2 months ago
I exited blink already and moving everybody I onboarded away fron blink. In my eyes it was the best wallet but with this steps they will be loosing users :(
Yes, the feature was added to our tool today: The consolidation comes with a tradeoff between efficient unilateral exit and fast transactions (lacking denominations will need more swaps with SSPs at payment time). image
Yeah might be the main reason. Arkade wallet is still great, Noah Arké and the Umbrel Bark wallet are really good also already. In both implementations the refreshing of the vtxos seems to work well. It’s honestly impressive and give lot’s of hope for the future of bitcoin scaling. Perfect way of justifying some new opcode / softfork integration (to make all of that even better) rather than the retarded usual arguments “if we don’t do it right now bitcoin is doomed bla-bla-bla” We just need @calle and @Second to add blind signatures on top of it and we’ll have basically solved unstopable p2p ecash.
Dude if you do this you'll make me the happiest man ever. We've been trying to think of ways around it and we did think of a hack but we don't think it could be relayed. Official cluster package relay would be a game changer for users.
But is this something that e.g. Wallet of Satoshi should be doing proactively? Either when transactions are made, or wake up daily to do consolidation or something. I don't understand the details well.
Yes, fees to exit unilaterally should be comparable to Ark as it also uses this kind of transaction chain to be broadcasted. There are many variables which can be tweaked: - number and sie of the leaves/vTXOs - depth of the chain to broadcast - timelocks - fee/rate Ark solutions have this periodical onlineness requirement and ongoing fees for rounds as wrll which make them have different tradeoffs. Spark works now, but no wallet should be locked in to it. Let it and the alternatives evolve. Our job is to keep our eyes open and assess the risks.
You can exit with seed only if your wallet took care of saving the recovery bundle while operators were online and willing. We will have this safeguard in Blink shortly and hope to see it in other Spark based wallets too.
From what I've heard for example Cake wallet is just waiting for Breez SDK to add it then it's a simple matter of including it in the wallet UI. Supposedly it will be soon. Not sure about wallets that use other Spark implementations but I'm guessing it's a similar reason they don't have it yet either.