Extensia de Browser QoreX
Extensia de browser QoreX este portofelul QoreChain pentru desktop. Este un portofel de sine stătător — creezi sau imporți un portofel, deții și trimiți QOR și te conectezi la dApp-uri — și este elementul care permite oricărui site web să descopere QoreX și să transforme fiecare cerere într-o aprobare explicită și decodată.
Este live și public pe trei magazine.
Instalare
| Browser | Instalare |
|---|---|
| Chrome și browsere bazate pe Chromium (Brave, Edge, Arc, Opera) | https://chromewebstore.google.com/detail/qorex/cflpnggbnnifibblifgbeobogdpfjpcg |
| Firefox | https://addons.mozilla.org/firefox/addon/qorex/ |
| Safari (macOS 10.14 sau mai recent) | https://apps.apple.com/us/app/qorex-wallet/id6794132220 |
Ce versiune este live unde
Recenziile magazinelor ajung în momente diferite, astfel încât versiunea publicată diferă în prezent de la un browser la altul:
| Browser | Versiune publicată |
|---|---|
| Firefox | 0.2.6 |
| Safari (macOS) | livrată în interiorul aplicației macOS QoreX Wallet, care folosește propria numerotare 1.x — Mac App Store servește în prezent 1.6 (conține extensia 0.2.6) |
| Chrome / Chromium | A rămas blocată în spatele unei revizuiri îndelungate a magazinului, la finalul lunii august — verifică direct listarea din Chrome Web Store pentru versiunea ei curentă, în loc să te bazezi pe un număr scris aici |
Este posibil ca funcțiile mai noi să nu fie încă live în browserul tău — verifică tabelul de mai sus înainte de a presupune că ceva descris aici este disponibil. Dacă Dashboard-ul îți spune că extensia ta trebuie actualizată, înseamnă că acțiunea respectivă are o versiune minimă specifică (de exemplu 0.2.2, pentru staking) — nu că build-ul tău este în general vechi.
0.1.5 a adăugat descoperirea prin Solana Wallet Standard, deblocarea cu passkey, o lane SVM pentru dApp complet implementată și puntea de conectare cu Dashboard-ul. (Versiunea 0.1.4 nu a fost niciodată publicată — modificările ei ajung la utilizatori odată cu 0.1.5.)
0.1.6–0.1.9 au adăugat, în ordine: trimiteri care țin cont de vesting, cu mesaje sincere de refuz din partea băncii; adresa contului și soldul live afișate direct pe ecranul principal al popup-ului; și, în 0.1.9, plata către un @handle direct din Send, un ecran Receive cu cod QR al adresei, un selector de limbă (zece limbi, potrivind setul aplicației mobile) și eliminarea unei confuze "date a următoarei deblocări" din soldul de vesting.
0.2.2 a adăugat staking, direct din extensie — propriul ecran Stake (validatori cu comision, totalul tău în stake, recompensele în așteptare și delegare / unstake / revendicare); mai multe conturi dintr-o singură frază de recuperare, la fel ca aplicația mobilă; corecția care permite butonului de staking al Dashboard-ului să ajungă efectiv la extensie (un portofel creat doar în extensie nu putea anterior să facă staking prin Dashboard deloc — vezi puntea către Dashboard); revendicarea funcțională a @handle-ului din browser; și numărul de build afișat în subsolul popup-ului.
Suprafața de permisiuni nu s-a schimbat din versiunea 0.1.3 — vezi Ce permisiuni cere QoreX.
Pe Safari, aprobările se deschid într-o filă de browser, nu într-o fereastră popup — extensia este împachetată cu wrapper-ul Apple pentru extensii web Safari, folosind aceeași bază de cod.
Creează sau restaurează un portofel
Deschide popup-ul și alege:
- Create wallet — generează pe dispozitivul tău o frază de recuperare nouă din 24 de cuvinte (entropie de 256 de biți), derivă identitatea ta QoreChain și o sigilează în seif sub o parolă (și, opțional, un passkey — vezi Securitate).
- Import wallet — restaurează dintr-o frază existentă de 24 de cuvinte.
Extensia deține propriile chei; nu necesită aplicația mobilă. Poți, de asemenea, exporta mnemonica din popup. Cheile nu părăsesc niciodată dispozitivul.
Extensia poate acum crea și comuta între mai multe conturi din aceeași frază de recuperare, la fel ca aplicația mobilă — fraza pe care ai notat-o deja restaurează fiecare dintre ele. Comutarea mută totul odată cu ea: trimiterea, staking-ul, primirea și @handle-ul tău urmează întotdeauna contul activ. Portfolio, Q-Day Scanner, recuperarea socială, Legacy Protocol, cererile de plată și asocierea dispozitivelor rămân disponibile doar pe mobil — vezi QoreX Wallet pentru comparația completă.
Contul, soldul și @handle-ul tău
Ecranul de repaus al popup-ului afișează adresa ta qor1… (atinge pentru a copia) și soldul tău live de QOR, astfel încât nu trebuie să deschizi un explorator de blocuri pentru a le verifica.
Solduri blocate (vesting)
Dacă contul tău deține QOR aflat în vesting (de exemplu, o alocare TGE nedeblocată încă), soldul se împarte în disponibil acum și încă blocat, iar o trimitere care depășește suma disponibilă este refuzată înainte de a ajunge la rețea, în loc să eșueze on-chain după ce a perceput deja un comision. QoreX în mod deliberat nu afișează aici o "dată a următoarei deblocări": un program de vesting poate fi modificat prin guvernanță, astfel încât o dată afișată pe cardul de sold ar fi citită ca o promisiune pe care QoreX nu o poate garanta. Împărțirea disponibil-vs-blocat este ceea ce rămâne mereu exact.
Revendică un @handle
Din popup poți revendica un @handle unic (de exemplu @liviu) pentru adresa acestui cont, la fel ca în aplicația mobilă. Revendicarea este semnată cu cheia proprie a contului și se leagă de acea adresă, astfel încât aplicația mobilă și Dashboard-ul o pot rezolva atunci când cineva îți trimite bani. Vezi @handle pentru modul în care handle-urile sunt legate de adrese (nu de un portofel ca întreg).
Trimite către un @handle
Începând cu 0.1.9 poți plăti direct un @handle înregistrat, în loc să cauți o adresă:
- Deschide popup-ul și atinge Send.
- În câmpul destinatarului, scrie
@urmat de handle (de exemplu@liviu) în loc de o adresăqor1…. - QoreX rezolvă handle-ul și îți arată adresa rezolvată înainte să semnezi orice — verifică mereu aceasta față de ce te aștepți.
- Introdu suma și confirmă.
Rezolvarea este verificată în două moduri înainte ca QoreX să o folosească: o atestare de registru verificată față de o cheie de încredere integrată în extensie, și semnătura proprie a proprietarului handle-ului peste revendicare. Un răspuns care eșuează la oricare dintre verificări este respins categoric — QoreX nu recurge la afișarea unei adrese neverificate. Prima dată când plătești un anumit handle, QoreX reține (fixează) adresa la care s-a rezolvat; dacă acel handle se rezolvă ulterior la o adresă diferită, QoreX se oprește și îți arată integral atât adresa veche, cât și cea nouă, ca să poți decide dacă vrei să continui. Această memorare există per browser — plătirea aceluiași handle pentru prima dată dintr-un alt browser sau computer îl arată ca nou și acolo. Este comportamentul așteptat, nu o eroare.
Receive
Atinge Receive în popup pentru a-ți afișa adresa qor1… sub formă de cod QR (cu pictograma QoreChain integrată), alături de un buton de copiere — scaneaz-o de pe un telefon sau lipește adresa direct.
Fă staking din extensie
Începând cu 0.2.2, popup-ul are propriul ecran Stake — un portofel creat doar în extensie nu mai are nevoie de aplicația mobilă pentru a câștiga recompense din staking.
- Deschide popup-ul și mergi la Stake.
- Ecranul listează validatorii activi cu comisionul lor, totalul tău aflat curent în stake și orice recompense în așteptare de revendicat. Validatorii pe care rețeaua i-a întemnițat (jailed) sunt excluși din listă — delegarea către unul dintre ei nu este niciodată ceea ce vrei.
- Pentru a delega, alege un validator și o sumă, apoi confirmă. QoreX semnează cu semnătura hibridă post-cuantică obligatorie, la fel ca la o trimitere.
- Unstake și claim funcționează din același ecran. Unstake-ul pornește perioada de unbonding de 21 de zile — vezi Staking & Delegation pentru ce înseamnă asta.
- Începând cu 0.2.6, poți de asemenea muta stake-ul la un alt validator (redelegare) — fără așteptare de unbonding, fără penalizare, iar recompensele continuă să curgă pe tot parcursul. Vezi Mută stake-ul între validatori pentru cum funcționează (mecanismul este identic între aplicație și extensie).
Staking-ul, delegarea și recompensele au loc exclusiv pe lane-ul Native, niciodată printr-un precompile EVM.
Aprobarea unei cereri de staking din Dashboard
Dashboard-ul QoreChain compune cererile de staking, dar nu le poate semna — cheia ta nu părăsește niciodată seiful extensiei. Când apeși Continue in QoreX pe Dashboard, cererea se deschide în extensie pentru ca tu să o verifici (validator și sumă) și să o aprobi, exact ca la o trimitere. Această conexiune a fost întreruptă în 0.2.1 (extensia se raporta ca "prea veche" chiar și atunci când era cel mai nou build publicat — problema reală era un pas intern lipsă, nu vechimea versiunii); a fost corectată începând cu 0.2.2. Dacă folosești un build mai vechi, vezi ce versiune este live unde.
Dashboard-ul afișează ocazional o tranzacție ca downgraded, în loc de un succes curat. Asta înseamnă că fondurile tale s-au mutat, dar stratul de semnătură post-cuantică nu a fost găsit on-chain pentru acea tranzacție — nu este ceva ce ai făcut greșit și nu este ceva ce poți repara din partea ta. Este o eroare de partea noastră; te rugăm să o raportezi echipei de suport ca să putem investiga. Mesajul rămâne deliberat pe ecran, în loc să dispară, ca să ai timp să-l citești și să-l raportezi.
Trimiterea pe rețele externe
Pe lângă QOR pe lane-ul Native, popup-ul poate trimite active pe rețele externe, toate derivate din aceeași frază de recuperare:
| Tip | Rețele | Token-uri incluse |
|---|---|---|
| EVM | Ethereum, BNB Chain, Polygon, Arbitrum, Base, OP Mainnet, Avalanche C-Chain | Intrări ERC-20 (USDC și USDT pe toate lanțurile EVM, DAI pe Ethereum) |
| SVM | Solana | Intrări SPL (USDC, USDT) |
| Cosmos | Cosmos Hub, Osmosis, Celestia | Noble USDC prin IBC; câmp opțional de memo |
Înainte ca un transfer extern să fie trimis, trebuie să bifezi o confirmare explicită: "Rețelele externe acceptă doar semnături clasice — spre deosebire de QOR-ul tău, acest transfer NU este sigur din punct de vedere cuantic." Lanțurile externe nu pot purta o semnătură post-cuantică, iar QoreX nu ascunde niciodată acest lucru.
Standarde de portofel acceptate
QoreX expune trei interfețe, toate injectate în pagină ca window.qorex ({ evm, native, svm }) și descoperite prin contractele de detecție @qorechain/connect.
| Standard | Ce este | Ce înseamnă pentru tine ca dezvoltator |
|---|---|---|
| EIP-1193 | API-ul JavaScript al furnizorului Ethereum (request(...), evenimente). | Codul tău existent din ethers.js / viem / web3.js comunică cu lane-ul EVM al QoreX neschimbat; codurile de eroare numerice (de ex. 4902) sunt transmise ca atare. |
| EIP-6963 | Descoperirea furnizorilor de portofele multiple (evenimente announce / request). | QoreX se anunță alături de fiecare alt portofel — nu suprascrie niciodată window.ethereum — astfel încât utilizatorul alege QoreX per site, fără conflicte. |
signDirect în stilul Keplr | Un furnizor de tip Cosmos OfflineDirectSigner pe window.qorex.native. | dApp-urile de tip Cosmos semnează tranzacții pe lane-ul Native QoreChain la fel cum ar face-o cu Keplr; stratul post-cuantic este aplicat în prealabil (vezi Semnarea post-cuantică). |
| Solana Wallet Standard (de la 0.1.5) | Descoperire nativă de portofel pentru dApp-urile Solana (wallet-standard:register-wallet / app-ready). | dApp-urile Solana detectează automat QoreX — fără integrare personalizată. Funcții: standard:connect, standard:disconnect, standard:events, solana:signMessage, solana:signTransaction, solana:signAndSendTransaction; lanțul solana:mainnet; tranzacții atât legacy, cât și v0. |
Aceeași interfață este disponibilă și pe window.qorex.svm (connect / signAndSendTransaction / signMessage). Descoperirea automată Wallet-Standard și lane-ul SVM complet implementat au fost livrate în 0.1.5 și sunt live atât pe Chrome, cât și pe Firefox (vezi ce versiune este live unde).
Aprobările Solana afișează payload-ul decodat (destinatar și lamport pentru transferurile System, precum și lista de programe), resping tranzacțiile care nu listează portofelul tău ca semnatar și marchează semnătura drept clasică — vezi Semnarea post-cuantică.
Limbă
Extensia vorbește aceleași zece limbi ca aplicația mobilă, dashboard-ul și site-ul: engleză, română, germană, spaniolă, franceză, italiană, turcă, arabă, japoneză și coreeană. Aceasta urmează implicit limba browserului tău (revenind la engleză pentru orice altceva) — reține că aceasta este o sursă diferită față de aplicația mobilă, care urmează limba telefonului, astfel încât cele două pot afișa limbi diferite dacă telefonul și browserul tău sunt setate diferit. Un selector pe ecranul de repaus al popup-ului îți permite să suprascrii oricând limba detectată; comutarea la arabă întoarce imediat popup-ul de la dreapta la stânga, nu doar textul.
Securitate și permisiuni
QoreX este construit pentru a fi verificabil, nu doar de încredere:
-
Seif (Vault) — cheile tale sunt sigilate cu AES-256-GCM. Calea prin parolă își derivă cheia cu Argon2id (RFC 9106, memory-hard: 64 MiB, t=3, p=1), astfel încât un bloc de seif exfiltrat rezistă la spargere prin GPU/ASIC. (Blocurile legacy PBKDF2 rămân deschidibile și se re-sigilează în Argon2id la următoarea deblocare.)
-
Deblocare cu passkey (opțională, din 0.1.5) — acolo unde autentificatorul tău acceptă extensia WebAuthn PRF, QoreX poate debloca seiful din ieșirea PRF de 32 de octeți a passkey-ului, în loc de o parolă tastată. Parola ta rămâne întotdeauna o soluție de rezervă.
Unde apare deblocarea cu passkeyQoreX detectează automat WebAuthn și afișează opțiunea Enable passkey unlock doar acolo unde browserul o expune paginilor de extensie — adică Chrome și Edge. Pe Firefox opțiunea este ascunsă, pentru că Firefox nu expune WebAuthn paginilor de extensie. Acest lucru este așteptat, nu un bug.
-
Manifest V3 + CSP strict —
script-src 'self'; object-src 'self'; base-uri 'self'. Nu există nicio încărcare de cod la distanță după instalare și niciunwasm-unsafe-eval. -
Fără cont, fără telemetrie — fără analiză, fără urmărire, fără jurnalizare la distanță, fără înregistrare și fără e-mail. Listarea de pe Firefox declară colectarea de date ca
none.
Ce permisiuni cere QoreX și de ce
Această secțiune există pentru că listarea de pe Firefox afișează permisiunea "Access your data for all websites", care poate părea în contradicție cu un portofel care declară că nu are permisiuni de gazdă. Iată adevărul exact, neschimbat, din manifest.
manifest.json al extensiei declară:
"permissions": ["storage"],
"host_permissions": [],
"content_scripts": [
{ "matches": ["<all_urls>"], "js": ["dist/content.js"], "run_at": "document_start" }
]
permissions: ["storage"]— singura permisiune de API. Stochează seiful criptat și aprobările tale de conexiune per origine local, în stocarea extensiei.host_permissions: []— QoreX nu declară nicio permisiune de gazdă. Nu cere capacitatea de a face cereri de rețea cross-origin către site-uri arbitrare în numele tău.content_scriptscu potriviri<all_urls>— acesta este motivul onest pentru care Firefox afișează "Access your data for all websites." QoreX injectează un mic script furnizor (content.js→inpage.js) în fiecare pagină. Un content script care rulează pe toate site-urile poate tehnic citi pagina, iar browserele descriu această capacitate cu exact această formulare — indiferent dacă provine dinhost_permissionssau dintr-o potrivire de content script.
De ce content script-ul rulează peste tot. Pentru ca orice dApp să poată descoperi portofelul prin EIP-6963 fără să trebuiască să acorzi mai întâi acces per site. Așa funcționează MetaMask, Keplr, Phantom și orice alt portofel injectat: furnizorul injectat trebuie să fie prezent înainte ca scripturile paginii să ruleze (document_start), pe orice site vizitezi.
Ce face — și ce nu face — acest script. El doar face legătura mesajelor de portofel (anunță furnizorul, transmite cererile de conectare/semnare către service worker, returnează rezultatul). Nu citește conținutul paginii dincolo de acele cereri de portofel, nu trimite nimic către un server și nu încarcă cod la distanță — și nu poate prelua date cross-origin arbitrare pentru că nu există permisiuni de gazdă. Toate acestea sunt verificabile: extensia este blocată prin CSP, nu include analiză și pachetul pentru Firefox include o arhivă sursă reproductibilă.
Conectează un dApp la QoreX
Un dApp descoperă lane-ul EVM al QoreX prin EIP-6963. Announce-and-request, apoi folosește furnizorul EIP-1193 returnat:
import type { EIP6963ProviderDetail } from "./types";
const wallets = new Map<string, EIP6963ProviderDetail>();
// 1. Collect every wallet that announces itself.
window.addEventListener("eip6963:announceProvider", (event) => {
const detail = (event as CustomEvent<EIP6963ProviderDetail>).detail;
wallets.set(detail.info.rdns, detail);
});
// 2. Ask installed wallets to announce.
window.dispatchEvent(new Event("eip6963:requestProvider"));
// 3. Pick QoreX by its rdns and use the standard EIP-1193 provider.
const qorex = wallets.get("network.qore.qorex");
if (qorex) {
const accounts = await qorex.provider.request({ method: "eth_requestAccounts" });
console.log("QoreX EVM account:", accounts[0]);
}
Pentru lane-ul Native al QoreChain, folosește furnizorul în stil Keplr de la window.qorex.native (enable, getKey, signDirect). Pachetul de nivel superior @qorechain/connect învelește această detecție pentru tine.
Aprobările sunt per origine: prima conexiune la un site deschide un popup de aprobare care arată originea, aprobarea dezvăluie doar adresa ta publică, iar aprobarea unui site nu acordă nimic altui site.
Puntea către Dashboard (v0.1.5, extinsă în v0.2.2)
Versiunea 0.1.5 adaugă o punte limitată strict la dashboard.qorechain.io: window.qorex.native.connectProof(sessionId) semnează dovada de asociere Connect with QoreX (back-end-ul re-verifică semnătura), iar executeTransfer({ to, amountUqor, memo }) aprobă și transmite un transfer de QOR propus de Dashboard, returnând txHash. Aceste metode sunt refuzate pe orice altă origine.
0.2.2 adaugă native:executeRequest, care acceptă o cerere întreagă propusă de Dashboard — inclusiv staking — validată față de același parser comun pe care QoreX îl folosește peste tot: refuzată la o nepotrivire de rețea, o origine străină, o adresă care nu este a ta, un tip de cerere necunoscut sau o cerere de staking care conține un toAddress (cererile de staking nu au unul).
Deoarece o adresă qor1… este la fel de validă atât pe mainnet, cât și pe testnet, o cerere propusă de Dashboard specifică rețeaua vizată, iar QoreX refuză să acționeze asupra ei dacă aceasta nu se potrivește cu rețeaua la care extensia este conectată în prezent — nu va comuta niciodată rețele în numele unei cereri.
Semnarea post-cuantică
Fiecare transfer de QOR pe care QoreX îl inițiază este semnat cu o semnătură hibridă post-cuantică — ML-DSA-87 (Dilithium-5, NIST FIPS-204) alături de semnătura clasică secp256k1 — folosind pipeline-ul hibrid complet din @qorechain/sdk. Nu există comutator: QoreChain o impune, iar QoreX nu trimite niciodată un transfer de QOR pe lane-ul Native fără ea.
- Semnarea Native inițiată de dApp — dApp-urile construite pe fluxul qorechain-connect pre-adaugă extensia PQC (
/qorechain.pqc.v1.PQCHybridSignature) în corpul tranzacției înainte de a apelasignDirect; QoreX contribuie jumătatea clasică și refuză să semneze orb, decodând payload-ul și marcând dacă stratul PQC este prezent. - Cererile clasice sunt mereu etichetate — dacă o cerere nu conține niciun strat PQC sau vizează un lanț extern (ETH/BNB/etc., care nu poate purta PQC), QoreX afișează un avertisment explicit în loc să retrogradeze silențios.
Ce înseamnă asta pentru dimensiunea tranzacției. ML-DSA-87 este o semnătură mare: semnătura are 4,627 de octeți, iar cheia publică 2,592 de octeți (fixate de FIPS-204). O tranzacție hibridă QoreChain este, prin urmare, cu câțiva kiloocteți mai mare decât una pur clasică. Dacă îți construiești și transmiți singur tranzacțiile, dimensionează-ți buffer-ele și estimările de comision pentru octeții suplimentari; contabilizarea gazului din QoreChain îi așteaptă deja. Vezi Semnarea post-cuantică pentru primitive și cerința de semnare deterministă.