UX peněženek pro začátečníky: Snižování kognitivní zátěže a rizika chybného podepisování

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 i 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“ nečitelný hexadecimální kód či dlouhý formulář EIP-712 a omylem udělí neomezená práva nebo podepíše smlouvu s jinou doménou, než zamýšlel. Klíčem ke snížení rizika není jen vzdělávání, 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 lidště ukazovat

  • EIP-155 transakce (on-chain): jasně ukázat chainId, to, value, data a decode kontraktové funkce, odhad gas 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: zdůraznit, že se jedná o strukturovaný 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í; zdůraznit rozdíl mezi loginem a finančním podpisem.

Principy 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é hex 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“ – zapnuté oprávnění, přístup k tokenu X, do kdy, s kým je spárováno.
  3. Minimální oprávnění: u approvals nabídnout slider „jen na tuto transakci“, limitovaný budget a auto-expire.
  4. Silná varování: pokud ApprovalForAll pro NFT → červený banner, vysvětlení rizika, odkaz na alternativu „jen 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. Labely a reputace: zobrazovat ověřené názvy kontraktů, ikony auditů, kategorie (DEX, Bridge, NFT Marketplace) a rizikové skóre.
  7. Simulace: před podpisem zobrazit simulované výsledky (přenesené tokeny, změny zůstatků, volané funkce) a na jaké adresy.
  8. Jednoznačná síť: velká značka sítě (chain badge) (Ethereum, L2, testnet); zabránit cross-chain omylům.
  9. Blokování neznámých typů: pokud formát neumí peněženka s jistotou dekódovat, výchozí stav = 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], Marketplace [Foo], Dosah [Všechny položky], Alternativa [pouze tokenId], Doporučení [vypnout po prodeji].
  • „Sign-in (SIWE)“: Doména [app.example], Účel [přihlášení], Expiruje [15 min], Žádná práva k tokenům – výslovně uvedeno.
  • „Nečitelný podpis“: „Toto není čitelná zpráva. Pravděpodobně se jedná 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 sníží allowance na 0; uživatel nastaví politiku per token/dApp.
  3. Session keys (pro dApps a hry): omezení (povolené cíle), denní budget, 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 referrery.
  5. Adresní bezpečnostní prvky: checksum, seskupování do bloků (0x1234 5678…), varování před confusable znaky v ENS, zvýraznění impersonation labelů.

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

  • „Podívej se na těchto 4 věcí“: 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 dApp adresy a poslední approvals.
  • „Sandbox“ adresa: peněženka nabídne sekundární účet s nízkým zůstatkem jako výchozí pro nové dApps.
  • „Čti nahlas“ (trik pro přístupnost): přeříct vlastními slovy, co se stane; pokud to nedokáže 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í budget po podpisu.
  • ERC-721/1155: raději per-item approvals; pokud dApp vyžaduje ApprovalForAll, UI vysvětlí proč a navrhne dočasný toggle.
  • Bridges: ukázat lock/mint/unwrap flow, protistranové 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 (self-destruct/proxy/upgrade riziko).“

Rizikové skóre a reputační kontext

  • Znalost kontraktu: ověřený zdroj, audit, doba existence, objem uživatelů.
  • Historie incidentů: varování u dApps s exploitmi nebo čerstvými upgrady 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í budget gas, 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 obnova s jasnými rolemi, prahy a časováním (prodleva 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 ověření na druhém zařízení pro rizikové akce (ApprovalForAll, velké částky).
  • Biometrie ≠ všelék: biometrie chrání odemknutí, 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 ne-ASCII 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žít mikro-edukační komponenty: „Proč je nekonečný allowance riziko?“ (60 vteřinové vysvětlení), „Co znamená setApprovalForAll?“ (animovaná ukázka), „Jak funguje SIWE?“ (ikonky, časová osa). UX se učí v momentu rozhodnutí, ne v dokumentu.

Checklist pro uživatele (před podpisem)

  • Je spender skutečně tím, koho očekávám? Znám jej podle labelu?
  • Je value/limit adekvátní? Mohu jej snížit?
  • Existuje deadline/expirace? Pokud ne, proč?
  • Sedí 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ě.
  • Přednastavené limitované approvals, auto-revoke, session timeouts.
  • Doménová kontrola 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.

Post-signature hygiena: dashboard a notifikace

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

Bezpečnost jako produktová vlastnost, ne dodatek

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.