DCDROPCHECK
NástrojeOchrana před podvodyNávody na airdropyZáklady on-chainO nás

Jak zrušit schválení peněženky a chránit své tokeny

Prohlížení a rušení schválení: seznam allowance approve a tlačítko revoke
Spousta krádeží začíná u schválení, které jste kdysi odsouhlasili a které pak tiše viselo — dokud ho někdo nezneužil.

Jednu věc chci hned uvést na pravou míru, protože obrací představu spousty lidí o „hacknutí" naruby: velká část vysátých peněženek se nezvrtne ten den. Popud leží týdny nebo měsíce dřív, u schválení, které jste kdysi někde v nějaké DApp odsouhlasili. Možná jste na swap stránce směňovali mince, nebo jste na claim stránce klikli na „připojit peněženku pro potvrzení nároku", rychle odsouhlasili — a hotovo. Vy jste na to zapomněli. Schválení ne — zůstalo v klidu viset on-chain a čekalo na den, kdy se schválený kontrakt rozbije, nebo kdy to prostě byl phishingový kontrakt, který ještě neudeřil. Než se to opravdu zvrtne, peníze jsou už pryč, a teprve zpětně zjistíte, že zdrojem bylo to zapomenuté schválení.

Tenhle text proto není o mlhavé teorii, ale řeší jeden konkrétní úkol od A do Z: co přesně schválení je, proč jsou některá zvlášť nebezpečná, jak si všechna vlastní schválení jednou vypíšete, jak zrušíte to, co nechcete, a jak si z toho uděláte návyk, aby se to zase nevymklo. Odborné pojmy vysvětlím běžným jazykem, ale ne tak, aby se to stalo nepřesným. Po přečtení byste měli umět samostatně provést „úklid schválení". Pokud ještě nerozeznáte schválení od podpisu, přečtěte si k tomu rizika podpisu v peněžence — ty dva podvodníci často zaměňují.

Co je schválení (approve / allowance) přesně

Začněte u základního faktu: vaše tokeny (na Ethereu ty ERC-20) nejsou soubor, který „leží ve vaší aplikaci peněženky". Je to řádek s čísly v účetní knize kontraktu tokenu — kolik zůstatku je pod určitou adresou, určuje ta kniha. Vaše aplikace peněženky je jen nástroj, který drží privátní klíč a smí podepisovat pokyny typu „přesuň zůstatek vedený na mé jméno". O samotném standardu tokenů dává vysvětlení ERC-20 od Ethereum Foundation dost úplný obrázek.

Teď problém: když na decentralizované burze (DEX) chcete směnit minci A za minci B, musí ten burzovní kontrakt „vaším jménem" odeslat minci A a přinést zpět B. Jenže nemá váš privátní klíč, takže se vašeho zůstatku nemůže jen tak dotknout. Proto je mechanismus nastaven takhle: nejdřív odešlete transakci, která kontraktu mince A řekne „dovoluji, aby kontraktní adresa ta a ta odebrala pod mým jménem maximálně N kusů mince A". Ta transakce je approve, maximální počet, který smí odebrat (N), se jmenuje allowance a strana, která povolení dostane, se jmenuje spender.

Co se pak děje, je klíčové: dokud allowance není vyčerpaná, ten schválený kontrakt vás nemusí znovu nechat podepsat ani potvrdit, aby tenhle druh tokenu opakovaně odebíral. To není zranitelnost — je to základ, na kterém DeFi automaticky běží. Schválíte jednou, a pak swapy, přidání likvidity nebo splátky nemusí každý krok znovu procházet přes vás. Ale právě v tom „schválit jednou, platí dlouho" je zakopaný pes: práva jste dali pryč vy, sama se nevrátí, ledaže je aktivně zrušíte.

Vysvětlení

