{"id":609,"date":"2026-10-15T09:26:06","date_gmt":"2026-10-15T09:26:06","guid":{"rendered":"https:\/\/getbitcoin.guide\/articles\/?p=609"},"modified":"2026-10-24T09:29:56","modified_gmt":"2026-10-24T09:29:56","slug":"unstoppable-wallet","status":"publish","type":"post","link":"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/","title":{"rendered":"Unstoppable Wallet: The Open Source App, Not the Namesakes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Unstoppable Wallet is the free, MIT licensed, self custody phone app from Horizontal Systems, last updated on 14 October 2026. Three other products share the name: a smart contract wallet, a domain company\u2019s wallet and a memecoin. Its audit dates from 2021, and the iPhone build cannot be independently verified.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"unstoppable-wallet\" data-minutes=\"12\">\n<style>.msq-audio{margin:1.25em 0 1.75em;padding:16px 18px;background:#EEF3F8;border:1px solid #CBD8E6;border-radius:12px}\n.msq-audio-lead{margin:0 0 8px;font-size:.95em}.msq-audio audio{width:100%;margin:0 0 12px;display:block}\n.msq-toc-title{margin:0 0 6px;font-weight:700}.msq-toc ol{margin:0;padding:0;list-style:none}\n.msq-toc li{display:flex;gap:10px;align-items:center;padding:6px 6px;border-bottom:1px solid #CBD8E6;border-radius:8px}\n.msq-toc li:last-child{border-bottom:0}.msq-toc li.is-active{background:#fff}\n.msq-toc-play{flex:0 0 auto;width:30px;height:30px;border-radius:50%;border:0;background:#1F4E79;color:#fff;font:inherit;font-size:.72em;line-height:30px;padding:0;cursor:pointer}\n.msq-toc-play.is-playing{background:#B4531A}\n.msq-toc-time{flex:0 0 auto;min-width:3.1em;font-variant-numeric:tabular-nums;color:#4A5560;font-size:.9em}\n.msq-toc a{color:#1B1F24;text-decoration:none;line-height:1.35}.msq-toc li.is-active a{font-weight:700;color:#1F4E79}\n.msq-audio-note{margin:10px 0 0;font-size:.82em;color:#4A5560}\nh2.wp-block-heading[id]{scroll-margin-top:24px}\n.msq-hplay{display:inline-block;vertical-align:middle;width:26px;height:26px;margin:0 0 0 10px;border-radius:50%;border:0;background:#1F4E79;cursor:pointer;padding:0;position:relative;top:-2px}\n.msq-hplay::before{content:'\u25b6\ufe0e';display:block;color:#fff;font-size:11px;line-height:26px;text-align:center}\n.msq-hplay.is-playing{background:#B4531A}.msq-hplay.is-playing::before{content:'\u2016';font-size:13px;font-weight:700}\n.msq-bar{position:fixed;left:0;right:0;bottom:0;z-index:9000;display:flex;align-items:center;gap:10px;padding:8px 12px;padding-bottom:calc(8px + env(safe-area-inset-bottom));background:#FFFFFF;border-top:1px solid #CBD8E6;box-shadow:0 -4px 16px rgba(0,0,0,.08);font-size:.92em;color:#1B1F24;transition:transform .2s ease}\n.msq-bar.is-hidden{transform:translateY(130%)}\n.msq-bar-play{display:inline-flex;align-items:center;gap:8px;border:0;border-radius:999px;background:#1F4E79;color:#fff;font:inherit;font-weight:700;padding:8px 14px 8px 12px;cursor:pointer;white-space:nowrap}\n.msq-bar-play.is-playing{background:#B4531A}\n.msq-bar-icon::before{content:'\u25b6\ufe0e';font-size:12px}.msq-bar-play.is-playing .msq-bar-icon::before{content:'\u2016';font-size:14px;font-weight:700}\n.msq-bar-chapter{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.msq-bar-time{flex:0 0 auto;font-variant-numeric:tabular-nums;color:#4A5560;font-size:.9em}\n.msq-bar-rate,.msq-bar-close{flex:0 0 auto;border:1px solid #CBD8E6;background:#fff;color:#1B1F24;font:inherit;font-size:.85em;line-height:1;border-radius:8px;padding:7px 9px;cursor:pointer}\n.msq-bar-close::before{content:'\u2715'}\n.msq-bar.msq-bar-pill{left:auto;right:14px;bottom:14px;padding:6px;padding-bottom:6px;border:1px solid #CBD8E6;border-radius:999px;box-shadow:0 6px 20px rgba(0,0,0,.15)}\n.msq-bar.msq-bar-pill .msq-bar-chapter,.msq-bar.msq-bar-pill .msq-bar-time,.msq-bar.msq-bar-pill .msq-bar-rate{display:none}\nbody.msq-has-bar{padding-bottom:76px}\n@media (max-width:600px){.msq-bar-time{display:none}.msq-bar{gap:8px;padding-left:10px;padding-right:10px}}\n.msq-s.msq-now{background:#EEF3F8;box-shadow:0 2px 0 #1F4E79;border-radius:2px}\ntr.msq-now td,tr.msq-now th{background:#EEF3F8;box-shadow:inset 0 -2px 0 #1F4E79}\n@media (hover:hover){.msq-s,tr[data-i]{cursor:pointer}.msq-s:hover{background:#EEF3F8}}<\/style>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"AudioObject\",\"@id\":\"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/#audio\",\"name\":\"Unstoppable Wallet: The Open Source App, Not the Namesakes, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 15 October 2026.\",\"contentUrl\":\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/unstoppable-wallet-audio-202610151500.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT11M51S\",\"uploadDate\":\"2026-10-15\",\"inLanguage\":\"en-GB\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"Unstoppable Wallet: The Open Source App, Not the Namesakes\",\"startOffset\":0,\"endOffset\":43},{\"@type\":\"Clip\",\"name\":\"Which Unstoppable wallet is this page about?\",\"startOffset\":43,\"endOffset\":176,\"url\":\"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/#which-unstoppable-wallet-is-this-page-about\"},{\"@type\":\"Clip\",\"name\":\"Is Unstoppable Wallet open source and verifiable?\",\"startOffset\":176,\"endOffset\":323,\"url\":\"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/#is-unstoppable-wallet-open-source-and-verifiable\"},{\"@type\":\"Clip\",\"name\":\"What did the security audits of Unstoppable Wallet find?\",\"startOffset\":323,\"endOffset\":472,\"url\":\"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/#what-did-the-security-audits-of-unstoppable-wallet-find\"},{\"@type\":\"Clip\",\"name\":\"What security features does Unstoppable Wallet actually have?\",\"startOffset\":472,\"endOffset\":554,\"url\":\"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/#what-security-features-does-unstoppable-wallet-actually-have\"},{\"@type\":\"Clip\",\"name\":\"What do users report on Unstoppable Wallet\u2019s GitHub?\",\"startOffset\":554,\"endOffset\":662,\"url\":\"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/#what-do-users-report-on-unstoppable-wallet-s-github\"},{\"@type\":\"Clip\",\"name\":\"How do you check you have the real Unstoppable Wallet app?\",\"startOffset\":662,\"endOffset\":711,\"url\":\"https:\/\/getbitcoin.guide\/articles\/unstoppable-wallet\/#how-do-you-check-you-have-the-real-unstoppable-wallet-app\"}],\"contentSize\":\"5.0 MB\"}<\/script>\n<p class=\"msq-audio-lead\"><strong>Listen to this article<\/strong>, about 12 minutes. A synthetic voice reads the article and announces each section title as it begins; tables are read row by row and the questions at the end are left out.<\/p>\n<audio class=\"msq-audio-player\" controls preload=\"metadata\" src=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/unstoppable-wallet-audio-202610151500.mp3\"><\/audio>\n<nav class=\"msq-toc\" aria-label=\"In this article\"><p class=\"msq-toc-title\">In this article<\/p>\n<ol>\n<li data-start=\"0.0\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"0.0\" aria-label=\"Play from: Unstoppable Wallet: The Open Source App, Not the Namesakes\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">Unstoppable Wallet: The Open Source App, Not the Namesakes<\/a><\/li>\n<li data-start=\"43.46\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"43.46\" aria-label=\"Play from: Which Unstoppable wallet is this page about?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:43<\/span><a href=\"#which-unstoppable-wallet-is-this-page-about\">Which Unstoppable wallet is this page about?<\/a><\/li>\n<li data-start=\"175.64\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"175.64\" aria-label=\"Play from: Is Unstoppable Wallet open source and verifiable?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">2:56<\/span><a href=\"#is-unstoppable-wallet-open-source-and-verifiable\">Is Unstoppable Wallet open source and verifiable?<\/a><\/li>\n<li data-start=\"322.62\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"322.62\" aria-label=\"Play from: What did the security audits of Unstoppable Wallet find?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">5:23<\/span><a href=\"#what-did-the-security-audits-of-unstoppable-wallet-find\">What did the security audits of Unstoppable Wallet find?<\/a><\/li>\n<li data-start=\"471.84\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"471.84\" aria-label=\"Play from: What security features does Unstoppable Wallet actually have?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">7:52<\/span><a href=\"#what-security-features-does-unstoppable-wallet-actually-have\">What security features does Unstoppable Wallet actually have?<\/a><\/li>\n<li data-start=\"554.38\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"554.38\" aria-label=\"Play from: What do users report on Unstoppable Wallet\u2019s GitHub?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">9:14<\/span><a href=\"#what-do-users-report-on-unstoppable-wallet-s-github\">What do users report on Unstoppable Wallet\u2019s GitHub?<\/a><\/li>\n<li data-start=\"662.4\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"662.4\" aria-label=\"Play from: How do you check you have the real Unstoppable Wallet app?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">11:02<\/span><a href=\"#how-do-you-check-you-have-the-real-unstoppable-wallet-app\">How do you check you have the real Unstoppable Wallet app?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 15 October 2026 from the article as published that day. Press a chapter to jump there; the highlighted line is what is playing. A play button sits beside every section heading, and once you scroll past this player a bar at the bottom of the screen keeps the controls in reach. Tap or click any sentence to hear the reading start from there.<\/p>\n<script>var MSQ_SENT = [[0.0,\"h\",\"unstoppablewallettheopen\",48],[4.52,\"p\",\"unstoppablewalletisthefr\",103],[13.72,\"p\",\"threeotherproductssharet\",83],[20.6,\"p\",\"itsauditdatesfrom2021and\",67],[25.92,\"p\",\"onthispageatablesettinga\",214],[43.46,\"h\",\"whichunstoppablewalletis\",37],[46.26,\"p\",\"searchforunstoppablewall\",122],[54.3,\"p\",\"thispagecoversoneofthemt\",100],[61.94,\"p\",\"itsandroidpackagenameisi\",136],[72.46,\"p\",\"theotherthreeturnupinthe\",74],[77.82,\"p\",\"hereiswhateachoneisreado\",38],[82.7,\"t\",\"unstoppablewalletbyhoriz\",183],[100.58,\"t\",\"theunstoppablewalletsmar\",225],[121.3,\"t\",\"unstoppabledomainswallet\",178],[136.42,\"t\",\"asolanamemecoin\",190],[153.7,\"p\",\"twowarningsthatcomestrai\",41],[156.38,\"p\",\"ifapagetellsyouunstoppab\",97],[163.26,\"p\",\"andifanythingcalledunsto\",89],[170.26,\"p\",\"thissitewillnottellyouwh\",56],[175.64,\"h\",\"isunstoppablewalletopens\",42],[178.84,\"p\",\"opensourceyes\",13],[180.48,\"p\",\"verifiableonlypartlyandt\",43],[184.56,\"p\",\"bothgithubrepositoriesca\",161],[202.12,\"p\",\"the052notesaddxrparedesi\",84],[210.04,\"p\",\"opencodeonlyhelpsiftheap\",50],[213.72,\"p\",\"thatiswhatwalletscrutiny\",72],[219.08,\"p\",\"itspagereadon15october20\",100],[227.72,\"p\",\"thatistrueofeveryiphonew\",51],[232.32,\"p\",\"forandroiditliststhelate\",100],[242.8,\"p\",\"anolderversionofthepager\",80],[250.04,\"p\",\"wefoundnopublishedreprod\",66],[254.44,\"t\",\"googleplayorthegithubrel\",141],[271.56,\"t\",\"fdroid\",144],[287.36,\"t\",\"appleappstore\",129],[301.36,\"p\",\"thefdroidlistingaddsoneh\",155],[312.48,\"p\",\"itdoesnottouchyourkeysbu\",60],[316.84,\"p\",\"ourguidetoopensourcecryp\",85],[322.62,\"h\",\"whatdidthesecurityaudits\",47],[326.14,\"p\",\"oneauditoftheappitselfan\",32],[329.54,\"p\",\"certikranawhiteboxpenetr\",94],[336.18,\"p\",\"thereportisdated10decemb\",117],[346.98,\"p\",\"certiksownpressreleaseof\",138],[359.58,\"p\",\"bothsaytheteamdealtwithe\",72],[364.78,\"p\",\"thattestcoveredtheappasi\",39],[368.22,\"p\",\"moneroxrptheswapscreensa\",89],[376.18,\"p\",\"theotherrunningcheckisab\",61],[381.78,\"p\",\"on15october2026itlisteda\",120],[394.7,\"p\",\"earlierversionsofthesame\",82],[400.98,\"p\",\"wecouldnotfindareasonfor\",30],[402.86,\"t\",\"certikpenetrationtest\",121],[417.86,\"t\",\"walletscrutinybuildcheck\",92],[429.62,\"t\",\"immunefibugbounty\",91],[442.42,\"t\",\"chainsecurityaudit\",127],[455.78,\"p\",\"thelastrowistheoneaffili\",93],[462.14,\"p\",\"thechainsecurityworkisre\",102],[469.18,\"p\",\"noneofitappliestothephon\",28],[471.84,\"h\",\"whatsecurityfeaturesdoes\",53],[475.48,\"p\",\"theofficialsiteliststhre\",53],[479.0,\"p\",\"duressmodedescribedthere\",139],[489.68,\"p\",\"torsupportroutestheappst\",82],[495.36,\"p\",\"andaddresspoisoningprote\",87],[501.24,\"p\",\"thesamesitestatesthatnou\",42],[504.64,\"p\",\"thewalletisbuiltfromasta\",174],[518.28,\"p\",\"swapsareanothermatterthe\",148],[529.44,\"p\",\"thoseservicesneverseeyou\",60],[533.56,\"p\",\"ifyouwanttoknowhowthatdi\",98],[540.48,\"p\",\"yourrecoveryphrasebelong\",73],[547.52,\"p\",\"nogenuineunstoppablesupp\",46],[550.68,\"p\",\"therecoveryphraseguideco\",40],[554.38,\"h\",\"whatdousersreportonunsto\",43],[557.7,\"p\",\"theandroidrepositoryhad1\",94],[567.74,\"p\",\"wereadsixoftheminfullon1\",36],[571.58,\"p\",\"thisistestimonywhatusers\",57],[576.3,\"p\",\"themostseriouscameinmarc\",145],[588.82,\"p\",\"theysentdetailstotheteam\",80],[595.54,\"p\",\"inaugust2025anotherusers\",186],[608.94,\"p\",\"monerocomesupagain\",18],[611.14,\"p\",\"inanoctober2025threadabo\",145],[622.3,\"p\",\"thesamethreadshowsoneuse\",81],[628.38,\"p\",\"neverpostarecoveryphrase\",61],[632.9,\"p\",\"noteverycomplaintholdsup\",24],[634.86,\"p\",\"ajune2026reportofatransa\",82],[641.86,\"p\",\"anaugust2026worrythatado\",149],[651.7,\"p\",\"wheretheaccountsagreewit\",164],[662.4,\"h\",\"howdoyoucheckyouhavether\",47],[665.52,\"p\",\"startfromthepublishernot\",33],[668.48,\"p\",\"followthestorelinksonuns\",84],[674.44,\"p\",\"onandroidcheckthepackage\",59],[680.12,\"p\",\"comparetheversionyouhave\",112],[688.4,\"p\",\"thendecidehowmuchyouaret\",37],[691.12,\"p\",\"aphonewalletthatholdsman\",144],[700.88,\"p\",\"ifprivacyistheattraction\",147]];\n(function(){\n  function init(){\n  var root = document.querySelector('.msq-audio'); if (!root) { return; }\n  var audio = root.querySelector('audio'), items = Array.prototype.slice.call(root.querySelectorAll('.msq-toc li'));\n  var starts = items.map(function(li){ return parseFloat(li.getAttribute('data-start')) || 0; });\n  var names = items.map(function(li){ return li.querySelector('a').textContent; });\n  var anchors = items.map(function(li){ var h = li.querySelector('a').getAttribute('href') || ''; return (h.charAt(0) === '#' && h !== '#top') ? document.getElementById(h.slice(1)) : null; });\n  var article = root.getAttribute('data-article') || location.pathname, minutes = root.getAttribute('data-minutes') || '';\n  var marks = {}, started = false, pausedAt = -1, closed = false, ended = false;\n  var RATES = [1, 1.25, 1.5], rate = 1;\n  try { var saved = parseFloat(localStorage.getItem('msq-audio-rate')); if (RATES.indexOf(saved) >= 0) { rate = saved; } } catch (e) {}\n  audio.playbackRate = rate;\n  function track(name, extra){ try { if (typeof gtag === 'function') { var p = { article: article }; for (var k in extra) { p[k] = extra[k]; } gtag('event', name, p); } } catch (e) {} }\n  function current(){ var t = audio.currentTime, idx = 0; for (var i = 0; starts.length > i; i += 1) { if (t + 0.25 >= starts[i]) { idx = i; } } return idx; }\n  function onScreen(){\n    var line = window.innerHeight \/ 3, idx = 0;\n    for (var i = 0; anchors.length > i; i += 1) { var el = anchors[i]; if (el && line >= el.getBoundingClientRect().top) { idx = i; } }\n    return idx;\n  }\n  function fmt(s){ s = Math.max(0, Math.round(s || 0)); var m = Math.floor(s \/ 60), r = s % 60; return m + ':' + (10 > r ? '0' : '') + r; }\n  function play(from, source){\n    if (from !== null) { audio.currentTime = from; }\n    var p = audio.play(); if (p && p.catch) { p.catch(function(){}); }\n    track(from === null ? 'audio_resume' : 'audio_chapter', { chapter: names[current()], start: Math.round(audio.currentTime), source: source });\n  }\n  var hbtns = anchors.map(function(el, i){\n    if (!el) { return null; }\n    var b = document.createElement('button'); b.type = 'button'; b.className = 'msq-hplay'; b.setAttribute('aria-label', 'Play this section: ' + names[i]);\n    b.addEventListener('click', function(){\n      if (!audio.paused && current() === i) { audio.pause(); track('audio_pause', { source: 'heading' }); return; }\n      play(starts[i], 'heading');\n    });\n    el.appendChild(b); return b;\n  });\n  var bar = document.createElement('div'); bar.className = 'msq-bar msq-bar-pill is-hidden'; bar.setAttribute('role', 'region'); bar.setAttribute('aria-label', 'Audio player');\n  var playBtn = document.createElement('button'); playBtn.type = 'button'; playBtn.className = 'msq-bar-play';\n  var icon = document.createElement('span'); icon.className = 'msq-bar-icon'; icon.setAttribute('aria-hidden', 'true');\n  var label = document.createElement('span'); label.className = 'msq-bar-label';\n  playBtn.appendChild(icon); playBtn.appendChild(label);\n  var chap = document.createElement('span'); chap.className = 'msq-bar-chapter';\n  var clock = document.createElement('span'); clock.className = 'msq-bar-time';\n  var rateBtn = document.createElement('button'); rateBtn.type = 'button'; rateBtn.className = 'msq-bar-rate'; rateBtn.setAttribute('aria-label', 'Playback speed');\n  var closeBtn = document.createElement('button'); closeBtn.type = 'button'; closeBtn.className = 'msq-bar-close'; closeBtn.setAttribute('aria-label', 'Close the audio bar');\n  bar.appendChild(playBtn); bar.appendChild(chap); bar.appendChild(clock); bar.appendChild(rateBtn); bar.appendChild(closeBtn);\n  document.body.appendChild(bar);\n  function showRate(){ rateBtn.textContent = (rate === 1 ? '1' : String(rate)) + 'x'; }\n  showRate();\n  rateBtn.addEventListener('click', function(){\n    rate = RATES[(RATES.indexOf(rate) + 1) % RATES.length]; audio.playbackRate = rate; showRate();\n    try { localStorage.setItem('msq-audio-rate', String(rate)); } catch (e) {}\n    track('audio_rate', { rate: rate });\n  });\n  closeBtn.addEventListener('click', function(){\n    closed = true; if (!audio.paused) { audio.pause(); } paint(); track('audio_bar_close', {});\n  });\n  function mode(){\n    if (!audio.paused) { return 'pause'; }\n    if (ended) { return 'again'; }\n    if (!started) { return 'listen'; }\n    return (pausedAt === onScreen()) ? 'resume' : 'section';\n  }\n  playBtn.addEventListener('click', function(){\n    var m = mode();\n    if (m === 'pause') { audio.pause(); track('audio_pause', { source: 'bar' }); return; }\n    if (m === 'again') { ended = false; play(0, 'bar'); return; }\n    if (m === 'resume') { play(null, 'bar'); return; }\n    play(starts[onScreen()], 'bar');\n  });\n  function paint(){\n    var idx = current(), playing = !audio.paused, m = mode();\n    items.forEach(function(li, i){\n      var on = (i === idx) && playing, b = li.querySelector('.msq-toc-play'), a = li.querySelector('a');\n      li.classList.toggle('is-active', on); b.classList.toggle('is-playing', on);\n      b.textContent = on ? '\u2016' : '\u25b6\ufe0e';\n      b.setAttribute('aria-label', (on ? 'Pause: ' : 'Play from: ') + a.textContent);\n    });\n    hbtns.forEach(function(b, i){ if (b) { var on = (i === idx) && playing; b.classList.toggle('is-playing', on); b.setAttribute('aria-label', (on ? 'Pause this section: ' : 'Play this section: ') + names[i]); } });\n    playBtn.classList.toggle('is-playing', playing);\n    label.textContent = m === 'pause' ? 'Pause' : m === 'again' ? 'Play again' : m === 'resume' ? 'Resume' : m === 'section' ? 'Play this section' : 'Listen, ' + minutes + ' min';\n    playBtn.setAttribute('aria-label', label.textContent);\n    chap.textContent = started ? names[(playing || m === 'resume') ? idx : onScreen()] : '';\n    clock.textContent = started ? fmt(audio.currentTime) + ' \/ ' + fmt(audio.duration) : '';\n    bar.classList.toggle('msq-bar-pill', !started);\n    var show = !closed && (started || 0 > root.getBoundingClientRect().bottom);\n    bar.classList.toggle('is-hidden', !show);\n    document.body.classList.toggle('msq-has-bar', show);\n  }\n  root.addEventListener('click', function(e){\n    var b = e.target.closest ? e.target.closest('.msq-toc-play') : null; if (!b) { return; }\n    var li = b.parentNode, s = parseFloat(b.getAttribute('data-start')) || 0;\n    if (!audio.paused && current() === items.indexOf(li)) { audio.pause(); track('audio_pause', { source: 'index' }); return; }\n    play(s, 'index');\n  });\n  audio.addEventListener('play', function(){ ended = false; closed = false; if (!started) { started = true; track('audio_play', { minutes: Math.round((audio.duration || 0) \/ 60) }); } paint(); });\n  audio.addEventListener('pause', function(){ pausedAt = current(); paint(); });\n  audio.addEventListener('timeupdate', function(){\n    paint();\n    if (audio.duration > 0) {\n      var pct = Math.floor(audio.currentTime \/ audio.duration * 100);\n      [25, 50, 75].forEach(function(m){ if (pct >= m && !marks[m]) { marks[m] = true; track('audio_progress', { percent: m }); } });\n    }\n  });\n  audio.addEventListener('ended', function(){ ended = true; track('audio_complete', {}); paint(); });\n  var ticking = false;\n  function onScroll(){ if (ticking) { return; } ticking = true; setTimeout(function(){ ticking = false; paint(); }, 80); }\n  window.addEventListener('scroll', onScroll, { passive: true }); window.addEventListener('resize', onScroll);\n  paint();\n  }\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }\n})();\n\n(function(){\n  function start(){\n    var root = document.querySelector('.msq-audio'), audio = root ? root.querySelector('audio') : null;\n    var map = (typeof MSQ_SENT !== 'undefined') ? MSQ_SENT : [];\n    if (!root || !audio || !map.length) { return; }\n    var scope = root.closest('main') || root.closest('article') || root.closest('.entry-content') || document.body;\n    var SKIP = '.msq-audio,.msq,.msq-tool,.msq-end,.msq-bar,script,style,noscript,figcaption,#rank-math-faq,.rank-math-block,nav,header,footer';\n    function norm(s){ return s.toLowerCase().replace(\/[^a-z0-9]+\/g, ''); }\n    var nodes = [], stream = '', walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT, null), n;\n    while ((n = walker.nextNode())) {\n      var el = n.parentElement; if (!el || el.closest(SKIP)) { continue; }\n      var raw = n.nodeValue, keep = [], norms = '';\n      for (var i = 0; raw.length > i; i += 1) { var c = raw.charAt(i).toLowerCase(); if (\/[a-z0-9]\/.test(c)) { keep.push(i); norms += c; } }\n      if (!norms) { continue; }\n      nodes.push({ node: n, a: stream.length, b: stream.length + norms.length, keep: keep });\n      stream += norms;\n    }\n    var segs = [], cursor = 0, lastRow = null;\n    map.forEach(function(m, idx){\n      var kind = m[1], f = m[2], len = m[3];\n      if (kind === 't') {\n        var rows = scope.querySelectorAll('tr'), after = !lastRow;\n        for (var r = 0; rows.length > r; r += 1) {\n          var tr = rows[r];\n          if (!after) { if (tr === lastRow) { after = true; } continue; }\n          var cell = tr.querySelector('td,th');\n          if (cell && norm(cell.textContent).indexOf(f) === 0) { tr.setAttribute('data-i', idx); lastRow = tr; break; }\n        }\n        return;\n      }\n      var p = stream.indexOf(f, cursor); if (0 > p) { return; }\n      segs.push({ i: idx, a: p, b: Math.min(p + len, stream.length) }); cursor = p + len;\n    });\n    var si = 0;\n    nodes.forEach(function(nd){\n      var frag = document.createDocumentFragment(), raw = nd.node.nodeValue, rawPos = 0, any = false;\n      for (var k = si; segs.length > k; k += 1) {\n        var sg = segs[k]; if (sg.a >= nd.b) { break; } if (nd.a >= sg.b) { continue; }\n        var s = Math.max(sg.a, nd.a), e = Math.min(sg.b, nd.b);\n        var rs = nd.keep[s - nd.a], re2 = nd.keep[e - nd.a - 1] + 1;\n        if (rs > rawPos) { frag.appendChild(document.createTextNode(raw.slice(rawPos, rs))); }\n        var span = document.createElement('span'); span.className = 'msq-s'; span.setAttribute('data-i', sg.i); span.textContent = raw.slice(rs, re2);\n        frag.appendChild(span); rawPos = re2; any = true;\n        if (sg.b > nd.b) { break; }\n      }\n      while (segs.length > si && nd.b >= segs[si].b) { si += 1; }\n      if (!any) { return; }\n      if (raw.length > rawPos) { frag.appendChild(document.createTextNode(raw.slice(rawPos))); }\n      nd.node.parentNode.replaceChild(frag, nd.node);\n    });\n    var starts = map.map(function(m){ return m[0]; }), curIdx = -1, lastUser = 0, timer = null, autoUntil = 0, dragging = false;\n    function idxAt(t){ var lo = 0, hi = starts.length; while (hi > lo + 1) { var mid = (lo + hi) >> 1; if (t + 0.15 >= starts[mid]) { lo = mid; } else { hi = mid; } } return (t + 0.15 >= starts[0]) ? lo : -1; }\n    function setNow(i){\n      if (i === curIdx) { return; }\n      Array.prototype.forEach.call(scope.querySelectorAll('.msq-now'), function(el){ el.classList.remove('msq-now'); });\n      curIdx = i; if (0 > i) { return; }\n      var els = scope.querySelectorAll('[data-i=\"' + i + '\"]'); if (!els.length) { return; }\n      Array.prototype.forEach.call(els, function(el){ el.classList.add('msq-now'); });\n      var r = els[0].getBoundingClientRect(), now = Date.now();\n      if (!dragging && now > lastUser + 2500 && (80 > r.top || r.bottom > window.innerHeight - 140)) {\n        var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n        autoUntil = now + (reduce ? 400 : 1600);\n        els[0].scrollIntoView({ block: 'center', behavior: reduce ? 'auto' : 'smooth' });\n      }\n    }\n    function tick(){ if (!audio.paused) { setNow(idxAt(audio.currentTime)); } }\n    function userScrolled(){ lastUser = Date.now(); }\n    ['wheel', 'touchmove', 'keydown'].forEach(function(ev){ window.addEventListener(ev, userScrolled, { passive: true }); });\n    window.addEventListener('scroll', function(){ if (Date.now() > autoUntil) { userScrolled(); } }, { passive: true });\n    window.addEventListener('mousedown', function(e){ if (e.clientX >= document.documentElement.clientWidth) { dragging = true; userScrolled(); } }, { passive: true });\n    window.addEventListener('mouseup', function(){ if (dragging) { dragging = false; userScrolled(); } }, { passive: true });\n    audio.addEventListener('play', function(){ if (timer) { clearInterval(timer); } timer = setInterval(tick, 150); tick(); });\n    audio.addEventListener('pause', function(){ if (timer) { clearInterval(timer); timer = null; } });\n    scope.addEventListener('click', function(e){\n      if (e.target.closest('a, button, input, select, textarea, label, summary, .msq, .msq-tool, .msq-end, .msq-audio, .msq-bar')) { return; }\n      var sel = window.getSelection ? String(window.getSelection()) : '';\n      if (sel && sel.trim()) { return; }\n      var el = e.target.closest('[data-i]'); if (!el) { return; }\n      var i = parseInt(el.getAttribute('data-i'), 10); if (isNaN(i)) { return; }\n      if (!audio.paused && i === curIdx) { return; }\n      lastUser = Date.now();\n      audio.currentTime = starts[i];\n      var p = audio.play(); if (p && p.catch) { p.catch(function(){}); }\n      try { if (typeof gtag === 'function') { gtag('event', 'audio_chapter', { article: location.pathname, source: 'sentence', start: Math.round(starts[i]) }); } } catch (err) {}\n    });\n    audio.addEventListener('seeked', tick);\n    audio.addEventListener('ended', function(){ setNow(-1); });\n  }\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start); } else { start(); }\n})();<\/script>\n<\/div>\n\n\n\n<p class=\"msq-hook wp-block-paragraph\">On this page: a table setting apart the four products called Unstoppable with a source for each, the CertiK and WalletScrutiny results with their dates, the release cadence read from GitHub on 15 October 2026, and six user reports from the app\u2019s own issue tracker.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"unstoppable-wallet\" data-category=\"self custody and wallets\" data-list=\"1\">\n<style>.msq,.msq-hook,.msq-box,.msq-end,.msq-tool{--msq-accent:#1F4E79;--msq-accent-text:#FFFFFF;--msq-line:#CBD8E6;--msq-warn:#B4531A;--msq-muted:#4A5560;--msq-tint:#EEF3F8;--msq-base:#FFFFFF}\n.msq{margin:1.25em 0 1.75em}\n.msq-hook{border-left:3px solid var(--msq-accent);padding:6px 14px;color:var(--msq-muted);font-size:.97em}\n.msq-box{background:var(--msq-tint);border:1px solid var(--msq-line);border-radius:12px;padding:0}\n.msq-box>summary{cursor:pointer;list-style:none;padding:14px 18px;font-weight:700;color:var(--msq-accent)}\n.msq-box>summary::-webkit-details-marker{display:none}\n.msq-box>summary::before{content:\"+\";display:inline-block;width:1.1em;font-weight:800}\n.msq-box[open]>summary::before{content:\"\\00d7\"}\n.msq-body{padding:2px 18px 18px}\n.msq-intro{margin:0 0 12px;font-size:.95em;color:var(--msq-muted)}\n.msq-list{margin:0;padding:0;list-style:none}\n.msq-q{margin:0 0 18px;padding:0}\n.msq-question{font-weight:700;margin:0 0 8px}\n.msq-options{display:flex;flex-direction:column;gap:8px}\n.msq-opt{text-align:left;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:8px;padding:10px 12px;font:inherit;font-size:.95em;color:inherit;cursor:pointer;line-height:1.35}\n.msq-opt:hover{border-color:var(--msq-accent)}\n.msq-opt[disabled]{cursor:default}\n.msq-opt.is-right{border-color:var(--msq-accent);background:var(--msq-line);font-weight:700}\n.msq-opt.is-wrong{border-color:var(--msq-warn);color:var(--msq-warn)}\n.msq-explain{margin:8px 0 0;font-size:.92em;padding:10px 12px;border-left:3px solid var(--msq-accent);background:var(--msq-base);border-radius:0 8px 8px 0}\n.msq-explain[hidden]{display:none}\n.msq-verdict{font-weight:700}\n.msq-result{margin-top:14px;padding:14px 16px;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:10px}\n.msq-result[hidden]{display:none}\n.msq-result h3{margin:0 0 6px;font-size:1.1em}\n.msq-result p{margin:0 0 8px}\n.msq-jump{margin:0 0 8px;padding-left:1.2em}\n.msq-form{margin-top:10px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}\n.msq-form input[type=email]{flex:1 1 220px;padding:10px 12px;border:1px solid var(--msq-muted);border-radius:8px;font:inherit;background:#fff}\n.msq-btn{background:var(--msq-accent);color:var(--msq-accent-text);border:0;border-radius:8px;padding:11px 18px;font:inherit;font-weight:700;cursor:pointer}\n.msq-btn:hover{filter:brightness(.92)}\n.msq-btn[disabled]{opacity:.7;cursor:default}\n.msq-no{font-size:.9em;color:var(--msq-muted);margin-left:4px}\n.msq-privacy{margin:6px 0 0;font-size:.82em;color:var(--msq-muted);flex-basis:100%}\n.msq-hp{position:absolute;left:-5000px;width:1px;height:1px;overflow:hidden}\n.msq-msg{margin:8px 0 0;font-size:.92em}\n.msq-end{margin:1.5em 0;padding:18px;border:1px solid var(--msq-accent);border-radius:12px;text-align:center;background:var(--msq-tint)}\n.msq-end p{margin:0 0 12px}\n.msq-end .msq-body{text-align:left;padding:16px 0 0}\n.msq-end .msq-start-test[hidden]{display:none}\n.msq-tool{margin:1.5em 0;padding:18px 20px;background:var(--msq-tint);border:1px solid var(--msq-line);border-radius:12px}\n.msq-tool h3{margin:0 0 6px;font-size:1.15em}\n.msq-tool p{margin:0 0 10px}\n.msq-tool .msq-note{font-size:.85em;color:var(--msq-muted);margin:10px 0 0}\n.msq-check label{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px solid var(--msq-line);cursor:pointer;line-height:1.4}\n.msq-check label:last-of-type{border-bottom:0}\n.msq-check input{margin-top:5px;flex:0 0 auto;width:18px;height:18px;accent-color:var(--msq-accent)}\n.msq-check-count{font-weight:700;margin:10px 0 0}\n.msq-verdict-box{margin:12px 0 0;padding:10px 14px;border-radius:8px;background:var(--msq-base);border-left:3px solid var(--msq-warn)}\n.msq-verdict-box[hidden]{display:none}\n.msq-calc{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}\n.msq-calc label{display:flex;flex-direction:column;gap:4px;font-size:.92em}\n.msq-calc input,.msq-calc select{padding:8px 10px;border:1px solid var(--msq-muted);border-radius:8px;font:inherit;background:#fff}\n.msq-calc-out{grid-column:1 \/ -1;margin-top:6px;padding:12px 14px;background:var(--msq-base);border-radius:8px;border:1px solid var(--msq-line)}\n.msq-calc-out strong{font-size:1.15em}\n.msq-choose label{display:block;padding:9px 12px;margin:0 0 8px;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:8px;cursor:pointer}\n.msq-choose input{margin-right:8px;accent-color:var(--msq-accent)}\n.msq-choice-result{margin-top:10px;padding:12px 14px;background:var(--msq-base);border-left:3px solid var(--msq-accent);border-radius:0 8px 8px 0}\n.msq-choice-result[hidden]{display:none}\n@media (max-width:600px){.msq-calc{grid-template-columns:1fr}}\nh2.wp-block-heading[id]{scroll-margin-top:24px}<\/style>\n<noscript><style>.msq-explain{display:block !important}<\/style><\/noscript>\n<details class=\"msq-box\">\n<summary>Think you already know this? Five questions, one minute.<\/summary>\n<div class=\"msq-body\">\n<p class=\"msq-intro\">Every answer is on this page. Answer from what you know now; the page fills in the rest.<\/p>\n<ol class=\"msq-list\">\n<li class=\"msq-q\" data-q=\"1\" data-answer=\"b\" data-title=\"Which Unstoppable wallet is this page about?\" data-section=\"#which-unstoppable-wallet-is-this-page-about\">\n<p class=\"msq-question\">1. Which Unstoppable product did ChainSecurity audit on 7 February 2025?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">The Horizontal Systems phone app<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">An Ethereum smart contract wallet with social recovery<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">The Unstoppable Domains Lite Wallet<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/www.chainsecurity.com\/security-audit\/unstoppable-wallet\" target=\"_blank\" rel=\"noopener\">ChainSecurity audit page<\/a> describes a smart contract wallet with WebAuthn, inheritance and social recovery, not the phone app. <a class=\"msq-section\" href=\"#which-unstoppable-wallet-is-this-page-about\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"b\" data-title=\"Is Unstoppable Wallet open source and verifiable?\" data-section=\"#is-unstoppable-wallet-open-source-and-verifiable\">\n<p class=\"msq-question\">2. What does WalletScrutiny say about the iPhone build of Unstoppable Wallet?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">It is reproducible<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">It is not verifiable, because nobody has reproduced the build<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">It failed and differs from the source<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/walletscrutiny.com\/android\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">WalletScrutiny<\/a> says nobody has reproduced the iPhone build, so the claim is not verifiable. That applies to iPhone wallets generally. <a class=\"msq-section\" href=\"#is-unstoppable-wallet-open-source-and-verifiable\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"a\" data-title=\"What did the security audits of Unstoppable Wallet find?\" data-section=\"#what-did-the-security-audits-of-unstoppable-wallet-find\">\n<p class=\"msq-question\">3. How many findings did the CertiK penetration test report list?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Four, none major or critical<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Twelve, two of them critical<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">None at all<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/hackmd.io\/@audits\/Hke57zTow\" target=\"_blank\" rel=\"noopener\">CertiK report<\/a>, revised on 5 February 2021, lists one medium, two low and one informational finding. <a class=\"msq-section\" href=\"#what-did-the-security-audits-of-unstoppable-wallet-find\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"c\" data-title=\"What security features does Unstoppable Wallet actually have?\" data-section=\"#what-security-features-does-unstoppable-wallet-actually-have\">\n<p class=\"msq-question\">4. What does the official site say Duress Mode is for?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Speeding up swaps<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Recovering a lost phrase<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Safety under coercion<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/unstoppable.money\/\" target=\"_blank\" rel=\"noopener\">official site<\/a> describes Duress Mode as a security mode designed for safety under coercion. <a class=\"msq-section\" href=\"#what-security-features-does-unstoppable-wallet-actually-have\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"a\" data-title=\"How do you check you have the real Unstoppable Wallet app?\" data-section=\"#how-do-you-check-you-have-the-real-unstoppable-wallet-app\">\n<p class=\"msq-question\">5. What is the Android package name of the real Unstoppable Wallet app?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">io.horizontalsystems.bankwallet<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">money.unstoppable.wallet<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">com.unstoppabledomains.wallet<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Both <a href=\"https:\/\/f-droid.org\/en\/packages\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">F-Droid<\/a> and WalletScrutiny list the app under io.horizontalsystems.bankwallet. <a class=\"msq-section\" href=\"#how-do-you-check-you-have-the-real-unstoppable-wallet-app\">Read the section<\/a><\/p>\n<\/li>\n<\/ol>\n<div class=\"msq-result\" hidden><\/div>\n<\/div>\n<\/details>\n<script>(function(){\n  if (window.__msqInit) { return; }\n  window.__msqInit = true;\n  var root = document.getElementById('ms-quiz');\n  if (!root) { return; }\n  var meta = { slug: root.getAttribute('data-slug'), category: root.getAttribute('data-category'),\n               list: root.getAttribute('data-list') || '1' };\n  function qs(el, s){ return el.querySelector(s); }\n  function qsa(el, s){ return Array.prototype.slice.call(el.querySelectorAll(s)); }\n  function track(name, params){\n    try { if (typeof gtag === 'function') { var p = params || {}; p.article = meta.slug; gtag('event', name, p); } } catch (e) {}\n  }\n  function jumpList(missed){\n    if (!missed.length) { return ''; }\n    return '<ul class=\"msq-jump\">' + missed.map(function(q){\n      return '<li><a href=\"' + q.getAttribute('data-section') + '\">' + q.getAttribute('data-title') + '<\/a><\/li>';\n    }).join('') + '<\/ul>';\n  }\n  function emailForm(){\n    return '<div class=\"msq-sub\"><p><strong>Get the next one.<\/strong> We publish new articles on ' + meta.category\n      + ' most weeks and recheck this page on Sundays. Email me when a new article goes up or this page changes.<\/p>'\n      + '<form class=\"msq-form\" method=\"post\" action=\"\/mail\/form.php\" novalidate>'\n      + '<input type=\"hidden\" name=\"list\" value=\"' + meta.list + '\">'\n      + '<input type=\"hidden\" name=\"name\" value=\"\">'\n      + '<label class=\"msq-hp\" aria-hidden=\"true\">Leave this empty<input type=\"text\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\"><\/label>'\n      + '<input type=\"email\" name=\"email\" placeholder=\"you@example.com\" required aria-label=\"Email address\" autocomplete=\"email\">'\n      + '<button type=\"submit\" class=\"msq-btn\">Email me the updates<\/button>'\n      + '<a href=\"#\" class=\"msq-no\">No thanks<\/a>'\n      + '<p class=\"msq-privacy\">We store your email and this page\\'s topic, nothing else. Unsubscribe any time.<\/p>'\n      + '<\/form><p class=\"msq-msg\" aria-live=\"polite\"><\/p><\/div>';\n  }\n  \/* The autoresponder always answers 200 with its own page. A \".msg.err\" box means the\n     address was rejected, \"You're subscribed\" means accepted, and a redirect only happens\n     after a successful subscribe. Same reading as the landing pages on the other sites. *\/\n  function sendForm(form){\n    return fetch(form.getAttribute('action'), { method: 'POST', body: new FormData(form), credentials: 'same-origin', redirect: 'manual' })\n      .then(function(res){\n        if (res.type === 'opaqueredirect') { return { status: 'ok' }; }\n        if (res.status === 404) { return { status: 'notlive' }; }\n        if (!res.ok) { throw new Error('HTTP ' + res.status); }\n        return res.text().then(function(t){\n          var doc = new DOMParser().parseFromString(t, 'text\/html');\n          var err = doc.querySelector('.msg.err');\n          if (err) {\n            var m = err.textContent.trim();\n            if (\/something went wrong\/i.test(m)) { throw new Error(m); }\n            return { status: 'rejected', message: m };\n          }\n          if (\/you.re subscribed\/i.test(doc.body.textContent)) { return { status: 'ok' }; }\n          return { status: 'unknown' };\n        });\n      });\n  }\n  function wireForm(sub){\n    var form = qs(sub, '.msq-form'), msg = qs(sub, '.msq-msg');\n    qs(form, '.msq-no').addEventListener('click', function(e){\n      e.preventDefault();\n      sub.innerHTML = '<p class=\"msq-msg\">No problem. The Sunday refresh keeps this page current either way.<\/p>';\n      track('quiz_email', { result: 'declined' });\n    });\n    form.addEventListener('submit', function(e){\n      e.preventDefault();\n      var input = qs(form, 'input[name=email]'), btn = qs(form, '.msq-btn');\n      var email = input.value.trim(); input.value = email;\n      if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) { msg.textContent = 'That email does not look right.'; return; }\n      btn.disabled = true; btn.textContent = 'Sending';\n      function reset(){ btn.disabled = false; btn.textContent = 'Email me the updates'; }\n      sendForm(form).then(function(r){\n        if (r.status === 'ok' || r.status === 'unknown') {\n          sub.innerHTML = '<p class=\"msq-msg\"><strong>Done.<\/strong> We will email you when the next article on ' + meta.category\n            + ' goes up and when this page changes. If a confirmation email arrives, click it.<\/p>';\n          track('quiz_email', { result: r.status });\n          if (r.status === 'ok') { track('generate_lead', { method: 'quiz' }); }\n        } else if (r.status === 'notlive') {\n          msg.textContent = 'Sign up is not switched on yet for this site. Nothing was stored.'; reset();\n          track('quiz_email', { result: 'notlive' });\n        } else {\n          msg.textContent = r.message || 'Please check the email address and try again.'; reset();\n          track('quiz_email', { result: 'rejected' });\n        }\n      }).catch(function(){\n        msg.textContent = 'Could not reach the sign up service just now. Nothing was stored.'; reset();\n        track('quiz_email', { result: 'error' });\n      });\n    });\n  }\n  function finish(container, mode, score, total, missed){\n    var result = qs(container, '.msq-result');\n    track('quiz_complete', { mode: mode, score: score, total: total });\n    var h;\n    if (mode === 'pre') {\n      h = '<h3>You knew ' + score + ' of ' + total + ' before reading.<\/h3>';\n      h += (score === total) ? '<p>All of them. Read on anyway; the sections below carry the detail behind each answer.<\/p>'\n                             : '<p>The rest is below. Jump straight to what you missed:<\/p>' + jumpList(missed);\n      try { sessionStorage.setItem('msq-pre-' + meta.slug, String(score)); } catch (e) {}\n    } else {\n      var pre = null;\n      try { pre = sessionStorage.getItem('msq-pre-' + meta.slug); } catch (e) {}\n      h = '<h3>You got ' + score + ' of ' + total + '.<\/h3>';\n      if (pre !== null) { h += '<p>Before reading you had ' + pre + ' of ' + total + '.<\/p>'; }\n      if (missed.length) { h += '<p>Worth a second look:<\/p>' + jumpList(missed); }\n      h += emailForm();\n    }\n    result.innerHTML = h; result.hidden = false;\n    if (mode !== 'pre') { wireForm(qs(result, '.msq-sub')); }\n    result.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n  }\n  function setup(container, mode){\n    var qEls = qsa(container, '.msq-q'), answered = 0, score = 0, missed = [];\n    qEls.forEach(function(q){\n      var answer = q.getAttribute('data-answer'), opts = qsa(q, '.msq-opt'), explain = qs(q, '.msq-explain');\n      q.removeAttribute('data-done'); explain.hidden = true; qs(explain, '.msq-verdict').textContent = '';\n      opts.forEach(function(b){ b.disabled = false; b.classList.remove('is-right', 'is-wrong'); });\n      opts.forEach(function(b){\n        b.addEventListener('click', function(){\n          if (q.getAttribute('data-done')) { return; }\n          q.setAttribute('data-done', '1');\n          var ok = b.getAttribute('data-opt') === answer;\n          opts.forEach(function(o){ o.disabled = true; if (o.getAttribute('data-opt') === answer) { o.classList.add('is-right'); } });\n          if (ok) { score += 1; } else { b.classList.add('is-wrong'); missed.push(q); }\n          qs(explain, '.msq-verdict').textContent = ok ? 'Right. ' : 'Not quite. ';\n          explain.hidden = false;\n          answered += 1;\n          track('quiz_answer', { mode: mode, question: q.getAttribute('data-q'), correct: ok ? 1 : 0 });\n          if (answered === qEls.length) { finish(container, mode, score, qEls.length, missed); }\n        });\n      });\n    });\n  }\n  var box = qs(root, '.msq-box');\n  setup(root, 'pre');\n  if (box) { var skipFirst = box.hasAttribute('data-default-open'); box.addEventListener('toggle', function(){ if (!box.open) { return; } if (skipFirst) { skipFirst = false; return; } track('quiz_open', { mode: 'pre' }); }); }\n  \/* The end block sits far below this script, so it does not exist yet while this runs\n     during parsing. A delegated listener finds it at click time. *\/\n  document.addEventListener('click', function(e){\n    var startBtn = (e.target && e.target.closest) ? e.target.closest('.msq-start-test') : null;\n    if (!startBtn) { return; }\n    var end = startBtn.closest('.msq-end');\n    if (!end) { return; }\n    var mount = qs(end, '.msq-mount');\n    var clone = qs(root, '.msq-body').cloneNode(true);\n    var intro = qs(clone, '.msq-intro');\n    if (intro) { intro.textContent = 'The same five questions, now that you have read the page.'; }\n    var res = qs(clone, '.msq-result'); if (res) { res.hidden = true; res.innerHTML = ''; }\n    mount.innerHTML = ''; mount.appendChild(clone);\n    setup(mount, 'test');\n    startBtn.hidden = true;\n    track('quiz_open', { mode: 'test' });\n    mount.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    var first = qs(mount, '.msq-opt'); if (first) { first.focus({ preventScroll: true }); }\n  });\n  \/* Shared tool behaviour: checklists remember their ticks on this device, and a chooser\n     shows the result for the option picked. Calculators carry their own small script. *\/\n  function initTools(){\n    qsa(document, '.msq-check').forEach(function(box){\n      var key = 'msq-check-' + meta.slug + '-' + (box.getAttribute('data-id') || 'x');\n      var boxes = qsa(box, 'input[type=checkbox]'), count = qs(box, '.msq-check-count');\n      var yes = qs(box, '.msq-verdict-yes'), no = qs(box, '.msq-verdict-no');\n      var saved = {};\n      try { saved = JSON.parse(localStorage.getItem(key) || '{}'); } catch (e) {}\n      boxes.forEach(function(cb, i){ if (saved[i]) { cb.checked = true; } });\n      function refresh(){\n        var n = boxes.filter(function(cb){ return cb.checked; }).length, state = {};\n        boxes.forEach(function(cb, i){ if (cb.checked) { state[i] = 1; } });\n        try { localStorage.setItem(key, JSON.stringify(state)); } catch (e) {}\n        if (count) { count.textContent = n + ' of ' + boxes.length + (box.getAttribute('data-verb') || ' done'); }\n        if (yes && no) { yes.hidden = n === 0; no.hidden = n !== 0; }\n      }\n      boxes.forEach(function(cb){ cb.addEventListener('change', function(){ refresh(); track('tool_check', { tool: box.getAttribute('data-id') }); }); });\n      refresh();\n    });\n    qsa(document, '.msq-choose').forEach(function(box){\n      var results = qsa(box, '.msq-choice-result');\n      qsa(box, 'input[type=radio]').forEach(function(r){\n        r.addEventListener('change', function(){\n          results.forEach(function(el){ el.hidden = el.getAttribute('data-for') !== r.value; });\n          track('tool_choose', { tool: box.getAttribute('data-id'), choice: r.value });\n        });\n      });\n    });\n  }\n  \/\/ read progress: how far down the article the reader has scrolled, fired once per quarter\n  (function(){\n    var art = root.closest('article') || root.parentNode, fired = {};\n    function check(){\n      var top = art.getBoundingClientRect().top + window.pageYOffset, h = art.offsetHeight || 1;\n      var seen = (window.pageYOffset + window.innerHeight - top) \/ h * 100;\n      [25, 50, 75, 100].forEach(function(m){ if (seen >= m && !fired[m]) { fired[m] = true; track('read_progress', { percent: m }); } });\n    }\n    window.addEventListener('scroll', check, { passive: true }); window.addEventListener('load', check);\n  })();\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initTools); } else { initTools(); }\n})();<\/script>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-unstoppable-wallet-is-this-page-about\">Which Unstoppable wallet is this page about?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Search for unstoppable wallet and you get four different things wearing one name, which is roughly what happens when crypto runs out of adjectives. This page covers one of them: the phone app published by Horizontal Systems, with its code on GitHub for <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\" target=\"_blank\" rel=\"noopener\">Android<\/a> and <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-ios\" target=\"_blank\" rel=\"noopener\">iPhone<\/a>. Its Android package name is io.horizontalsystems.bankwallet, a leftover from an earlier name, and that string is the quickest way to tell the real listing from a copy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The other three turn up in the same results, mixed in with the app as if they were one product. Here is what each one is, read on 15 October 2026.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Product called Unstoppable<\/th><th>What it actually is<\/th><th>Holds bitcoin keys?<\/th><th>Source<\/th><\/tr><\/thead><tbody><tr><td>Unstoppable Wallet by Horizontal Systems<\/td><td>A self custody phone app for Android and iPhone, MIT licensed<\/td><td>Yes, from a recovery phrase made on your phone<\/td><td><a href=\"https:\/\/unstoppable.money\/\" target=\"_blank\" rel=\"noopener\">unstoppable.money<\/a>, <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\" target=\"_blank\" rel=\"noopener\">GitHub<\/a><\/td><\/tr><tr><td>The Unstoppable Wallet smart contracts<\/td><td>An Ethereum smart contract wallet with WebAuthn sign in, inheritance and social recovery, first deployed on Arbitrum<\/td><td>No, it is an Ethereum contract<\/td><td><a href=\"https:\/\/www.chainsecurity.com\/security-audit\/unstoppable-wallet\" target=\"_blank\" rel=\"noopener\">ChainSecurity audit, 7 February 2025<\/a><\/td><\/tr><tr><td>Unstoppable Domains wallets<\/td><td>A web3 domain company\u2019s own wallets, including a password based Lite Wallet<\/td><td>Built for domains and selected tokens<\/td><td><a href=\"https:\/\/unstoppabledomains.com\/\" target=\"_blank\" rel=\"noopener\">unstoppabledomains.com<\/a><\/td><\/tr><tr><td>A Solana memecoin<\/td><td>A token from the pump.fun scene, run by an anonymous team according to the exchange pages that list it<\/td><td>No, it is a token, not a wallet<\/td><td>Exchange listing pages, not linked here<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two warnings that come straight out of that table. If a page tells you Unstoppable Wallet was audited by ChainSecurity, it has confused the app with the smart contracts. And if anything called Unstoppable invites you to buy a token, it is not the app, which sells nothing of its own. Not every wallet keeps that distance, as <a href=\"https:\/\/getbitcoin.guide\/articles\/klever-wallet-review\/\">the June 2026 exploit of Klever&#8217;s own chain<\/a> showed when swap inside the Klever app had to be restored. This site will not tell you whether to buy any coin, that one included.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"is-unstoppable-wallet-open-source-and-verifiable\">Is Unstoppable Wallet open source and verifiable?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open source, yes. Verifiable, only partly, and the difference matters. Both GitHub repositories carry the MIT licence, and the code is busy: the Android app shipped <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/releases\/tag\/0.52.0\" target=\"_blank\" rel=\"noopener\">version 0.52.0 on 9 October 2026<\/a> and <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/releases\/tag\/0.52.1\" target=\"_blank\" rel=\"noopener\">0.52.1 on 14 October<\/a>, and the iPhone app shipped <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-ios\/releases\/tag\/0.52\" target=\"_blank\" rel=\"noopener\">version 0.52 on 8 October<\/a>. The 0.52 notes add XRP, a redesigned Send screen, and two new ways to pay called Private Send and CrossPay.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open code only helps if the app on your phone was built from it. That is what <a href=\"https:\/\/walletscrutiny.com\/android\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">WalletScrutiny<\/a> tests, by rebuilding the app and comparing it byte for byte. Its page, read on 15 October 2026, says of the iPhone app that nobody has reproduced the build, so the claim is not verifiable. That is true of every iPhone wallet, not a black mark on this one. For Android it lists the latest releases as 0.52.0 and 0.51 but shows its build check only as a legacy verification from 2024. An <a href=\"https:\/\/old.walletscrutiny.com\/android\/io.horizontalsystems.bankwallet\" target=\"_blank\" rel=\"noopener\">older version of the page<\/a> recorded version 0.28.0 as reproducible when tested in November 2022. We found no published reproducibility result for the current Android release.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Where you get it<\/th><th>Latest version on 15 Oct 2026<\/th><th>Who builds and signs it<\/th><th>Independently rebuilt?<\/th><\/tr><\/thead><tbody><tr><td>Google Play or the GitHub release<\/td><td><a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/releases\/tag\/0.52.1\" target=\"_blank\" rel=\"noopener\">0.52.1, 14 October<\/a><\/td><td>Horizontal Systems<\/td><td><a href=\"https:\/\/walletscrutiny.com\/android\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">Legacy 2024 record only<\/a><\/td><\/tr><tr><td>F-Droid<\/td><td><a href=\"https:\/\/f-droid.org\/en\/packages\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">0.51.2, added 2 October<\/a><\/td><td>F-Droid, from the published source<\/td><td>F-Droid builds it from source itself<\/td><\/tr><tr><td>Apple App Store<\/td><td><a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-ios\/releases\/tag\/0.52\" target=\"_blank\" rel=\"noopener\">0.52, 8 October<\/a><\/td><td>Horizontal Systems, through Apple<\/td><td><a href=\"https:\/\/walletscrutiny.com\/android\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">Not verifiable<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/f-droid.org\/en\/packages\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">F-Droid listing<\/a> adds one honest label of its own: an anti-feature called Non-Free Network Services, because the app fetches news and exchange rates from services that are not open source. It does not touch your keys, but it does mean the app talks to third parties. Our <a href=\"https:\/\/getbitcoin.guide\/articles\/crypto-wallet-open-source\/\">guide to open source crypto wallets<\/a> explains why the build question matters more than the licence.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1376\" height=\"768\" src=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-open-source-unstoppable-wallet-on-laptop.jpg\" alt=\"A man at a laptop in a home study reading the open source code behind the unstoppable wallet app.\" class=\"wp-image-607\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-open-source-unstoppable-wallet-on-laptop.jpg 1376w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-open-source-unstoppable-wallet-on-laptop-300x167.jpg 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-open-source-unstoppable-wallet-on-laptop-1024x572.jpg 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-open-source-unstoppable-wallet-on-laptop-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Open code helps only when someone has rebuilt the app from it, and the iPhone build has never been reproduced.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-did-the-security-audits-of-unstoppable-wallet-find\">What did the security audits of Unstoppable Wallet find?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One audit of the app itself, and it is old. <a href=\"https:\/\/www.certik.com\/resources\/blog\/unstoppablemobilewalletapppassesthroughformalvaptwithcertik\" target=\"_blank\" rel=\"noopener\">CertiK<\/a> ran a white box penetration test against the public Horizontal Systems code between 2 and 9 December 2020. The <a href=\"https:\/\/hackmd.io\/@audits\/Hke57zTow\" target=\"_blank\" rel=\"noopener\">report<\/a> is dated 10 December 2020 with a final revision on 5 February 2021, and lists four findings: one medium, two low and one informational. CertiK\u2019s own press release of 27 February 2021 counts them as one medium, one minor and one informational, which adds up to three, so the two documents disagree on a detail. Both say the team dealt with every finding and that nothing major or critical was found.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That test covered the app as it was in early 2021. Monero, XRP, the swap screens and Private Send all arrived later, and no public audit we could find covers them. The other running check is a <a href=\"https:\/\/immunefi.com\/bug-bounty\/unstoppablewallet\/information\/\" target=\"_blank\" rel=\"noopener\">bug bounty on Immunefi<\/a>, live since 4 March 2022. On 15 October 2026 it listed a maximum reward of $1,000, flat for both critical and high severity bugs, with the page last updated on 11 September 2026. Earlier versions of the same listing, as captured in search results, showed $10,000 for a critical bug. We could not find a reason for the cut.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Check<\/th><th>Date<\/th><th>What it covered<\/th><th>Result<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/hackmd.io\/@audits\/Hke57zTow\" target=\"_blank\" rel=\"noopener\">CertiK penetration test<\/a><\/td><td>2 Dec 2020 to 5 Feb 2021<\/td><td>The mobile app code<\/td><td>Four findings, none major or critical, all addressed<\/td><\/tr><tr><td><a href=\"https:\/\/old.walletscrutiny.com\/android\/io.horizontalsystems.bankwallet\" target=\"_blank\" rel=\"noopener\">WalletScrutiny build check<\/a><\/td><td>November 2022<\/td><td>Android 0.28.0<\/td><td>Reproducible when tested<\/td><\/tr><tr><td><a href=\"https:\/\/immunefi.com\/bug-bounty\/unstoppablewallet\/information\/\" target=\"_blank\" rel=\"noopener\">Immunefi bug bounty<\/a><\/td><td>Since 4 Mar 2022<\/td><td>The two mobile apps<\/td><td>$1,000 maximum on 15 Oct 2026<\/td><\/tr><tr><td><a href=\"https:\/\/www.chainsecurity.com\/security-audit\/unstoppable-wallet\" target=\"_blank\" rel=\"noopener\">ChainSecurity audit<\/a><\/td><td>7 Feb 2025<\/td><td>A different product, the smart contract wallet<\/td><td>Two significant recovery findings, addressed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The last row is the one affiliate reviews get wrong, presumably because nobody who writes them has opened the PDF. The ChainSecurity work is real and its findings were about ownership transfer and social recovery in Ethereum contracts. None of it applies to the phone app.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-security-features-does-unstoppable-wallet-actually-have\">What security features does Unstoppable Wallet actually have?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/unstoppable.money\/\" target=\"_blank\" rel=\"noopener\">official site<\/a> lists three that matter for keeping keys safe. Duress Mode, described there as a security mode for use under coercion, is what users on forums call a decoy wallet: a second passcode that opens a different set of wallets. Tor support routes the app\u2019s traffic to hide your IP address, which <a href=\"https:\/\/walletscrutiny.com\/android\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">WalletScrutiny<\/a> rates as partial. And address poisoning protection warns about look alike addresses planted in your history by scammers. The same site states that no user data is collected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The wallet is built from a standard recovery phrase, 12 words by default, and <a href=\"https:\/\/walletscrutiny.com\/android\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">WalletScrutiny<\/a> lists the usual bitcoin standards, BIP 39 through BIP 86, so the phrase should restore in other wallets that follow them. Swaps are another matter: they run through outside services such as THORChain, and WalletScrutiny notes the usual third party risks of fees, sign up demands and failed deliveries. Those services never see your phrase, but they do hold your coins mid swap. If you want to know how that differs from an exchange holding them, our <a href=\"https:\/\/getbitcoin.guide\/articles\/wallet-for-binance\/\">piece on who holds your keys on Binance<\/a> sets it out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your recovery phrase belongs on paper or steel, never on a website, a form or a support chat. No genuine Unstoppable support channel will ask for it. The <a href=\"https:\/\/getbitcoin.guide\/articles\/your-recovery-phrase\/\">recovery phrase guide<\/a> covers how to store it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-do-users-report-on-unstoppable-wallet-s-github\">What do users report on Unstoppable Wallet\u2019s GitHub?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Android repository had 115 issues opened since June 2025 that mention lost, missing, stuck, balance or restore. We read six of them in full on 15 October 2026. This is testimony, what users say happened, not a finding about the app.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The most serious came in <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/issues\/8996\" target=\"_blank\" rel=\"noopener\">March 2026<\/a>, when a user reported that swaps between USDT and ETH vanished without an error after an older swap route was removed, about 400 USDT on one day. They sent details to the team by email and the issue was closed in June 2026 with no public outcome. In <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/issues\/8364\" target=\"_blank\" rel=\"noopener\">August 2025<\/a> another user saw their Monero balance and history drop to zero after trying to send unconfirmed coins; a developer called it a known issue with newly created Monero wallets and promised a fix in the next release.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Monero comes up again. In an <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/issues\/8564\" target=\"_blank\" rel=\"noopener\">October 2025 thread<\/a> about endless syncing, two users said the problem cleared only when they made a new wallet with the standard 12 word phrase instead of a 21 or 15 word one. The same thread shows one user pasting the words of a phrase, for an empty wallet, into a public issue. Never post a recovery phrase anywhere, even for a wallet you think is empty.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not every complaint holds up. A <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/issues\/9341\" target=\"_blank\" rel=\"noopener\">June 2026 report<\/a> of a transaction showing a value of zero turned out to be too little ETH for the fee. An <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/issues\/9450\" target=\"_blank\" rel=\"noopener\">August 2026 worry<\/a> that a downward swipe could delete a coin got the reply that the gesture works only on the Balance tab and must be deliberate, though the user stayed unconvinced. Where the accounts agree with the official picture: in the threads we read, the trouble sits in the newer coins and the swap screens, and none of the threads we read described bitcoin keys being exposed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-do-you-check-you-have-the-real-unstoppable-wallet-app\">How do you check you have the real Unstoppable Wallet app?<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1376\" height=\"768\" src=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-authentic-unstoppable-wallet-app-backup.jpg\" alt=\"Hands hold a phone showing a shield icon beside a small steel safe, checking the unstoppable wallet app.\" class=\"wp-image-608\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-authentic-unstoppable-wallet-app-backup.jpg 1376w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-authentic-unstoppable-wallet-app-backup-300x167.jpg 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-authentic-unstoppable-wallet-app-backup-1024x572.jpg 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/verifying-authentic-unstoppable-wallet-app-backup-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Check the publisher and the package name before installing. No genuine app or support desk asks for your phrase.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Start from the publisher, not a search ad. Follow the store links on <a href=\"https:\/\/unstoppable.money\/\" target=\"_blank\" rel=\"noopener\">unstoppable.money<\/a>, or take the build from the <a href=\"https:\/\/github.com\/horizontalsystems\/unstoppable-wallet-android\/releases\" target=\"_blank\" rel=\"noopener\">GitHub releases page<\/a> or <a href=\"https:\/\/f-droid.org\/en\/packages\/io.horizontalsystems.bankwallet\/\" target=\"_blank\" rel=\"noopener\">F-Droid<\/a>. On Android, check the package name is io.horizontalsystems.bankwallet. Compare the version you have with the release dates above; a listing stuck on an old number, or offering extra features, is a reason to stop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then decide how much you are trusting it with. A phone wallet that holds many coins, swaps them and connects to apps has more moving parts than a single purpose one, which is the same trade off our <a href=\"https:\/\/getbitcoin.guide\/articles\/trust-wallet-review\/\">Trust Wallet review<\/a> looks at. If privacy is the attraction, the <a href=\"https:\/\/getbitcoin.guide\/articles\/samourai-wallet-what-happened\/\">story of Samourai Wallet<\/a> is worth reading first, and if you are weighing an app with no phrase at all, the <a href=\"https:\/\/getbitcoin.guide\/articles\/zengo-crypto-wallet\/\">Zengo guide<\/a> explains what you hold instead.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"frequently-asked-questions\">Frequently asked questions<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-q-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Who makes Unstoppable Wallet?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Horizontal Systems publishes the app and its code on GitHub under the MIT licence. It is not connected to Unstoppable Domains or to any token called Unstoppable.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Is Unstoppable Wallet custodial?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. WalletScrutiny lists it as self custodial, meaning the user holds the keys, which come from a recovery phrase made on your own phone.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Does Unstoppable Wallet work with a hardware wallet?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The official site does not list hardware wallet support among its features. An Android issue from September 2025 asked for full support for a Ledger Flex and was closed, so check the current release notes before relying on it.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Is Unstoppable Wallet on F-Droid?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes. F-Droid listed version 0.51.2 on 2 October 2026, built and signed by F-Droid from the published source, which makes it a version or two behind the Play Store build.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Can I restore an Unstoppable Wallet phrase in another app?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>For bitcoin, a standard 12 or 24 word phrase should restore in other wallets that follow BIP 39. Users on GitHub report that Monero restores between apps are less reliable.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">How much does the Unstoppable Wallet bug bounty pay?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The Immunefi listing showed a maximum of $1,000 on 15 October 2026, flat for critical and high bugs. Earlier versions of the listing showed $10,000.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<div class=\"msq-end\" id=\"ms-quiz-end\">\n<p><strong>Finished the page?<\/strong> The same five questions from the top, to see what stuck.<\/p>\n<button type=\"button\" class=\"msq-btn msq-start-test\">Test Your Understanding of This Article<\/button>\n<div class=\"msq-mount\"><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>This article is educational and is not financial advice. Nothing here is a recommendation to buy, sell or hold anything. You are responsible for your own security decisions.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Which Unstoppable is which, what the CertiK test and WalletScrutiny actually say, the release cadence read from GitHub on 15 October 2026, and what users report in the app\u2019s own issue tracker.<\/p>\n","protected":false},"author":1,"featured_media":606,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"Unstoppable Wallet: The Open Source App, Not the Namesakes","rank_math_description":"Unstoppable Wallet is the open source self custody app from Horizontal Systems. We checked its audits, builds and namesakes on 15 October 2026.","rank_math_focus_keyword":"unstoppable wallet","rank_math_canonical_url":"","rank_math_breadcrumb_title":"","rank_math_facebook_title":"","rank_math_facebook_description":"","rank_math_facebook_image":"","rank_math_twitter_title":"","rank_math_twitter_description":"","rank_math_twitter_image":"","rank_math_pillar_content":"","rank_math_robots":[],"rank_math_advanced_robots":[]},"categories":[2],"tags":[],"class_list":["post-609","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wallets"],"_links":{"self":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/comments?post=609"}],"version-history":[{"count":5,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/609\/revisions"}],"predecessor-version":[{"id":721,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/609\/revisions\/721"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/media\/606"}],"wp:attachment":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/media?parent=609"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/categories?post=609"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/tags?post=609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}