{"id":743,"date":"2026-10-26T09:29:31","date_gmt":"2026-10-26T09:29:31","guid":{"rendered":"https:\/\/getbitcoin.guide\/articles\/?p=743"},"modified":"2026-10-30T09:39:50","modified_gmt":"2026-10-30T09:39:50","slug":"opera-wallet","status":"publish","type":"post","link":"https:\/\/getbitcoin.guide\/articles\/opera-wallet\/","title":{"rendered":"Opera Wallet: What Happened and Where Your Bitcoin Is"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>The Opera Wallet no longer ships. Opera pulled it from Android in January 2025 and from iOS in April 2025, then removed it from Opera One and Opera GX on desktop on 1 January 2026. It was non custodial, so nothing left the chain: your 12 word backup phrase still controls the coins.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"opera-wallet\" data-minutes=\"11\">\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\/opera-wallet\/#audio\",\"name\":\"Opera Wallet: What Happened and Where Your Bitcoin Is, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 30 October 2026.\",\"contentUrl\":\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/opera-wallet-audio-202610301509.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT10M46S\",\"uploadDate\":\"2026-10-30\",\"inLanguage\":\"en-GB\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/getbitcoin.guide\/articles\/opera-wallet\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"Opera Wallet: What Happened and Where Your Bitcoin Is\",\"startOffset\":0,\"endOffset\":62},{\"@type\":\"Clip\",\"name\":\"What happened to the Opera Wallet?\",\"startOffset\":62,\"endOffset\":210,\"url\":\"https:\/\/getbitcoin.guide\/articles\/opera-wallet\/#what-happened-to-the-opera-wallet\"},{\"@type\":\"Clip\",\"name\":\"Where did the Opera Wallet keep your keys?\",\"startOffset\":210,\"endOffset\":284,\"url\":\"https:\/\/getbitcoin.guide\/articles\/opera-wallet\/#where-did-the-opera-wallet-keep-your-keys\"},{\"@type\":\"Clip\",\"name\":\"Why does the bitcoin show zero after restoring the phrase?\",\"startOffset\":284,\"endOffset\":374,\"url\":\"https:\/\/getbitcoin.guide\/articles\/opera-wallet\/#why-does-the-bitcoin-show-zero-after-restoring-the-phrase\"},{\"@type\":\"Clip\",\"name\":\"What do people who moved out of the Opera Wallet actually report?\",\"startOffset\":374,\"endOffset\":497,\"url\":\"https:\/\/getbitcoin.guide\/articles\/opera-wallet\/#what-do-people-who-moved-out-of-the-opera-wallet-actually-re\"},{\"@type\":\"Clip\",\"name\":\"Is MiniPay a replacement for the Opera Wallet?\",\"startOffset\":497,\"endOffset\":557,\"url\":\"https:\/\/getbitcoin.guide\/articles\/opera-wallet\/#is-minipay-a-replacement-for-the-opera-wallet\"},{\"@type\":\"Clip\",\"name\":\"What should you check before assuming the coins are lost?\",\"startOffset\":557,\"endOffset\":646,\"url\":\"https:\/\/getbitcoin.guide\/articles\/opera-wallet\/#what-should-you-check-before-assuming-the-coins-are-lost\"}],\"contentSize\":\"4.5 MB\"}<\/script>\n<p class=\"msq-audio-lead\"><strong>Listen to this article<\/strong>, about 11 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\/opera-wallet-audio-202610301509.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: Opera Wallet: What Happened and Where Your Bitcoin Is\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">Opera Wallet: What Happened and Where Your Bitcoin Is<\/a><\/li>\n<li data-start=\"61.98\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"61.98\" aria-label=\"Play from: What happened to the Opera Wallet?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">1:02<\/span><a href=\"#what-happened-to-the-opera-wallet\">What happened to the Opera Wallet?<\/a><\/li>\n<li data-start=\"209.8\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"209.8\" aria-label=\"Play from: Where did the Opera Wallet keep your keys?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">3:30<\/span><a href=\"#where-did-the-opera-wallet-keep-your-keys\">Where did the Opera Wallet keep your keys?<\/a><\/li>\n<li data-start=\"284.14\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"284.14\" aria-label=\"Play from: Why does the bitcoin show zero after restoring the phrase?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">4:44<\/span><a href=\"#why-does-the-bitcoin-show-zero-after-restoring-the-phrase\">Why does the bitcoin show zero after restoring the phrase?<\/a><\/li>\n<li data-start=\"374.12\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"374.12\" aria-label=\"Play from: What do people who moved out of the Opera Wallet actually report?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">6:14<\/span><a href=\"#what-do-people-who-moved-out-of-the-opera-wallet-actually-re\">What do people who moved out of the Opera Wallet actually report?<\/a><\/li>\n<li data-start=\"497.1\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"497.1\" aria-label=\"Play from: Is MiniPay a replacement for the Opera Wallet?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">8:17<\/span><a href=\"#is-minipay-a-replacement-for-the-opera-wallet\">Is MiniPay a replacement for the Opera Wallet?<\/a><\/li>\n<li data-start=\"557.4\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"557.4\" aria-label=\"Play from: What should you check before assuming the coins are lost?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">9:17<\/span><a href=\"#what-should-you-check-before-assuming-the-coins-are-lost\">What should you check before assuming the coins are lost?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 30 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\",\"operawalletwhathappeneda\",44],[3.36,\"p\",\"theoperawalletnolongersh\",27],[5.56,\"p\",\"operapulleditfromandroid\",116],[18.44,\"p\",\"itwasnoncustodialsonothi\",81],[24.72,\"p\",\"onthispageoperasownremov\",174],[37.44,\"p\",\"checkedon26october2026ag\",97],[45.6,\"p\",\"mostofwhatranksforthisse\",122],[55.12,\"p\",\"noneofitanswersthetwoque\",91],[61.98,\"h\",\"whathappenedtotheoperawa\",28],[63.94,\"p\",\"operaretireditoneplatfor\",46],[67.94,\"p\",\"thewalletbeganlifein2018\",120],[76.38,\"p\",\"inapostdated29february20\",209],[93.42,\"p\",\"thentheexitsbegan\",17],[95.46,\"p\",\"theandroidpostof19decemb\",154],[108.02,\"p\",\"aniosupdatenoteof29april\",92],[117.62,\"p\",\"finallythedesktoppostof2\",168],[133.86,\"p\",\"readthatlastphrasecarefu\",27],[136.02,\"p\",\"inaccessiblethroughopera\",27],[138.5,\"p\",\"thecoinsthemselveswerene\",79],[143.5,\"t\",\"operaforandroid\",148],[161.1,\"t\",\"operaoneforios\",138],[176.66,\"t\",\"operaoneandoperagxdeskto\",152],[192.7,\"t\",\"operacryptobrowser\",150],[209.8,\"h\",\"wheredidtheoperawalletke\",34],[212.24,\"p\",\"onyourdevice\",12],[214.44,\"p\",\"operasdesktopguidesaysit\",152],[225.88,\"p\",\"thatiswhatnoncustodialme\",108],[233.48,\"p\",\"therewasonewrinklethatma\",32],[235.8,\"p\",\"thesameguidesaysthatifyo\",123],[244.0,\"p\",\"operahasnotsaidinanythin\",111],[252.6,\"p\",\"treatitasgoneandthepaper\",51],[256.76,\"p\",\"ifyouneverwrotethewordsd\",117],[265.76,\"p\",\"operasguidesalsosaytokee\",94],[273.04,\"p\",\"thatisthesameruleourreco\",142],[284.14,\"h\",\"whydoesthebitcoinshowzer\",48],[287.5,\"p\",\"becausethesame12wordscan\",94],[293.9,\"p\",\"itsethereumsideanditsbit\",75],[299.26,\"p\",\"awalletbuiltforethereums\",126],[306.14,\"p\",\"bitcoinaddsasecondlayer\",23],[308.58,\"p\",\"thestandardsdefinesepara\",172],[322.42,\"p\",\"operaneverdocumentedwhic\",46],[326.58,\"p\",\"oneuseronoperasforumrepo\",132],[339.22,\"p\",\"thatisonepersonsreportno\",122],[349.26,\"p\",\"thereisawaytocheckthatth\",72],[354.14,\"p\",\"ifyoueversentbitcoininto\",104],[360.5,\"p\",\"lookthataddressuponapubl\",39],[363.3,\"p\",\"ifthebalanceistheretheco\",67],[368.62,\"p\",\"iftheaddressbeginswitha3\",49],[374.12,\"h\",\"whatdopeoplewhomovedouto\",53],[378.48,\"p\",\"forthispagesixthreadsono\",120],[388.36,\"p\",\"thesearewhatpeoplereport\",66],[393.16,\"p\",\"thepatternisconsistentet\",72],[399.16,\"p\",\"inadecember2024threadone\",93],[406.08,\"p\",\"theytriedabitcoinonlydes\",49],[410.88,\"p\",\"laterthesamedaytheyfound\",102],[417.44,\"p\",\"inthesamethreadanotherus\",135],[427.08,\"p\",\"inajanuary2025threadause\",91],[434.08,\"p\",\"areplyfromanotherusersai\",136],[444.08,\"p\",\"severalandroidusersinath\",165],[454.92,\"p\",\"avolunteermoderatorpoint\",57],[459.08,\"p\",\"andinamarch2026postonrop\",211],[475.48,\"p\",\"wheretheaccountsagreewit\",102],[482.2,\"p\",\"wheretheygobeyonditopera\",100],[489.08,\"p\",\"nobodyinthesethreadslost\",68],[493.2,\"p\",\"whattheylostwasthescreen\",39],[497.1,\"h\",\"isminipayareplacementfor\",38],[499.66,\"p\",\"noandoperasayssoitself\",22],[502.14,\"p\",\"thedesktoppostdescribesm\",204],[515.66,\"p\",\"itdoesnotholdbitcoin\",20],[517.54,\"t\",\"holdsbitcoin\",89],[526.58,\"t\",\"whoholdsthekeys\",90],[534.18,\"t\",\"network\",77],[541.34,\"t\",\"statustoday\",84],[549.18,\"p\",\"soifyouheldbitcoininoper\",119],[557.4,\"h\",\"whatshouldyoucheckbefore\",47],[560.2,\"p\",\"startwiththepaper\",17],[561.52,\"p\",\"operasdesktopguidewarnst\",152],[571.16,\"p\",\"thenconfirmthecoinsexist\",90],[577.68,\"p\",\"ifyoudorestorethewordsth\",59],[582.32,\"p\",\"nevertypethemintoawebsit\",139],[593.16,\"p\",\"expecttheethereumandbitc\",137],[601.52,\"p\",\"andbecausethosewordshave\",234],[618.6,\"p\",\"operaisnottheonlymakerto\",167],[629.44,\"p\",\"thebroaderlessonisabouts\",44],[632.4,\"p\",\"awalletbundledintosometh\",97],[639.4,\"p\",\"thecoinsdonotcareprovide\",79]];\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: Opera&#8217;s own removal dates for Android, iOS and desktop in one table, why a restored phrase can show Ethereum but zero bitcoin, and what about a dozen people on Opera&#8217;s forum and Reddit report from the move.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"opera-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=\"c\" data-title=\"What happened to the Opera Wallet?\" data-section=\"#what-happened-to-the-opera-wallet\">\n<p class=\"msq-question\">1. On what date did Opera say the wallet would be removed from Opera One and Opera GX on desktop?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">20 January 2025<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">15 July 2025<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">1 January 2026<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Opera&#8217;s <a href=\"https:\/\/blogs.opera.com\/desktop\/2025\/06\/how-to-migrate-your-opera-crypto-wallet-on-desktop\/\" target=\"_blank\" rel=\"noopener\">desktop migration post<\/a> of 20 June 2025 said no new assets after 15 July 2025 and removal on 1 January 2026; 20 January 2025 was the Android date. <a class=\"msq-section\" href=\"#what-happened-to-the-opera-wallet\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"b\" data-title=\"Where did the Opera Wallet keep your keys?\" data-section=\"#where-did-the-opera-wallet-keep-your-keys\">\n<p class=\"msq-question\">2. According to Opera&#8217;s desktop guide, what do you need to reach your crypto from another non custodial wallet?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Your Opera Account password<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">The secret recovery phrase, typically 12 words<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">A support ticket to Opera<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/blogs.opera.com\/desktop\/2025\/06\/how-to-migrate-your-opera-crypto-wallet-on-desktop\/\" target=\"_blank\" rel=\"noopener\">desktop guide<\/a> says your crypto is stored on the blockchain and the secret recovery phrase is what gives access from any non custodial wallet. <a class=\"msq-section\" href=\"#where-did-the-opera-wallet-keep-your-keys\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"a\" data-title=\"Why does the bitcoin show zero after restoring the phrase?\" data-section=\"#why-does-the-bitcoin-show-zero-after-restoring-the-phrase\">\n<p class=\"msq-question\">3. Which address type does the BIP49 standard cover?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Segwit addresses wrapped in a script, beginning with a 3<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Native segwit addresses beginning bc1q<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Ethereum accounts<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/github.com\/bitcoin\/bips\/blob\/master\/bip-0049.mediawiki\" target=\"_blank\" rel=\"noopener\">BIP49<\/a> defines the path for segwit nested in a script hash, which gives addresses starting with 3; native bc1q addresses are covered by BIP84. <a class=\"msq-section\" href=\"#why-does-the-bitcoin-show-zero-after-restoring-the-phrase\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"b\" data-title=\"What do people who moved out of the Opera Wallet actually report?\" data-section=\"#what-do-people-who-moved-out-of-the-opera-wallet-actually-re\">\n<p class=\"msq-question\">4. What did users in Opera forum threads most often report after importing the phrase into another app?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Both balances vanished from the chain<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">The Ethereum balance appeared but the bitcoin did not, at least at first<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Opera refunded the bitcoin<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Threads such as <a href=\"https:\/\/forums.opera.com\/topic\/75265\/how-to-access-crypto-wallet\" target=\"_blank\" rel=\"noopener\">this one from December 2024<\/a> report Ethereum coming across while bitcoin showed nothing; these are user reports, not Opera statements. <a class=\"msq-section\" href=\"#what-do-people-who-moved-out-of-the-opera-wallet-actually-re\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"c\" data-title=\"Is MiniPay a replacement for the Opera Wallet?\" data-section=\"#is-minipay-a-replacement-for-the-opera-wallet\">\n<p class=\"msq-question\">5. How does Opera itself describe MiniPay?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">As the new home for Opera Wallet bitcoin<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">As a custodial exchange account<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">As a dollar stablecoin wallet that is not a replacement for the Crypto Wallet<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/blogs.opera.com\/desktop\/2025\/06\/how-to-migrate-your-opera-crypto-wallet-on-desktop\/\" target=\"_blank\" rel=\"noopener\">desktop post<\/a> calls MiniPay a non custodial stablecoin wallet on Celo and says it is not a replacement, because it is a dollar stablecoin wallet and not a crypto wallet. <a class=\"msq-section\" href=\"#is-minipay-a-replacement-for-the-opera-wallet\">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<p class=\"wp-block-paragraph\">Checked on 26 October 2026 against Opera\u2019s own blog posts for each platform and six threads on Opera\u2019s community forum. Most of what ranks for this search is launch coverage from 2018 to 2022, cheerfully describing features of a wallet that has since been switched off. None of it answers the two questions people actually arrive with: where did it go, and why is the bitcoin missing?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-happened-to-the-opera-wallet\">What happened to the Opera Wallet?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Opera retired it one platform at a time over about a year. The wallet began life in 2018 inside Opera for Android, which <a href=\"https:\/\/blogs.opera.com\/desktop\/2024\/02\/opera-delists-the-experimental-crypto-browser\/\" target=\"_blank\" rel=\"noopener\">Opera\u2019s own history<\/a> calls the first native non custodial wallet built into a browser. In <a href=\"https:\/\/blogs.opera.com\/desktop\/2024\/02\/opera-delists-the-experimental-crypto-browser\/\" target=\"_blank\" rel=\"noopener\">a post dated 29 February 2024<\/a> the old Crypto Wallet was renamed the Opera Wallet, described as giving access to blockchains such as Bitcoin, Ethereum and Solana, and the separate experimental Crypto Browser stopped receiving updates on 14 March 2024.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then the exits began. <a href=\"https:\/\/blogs.opera.com\/crypto\/2024\/12\/how-to-migrate-your-opera-mobile-crypto-wallet\/\" target=\"_blank\" rel=\"noopener\">The Android post of 19 December 2024<\/a> said the wallet would remain accessible until 20 January 2025, after which Opera would remove the main access point and eventually the whole feature. <a href=\"https:\/\/blogs.opera.com\/mobile\/2025\/04\/opera-one-for-ios-aria-facelift\/\" target=\"_blank\" rel=\"noopener\">An iOS update note of 29 April 2025<\/a> said Opera had decided to say goodbye to the crypto wallet in Opera One for iOS. Finally, <a href=\"https:\/\/blogs.opera.com\/desktop\/2025\/06\/how-to-migrate-your-opera-crypto-wallet-on-desktop\/\" target=\"_blank\" rel=\"noopener\">the desktop post of 20 June 2025<\/a> covered Opera One and Opera GX: no new assets after 15 July 2025, and the wallet removed on 1 January 2026, after which any remaining assets would become inaccessible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Read that last phrase carefully. Inaccessible through Opera, yes. The coins themselves were never inside the browser, which is the whole point of the next section.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Platform<\/th><th>Opera\u2019s announcement<\/th><th>Last date Opera gave<\/th><th>What Opera said would remain<\/th><\/tr><\/thead><tbody><tr><td>Opera for Android<\/td><td><a href=\"https:\/\/blogs.opera.com\/crypto\/2024\/12\/how-to-migrate-your-opera-mobile-crypto-wallet\/\" target=\"_blank\" rel=\"noopener\">19 December 2024<\/a><\/td><td>20 January 2025<\/td><td>The backup phrase, viewable in the browser after removal<\/td><\/tr><tr><td>Opera One for iOS<\/td><td><a href=\"https:\/\/blogs.opera.com\/mobile\/2025\/04\/opera-one-for-ios-aria-facelift\/\" target=\"_blank\" rel=\"noopener\">29 April 2025<\/a><\/td><td>With that update<\/td><td>Settings, Crypto wallet, Reveal my backup phrase<\/td><\/tr><tr><td>Opera One and Opera GX desktop<\/td><td><a href=\"https:\/\/blogs.opera.com\/desktop\/2025\/06\/how-to-migrate-your-opera-crypto-wallet-on-desktop\/\" target=\"_blank\" rel=\"noopener\">20 June 2025<\/a><\/td><td>1 January 2026<\/td><td>Nothing: remaining assets inaccessible through Opera<\/td><\/tr><tr><td>Opera Crypto Browser<\/td><td><a href=\"https:\/\/blogs.opera.com\/desktop\/2024\/02\/opera-delists-the-experimental-crypto-browser\/\" target=\"_blank\" rel=\"noopener\">29 February 2024<\/a><\/td><td>14 March 2024, last updates<\/td><td>Wallet restorable in the main Opera browser<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/opera-wallet-chart.png\" alt=\"Timeline of the opera wallet removal from Android, iOS and desktop between 2024 and 2026.\" class=\"wp-image-745\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/opera-wallet-chart.png 1600w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/opera-wallet-chart-300x169.png 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/opera-wallet-chart-1024x576.png 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/opera-wallet-chart-768x432.png 768w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/opera-wallet-chart-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-block-image__caption\">Each date is taken from the Opera post for that platform, read on 26 October 2026.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"where-did-the-opera-wallet-keep-your-keys\">Where did the Opera Wallet keep your keys?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On your device. Opera\u2019s desktop guide says it plainly: your crypto is stored on the blockchain, and to reach it from any other non custodial wallet you need the secret recovery phrase, typically 12 words. That is what <a href=\"https:\/\/getbitcoin.guide\/articles\/non-custodial-crypto-wallet\/\">non custodial<\/a> means in practice, and it is why a browser vendor switching a feature off cannot take a single coin with it.<\/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\/writing-recovery-phrase-for-opera-wallet.jpg\" alt=\"A pen held over a blank card beside a small device, ready to record an opera wallet backup phrase.\" class=\"wp-image-741\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/writing-recovery-phrase-for-opera-wallet.jpg 1376w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/writing-recovery-phrase-for-opera-wallet-300x167.jpg 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/writing-recovery-phrase-for-opera-wallet-1024x572.jpg 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/writing-recovery-phrase-for-opera-wallet-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Your recovery phrase remains the ultimate key to accessing your on-chain assets.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">There was one wrinkle that matters now. The same guide says that if you were signed out and did not know your phrase, the only way back was a copy of the wallet you had saved to your Opera Account. Opera has not said, in anything published that this check found, whether that account backup still opens anything after 1 January 2026. Treat it as gone and the paper copy as the only copy that counts. If you never wrote the words down, a forum moderator\u2019s answer in <a href=\"https:\/\/forums.opera.com\/topic\/75860\/opera-crypto-wallet-disappeared\" target=\"_blank\" rel=\"noopener\">a January 2025 thread<\/a> is the honest one: without the phrase the contents are lost.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Opera\u2019s guides also say to keep the phrase somewhere safe, not as a photo on your phone, and not to share it with anyone. That is the same rule <a href=\"https:\/\/getbitcoin.guide\/articles\/your-recovery-phrase\/\">our recovery phrase guide<\/a> spells out, and it applies with extra force here, because a retired wallet is exactly the bait that fake recovery services use.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"why-does-the-bitcoin-show-zero-after-restoring-the-phrase\">Why does the bitcoin show zero after restoring the phrase?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because the same 12 words can produce many different wallets, and the Opera Wallet kept two kinds under one screen. Its Ethereum side and its bitcoin side were derived from the phrase along different paths. A wallet built for Ethereum style accounts will happily restore the Ethereum balance and show nothing for bitcoin, which is not a fault in either wallet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bitcoin adds a second layer. The standards define separate paths for separate address types: <a href=\"https:\/\/github.com\/bitcoin\/bips\/blob\/master\/bip-0049.mediawiki\" target=\"_blank\" rel=\"noopener\">BIP49<\/a> covers the older segwit addresses wrapped inside a script, which begin with a 3, and <a href=\"https:\/\/github.com\/bitcoin\/bips\/blob\/master\/bip-0084.mediawiki\" target=\"_blank\" rel=\"noopener\">BIP84<\/a> covers native segwit addresses beginning bc1q. Opera never documented which one its bitcoin side used. One user on Opera\u2019s forum reported in <a href=\"https:\/\/forums.opera.com\/topic\/71520\/public-key-for-bitcoin-in-opera-crypto-wallet\" target=\"_blank\" rel=\"noopener\">May 2024<\/a> that, after working it out with a third party tool, the Opera Crypto Wallet used the BIP49 path and produced a ypub key. That is one person\u2019s report, not an Opera statement, but if it holds, a wallet that looks only at bc1q addresses would show zero sats from the right words.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is a way to check that the coins are still there without the phrase going anywhere. If you ever sent bitcoin into the Opera Wallet from an exchange, the exchange\u2019s withdrawal history shows the address it went to. Look that address up on a public block explorer. If the balance is there, the coins are on chain and the problem is the path, not a loss. If the address begins with a 3, that matches the BIP49 report.<\/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\/man-relieved-after-migrating-opera-wallet.jpg\" alt=\"A man looks relieved while holding his phone after successfully migrating from his opera wallet.\" class=\"wp-image-742\" srcset=\"https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-relieved-after-migrating-opera-wallet.jpg 1376w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-relieved-after-migrating-opera-wallet-300x167.jpg 300w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-relieved-after-migrating-opera-wallet-1024x572.jpg 1024w, https:\/\/getbitcoin.guide\/articles\/wp-content\/uploads\/2026\/10\/man-relieved-after-migrating-opera-wallet-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Finding peace of mind once your digital assets are safely secured elsewhere.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-do-people-who-moved-out-of-the-opera-wallet-actually-re\">What do people who moved out of the Opera Wallet actually report?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For this page six threads on Opera\u2019s forum and one on Reddit were read, carrying about a dozen individual accounts from December 2024 to March 2026. These are what people report, not findings, and none of them is an Opera statement. The pattern is consistent: Ethereum came across, bitcoin often did not, at least at first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In <a href=\"https:\/\/forums.opera.com\/topic\/75265\/how-to-access-crypto-wallet\" target=\"_blank\" rel=\"noopener\">a December 2024 thread<\/a>, one user restored the words in another vendor\u2019s app and found only the Ethereum balance. They tried a bitcoin only desktop wallet next and saw 0 sats. Later the same day they found the bitcoin still showing in desktop Opera, but every attempt to send it failed with a gas error. In the same thread another user said a bitcoin specific wallet on iOS restored from the Opera words and showed their bitcoin, including a transfer made just before.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In <a href=\"https:\/\/forums.opera.com\/topic\/75571\/opera-crypto-wallet-option\" target=\"_blank\" rel=\"noopener\">a January 2025 thread<\/a>, a user wrote that only the Ethereum wallet moved across and the bitcoin wallet did not. A reply from another user said all their coins were still reachable through the desktop version of Opera, which was true then and stopped being true on 1 January 2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Several Android users in <a href=\"https:\/\/forums.opera.com\/topic\/75558\/i-cannot-find-opera-wallet-anymore\" target=\"_blank\" rel=\"noopener\">a thread opened on 1 January 2025<\/a> found the wallet had simply vanished from their menu weeks before the date in Opera\u2019s post, and could not reach the screen that shows the phrase. A volunteer moderator pointed them to the beta app, which still had it. And in <a href=\"https:\/\/www.reddit.com\/r\/OperaGX\/comments\/1s2t3j5\/opera_wallet_extension_got_blocked_what_is_this\/\" target=\"_blank\" rel=\"noopener\">a March 2026 post on r\/OperaGX<\/a>, a user got a notice that Opera had disabled an extension for their safety and did not recognise it; a GX staff member replied that it was the discontinued built in crypto wallet extension, a first party one, and safe to remove.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Where the accounts agree with Opera\u2019s guidance: the phrase is everything, and without it moderators say there is no recovery. Where they go beyond it: Opera\u2019s posts imply one phrase moves everything in one step, and the bitcoin reports say otherwise. Nobody in these threads lost bitcoin that was later shown to be gone from the chain. What they lost was the screen that displayed it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"is-minipay-a-replacement-for-the-opera-wallet\">Is MiniPay a replacement for the Opera Wallet?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No, and Opera says so itself. The desktop post describes MiniPay as a non custodial stablecoin wallet on the Celo blockchain that works with a phone number, then adds that it is not a replacement for the old wallet, because it is a dollar stablecoin wallet and not a crypto wallet. It does not hold bitcoin.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Question<\/th><th>Old Opera Wallet<\/th><th>MiniPay, per Opera<\/th><\/tr><\/thead><tbody><tr><td>Holds bitcoin<\/td><td>Yes, per the <a href=\"https:\/\/blogs.opera.com\/desktop\/2024\/02\/opera-delists-the-experimental-crypto-browser\/\" target=\"_blank\" rel=\"noopener\">February 2024 post<\/a><\/td><td>No, dollar stablecoins only<\/td><\/tr><tr><td>Who holds the keys<\/td><td>You, through a 12 word phrase<\/td><td>Described as non custodial<\/td><\/tr><tr><td>Network<\/td><td>Bitcoin, Ethereum, Polygon, Solana and others<\/td><td>Celo<\/td><\/tr><tr><td>Status today<\/td><td>Removed on every platform<\/td><td>Promoted by Opera instead<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So if you held bitcoin in Opera, MiniPay is a different product for a different job, and switching to it does nothing for the coins in the old wallet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-should-you-check-before-assuming-the-coins-are-lost\">What should you check before assuming the coins are lost?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start with the paper. Opera\u2019s desktop guide warns that if you have forgotten the wallet password, the Forgot password option needs the 12 word phrase anyway, so the written words are the only key that matters. Then confirm the coins exist using an old receiving address and a block explorer, which needs no secret at all.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you do restore the words, three rules hold, and they are not negotiable. Never type them into a website, a browser pop up, a support chat or any service offering to recover an Opera wallet for you, because Opera\u2019s own posts send you to no such thing. Expect the Ethereum and bitcoin sides to need different handling, as in the <a href=\"https:\/\/getbitcoin.guide\/articles\/metamask-seed-phrase\/\">MetaMask phrase guide<\/a> and the derivation path detail in <a href=\"https:\/\/getbitcoin.guide\/articles\/samourai-wallet-what-happened\/\">what happened to Samourai Wallet<\/a>. And because those words have spent years inside a browser, treat them as worn out: once the coins are visible again, the usual advice in self custody is to move them to a wallet whose words were generated fresh, whether that is one of <a href=\"https:\/\/getbitcoin.guide\/articles\/best-hot-wallet\/\">the phone and desktop wallets we compare<\/a> or <a href=\"https:\/\/getbitcoin.guide\/articles\/what-is-a-cold-wallet\/\">cold storage<\/a>. Opera is not the only maker to walk away from a wallet, and <a href=\"https:\/\/getbitcoin.guide\/articles\/gamestop-wallet\/\">what happened when GameStop shut its wallets<\/a> follows the same pattern, including why any claim portal that appears afterwards deserves no trust.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The broader lesson is about software, not about Opera. A wallet bundled into something else can be switched off by a product decision, with six months\u2019 notice if you are lucky. The coins do not care, provided the 12 words are on paper and you know which path they were walking.<\/p>\n\n\n\n<div class=\"msq-tool msq-check\" data-id=\"opera-wallet-check\" data-verb=\" done\">\n<h3>Before you decide the Opera bitcoin is gone<\/h3>\n<p>Safe checks that need no secret typed anywhere. Tick each one as you go.<\/p>\n<label><input type=\"checkbox\">Found the 12 word backup phrase on paper, not as a photo or a note on the phone<\/label>\n<label><input type=\"checkbox\">Found an old receiving address in an exchange&#8217;s withdrawal history<\/label>\n<label><input type=\"checkbox\">Looked that address up on a public block explorer, which needs no phrase<\/label>\n<label><input type=\"checkbox\">Noted whether the address begins with a 3 or with bc1q<\/label>\n<label><input type=\"checkbox\">Ignored every message, pop up or service offering to recover an Opera wallet<\/label>\n<label><input type=\"checkbox\">Planned to move any recovered coins to a wallet whose words were generated fresh<\/label>\n<p class=\"msq-check-count\"><\/p>\n<p class=\"msq-note\">General information from Opera&#8217;s own posts and the bitcoin standards, not advice. No page should ever ask you to type your phrase, and this one does not.<\/p>\n<\/div>\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 \">Can I still open the Opera Wallet in Opera One or Opera GX?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. Opera\u2019s desktop post of 20 June 2025 said the wallet would stop accepting new assets after 15 July 2025 and be removed on 1 January 2026, after which remaining assets would be inaccessible through Opera. The coins are still on chain and reachable with the 12 word phrase in another wallet.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Did Opera ever hold my coins or my keys?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. Opera described the wallet as non custodial from its 2018 Android launch onward, and its migration guides say your crypto is stored on the blockchain and controlled by the secret recovery phrase. The optional Opera Account backup kept a copy of the wallet for restoring it, but the keys were generated and used on your device.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Why did my Ethereum restore but not my bitcoin?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The Opera Wallet showed several chains under one screen, but each was derived from the phrase along its own path. Users on Opera\u2019s forum reported Ethereum balances appearing straight away while bitcoin showed nothing, and one reported that the bitcoin side used the BIP49 path. Opera has not documented this, so treat it as a user report.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Is the Opera Account backup still a way to recover the wallet?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Opera\u2019s June 2025 guide said a wallet saved to your Opera Account was the only route back for someone signed out without the phrase. Opera has published nothing this check found on whether that backup still opens anything now the wallet is removed, so the written 12 words should be treated as the only reliable copy.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What was the notice saying Opera disabled an extension for my safety?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>A GX staff member on r\/OperaGX said in March 2026 that this was the discontinued built in crypto wallet extension, a first party Opera extension, and that it could be removed safely. It is not evidence that anything was stolen. Any message that then asks for your recovery phrase is a different matter and is never genuine.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Did the Opera Crypto Browser have a separate wallet?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It shared the same wallet. Opera stopped updating the experimental Crypto Browser on 14 March 2024 and said its users could restore the wallet in the main Opera browser with the recovery phrase or an Opera Account backup. That main browser wallet has since been removed too, so the phrase is what is left.<\/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 general information about wallet security and is not financial advice. Nothing here is a recommendation to buy, sell or hold anything. Speak to a suitably qualified professional about your own situation, and remember that in self custody the security decisions are yours alone.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Opera Wallet no longer ships. Opera pulled it from Android in January 2025 and from iOS in April 2025, then removed it from Opera One and Opera GX on desktop on 1 January 2026. It was non custodial, so nothing left the chain: your 12 word backup phrase still controls the coins.<\/p>\n","protected":false},"author":1,"featured_media":740,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"Opera Wallet: What Happened and Where Your Bitcoin Is","rank_math_description":"The Opera Wallet was removed from every Opera browser by 1 January 2026. Coins stayed on chain, and this is why restored bitcoin can show a zero balance.","rank_math_focus_keyword":"opera 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-743","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\/743","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=743"}],"version-history":[{"count":6,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/743\/revisions"}],"predecessor-version":[{"id":801,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/posts\/743\/revisions\/801"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/media\/740"}],"wp:attachment":[{"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/media?parent=743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/categories?post=743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/getbitcoin.guide\/articles\/wp-json\/wp\/v2\/tags?post=743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}