Schválení a „přihlášení podpisem" jsou dvě různé věci. Schválení je on-chain transakce, která dává pryč právo hýbat určitým tokenem; běžný podpis obvykle jen dokazuje, že jste vlastník peněženky. Existuje ale druh podpisu (permit), který se schválení rovná, a právě to je nebezpečné — viz rizika podpisu v peněžence.

Ne úplně přesné, ale snadno zapamatovatelné přirovnání: approve je jako zmocnění, které dáte inkasní firmě, s nápisem „z mé karty smíš strhnout maximálně N korun". V rámci té částky se nemusí pokaždé ptát. Dokud zmocnění nezrušíte, platí — i když službu té firmy dávno nepoužíváte. On-chain schválení je přesně takové, jen protistranou je kontrakt a jde o vaše tokeny.

Proč je setApprovalForAll u NFT nebezpečnější

U tokenů ERC-20 můžete schválení aspoň navázat na maximální počet N. U NFT (ERC-721 / ERC-1155) se běžný způsob schválení jmenuje setApprovalForAll a jeho význam je o dost drsnější: není to „schválení ke správě jednoho NFT", ale „schválení, že určitá adresa smí spravovat všechna moje NFT z téhle kolekce, bez limitu na počet i počet opakování". Jeden podpis a moc nakládat s celou kolekcí je pryč. Standard a způsob schválení pro NFT jsou oficiálně definované ve vysvětlení ERC-721 od Ethereum Foundation.

Proč tržiště používají takové „schválit všechno"? Protože kontrakt tržiště musí mít při nabídce NFT právo v okamžiku prodeje váš NFT převést kupujícímu, přičemž vy dopředu nevíte, který se prodá ani kdy. Proto si žádá právo spravovat celou kolekci. U legitimního tržiště je to normální. Ale tentýž mechanismus v rukou phishera je děsivý: stránka, která se tváří jako „gratis mint" nebo „claimni svůj limitovaný NFT", vás možná nechá podepsat právě jeden setApprovalForAll, s adresou podvodníka jako schválenou stranou. Vy si myslíte, že dostáváte zdarma NFT, ale ve skutečnosti dáváte pryč právo převést celou — možná hodnotnou — kolekci.

Pozor

Uvidíte-li ve vyskakovacím okně peněženky něco jako Set Approval For All nebo „schválit vše", zatímco chcete jen claimnout či koupit jeden NFT, zastavte se a zkontrolujte, jestli je schválenou stranou kontrakt tržiště, kterému věříte. Berte „schválit vše" jako vysoce rizikový úkon, který si zaslouží dodatečné potvrzení, ne jako rutinní krok, přes který bezmyšlenkovitě prokliknete.

Stejně jako u ERC-20 je setApprovalForAll on-chain záznam: dá se dotázat i zrušit. Nástroje níže na prohlížení a rušení fungují i pro NFT schválení. Při úklidu dbejte na to, abyste NFT schválení zahrnuli a nedívali se jen na tokeny.

Nebezpečí neomezených schválení

Zpět k allowance N u ERC-20. Teoreticky můžete N nastavit přesně tak vysoko, kolik pro tuhle transakci potřebujete. Ale v praxi spousta DApp standardně žádá N, které je extrémně velké (skoro nekonečné), abyste později nemuseli pořád schvalovat znovu. Tomu se říká neomezené schválení (unlimited approval). Po stránce pohodlí to opravdu ušetří — schválíte jednou a nemusíte to řešit. Cenou je, že vaše riziko je maximálně otevřené.

