Unilateral-exit readiness
Across Primal, Radar, Wallet of Satoshi, and Bringin, control claims were not matched by a demonstrated unilateral-exit path
Across Primal, Radar, Wallet of Satoshi, and Bringin, public control or recovery claims were not matched in the reviewed surfaces by a demonstrated complete user-operated exit. Closed-source findings are limited to published claims, instructions, and observed interfaces rather than unseen implementation code. 23561011141618
What the evidence shows
Technical and product details
- Primal
Primal's pinned Android and iOS UI says users fully control bitcoin, have sole custody through the recovery phrase, and now hold the keys. The source-visible pinned application and UI code contained no unilateral-exit or recovery-bundle flow. 12345618
Supporting material shown on this page
Primal AndroidRepository record · github.com · checked 2026-07-14 Primal Android control claimPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 1380 <string name="wallet_notice_upgrade_description_second">With one tap, we\'ll move your funds and full\ntransaction history to your new non-custodial\nwallet - so you fully control your bitcoin.\nQuestions? Check out our </string> 1381 <string name="wallet_notice_upgrade_faqs">FAQs</string>Primal Android custody claimsPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 1574 <string name="wallet_backup_disclaimer_part_one">Primal does not have access to the funds in your wallet. You have sole custody of your wallet via the recovery phrase. If you lose your recovery phrase, </string> 1575 <string name="wallet_backup_disclaimer_part_two">Primal will not be able to restore your funds.</string> 1576 <string name="wallet_backup_button_i_understand">I understand, backup wallet</string> 1577 <string name="wallet_backup_button_cancel">Cancel, I\'ll do this later</string> 1578 <string name="wallet_backup_seed_description_one">This is your wallet recovery phrase. To backup your wallet, simply write these words down in the correct order.</string>Primal iOSRepository record · github.com · checked 2026-07-14 Primal iOS backup claimPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 36 .font: UIFont.appFont(withSize: 18, weight: .bold), 37 .foregroundColor: UIColor.foreground, 38 .paragraphStyle: paragraphStyle, 39 .underlineStyle: NSUnderlineStyle.single.rawValue 40 ]) 41 secondText.append(.init(string: " Primal does not have access to the funds in your wallet. You have sole custody of your wallet via the recovery phrase. If you lose your recovery phrase, ", attributes: [ 42 .font: UIFont.appFont(withSize: 18, weight: .regular),Primal iOS confirmation claimPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 24 let label = UILabel("Your wallet has been backed up. You now hold the keys to your bitcoin! Please confirm the three points below.", color: .foreground, font: .appFont(withSize: 18, weight: .regular), multiline: true) 25 26 let checkViews = [ 27 BackupWalletCheckView(text: "My funds are not held by Primal"), 28 BackupWalletCheckView(text: "If my device gets lost or stolen, the only way to recover my funds is via the wallet recovery phrase"), 29 BackupWalletCheckView(text: "It is my sole responsibility to keep my recovery phrase safe") 30 ]consumer-wallet exit audit manifestReproducible audit manifest · Review of Spark's trust model · checked 2026-07-14 - Radar
Radar says it never holds the money and that no one can freeze or seize it but the user. Its recovery UI says the seed can restore the balance in Cake or another Spark wallet. Both pinned apps used Breez 0.18.0, and neither application's source-visible integration or UI contained the complete exit flow. 7891011121318
Supporting material shown on this page
Radar AndroidRepository record · github.com · checked 2026-07-14 Radar Android Breez versionPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 191breezsdk = "breez_sdk_spark:bindings-android:0.18.0"Radar iOSRepository record · github.com · checked 2026-07-14 Radar control claimPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 15Radar is built on Signal's trusted messaging network, so the people you already talk to come with you. No rebuilding your network. No new account necessary. 16 17### Private by default, yours by design 18 19• End-to-end encrypted — built on Signal's battle-tested protocol for encryption you can actually trust. 20• Self-custodial — your keys, your coins. Radar never holds your money; no one can freeze, seize, or lose it but you. 21• Instant Bitcoin payments over the Lightning Network, settled in seconds.Radar recovery languagePinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 8332/* Title of confirmation alert when discarding recovery phrase. */ 8333"SETTINGS_PAYMENTS_PASSPHRASE_DISCARD_CONFIRMATION_TITLE" = "Continue Without Saving?"; 8334 8335/* Explanation of the 'payments passphrase' in the 'view payments passphrase' settings. */ 8336"SETTINGS_PAYMENTS_PASSPHRASE_EXPLANATION" = "Your seed phrase isn't required to keep your funds safe — Radar handles recovery automatically. Saving it gives you extra peace of mind and lets you restore your balance in Cake Wallet or any other Spark-compatible wallet.";Radar iOS Breez versionPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 5 "description": "Local wrapper around the upstream 0.18.0 tag. The upstream BreezSdkSpark.podspec is frozen at spec.version = 0.11.0-dev2 since the 0.11.0 tag, which forces CocoaPods to pull a mismatched FFI binary. This podspec depends on our locally vendored breez_sdk_sparkFFI = 0.18.0 instead. R 6 "homepage": "https://breez.technology", 7 "documentation_url": "https://sdk-doc-spark.breez.technology", 8 "license": { "type": "MIT" }, 9 "authors": { "Breez": "contact@breez.technology" }, 10 "platforms": { "ios": "13.0" }, 11 "source": {Radar App StoreWeb source · apps.apple.com · checked 2026-07-14 consumer-wallet exit audit manifestReproducible audit manifest · Review of Spark's trust model · checked 2026-07-14 - Wallet of Satoshi
Its disclosure says users retain full authority over private keys and describes unilateral exit as a permissionless alternative with longer processing and higher costs. Wallet of Satoshi publishes neither its mobile-app source nor a complete consumer unilateral-exit procedure. 1415
Supporting material shown on this page
Wallet of Satoshi disclosureWeb source · walletofsatoshi.com · checked 2026-07-14 Wallet of Satoshi Play listingWeb source · play.google.com · checked 2026-07-14 - Bringin
Bringin says every v2 wallet ships with pre-signed exits and can leave Spark without Bringin's cooperation. Its mobile app is closed source, its public GitHub organization does not contain that app, and its launch material provides no operational exit procedure. 1617
Supporting material shown on this page
Bringin v2 launchBlog or announcement · bringin.app · checked 2026-07-14 Bringin public GitHub organizationRepository record · github.com · checked 2026-07-14
Product-level detail
What was publicly verifiable for the four named products
The conclusions below are reproduced here so the reader does not need to open the separate implementation review. Each result remains limited to the named source snapshot, published binary, or public product surface.
Primal
Surface reviewed: public android and ios source
No source-visible recovery-bundle handling or complete operatorless package-broadcast, monitoring, refund, and sweep UI flow was found in either pinned application.
Capabilities that were present: seed backup and live-network wallet restore; ordinary Breez Spark wallet operations.
The result is bounded to the two pinned public repositories and does not test an unpublished build.
Radar
Surface reviewed: public android and ios source
Neither pinned app exposed current-exit-state export or the complete CPFP, ordered package, durable monitoring, timelock, refund, and sweep workflow.
Capabilities that were present: seed backup and live-network restoration in a Spark-compatible wallet; ordinary Breez Spark wallet operations.
The result is bounded to the two pinned public repositories.
Wallet of Satoshi
Surface reviewed: public documentation and source availability
No published consumer procedure was found for exporting current exit state and executing the complete operatorless workflow. Because the app is closed source, this is a public-verifiability and documented-product finding only.
Capabilities that were present: published description of unilateral exit as a permissionless alternative; seed-backup and ordinary wallet-restore guidance.
No source-code absence claim is made.
Bringin
Surface reviewed: public documentation and source availability
Bringin's public organization did not contain the mobile application, and the reviewed launch and product material supplied no operational procedure for the eight-stage workflow. This does not test private application code.
Capabilities that were present: first-party claim that each wallet ships with pre-signed exits and can leave without Bringin cooperation.
No source-code absence claim is made because Bringin does not publish the reviewed mobile-app source.
See versions, search method, artifact hashes, and full review limits.
Scope control
What this does not establish
- These are dated claim-to-demonstrated-product comparisons. Seed restoration while Spark services remain available is distinct from outage recovery. Open-source absence findings are limited to the pinned commits and audit terms. Primal iOS pins an opaque compiled
PrimalShared.xcframework, so that result is not a full transitive-binary audit. The Radar iOS archive likewise omits the Breez FFI binary and Pods submodule, so its result is limited to the source-visible integration and UI. Wallet of Satoshi and Bringin findings are limited to public claims, source availability, and published instructions. They do not prove that private or later implementations are impossible. 181416
Sources and excerpts
Primary sources
The relevant details and available source-code excerpts appear alongside the claims above. This list preserves the complete original-source trail for independent verification.
Primal Android
Repository record · github.com · Pinned or archival · checked 2026-07-14
Primal Android control claim
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Primal Android custody claims
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Primal iOS
Repository record · github.com · Pinned or archival · checked 2026-07-14
Primal iOS backup claim
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Primal iOS confirmation claim
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Radar Android
Repository record · github.com · Pinned or archival · checked 2026-07-14
Radar Android Breez version
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Radar iOS
Repository record · github.com · Pinned or archival · checked 2026-07-14
Radar control claim
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Radar recovery language
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Radar iOS Breez version
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Radar App Store
Web source · apps.apple.com · Live source · checked 2026-07-14
Wallet of Satoshi disclosure
Web source · walletofsatoshi.com · Live source · checked 2026-07-14
Wallet of Satoshi Play listing
Web source · play.google.com · Live source · checked 2026-07-14
Bringin v2 launch
Blog or announcement · bringin.app · Live source · checked 2026-07-14
Bringin public GitHub organization
Repository record · github.com · Live source · checked 2026-07-14
consumer-wallet exit audit manifest
Reproducible audit manifest · Review of Spark's trust model · Pinned or archival · checked 2026-07-14
How sources, absence findings, and limitations were evaluated