Przejdź do treści
Słownikdefiportfelesmart-kontraktybezpieczenstwo

Allowance

Onchainowe pozwolenie, które właściciel tokena ERC-20 nadaje innemu adresowi albo smart kontraktowi, aby ten mógł przenieść określoną ilość tokenów w jego imieniu.

Czym jest allowance

Allowance to mechanizm z ERC-20, który oddziela posiadanie tokenów od prawa do ich wydania. Ty nadal trzymasz tokeny w portfelu, ale wybrany smart kontrakt może dostać pozwolenie na ich przeniesienie.

W praktyce widzisz to jako approval w portfelu. Gdy korzystasz z DEX-a, lendingu albo vaulta, aplikacja prosi o zgodę na użycie danego tokena.

Bez allowance wiele protokołów DeFi nie mogłoby działać wygodnie. Kontrakt nie mógłby pobrać tokenów z twojego portfela do swapu, depozytu albo spłaty pożyczki.

Jak działa approve i transferFrom

W standardzie ERC-20 właściciel tokena wywołuje approve(spender, amount). Token contract zapisuje wtedy, że adres spender może przenieść do amount tokenów z portfela właściciela.

Później spender może wywołać transferFrom(owner, recipient, amount). Jeżeli allowance jest wystarczająca, tokeny zostają przeniesione bez kolejnego approve.

Jeżeli allowance wynosi zero albo została cofnięta, transferFrom nie powinien się udać. Dlatego revokowanie approvali faktycznie ogranicza przyszłe ryzyko.

Najważniejsze pojęcia

Owner
Adres, który posiada tokeny i nadaje pozwolenie.
Spender
Adres lub smart kontrakt, który może przenieść tokeny w ramach allowance.
approve
Funkcja nadająca lub zmieniająca pozwolenie na wydanie tokenów.
transferFrom
Funkcja używana przez spendera do przeniesienia tokenów z portfela właściciela.
revocation
Ustawienie allowance na zero, żeby spender nie mógł już używać tokenów.

Dlaczego allowance jest ryzykowne

Problem nie polega na samym mechanizmie, tylko na tym, że approval może działać długo po tym, jak zapomnisz o danej aplikacji.

  • Unlimited approval pozwala kontraktowi użyć bardzo dużej ilości tokenów bez kolejnego pytania.
  • Odłączenie portfela od strony nie cofa onchainowego pozwolenia.
  • Jeśli kontrakt, któremu ufałeś, zostanie przejęty lub złośliwie zaktualizowany, stara allowance może nadal działać.
  • Złośliwa strona może podszyć się pod normalny approve i poprosić o niebezpieczne uprawnienie.
  • Ryzyko dotyczy konkretnego tokena i konkretnego spendera, ale użytkownik często nie widzi tego jasno w UI.

Przykład z DEX-em

  • Masz 1000 USDC w portfelu i chcesz zrobić swap.
  • DEX prosi o approval dla kontraktu routera.
  • Nadajesz allowance na 1000 USDC albo unlimited approval.
  • Router może użyć transferFrom, żeby pobrać USDC do wykonania swapu.
  • Jeżeli approval zostaje aktywny po transakcji, kontrakt nadal ma określone uprawnienie do twoich USDC.

Najczęstsze błędne założenia

  • Disconnect wallet nie cofa allowance. To tylko kończy sesję frontendu.
  • Approval nie jest tym samym co wykonany transfer. To pozwolenie na przyszłe użycie tokenów.
  • Unlimited approval nie jest zawsze potrzebny. Często można zatwierdzić tylko konkretną kwotę.
  • Revokowanie approvala nie odzyska tokenów, które już zostały skradzione.
  • Jeżeli nie używasz już protokołu, pozostawiony approval nadal może być ryzykiem.

Najbardziej zdradliwe są stare approvale

Allowance może pozostać aktywna miesiącami albo latami. Możesz już dawno nie korzystać z danej aplikacji, ale jej kontrakt nadal może mieć prawo do użycia twoich tokenów. Regularnie sprawdzaj i cofaj niepotrzebne approvale.

Najczęstsze pytania

Nie. Allowance jest pozwoleniem, a nie transferem. Tokeny nadal są w twoim portfelu, ale spender może je przenieść w ramach zatwierdzonego limitu.

Nie. Disconnect usuwa połączenie frontendu z portfelem, ale nie zmienia stanu onchain. Allowance trzeba cofnąć osobną transakcją, zwykle przez ustawienie limitu na zero.

Nie zawsze, ale zwiększa ryzyko. Jest wygodny, bo nie musisz zatwierdzać tokena za każdym razem. Jeżeli jednak spender zostanie przejęty albo okaże się złośliwy, może użyć całego zatwierdzonego zakresu.

Możesz użyć narzędzi typu approval checker, na przykład Revoke.cash. Takie narzędzie pokazuje, które kontrakty mają uprawnienia do twoich tokenów i pozwala je cofnąć.

NFT mają podobny problem, ale inną mechanikę. W ERC-721 i ERC-1155 często spotkasz setApprovalForAll, które może dać operatorowi prawo do przenoszenia całej kolekcji.