Neomezené znamená: jakmile je schválený kontrakt zákeřný, nebo původně slušný, ale později prolomený či převzatý, může odebrat celý váš zůstatek toho jednoho tokenu, neomezeně často, aniž byste ještě museli potvrzovat. Všimněte si té hranice: může se dotknout jen tokenu, který jste schválili, ne vašeho ostatního majetku a ne seed fráze. Ale pro ten jeden token se neomezené rovná dlouhodobému darování klíče od trezoru.

  • Riziko není v „teď", ale v „později". Kontrakt, který schvalujete, může být v tu chvíli opravdu bezpečný, ale schválení platí dlouho. Kontrakty se dají upgradovat, privátní klíče ukrást, týmy můžou zmizet. Neomezené způsobí, že „když se kdykoli v budoucnu něco pokazí", může to zasáhnout celý váš zůstatek toho tokenu.
  • Phishing miluje neomezené. Phishingová stránka zabalí „claim airdropu" do neomezeného approve na vlastní kontrakt. Ve chvíli, kdy kliknete, má dlouhodobě právo ten token u vás vysávat.
  • Nejspíš jste si pořádně neprohlédli, komu schvalujete. Okno ukazuje adresu spendera, ale spousta lidí rovnou odsouhlasí. Neomezené plus neprověřená strana je nejčastější kombinace přešlapů.

Závěr není „neomezené nikdy", ale: můžete-li dát limit, dejte ho radši, než pohodlně otevřít neomezené, a neomezená schválení uklízejte obzvlášť často. Jak obojí uděláte, přijde konkrétně níž.

Jak si prohlédnete vlastní seznam schválení

Dobrá zpráva: protože schválení je skutečný on-chain záznam, dá se kus po kusu dohledat, kterým kontraktům jste dali jakou allowance. Existují dva vchody, které jsou obecně známé jako dobré.

Přes Etherscan Token Approval Checker

Etherscan nabízí Token Approval Checker. Zadejte adresu (nebo připojte peněženku) a ukáže všechna dosud platná ERC-20 schválení pod tou adresou, včetně schváleného kontraktu (spender), příslušného tokenu a jestli je allowance omezená, nebo neomezená. Etherscan je jeden z nejpoužívanějších block explorerů pro Ethereum, takže zdroj, který čte on-chain data, je spolehlivý. Tenhle krok je čisté „dívání se" — nemusíte nic podepisovat a nic to nestojí.

Při prohlížení dávejte pozor hlavně na tři sloupce: zaprvé kdo je schválená strana — není mezi tím kontrakt, který vůbec nepoznáváte nebo si nevzpomínáte, kde jste ho schválili; zadruhé jestli je allowance neomezená — přednostně sledujte všechno, co je jako unlimited nebo extrémně velké číslo; zatřetí jestli to schválení teď ještě používáte — spousta je zbytky starých DApp, které dávno nepoužíváte. Tyhle tři druhy jsou nejdůležitější kandidáti na zrušení.

Přes revoke.cash: prohlížení i rušení v jednom

Pohodlnější pomůcka je revoke.cash, udělaná speciálně na prohlížení a rušení schválení. Nejdřív můžete vyplnit jen adresu pro přehled bez zápisu (dívat se jde i bez připojení peněženky). Vypíše jak ERC-20 schválení, tak setApprovalForAll u NFT a u každého schválení označí rizikový bod. Na rozdíl od holého block exploreru kombinuje „objevit podezřelé schválení" a „jedním klikem zrušit" v tomtéž rozhraní, což je pro běžné uživatele přívětivější. Teprve když opravdu chcete zrušit, připojíte peněženku.

Tip

Při prvním prohlédnutí spoustu lidí vyděsí počet schválení — čím víc jste farmili a čím víc webů připojili, tím víc jich obvykle visí. Žádná panika: to je právě signál, že máte uklidit. Nejdřív se podívejte, zakroužkujte podezřelá a nepoužívaná a v další sekci je najednou zrušte.

Zrušení: revoke.cash a Etherscan Token Approval Checker

Zrušení (revoke) v jádru znamená, že odešlete ještě jednu transakci, která allowance vrátí na 0: řeknete kontraktu tokenu „allowance, kterou jsem dřív dal určité adrese, je teď 0". Jakmile je to 0, ten kontrakt se vašeho tokenu už nedotkne. Obojí nástroj to umí.

