tradingview

Token approval

Token approval (zatwierdzenie tokena, ang. token approval lub allowance) to zgoda, którą dajesz smart kontraktowi na przenoszenie określonej ilości Twoich tokenów z Twojego portfela. Standard ERC-20 przewiduje funkcję approve: wskazujesz kontrakt (tzw. spender) i limit. Od tej chwili ten kontrakt może pobrać Twoje tokeny do wysokości limitu – bez pytania Cię ponownie, dopóki zgody nie cofniesz.

Zatwierdzenia są niezbędne w DeFi. Gdy wymieniasz USDC na DEX-ie, wpłacasz tokeny do protokołu pożyczkowego albo wystawiasz NFT na giełdzie, najpierw zatwierdzasz, a dopiero potem wykonujesz właściwą operację. Problem w tym, że zgody zostają w blockchainie na lata – a razem z nimi ryzyko.

Jak działa approve

  1. Podpisujesz transakcję approve: „kontrakt X może wydać do N tokenów Y z mojego adresu”.
  2. Kontrakt tokena zapisuje ten limit (allowance) dla pary: Twój adres – kontrakt X.
  3. Kontrakt X wywołuje transferFrom i pobiera tokeny, a limit maleje o pobraną kwotę.
  4. Limit obowiązuje, dopóki go nie wykorzystasz albo nie zmienisz – nie wygasa sam.

Dla NFT odpowiednikiem jest setApprovalForAll, które daje kontraktowi prawo do przenoszenia wszystkich NFT z danej kolekcji w Twoim portfelu.

Nieograniczone zatwierdzenia

Wiele aplikacji domyślnie proponuje zatwierdzenie „nieograniczone” – w praktyce maksymalną możliwą liczbę. Wygoda jest taka, że nie płacisz za kolejne zatwierdzenie przy każdej transakcji. Koszt: jeśli kontrakt, któremu zaufałeś, ma lukę, zostanie przejęty albo okaże się złośliwy, może pobrać wszystkie tokeny danego rodzaju, jakie masz w portfelu – także te, które dopłacisz za rok.

Rodzaj zgody Wygoda Ryzyko
Dokładna kwota nowe zatwierdzenie przy każdej operacji po wykorzystaniu limit spada do zera
Nieograniczona jedno zatwierdzenie na zawsze cały bieżący i przyszły stan tokena narażony
setApprovalForAll (NFT) jedna zgoda na całą kolekcję wszystkie NFT z kolekcji narażone

Permit i Permit2 – zatwierdzenia przez podpis

Permit (standard EIP-2612) pozwala nadać zgodę podpisem wiadomości zamiast osobnej transakcji. Podpis nic nie kosztuje, a aplikacja przesyła go do sieci razem z właściwą operacją. Permit2 to kontrakt udostępniony przez Uniswap pod koniec 2022 roku, który działa dla dowolnego tokena ERC-20: raz zatwierdzasz kontrakt Permit2, a potem poszczególnym aplikacjom dajesz uprawnienia podpisami – z limitem kwoty i datą wygaśnięcia.

To wygodne i przy rozsądnych limitach bezpieczniejsze niż wieczne approve, ale ma ciemną stronę: podpis wygląda niewinnie, nie kosztuje gazu i nie pojawia się w historii transakcji. Strony phishingowe masowo proszą o podpisy typu permit, które oddają oszustowi prawo do pobrania tokenów. Po takim podpisie środki mogą zniknąć, zanim zorientujesz się, że coś podpisałeś.

Jak cofnąć zatwierdzenie (revoke)

  • Eksplorator bloków – popularne eksploratory sieci EVM mają zakładkę z zatwierdzeniami tokenów dla danego adresu. Wklejasz adres, widzisz listę kontraktów i limitów, podłączasz portfel i cofasz zgodę.
  • Portfel – część portfeli pokazuje aktywne zatwierdzenia i ostrzega przed nieograniczonymi.
  • Darmowe serwisy do przeglądu zgód – działają w wielu sieciach jednocześnie. Wchodź na nie wyłącznie z zapisanej zakładki – fałszywe strony „do revoke” to częsta forma phishingu.

Cofnięcie to zwykła transakcja approve z limitem zero, więc kosztuje gaz. Na drogiej sieci warto cofać zgody hurtowo i w pierwszej kolejności te dotyczące tokenów o dużej wartości. Uprawnienia nadane przez Permit2 cofa się osobno – samo cofnięcie zgody dla aplikacji nie zawsze usuwa zgodę dla kontraktu Permit2 i odwrotnie. Revoke nie odzyska tokenów, które już zostały pobrane – chroni tylko to, co jeszcze masz.

Przykład 1: stare nieograniczone approve

