UX peněženek pro začátečníky: jak minimalizovat riziko nesprávných podpisů

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“ nesrozumitelný hexadecimální řetězec či dlouhý EIP-712 formulář 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ě omezit počet chybujících rozhodnutí.

Typy podpisů: co má peněženka ukazovat srozumitelně

  • EIP-155 transakce (on-chain): jasně zobrazit chainId, to, value, data & 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 běžného jazyka.
  • personal_sign / EIP-191: zvýraznit, že jde o nestrukturovaný text; varování při binárním/hex obsahu nebo nesrozumitelné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 přihlášením a finančním podpisem.

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

  1. Přednastavená č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“ – aktivní oprávnění, přístup k tokenu X, do kdy, s kým spojené.
  3. Minimální oprávnění: u approvals nabídnout slider „pouze na tuto transakci“, limitovaný rozpočet a auto-expiraci.
  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í, zablokovat nebo vyžadovat dvojí potvrzení.
  6. Štítky 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á volání) a na které adresy.
  8. Jednoznačná síť: výrazný chain badge (Ethereum, L2, testnet); zabránit chybám cross-chain.
  9. Blokování neznámého typu: pokud formát peněženka nedokáže s jistotou dekódovat, výchozí = nepovolit bez další 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], Rozsah [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ě uvedená.
  • „Nesrozumitelný podpis“: „Toto není srozumitelná 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 sníží allowance na 0; uživatel nastaví politiku per 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. Adresní bezpečnostní prvky: checksum, 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 těchto 4 věcí“: spender / value / deadline / chainId. V UI mít krátký checklist a tooltipy.
  • „Dva kroky při pochybnosti“: 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“ (trik pro přístupnost): přečíst 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, možnost výběru „pouze 1 transakce“, zobrazit zbývající budget po podpisu.
  • ERC-721/1155: raději per-item oprávnění; pokud dApp vyžaduje ApprovalForAll, UI vysvětlí proč a navrhne dočasný toggle.
  • Bridges: ukázat lock/mint/unwrap tok, 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 (riziko self-destruct/proxy/upgrade).“

Rizikové skóre a reputační kontext

  • Známost kontraktu: ověřený zdroj, audit, délka existence, objem uživatelů.
  • Historie incidentů: varování u dApps s exploitmi nebo nedávný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 časovacím delayem 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.
  • Dvojité potvrzení: možnost vyžadovat potvrzení na druhém zařízení pro rizikové akce (ApprovalForAll, vysoké částky).
  • Biometrie ≠ všelék: biometrie chrání odemknutí, nikoli 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í další potvrzení.

Vzdělávací mikro-momenty v UI

Místo textových zdí použít mikroedukač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 dokumentaci.

Checklist pro uživatele (před podpisem)

  • Je spender ten, koho očekávám? Znám ho podle štítku?
  • Je value/limit přiměřený? Mohu jej snížit?
  • Existuje deadline/expirace? Pokud ne, proč?
  • Sedí doména a chainId s místem, 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 nabídne peněženka: „Chcete nastavit automatickou revokaci za 24 h?“ a „Přidat spendera na watchlist?“. 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 dodatek

Nejlepší obranou proti „špatným podpisům“ je navrhnout peněženku tak, aby bylo těžké udělat chybu. Přednastavené limity, srozumitelná 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.