UX peněženek pro začátečníky

Proč jsou „špatné podpisy“ problém a co s tím má UX

Podpisy v peněženkách jsou více než jen potvrzení transakcí. V ekosystému Web3 podepisujete také zprávy bez poplatku (off-chain), oprávnění (approvals), delegace, přihlášení (SIWE) či meta-transakce. Začátečník bez kontextu často „odklikne“ nesrozumitelný hexadecimální zápis či dlouhý formulář EIP-712 a omylem udělí neomezená práva nebo podepíše smlouvu s jinou doménou, než zamýšlel. Klíč ke snížení rizika není jen edukace, ale především UX peněženek: jak informace zobrazit, přednastavit bezpečné volby a zásadně snížit počet chybujících rozhodnutí.

Typy podpisů: co by měla peněženka lidsky ukázat

  • EIP-155 transakce (on-chain): zřetelně zobrazit chainId, to, value, data a decode kontraktové funkce, odhad gasu a state diffs (co se změní).
  • EIP-712 typed data: název domény (domain.name), verifyingContract, chainId, statement a pole rozparsovaná do sekcí (spender, amount, deadline…). Zobrazit překlad do přirozeného jazyka.
  • personal_sign / EIP-191: zvýraznit, že jde o nestrukturovaný text; varování při binárním/hex obsahu nebo nečitelném bloku.
  • Permit / Permit2: explicitně ukázat token, spender, limit, deadline, nonce a možnost upravit limit před podpisem.
  • SIWE (Sign-In With Ethereum): URI, doména, scope, expirace, nonce, čas vydání; zvýraznit rozdíl mezi přihlášením a finančním podpisem.

Zásady bezpečného UX pro začátečníky

  1. Výchozí čitelnost: vždy decode kontraktová volání a EIP-712; nic v čisté hexadecimální podobě. Použít známé aliasy funkcí (ERC-20/721/1155, Permit, setApprovalForAll).
  2. Kontext a důsledek: zobrazit „co přesně se stane po podpisu“ – aktivované oprávnění, přístup k tokenu X, do kdy, s kým spojené.
  3. Minimální oprávnění: u approvals nabídnout posuvník „pouze na tuto transakci“, limitovaný rozpočet a automatické vypršení platnosti.
  4. Silná varování: pokud ApprovalForAll pro NFT → červený banner, vysvětlení rizika, odkaz na alternativu „pouze konkrétní položky“.
  5. Doménová vazba: porovnat otevřenou stránku a domain.name v podpisu; pokud nesedí, blokovat nebo vyžadovat dvojí potvrzení.
  6. Popisky a reputace: zobrazovat ověřené názvy kontraktů, ikony auditů, kategorie (DEX, Bridge, NFT Marketplace) a rizikové skóre.
  7. Simulace: před podpisem ukázat simulované výsledky (přenesené tokeny, změny zůstatků, volané funkce) a na které adresy.
  8. Jednoznačná síť: výrazný chain badge (Ethereum, L2, testnet); zabránit cross-chain omylům.
  9. Blokování neznámého typu: pokud formát peněženka nedokáže s jistotou dekódovat, výchozí = nepovolit bez dodatečné verifikace.

Vzorové obrazovky a jejich obsah (mentální model)

  • „Sign Permit“: Token [USDC], Spender [dApp XYZ], Limit [upravit], Expirace [upravit], Revoke-after [přepínač], Zobrazit historii oprávnění pro tento token.
  • „ApprovalForAll“: Kolekce [CoolNFT], Market [Foo], Rozsah [Všechny položky], Alternativa [jen tokenId], Doporučení [vypnout po prodeji].
  • „Sign-in (SIWE)“: Doména [app.example], Účel [přihlášení], Expirace [15 min], Žádná práva k tokenům – výslovně uvedeno.
  • „Nesrozumitelný podpis“: „Toto není čitelná zpráva. Pravděpodobně jde o kód/hex. Pokračováním riskujete trvalé oprávnění nebo předání kontroly.“ [Zamítnout] [Další ověření].

Schémata snižování rizika v návrhu peněženky

  1. Just-in-time approvals: peněženka při potvrzení swapu sama navrhne dočasné nebo limitované oprávnění místo neomezeného.
  2. Auto-revoke: plánovač, který po X hodinách/dnech nastaví allowance zpět na 0; uživatel nastaví politiku na token/dApp.
  3. Session keys (pro dApps a hry): scope (povolené cíle), denní rozpočet, automatický timeout, vizuální indikátor aktivní session.
  4. Antiphishing vrstva: kontrola Punycode/domén, varování při rozdílech (app.example vs app-example), QS parametry a referrer.
  5. Zabezpečovací prvky adres: kontrolní součet, seskupování do bloků (0x1234 5678…), varování před confusable znaky v ENS, zvýraznění impersonation štítků.

