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
setApprovalForAll, które może dać operatorowi prawo do przenoszenia całej kolekcji.