Přes revoke.cash to obvykle jde takhle:

  • Otevřete web a připojte peněženku, kterou chcete uklidit (zkontrolujte, že nepřipojujete špatnou adresu).
  • Najděte v seznamu schválení řádek, který chcete zrušit — přednost dejte neomezeným allowance, neznámým spenderům a starým DApp, které už nepoužíváte.
  • Klikněte u toho schválení na „Zrušit / Revoke". Peněženka ukáže požadavek na transakci; zkontrolujte ho a podepište k odeslání.
  • Počkejte, až se transakce on-chain potvrdí. Poté je allowance toho schválení nulová a seznam se obnoví.
  • U setApprovalForAll u NFT to funguje stejně: najděte příslušnou položku a klikněte na zrušit.

Přes Etherscan Token Approval Checker je to podobné: po připojení peněženky je vpravo od každého schválení vchod ke zrušení. Kliknete na něj a i tady se spustí transakce, která allowance vynuluje; podepsat a potvrdit, hotovo. Podkladový úkon obou nástrojů je stejný, liší se jen rozhraní — vezměte, co vám líp sedí.

Pozor

I samotné nástroje na rušení se dají napodobit. Ke zrušení používejte oficiální domény: uložte si revoke.cash a Etherscan do záložek a pokaždé vcházejte přes tu záložku. Nehledejte je pořád znovu ve vyhledávači a už vůbec neklikejte na reklamní odkazy nahoře ve výsledcích. Další způsoby, jak rozpoznat oficiální kanály, jsou v falešné airdropy a phishing.

A pak časový rozdíl, který chci jasně vysvětlit: zrušení omezí škodu, nic nevrátí. Pokud už protistrana s vaším schválením tokeny odebrala, zrušení jen zabrání „aby se v budoucnu odebíralo dál"; co je pryč, se nevrátí. Máte-li podezření, že nějaké schválení nesedí, rychle zrušte — ale neberte zrušení jako všelék: chrání před budoucností, ne před minulostí.

Zrušení je transakce a stojí gas

Na tomhle spousta lidí poprvé uvízne, tak zvlášť: zrušit schválení je skutečná on-chain transakce, kterou musíte podepsat peněženkou a za kterou platíte gas. Stejně jako u původního approve musí validátoři úkon „vrať allowance na 0" zpracovat do bloku, a to stojí transakční poplatek.

To znamená dvě věci. Zaprvé musí v peněžence, kterou chcete uklidit, být trochu základní mince na zaplacení gasu — na Ethereum mainnetu je to ETH, na jiných sítích nativní mince té sítě. Pokud v peněžence není gas vůbec, zrušovací transakce se nedá odeslat. Zadruhé jsou náklady na gas proměnlivé a závisí na tom, jak je síť právě vytížená; na vytíženém Ethereum mainnetu náklady jednoho úkonu znatelně vylétnou, v klidnou chvíli jsou mnohem nižší. Jak se to přesně počítá a proč to kolísá, je ve vysvětlení gasu a transakčních poplatků od Ethereum Foundation. Náš vlastní nástroj na kontrolu adresy vám navíc pomůže před převodem či interakcí potvrdit, že adresu někdo nepodvrhl (a před zrušením potvrdit, že jste připojili správnou peněženku, je stejně důležité).

Tip

Máte-li hromadu schválení ke zrušení a gas na mainnetu je zrovna drahý, udělejte to soustředěně v klidnou chvíli, nebo nejdřív zrušte jen ta nejnebezpečnější (neomezené plus neznámá strana) a zbytek ukliďte, až budou náklady nízké. Nejdřív zachraňte to nejnebezpečnější, zbytek úklidu udělejte v klidu.

Ještě něco k různým sítím: gas na Ethereum mainnetu je poměrně drahý a spousta lidí je denně aktivní na Layer 2, kde jsou náklady mnohem nižší. Schválení jsou na každé síti samostatná: na které síti jste schválili, tam se musíte i podívat a zrušit — revoke.cash umí přepínat sítě. Chcete-li vědět víc o krajině L2, L2BEAT je často citovaný neutrální datový zdroj s přehledem podle jednotlivých L2.