Załóżmy, że dwa lata temu zatwierdziłeś bez limitu kontrakt mostu na USDC, bo chciałeś przenieść 500 USDC. Dziś trzymasz w tym portfelu 8000 USDC. Most ma lukę, która pozwala napastnikowi wywołać transferFrom w imieniu użytkowników. Tracisz 8000 USDC, choć z mostu nie korzystasz od dawna. Gdybyś wtedy zatwierdził dokładnie 500 USDC, po transakcji limit wynosiłby zero, a strata – zero.

Takie ataki zdarzały się w praktyce – np. przy włamaniach do protokołów Socket/Bungee w styczniu 2024 roku i LI.FI w lipcu 2024 roku napastnicy wykorzystali zatwierdzenia udzielone kontraktom przez użytkowników. Poszkodowani byli głównie ci, którzy zostawili nieograniczone zgody.

Przykład 2: czy opłaca się robić revoke

Załóżmy, że masz 6 starych zatwierdzeń, a cofnięcie każdego kosztuje umownie 2 USD – razem 12 USD. W portfelu trzymasz tokeny warte 5000 USD. Jeśli przyjmiesz nawet bardzo małe, 1-procentowe ryzyko, że któryś z kontraktów zostanie kiedyś wykorzystany, oczekiwana strata to 50 USD. Revoke za 12 USD jest tanim ubezpieczeniem. Na sieciach warstwy drugiej, gdzie opłata to ułamek dolara, rachunek jest jeszcze prostszy.

Najczęstsze błędy

  • Akceptowanie domyślnego nieograniczonego limitu bez zastanowienia.
  • Podpisywanie wiadomości permit bez czytania, bo „to tylko podpis, bez opłaty”.
  • Nadawanie setApprovalForAll stronom obiecującym darmowe NFT lub airdrop.
  • Szukanie narzędzia do revoke w wyszukiwarce i trafienie na fałszywą stronę.
  • Trzymanie dużych kwot w tym samym portfelu, którym testujesz nowe aplikacje.
  • Przekonanie, że portfel sprzętowy chroni przed złym zatwierdzeniem – chroni klucz, ale nie zgodę, którą sam podpiszesz.

Perspektywa tradera

Zatwierdzenia to ryzyko operacyjne, które w dzienniku transakcji łatwo przeoczyć, bo nie widać go w wyniku, dopóki nie nastąpi strata. Rozsądny podział to portfel „skarbiec” bez zgód dla aplikacji i portfel „roboczy” z niewielkim saldem do DeFi, airdropów i nowych protokołów. Po zamknięciu pozycji w protokole cofaj zgody, których już nie potrzebujesz – najlepiej włącz przegląd zatwierdzeń do cyklicznej rutyny, np. obok checklisty tradera. Dla aktywnego tradera on-chain dokładne limity i regularny revoke to odpowiednik stop lossa dla ryzyka technicznego: mały, stały koszt, który ogranicza rzadką, ale katastrofalną stratę.

Najczęstsze pytania

Czy każde zatwierdzenie jest niebezpieczne?

Nie. Zatwierdzenie zaufanego, sprawdzonego kontraktu na dokładną kwotę to standard w DeFi. Ryzyko rośnie przy nieograniczonych limitach, mało znanych kontraktach i zgodach, które zostawiasz na lata.

Czy revoke odzyska skradzione tokeny?

Nie. Cofnięcie zgody chroni tylko środki, które jeszcze są w portfelu. Tego, co już zostało pobrane, revoke nie cofnie.

Ile kosztuje cofnięcie zatwierdzenia?

Tyle, ile zwykła transakcja w danej sieci, bo revoke to approve z limitem zero. Na Ethereum może to być kilka dolarów, na sieciach warstwy drugiej zwykle ułamek dolara.

Czym różni się Permit2 od zwykłego approve?

Przy Permit2 raz zatwierdzasz jeden kontrakt, a aplikacjom dajesz uprawnienia podpisami z limitem i datą wygaśnięcia. Podpis nie kosztuje gazu, ale może zostać wyłudzony przez stronę phishingową.

Czy portfel sprzętowy chroni przed złośliwym approve?

Nie. Portfel sprzętowy chroni klucz prywatny, ale jeśli sam zatwierdzisz transakcję lub podpis, zgoda jest ważna. Zawsze czytaj, co podpisujesz, na ekranie urządzenia.

Co zrobić, jeśli podpisałem podejrzany permit?

Natychmiast cofnij zgody i przenieś pozostałe tokeny na nowy, czysty adres. Kradzież możesz zgłosić na policję i przez CERT Polska (incydent.cert.pl), choć odzyskanie środków on-chain jest rzadkie.

Tekst ma charakter edukacyjny i nie stanowi rekomendacji inwestycyjnej.