Cofanie zezwoleń tokenów z poziomu SSP

·7 min czytania·Autor: SSP Editorial Team
Ilustracja cofania zezwoleń tokenów ERC-20 z poziomu wallet'a SSP: allowance ustawiane na zero i SSP Key współpodpisujący transakcję.

Cofanie zezwoleń tokenów z poziomu SSP

Za każdym razem, gdy potwierdzasz swap, depozyt lub wystawienie NFT na chainie EVM, dajesz dAppowi pozwolenie na poruszanie konkretnym tokenem ERC-20 w Twoim imieniu. Te pozwolenia — nazywane zezwoleniami lub allowance — pozostają on-chain po rozliczeniu transakcji. Kilka miesięcy później kontrakt, któremu zaufałeś w marcu, w czerwcu wciąż może mieć prawo opróżnić ten token. Rozwiązanie jest proste: cofnij zezwolenia, których już nie potrzebujesz. Ten przewodnik pokazuje, jak zrobić to z poziomu SSP, samoobsługowego wallet'a 2-z-2, w którym każda transakcja (cofnięcia również) jest współpodpisywana przez Twój SSP Key.

Jeśli temat jest nowy, najpierw przeczytaj Zezwolenia tokenów: pozwolenia, których wciąż udzielasz. Wyjaśnia, czemu zezwolenia istnieją i czemu nieograniczone allowance są domyślną powierzchnią ataku w DeFi. Ten artykuł jest sprzątającym uzupełnieniem.

Krótkie przypomnienie

