Last Notes
That tweet came with an explanation:
https://blossom.primal.net/f4e0f78db4c18bdc8a7e72bcff3d1122fdc84c57bc1e24c32a3494dd22a54aa0.jpg
The operators can freeze the service, not the funds.
Exit txs are pre-signed: with a saved recovery bundle the unilateral exit needs zero operator involvement. That's exactly what we tested on mainnet.
Caveat, stated in the post: the bundle must be saved while they still serve you.
The updated text says:
Operators can never spend your funds alone.
One operator is certainly insufficient.
By "all operators colluding for theft" I mean all of these at once:
- every operator keeps its key share for a previous state of the leaf instead of deleting it
- all of them sign with those old shares - even combined, that is still not a full key
- they also need the previous owner of the leaf to sign, or to be that previous owner themselves
There are real cases where the SSP is the previous owner, so in practice it reduces to: you are trusting at least one operator to actually delete previous states. That is the stated trust assumption.
Not trustless, and the post does not claim it is.
Can you actually leave?
We tested it on mainnet: forced a 100k sat Blink wallet out of Spark, back onto Bitcoin.
No operators, just the seed and a saved recovery bundle.
Costs, lessons, code and txIDs onchain: https://www.blink.sv/blog/case-study-spark-unilateral-exit-on-bitcoin-mainnet
Trust model reiterated. In-app exit next.
https://blossom.primal.net/6b52378ae7021c536822009cf79e3529e5bbf2a33ba5384ab7798e72698937c3.png
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.
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.
Yes, the feature was added to our tool today: https://github.com/blinkbitcoin/spark-unilateral-exit/pull/11
The consolidation comes with a tradeoff between efficient unilateral exit and fast transactions (lacking denominations will need more swaps with SSPs at payment time).
https://blossom.primal.net/64292f781d0778d13692bdb0f94521b4a16e92cb053734aa26ae6310e61b199b.png
Correction: "seed only, no operators" compressed two steps. The leaf data (recovery bundle) must be fetched while operators are online. The exit itself then needs nothing from them: seed + saved bundle is the accurate claim. Full mechanics and costs: https://github.com/blinkbitcoin/spark-unilateral-exit/blob/main/docs/mainnet-exit-case-study.md
Correction: "seed only, no operators" compressed two steps. The leaf data (recovery bundle) must be fetched while operators are online. The exit itself then needs nothing from them: seed + saved bundle is the accurate claim. Full mechanics and costs: https://github.com/blinkbitcoin/spark-unilateral-exit/blob/main/docs/mainnet-exit-case-study.md
Yes, correct, one either keeps a server up with their seed or the mobile does it.
In Blink we will have event-driven and likely also periodical refresh built in.
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:
https://github.com/blinkbitcoin/spark-unilateral-exit/blob/main/docs/mainnet-exit-case-study.md
Alt link:
#nevent1q…9lqe
The only way to get the offchain data from the operators why they are online.
Wallets should (Blink will) implement periodic background polling for data.
Find the case study here if getting 404 from github:
https://njump.me/naddr1qvzqqqr4gupzp2kq0k2s388x4hcghy2k6s7p5j44jnrpxzmaevfwcxvsprzcrx30qythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qy2hwumn8ghj7un9d3shjtnwdaehgu3wdp6j7qq4d9zy2h64tfmks7nctpmkg36v2e05x4nwty8vne59
The repo was just made public, might be lagging to show:
https://github.com/blinkbitcoin/spark-unilateral-exit
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:
https://github.com/blinkbitcoin/spark-unilateral-exit/blob/main/docs/mainnet-exit-case-study.md
https://blossom.primal.net/3771944c21849fd461b5a1a2cd13515755f1d232690ea5b633fd2b7c95f5135c.png
#joinmarket #joinmarket-ng
#nevent1q…9ncu
to add the special logging entries mentioned add these to your bitcoinconf:
debug=bench
debug=net
then restart sbitcoind:
sudo systemctl restart sbitcoind
If you are up for doing some Bitcoin research, you can join this experiment on the default signet chain on Wednesday:
https://delvingbitcoin.org/t/consensus-cleanup-demo-of-slow-blocks-on-signet/2367
Syncing signet on an RPi5 should take less than an hour (but allow a little more time just in case).
You can start the signet bitcoind instance on a Raspiblitz by running:
config.scripts/bitcoin.install.sh on signet
You will have these aliases set in terminal for easy monitoring and configuration:
alias sbitcoin-cli="sudo -u bitcoin /usr/local/bin/bitcoin-cli -rpcport=38332"
alias sbitcoinlog="sudo -u bitcoin tail -n 30 -f /mnt/hdd/app-data/bitcoin/signet/debug.log"
alias bitcoinconf="sudo nano /mnt/hdd/app-data/bitcoin/bitcoin.conf"
The systemd service is called: sbitcoind
so can check and restart with:
systemctl status sbitcoind
sudo systemctl restart sbitcoind
#raspiblitz #signet #bitcoin
https://image.nostr.build/fa32132bd4c857b592a5fe08c4e7d7ebd293dd22a27fa79194188a12b55ee9bf.png
Is this USA₮ pronounced you-sat? https://tether.io/news/tether-announces-the-launch-of-usat-the-federally-regulated-dollar-backed-stablecoin-made-in-america/
Are you thinking what I am thinking?
#satsthestandard
Let's try the new Joinmarket implementation on signet first
PR for #Raspiblitz: https://github.com/raspiblitz/raspiblitz/pull/5240
#naddr1qq…8hlp
Opencode web running as a systemd service, exposed via Tailscale is a great alternative to clawdbot if your main usecase is coding.
#nevent1q…ggrh
Google Pay is the only significant thing which does not work with GrapheneOS, but you can use a smartwatch.
Tested Garmin Pay so far, no problems.
Great track @npub1p2p…6rap, stuck on repeat: https://wavlake.com/track/a6094897-0a5c-49e3-b72b-08ba6bcb4f4d
Can't stop the algo to gaslight about the current thing.
I come to X only to unfollow people. Maybe mute too.
I really do not think that the nationalism is really meaningful in this technological advancement.
Sorry. But this is the world cup of football. What does this have to do with the US?
And yea it is clear those teams all would rather like to be in the final. This has nothing to do with the US.
Block 958536
2 - high priority
1 - medium priority
1 - low priority
1 - no priority
1 - purging
#bitcoinfees #mempool
This is awesome!
Also please let us set a gap limit or specify the number of monitored addresses for both the deposit and change accounts.
Some well used wallets will thank you!
Yeah, like that’s gonna work. Most people cannot tie their shoes
Block 958536
2 - high priority
1 - medium priority
1 - low priority
1 - no priority
1 - purging
#bitcoinfees #mempool
Check out the Sparrow Server, it has a fully featured Terminal UI:
https://sparrowwallet.com/download/
@nprofile…wzu8 is your automation or client broken? I see you almost every day multiple times in my notifications
https://fishcake.blossom.band/f1410c2ec91e5f793c7dcce022f88a52f47df8094e17b638f4767850760596c8.jpg
Real life Timon riding Pumbaa in the African savanna. 😂
https://birobela.blossom.band/abb97c7e5863f6834f3c99073df28c0c5db28b661ba3bc18d54dd68bb5ef78bb.mp4
Looks all right in Amethyst.
Hot take: people complain about the government because they are incapable of facing their own problems.
Maybe that is also true, but the government really is a pain in the ass in how they regulate our lives , attempt to limit freedoms, start wars, and tax everything. That’s much bigger than my problems. That’s everyone’s problem haha
🤖 Tracking strings detected and removed!
🔗 Clean URL(s):
https://open.spotify.com/track/3sE2VokkeH68napilCny6J
❌ Removed parts:
si=yFvmhfBUQ1y0Y0NJy_cxYA
utm_source=copy-link