Uživatelské rituály: co učit začátečníky v UI

  • „Podívej se na tyto 4 věci“: spender / value / deadline / chainId. V UI mít krátký checklist a tooltipy.
  • „Dva kroky při pochybnostech“: zavřít modál, otevřít revoke/security dashboard, ověřit adresy dApp a poslední oprávnění.
  • „Sandbox“ adresa: peněženka nabídne sekundární účet s nízkým zůstatkem jako výchozí pro nové dApps.
  • „Čti nahlas“ (accessibility trik): přeříkat vlastními slovy, co se stane; pokud to neumí zopakovat, nepodepisovat.

Specifika podle standardu: co by měl začátečník vidět

  • ERC-20 Permit/Permit2: vždy editovatelný limit, výběr „jen 1 transakce“, zobrazit zbývající rozpočet po podpisu.
  • ERC-721/1155: raději schvalování po položkách; pokud dApp vyžaduje ApprovalForAll, UI vysvětlí proč a navrhne dočasný toggle.
  • Bridges: ukázat lock/mint/unwrap postup, protistranné adresy, canonical vs 3rd-party označení.

Simulace a „state diffs“ jako poslední obrana

Klíčové UX je simulovat transakci a zobrazit změny stavů: „Z účtu A odejde 100 USDC → na adresu B; oprávnění pro kontrakt C se nastaví na 1 000 USDC do 2025-12-31.“ Při nejednoznačnosti zobrazit banner: „Výsledek nelze 100 % předvídat (riziko self-destruct/proxy/upgrade).“

Rizikové skóre a reputační kontext

  • Znalost kontraktu: ověřený zdroj, audit, délka existence, počet uživatelů.
  • Historie incidentů: varování při dApps s exploitmi nebo čerstvými aktualizacemi implementace.
  • Chování: neobvyklé požadavky (ApprovalForAll bez důvodu, vysoká hodnota, žádná expirace).

AA peněženky (EIP-4337) a nová vrstva UX

Account Abstraction umožňuje moduly, paymastery a session keys. UX pravidla:

  • Paymaster limity: denní rozpočet gasu, povolené dApps, možnost freeze.
  • Moduly: vždy viditelné kdo a co může volat; rychlé vypnutí modulu jedním klikem.
  • Recovery UX: sociální/multisig obnovu s jasnými rolemi, prahy a časováním (zpoždění před aktivací).

Hardware, mobil a multikanálová potvrzení

  • Hardwarová peněženka: na displeji musí být přehledné to, amount, token a zkrácený spender; varovat při blind-signingu.
  • Dvojí potvrzení: možnost vyžadovat potvrzení na druhém zařízení pro rizikové akce (ApprovalForAll, vysoké částky).
  • Biometrie ≠ všelék: biometrie chrání odemčení, ne kvalitu rozhodnutí; rozhodnutí musí být informované.

Antifraud a detekce phishingu

  • Origin/Referrer/Frame guard: nedovolit, aby externí iframe inicioval podpis bez kontextu.
  • Punycode/IDN: zvýraznit neASCII domény (xn--), zobrazovat i ASCII ekvivalent.
  • Blocklist/Allowlist: možnost nastavit osobní allowlist dApps; ostatní vyžadují extra potvrzení.

Vzdělávací mikro-momenty v UI

Místo textových zdí používat mikro-edukační komponenty: „Proč je nekonečný allowance riziko?“ (60sekundové vysvětlení), „Co znamená setApprovalForAll?“ (animovaná ukázka), „Jak funguje SIWE?“ (ikonky, časová osa). UX se učí v momentě rozhodnutí, nikoli v dokumentu.

Checklist pro uživatele (před podpisem)

  • Je spender tím, co očekávám? Znám ho podle popisku?
  • Je hodnota/limit přiměřený? Mohu jej snížit?
  • Existuje deadline/expirace? Pokud ne, proč?
  • Souhlasí doména a chainId s tím, kde právě jsem?
  • Rozumím důsledku (co se stane ihned po potvrzení)?

Checklist pro tvůrce peněženek (UX a bezpečnost)

  • 100 % dekódování EIP-712 a kontraktových volání pro běžné standardy.
  • Simulace a state diffs před podpisem s varováním při nejistotě.
  • Výchozí limitované approvals, auto-revoke, ukončení session.
  • Kontrola domény a antiphishing vrstva (IDN, referrer, cross-origin blokování).
  • Rychlé „panic“ tlačítko: zobrazit a zrušit všechna oprávnění jedním klikem.

Hygiena po podpisu: dashboard a notifikace

Po podpisu peněženka nabídne: „Chcete nastavit automatické odvolání za 24 hodin?“ a „Přidat spendera do watchlistu?“. Notifikace při prvním použití oprávnění, při blížící se expiraci, při upgradu kontraktu či změně implementace proxy.

Bezpečnost jako produktová vlastnost, nikoli doplněk

Nejlepší obranou proti „špatným podpisům“ je navrhnout peněženku tak, aby bylo těžké udělat chybu. Výchozí limity, lidská vysvětlení, simulace a kontextová varování mění riziková rozhodnutí na informovaná. Začátečník nemusí znát všechny EIP – potřebuje rozumět důsledkům jednoho kliknutí. Úkolem peněženky je tyto důsledky jasně a včas ukázat a poskytnout bezpečnou zkratku: méně práv, kratší trvání, více kontroly.