Gdy podpisujesz wywołanie approve(spender, amount), kontrakt tokena zapisuje, że spender (zwykle kontrakt routera, vaulta lub marketplace'u) ma prawo przelać do amount tego tokena z Twojego adresu. Wiele dAppów prosi o 2^256 - 1 — w praktyce nieograniczone — żeby oszczędzić Ci gasu przy przyszłych interakcjach. Ta wygoda jest też ryzykiem: jeśli kontrakt spender zostanie później skompromitowany albo przestaniesz korzystać z dAppa, a allowance zostanie, atakujący może opróżnić całe saldo, kiedy zechce.

Cofnięcie odwraca to nadanie. Nie cofa wcześniejszych transferów i niczego nie "usuwa" — po prostu ustawia allowance z powrotem na zero.

Jak technicznie działa cofnięcie

Cofnięcie to po prostu kolejna transakcja. Wywołujesz approve(spender, 0) na tym samym kontrakcie tokena, na tym samym chainie, na którym nadano oryginalne zezwolenie. To jedno wywołanie funkcji wpisuje nowe 0 do mapowania allowance[owner][spender] w kontrakcie, nadpisując starą wartość.

Kilka mechanizmów wartych zapamiętania:

  • Jedno cofnięcie na chain na parę token-spender. Jeśli zatwierdziłeś spendera USDC na Ethereum i tego samego spendera na Polygon, potrzebujesz dwóch transakcji cofnięcia — po jednej na chain. Allowance nie są współdzielone między chainami.
  • Cofnięcie to samodzielna transakcja. Kosztuje gas, tak jak każdy transfer. Zaplanuj to: przygotuj natywny aktyw chaina (ETH na Ethereum, MATIC na Polygon itd.), żeby pokryć opłatę.
  • Może być tańsze, niż się obawiasz. Cofnięcie to prosty zapis, często tańszy niż swap. Na Layer 2 takich jak Base to zwykle grosze.
  • SSP nadal współpodpisuje. Ponieważ SSP to wallet 2-z-2, transakcja cofnięcia przebiega tym samym torem co każda inna: rozszerzenie ją proponuje, SSP Key sprawdza ją i współpodpisuje. Twoja ochrona obejmuje również samo sprzątanie — żadne pojedyncze urządzenie nie cofnie samodzielnie i żadne pojedyncze urządzenie nie da się oszukać, żeby zatwierdzić coś przebranego za cofnięcie.

Dwie ścieżki cofania

Masz dwa równie dobre sposoby na cofnięcie zezwoleń z SSP. Wybierz ten, który pasuje do sytuacji.

Ścieżka 1: użyj sprawdzonego eksploratora bloków

To ręczna, przejrzysta droga. Przydatna, gdy dokładnie wiesz, którego tokena i którego spendera chcesz cofnąć, albo gdy nie chcesz łączyć się z narzędziem trzeciej strony.

  1. Otwórz stronę kontraktu tokena w odpowiednim eksploratorze:
    • Ethereum: etherscan.io
    • Polygon: polygonscan.com
    • Base: basescan.org
    • BNB Smart Chain: bscscan.com
    • Avalanche: snowtrace.io
  2. Przejdź do zakładki Contract, następnie Write Contract (lub Write as Proxy, jeśli token jest kontraktem proxy — większość liczących się stablecoinów nim jest).
  3. Znajdź funkcję approve. Jej wejścia to spender (adres, który chcesz cofnąć) i amount (nowe allowance).
  4. Ustaw amount na 0. Wklej adres spendera — skopiuj go z wcześniejszej historii transakcji, nigdy nie wpisuj z pamięci.
  5. Połącz wallet. Większość eksploratorów obsługuje WalletConnect, zalecaną metodę łączenia SSP. Zatwierdź połączenie w rozszerzeniu.
  6. Kliknij Write. Eksplorator buduje transakcję approve(spender, 0) i przekazuje ją do SSP. Rozszerzenie SSP pokazuje szczegóły wywołania; SSP Key współpodpisuje; cofnięcie zostaje rozesłane.

Ta ścieżka jest rozwlekła, ale nie pozostawia żadnych wątpliwości co do tego, co podpisałeś.

Ścieżka 2: użyj dedykowanego narzędzia do cofania

Dla większości użytkowników to praktyczna opcja. revoke.cash to powszechnie używane narzędzie open source do tej roboty. Skanuje Twój adres na obsługiwanych chainach, listuje każde aktywne allowance, flaguje ryzykowne (nieograniczone kwoty, nieznane kontrakty) i pozwala cofać je — pojedynczo lub w paczkach — przez podłączony wallet.

Przebieg:

  1. Otwórz revoke.cash bezpośrednio w przeglądarce. Dodaj prawdziwą domenę do zakładek i wchodź tylko z zakładki. Phishingowe kopie narzędzi do cofania istnieją właśnie dlatego, że użytkownik trafia tam już gotowy do podpisywania transakcji.
  2. Połącz przez WalletConnect, a następnie zeskanuj kod QR lub wklej URI do SSP.
  3. Przełącz wybór chaina na ten, który chcesz przejrzeć. revoke.cash pobierze Twoje zezwolenia z tego chaina.
  4. Przejrzyj listę. Każdy wiersz pokazuje token, spendera, kwotę allowance i zwykle etykietę dAppa.
  5. Kliknij Revoke obok wszystkiego, czego już nie używasz. Każde cofnięcie to osobna transakcja approve(spender, 0), współpodpisana przez SSP.

Praktyczny przebieg audytu

Raz lub dwa razy w roku zarezerwuj 20 minut i przejdź przez to:

  1. Połącz SSP z revoke.cash przez WalletConnect.
  2. Przejrzyj aktywne zezwolenia na każdym chainie, którego używałeś. Zacznij od Ethereum — historycznie najgęstszego grafu zezwoleń — następnie przejdź przez Polygon, Base, BNB Smart Chain i Avalanche.
  3. Najpierw bierz najbardziej ryzykowne. Posortuj lub przejrzyj listę pod kątem nieograniczonych allowance i nieznajomych nazw dAppów. Protokół, w którym raz swapnąłeś w 2024 i więcej nie tknąłeś, to idealny kandydat. Tak samo każdy kontrakt, którego nie potrafisz zidentyfikować.
  4. Cofnij. Zatwierdź transakcję w rozszerzeniu SSP; SSP Key prosi Cię o współpodpis; cofnięcie zostaje rozesłane.
  5. Współpodpisz na SSP Key. To moment na podwójne sprawdzenie celu. SSP Key pokazuje kontrakt, który wywołujesz, i funkcję — potwierdź, że obie zgadzają się z tym, co zamierzałeś.
  6. Powtórz dla każdego chaina. Allowance są per-chain. Nie zakładaj, że cofnięcie na Ethereum sprząta Polygon.

Nie musisz robić tabula rasa. Celem jest utrzymać allowance na kontraktach, których aktywnie używasz, a resztę wyzerować.

Środki ostrożności

  • Higiena domen. Używaj wyłącznie oficjalnej domeny revoke.cash. Phishingowe klony celują w ten konkretny przepływ, bo użytkownik jest już w trybie podpisywania transakcji. Dodaj do zakładek; sprawdzaj pasek adresu przed połączeniem.
  • Realia per-chain. Cofnięcie zezwolenia USDC na Ethereum nie rusza zezwolenia USDC na Polygon, nawet jeśli token w portfolio "wygląda tak samo". Przechodź każdy chain z osobna.
  • Budżet na gas. Cofanie kosztuje gas. Na Ethereum nazbierane cofnięcia mogą się dodać; rób je, gdy gas jest spokojny. Na Layer 2 koszt jest pomijalny.
  • Zawsze weryfikuj spendera. Zanim podpiszesz jakąkolwiek transakcję "cofnięcia", potwierdź, że adres spendera w wywołaniu zgadza się z kontraktem, który zamierzałeś cofnąć. Złośliwa strona może podsunąć fałszywy UI cofania, który tak naprawdę wystawia nowe zezwolenie atakującemu. Odczytanie nazwy funkcji (approve) i kwoty (0) na ekranie SSP Key to Twoja ostatnia linia obrony.
  • Permity to coś innego. Niektóre tokeny (USDC, warianty DAI) obsługują permit — podpisy off-chain działające jak zezwolenia. revoke.cash wskaże znane permit-owe nadania, na ile potrafi; każde nieznane traktuj tak samo, jakby było allowance on-chain.

Przewaga 2-z-2 podczas sprzątania

To często pomijany punkt: cofanie w SSP nie jest pojedynczym kliknięciem na pojedynczym urządzeniu. Rozszerzenie przygotowuje cofnięcie, ale samo go nie rozesłe. SSP Key musi współpodpisać, a właśnie ten krok współpodpisu jest momentem, w którym sprawdzasz, co naprawdę zostanie wysłane. Gdyby rozszerzenie kiedykolwiek zostało skompromitowane i spróbowało wysłać złośliwe "cofnięcie", które w istocie jest nowym zezwoleniem, SSP Key pokazałby na swoim ekranie prawdziwą funkcję i prawdziwą kwotę. Dwa urządzenia, dwie szanse na wyłapanie problemu.

Rutynowa higiena zezwoleń to nawyk DeFi o najwyższej dźwigni, który większość użytkowników pomija. Ustaw przypomnienie w kalendarzu, zrób audyt, śpij spokojniej. I czytaj dalej serię — zacznij od Ethereum w SSP, jeśli chcesz osadzić specyficzne dla chaina szczegóły, albo wróć do Zezwolenia tokenów: pozwolenia, których wciąż udzielasz, żeby przypomnieć sobie, dlaczego to ma znaczenie.

Udostępnij ten artykuł

Powiązane artykuły