Denní návyky: limitovat, oddělit peněženky, pravidelně kontrolovat

Prohlížení a rušení jsou nápravné úkony; klidněji se žije, když od začátku schvalujete míň a riziko držíte malé. Návyky níže stojí málo a sám je pořád používám.

Můžete-li limitovat, neotvírejte neomezené

Dost peněženek vás v okně approve nechá allowance ručně změnit z výchozího „neomezeno" na „přesně tolik, kolik tentokrát stačí". Pár vteřin navíc a měníte riziko „tenhle kontrakt může později tenhle token vysát" na „nanejvýš se tentokrát pohne tahle částka". Jestli to upravujete pokaždé, nechám na vás, ale u velkých částek a u méně známých kontraktů limit za to stojí.

Oddělit peněženky: trezor a experiment zvlášť

Rozdělte to aspoň do dvou vrstev. Jedna „trezorová peněženka", která drží jen dlouhodobý majetek, skoro žádnou DApp nepřipojuje a nejlíp používá hardwarovou peněženku; a jedna „experimentální peněženka", kterou připojujete nové weby, claimujete airdropy a plníte úlohy, jen s malou částkou, o kterou můžete přijít. Tak i kdyby experimentální peněženku někdy zasáhlo zákeřné schválení, škoda zůstane omezená na tu malou částku a trezor zůstane netknutý. To je nejúspornější obranná linie. Jak spravovat víc peněženek a dobře uchovat privátní klíč a seed frázi, je v bezpečnost seed fráze.

Udělejte ze zrušení pravidelný úklid

Schválení se hromadí. Udělejte si návyk pravidelně (třeba měsíčně) projít přes revoke.cash nebo Etherscan seznam schválení a zrušit vše, co už nepoužíváte nebo co vypadá podezřele. Čím čistší seznam, tím menší šance, že vás strhne dávno zapomenutý starý kontrakt. Jako oporu můžete použít náš kontrolní seznam rizik schválení a bod po bodu projít, co rušíte.

Nejdřív rozpoznat falešný airdrop, než schválíte

Zdrojem spousty nebezpečných schválení je phishingová stránka, na kterou jste vůbec neměli chodit. Úplně prvním krokem je tedy rozpoznat falešný airdrop — stránka, která slibuje tokeny, ale chce vás nechat schválit nebo podepsat strukturovanou zprávu, obrátila směr. To posouzení obšírně probíráme v falešné airdropy a phishing a spolu s tímhle článkem si to přečtete úplněji. Pro bezpečnostní nastavení samotné peněženky se držte oficiální dokumentace vaší peněženky, třeba centra podpory MetaMask.

Když jsem si poprvé vytáhl seznam schválení, taky jsem na chvíli ztichl — tolik schválení, u kterých jsem dávno nevěděl, kde jsem je zapnul, a pár s neomezenou allowance. Když byla pryč, ulevilo se mi. Později jsem si z toho udělal pevný měsíční rituál a od té doby ten mírný nepokoj z „nevím, kde ještě visí bomba" zmizel.

Uzavírám. Jádro schválení je jednoduché: abyste DApp použili, dáte pryč právo „hýbat určitým tokenem", to právo se samo nevrátí a neomezené to dělá nebezpečnějším. Řešení je stejně střízlivé — limitujte, kde to jde, oddělte trezor a experiment, pravidelně uklízejte nepoužívaná schválení spolehlivým nástrojem a vždycky nejdřív rozpoznejte falešný airdrop, než se rozhodnete podepsat. Udělejte si z toho návyk a scénář, kdy „vás najednou pohltí staré schválení z minula", u vás jen tak nepřistane.

CM
Chen Mo
Redakce DROPCHECK · redaktor (pseudonym)

Sám sbíral airdropy a naletěl falešným; dnes píše o bezpečné účasti. Jen metody, žádná doporučení projektů, žádné cenové předpovědi.