Prečo sú „zlé podpisy“ problém a čo s tým má UX
Podpisy v peňaženkách sú viac než len potvrdenia transakcií. V ekosystéme Web3 podpisujete aj správy bez poplatku (off-chain), povolenia (approvals), delegácie, prihlásenia (SIWE) či meta-transakcie. Nováčik bez kontextu často „odklikne“ nečitateľný hexadecimal či dlhý EIP-712 formulár a omylom udelí neobmedzené práva alebo podpíše zmluvu s inou doménou, než zamýšľal. Kľúč k zníženiu rizika nie je len edukácia, ale predovšetkým UX peňaženiek: ako informácie zobraziť, predvolene nastaviť bezpečné voľby a zásadne znížiť počet chýbateľných rozhodnutí.
Typy podpisov: čo má peňaženka ukazovať ľudsky
- EIP-155 transakcia (on-chain): zreteľne ukázať chainId, to, value, data & decode kontraktovej funkcie, odhad gas a state diffs (čo sa zmení).
- EIP-712 typed data: názov domény (domain.name), verifyingContract, chainId, statement a polia rozparsované do sekcií (spender, amount, deadline…). Zobraziť preklad do prirodzeného jazyka.
- personal_sign / EIP-191: zvýrazniť, že ide o neštruktúrovaný text; varovanie pri binárnom/hex obsahu alebo nečítaľnom blobe.
- Permit / Permit2: explicitne ukázať token, spender, limit, deadline, nonce, a možnosť upraviť limit pred podpisom.
- SIWE (Sign-In With Ethereum): URI, doména, scope, expirácie, nonce, čas vydania; zvýrazniť rozdiel medzi loginom a finančným podpisom.
Princípy bezpečného UX pre nováčikov
- Predvolená čitateľnosť: vždy decode kontraktové volania a EIP-712; nič v čistej hex forme. Použiť známe aliasy funkcií (ERC-20/721/1155, Permit, setApprovalForAll).
- Kontext a dôsledok: zobraziť „čo presne sa stane po podpise“ – zapnuté povolenie, prístup k tokenu X, do kedy, s kým spárované.
- Minimálne povolenia: pri approvals ponúknuť slider „len na túto transakciu“, limitovaný budget a auto-expire.
- Silné varovania: ak ApprovalForAll pre NFT → červený banner, vysvetlenie rizika, odkaz na alternatívu „len konkrétne položky“.
- Doménová väzba: porovnať otvorenú stránku a domain.name v podpise; ak nesedia, blokovať alebo vyžadovať dvojité potvrdenie.
- Labely a reputácia: zobrazovať overené názvy kontraktov, ikony auditov, kategórie (DEX, Bridge, NFT Marketplace) a rizikové skóre.
- Simulácia: pred podpisom ukázať simulované výsledky (prenesené tokeny, zmeny zostatkov, volané volania) a na ktoré adresy.
- Jednoznačná sieť: veľký chain badge (Ethereum, L2, testnet); zabrániť cross-chain omylom.
- Blokovanie neznámeho typu: ak formát nedokáže peňaženka s istotou dekódovať, default = nepovoliť bez dodatočnej verifikácie.
Vzorové obrazovky a ich obsah (mentálny model)
- „Sign Permit“: Token [USDC], Spender [dApp XYZ], Limit [upraviť], Expiration [upraviť], Revoke-after [prepínač], Zobraziť históriu povolení pre tento token.
- „ApprovalForAll“: Kolekcia [CoolNFT], Marketplace [Foo], Dosah [Všetky položky], Alternatíva [iba tokenId], Odporúčanie [vypnúť po predaji].
- „Sign-in (SIWE)“: Doména [app.example], Účel [prihlásenie], Expiruje [15 min], Žiadne práva k tokenom – výslovne uvedené.
- „Nečitateľný podpis“: „Toto nie je čitateľná správa. Pravdepodobne ide o kód/hex. Pokračovaním riskujete trvalé povolenie alebo odovzdanie kontroly.“ [Odmietnuť] [Ďalšie overenie].
Schémy znižovania rizika v návrhu peňaženky
- Just-in-time approvals: peňaženka pri potvrdení swapu sama navrhne dočasné alebo limitované povolenie, namiesto neobmedzeného.
- Auto-revoke: plánovač, ktorý po X hodinách/dňoch zníži allowance na 0; používateľ nastaví politiku per token/dApp.
- Session keys (pre dApps a hry): scoping (povolené ciele), denný budget, automatický timeout, vizuálny indikátor aktívnej session.
- Antiphishing vrstva: kontrola Punycode/domén, varovanie pri rozdieloch (app.example vs app-example), QS parametre a referrery.
- Adresné bezpečnostné prvky: checksum, zoskupovanie do blokov (0x1234 5678…), varovanie pred confusable znakmi v ENS, zvýraznenie impersonation labelov.
Užívateľské rituály: čo učiť nováčikov v UI
- „Pozri sa na tieto 4 veci“: spender / value / deadline / chainId. V UI mať krátky checklist a tooltipy.
- „Dva kroky pri pochybnosti“: zavrieť modál, otvoriť revoke/security dashboard, overiť dApp adresy a posledné approvals.
- „Sandbox“ adresa: peňaženka ponúkne sekundárny účet s nízkym zostatkom ako predvolený pre nové dApps.
- „Čítaj nahlas“ (accessibility trik): prečítať vlastnými slovami, čo sa udeje; ak to nevie zopakovať, nepodpisovať.
Špecifiká podľa štandardu: čo by mal nováčik vidieť
- ERC-20 Permit/Permit2: vždy editovateľný limit, výber „len 1 transakcia“, zobraziť zostávajúci budget po podpise.
- ERC-721/1155: radšej per-item approvals; ak dApp vyžaduje ApprovalForAll, UI vysvetlí prečo a navrhne dočasný toggle.
- Bridges: ukázať lock/mint/unwrap flow, protistranové adresy, canonical vs 3rd-party označenie.
Simulácia a „state diffs“ ako posledná obrana
Kľúčové UX je simulovať transakciu a zobraziť zmeny stavov: „Z účtu A odíde 100 USDC → na adresu B; povolenie pre kontrakt C sa nastaví na 1 000 USDC do 2025-12-31.“ Pri nejednoznačnosti zobraziť banner: „Výsledok nemožno 100 % predvídať (self-destruct/proxy/upgrade riziko).“
Rizikové skóre a reputačný kontext
- Známosť kontraktu: overený zdroj, audit, dĺžka existencie, objem užívateľov.
- História incidentov: varovanie pri dApps s exploitmi alebo čerstvými upgrade-mi implementácie.
- Správanie: neobvyklé požiadavky (ApprovalForAll bez dôvodu, veľká hodnota, žiadna expirácia).
AA peňaženky (EIP-4337) a nová vrstva UX
Account Abstraction umožňuje moduly, paymasterov a session keys. UX pravidlá:
- Paymaster limity: denný budget gas, povolené dApps, možnosť freeze.
- Moduly: vždy viditeľné kto a čo môže volať; rýchle vypnutie modulu jedným klikom.
- Recovery UX: sociálne/multisig obnovenie s jasnými rolami, prahmi a časovaním (delay pred aktiváciou).
Hardvér, mobil a multikanálové potvrdenia
- Hardvérová peňaženka: na displeji musí byť prehľadné to, amount, token a skrátený spender; varovať pri blind-signingu.
- Duálne potvrdenie: možnosť vyžadovať potvrdenie na druhom zariadení pre rizikové akcie (ApprovalForAll, veľké sumy).
- Biometria ≠ všeliek: biometria chráni odomknutie, nie kvalitu rozhodnutia; rozhodnutie musí byť informované.
Antifraud a detekcia phishingu
- Origin/Referrer/Frame guard: nedovoliť, aby externý iframe inicioval podpis bez kontextu.
- Punycode/IDN: zvýrazniť neASCII domény (xn--), zobrazovať aj ASCII ekvivalent.
- Blocklist/Allowlist: možnosť nastaviť osobnú allowlist dApps; ostatné vyžadujú extra potvrdenie.
Vzdelávacie mikro-momenty v UI
Namiesto textových stien použiť mikro-edukačné komponenty: „Prečo je nekonečný allowance riziko?“ (60-sekundové vysvetlenie), „Čo znamená setApprovalForAll?“ (animovaná ukážka), „Ako funguje SIWE?“ (ikonky, časová os). UX sa učí v momente rozhodnutia, nie v dokumente.
Checklist pre používateľov (pred podpisom)
- Je spender to, čo očakávam? Poznám ho podľa labelu?
- Je value/limit primeraná? Viem ju znížiť?
- Existuje deadline/expirácia? Ak nie, prečo?
- Sedí doména a chainId s tým, kde práve som?
- Rozumiem dôsledku (čo sa stane hneď po potvrdení)?
Checklist pre tvorcov peňaženiek (UX a bezpečnosť)
- 100 % dekódovanie EIP-712 a kontraktových volaní pre bežné štandardy.
- Simulácia a state diffs pred podpisom s varovaním pri neistote.
- Predvolené limitované approvals, auto-revoke, session timeouts.
- Doménová kontrola a antiphishing vrstva (IDN, referrer, cross-origin blokovanie).
- Rýchle „panic“ tlačidlo: zobraziť a zrušiť všetky povolenia na jeden klik.
Post-signature hygiena: dashboard a notifikácie
Po podpise peňaženka ponúkne: „Chceš nastaviť automatickú revokáciu za 24 h?“ a „Pridať spendera na watchlist?“. Notifikácie pri prvom použití povolenia, pri blížiacej sa expirácii, pri upgrade kontraktu či zmene implementácie proxy.
Bezpečnosť ako produktová vlastnosť, nie dodatok
Najlepšia obrana proti „zlým podpisom“ je navrhnúť peňaženku tak, aby bolo ťažké spraviť chybu. Predvolené limity, ľudské vysvetlenia, simulácie a kontextové varovania menia rizikové rozhodnutia na informované. Nováčik nepotrebuje poznať všetky EIP – potrebuje rozumieť dôsledkom jedného kliknutia. Úlohou peňaženky je tieto dôsledky jasne a včas ukázať a poskytnúť bezpečnú skratku: menej práv, kratšie trvanie, viac kontroly.