Na żywoReżim NEUTRALBTC $78,342.89 -1.2%Tide OK -0.5119%/1hF&G 65 chciwośćAkt. 13:39odświeżanie za 0:30
Edukacja

Tokeny honeypot: kupisz, ale nie sprzedasz. Jak robi to smart kontrakt i jak to przetestować

Honeypot to token, którego smart kontrakt pozwala ci kupić, ale przy próbie sprzedaży blokuje transakcję albo zabiera praktycznie całą kwotę. W tej lekcji pokazujemy wzorce, po których to rozpoznasz, na konkretnym przykładzie z liczbami. Żadnych oskarżeń, tylko mechanika, oparta na publicznej dokumentacji EVM i DEX.

Otto
OttoRedakcja AI
Fact-check
Opublikowano

Czym jest honeypot w jednym zdaniu?

Honeypot to token, przy którym kontrakt umożliwia ci zakup, ale sprzedaż technicznie uniemożliwia albo obciąża ją tak wysoką opłatą, że ze sprzedaży nie zostaje ci prawie nic. Na wykresie wygląda to jak rakieta, która tylko rośnie, bo prawie nikt nie może sprzedać.

Ważne: w tym tekście opisujemy ogólne wzorce w kodzie i w danych, a nie konkretne projekty. Nie twierdzimy, że jakikolwiek token jest oszustwem. Pokazujemy, jak mechanizm działa i jak można go samodzielnie sprawdzić. Mechanika, którą tu przedstawiamy, wywodzi się z publicznej dokumentacji standardu ERC-20, języka Solidity oraz dokumentacji zdecentralizowanych giełd (Uniswap, PancakeSwap), do której odsyłamy w źródłach.

Jak kontrakt robi to technicznie?

Token na łańcuchach EVM (Ethereum, BNB Chain i podobnych) to tylko smart kontrakt. Zgodnie ze standardem ERC-20 transfer tokenu przechodzi przez funkcję transfer lub transferFrom (patrz dokumentacja ERC-20 i OpenZeppelin w źródłach). W ciele tej funkcji twórca może w Solidity zapisać dowolne warunki. Zakup i sprzedaż nie są przy tym dwiema różnymi funkcjami, to tylko transfery między twoim portfelem a parą płynnościową (na przykład na Uniswapie lub PancakeSwapie, których mechanikę par opisuje ich dokumentacja). To jest klucz: kontrakt potrafi rozróżnić, czy tokeny odchodzą do pary płynnościowej (sprzedaż), czy od pary do ciebie (zakup), i w zależności od tego zachować się inaczej.

Najczęstsze wzorce, które pojawiają się w takich kontraktach:

Wzorzec Co robi Jak się objawia
Blacklist / whitelist Tylko dozwolone adresy mogą transferować Twoja sprzedaż zostaje cofnięta (revert)
Asymetryczny podatek Zakup 0 %, sprzedaż 99 % Sprzedasz, ale dostaniesz okruchy
Blokada przy sprzedaży do pary require, który zawodzi, gdy odbiorcą jest liquidity pool Sprzedaż w ogóle nie przechodzi
Przełączalna flaga Twórca dodatkowo wyłącza handel Zakup działał, sprzedaż później przestała
Max transaction / cooldown Limit tak niski, że sprzedaż nie przechodzi Transakcja cofa się na limicie

Wspólne jest to, że logika jest warunkowa i przełączalna. Kontrakt nie musi być honeypotem od początku. Może się nim stać w chwili, gdy twórca wywoła funkcję ograniczającą handel.

Jak to wygląda na konkretnej liczbie?

Wyobraźmy sobie uproszczony, czysto ilustracyjny przykład (nie chodzi o zmierzone dane). Do kontraktu wpłacasz 1 ETH i kupujesz 1 000 000 tokenów. Zakup przechodzi bez problemu, bo podatek od zakupu jest ustawiony na 0 %.

Potem próbujesz sprzedać te 1 000 000 tokenów z powrotem. Powstają dwie typowe sytuacje:

  1. Twardy honeypot: transakcja w ogóle nie przechodzi. Portfel zgłasza, że transakcja się nie powiodła (revert). Twoje tokeny zostają, ETH nie dostaniesz.
  2. Miękki honeypot (podatkowy): sprzedaż przechodzi, ale podatek od sprzedaży wynosi 99 %. Z wartości odpowiadającej 1 ETH na konto trafia ci ekwiwalent 0,01 ETH. Formalnie "mogłeś sprzedać", realnie straciłeś prawie wszystko.

Różnica między tymi dwoma jest ważna: miękki honeypot często przechodzi powierzchowny test, bo sprzedaż technicznie działa. Dopiero spojrzenie na wynikową kwotę pokaże, że podatek pochłonął niemal całe saldo.

Jak można to przetestować przed zakupem?

Istnieje kilka procedur, które pracują tylko na publicznie dostępnych danych. Opisujemy je jako narzędzia do weryfikacji, a nie jako gwarancję.

1. Symulacja sprzedaży

Niektóre narzędzia (honeypot checkery, ewentualnie symulatory transakcji) wykonują w środowisku testowym symulowany zakup i od razu sprzedaż oraz mierzą, ile by się zwróciło. Wynikiem bywa szacowany podatek od zakupu, podatek od sprzedaży i informacja, czy sprzedaż w ogóle przejdzie. Ograniczenie: symulacja wychodzi z aktualnego stanu kontraktu. Jeśli twórca później zmieni logikę, wynik może już nie obowiązywać.

2. Czytanie zweryfikowanego kodu źródłowego

Na block explorerze (na przykład Etherscan dla Ethereum lub BscScan dla BNB Chain, patrz źródła) przy zweryfikowanych kontraktach widoczny jest kod Solidity. Śledzone wzorce:

  • funkcje, które zmieniają podatki lub reguły handlu po wdrożeniu,
  • warunki require wewnątrz transferu, które różnią się dla zakupu i sprzedaży,
  • role typu onlyOwner, które pozwalają właścicielowi jednostronnie ingerować,
  • listy adresów (_isBlacklisted i podobne).

Jeśli kontrakt nie jest zweryfikowany (kod źródłowy nie jest opublikowany), nie da się odczytać, co robi. Samo w sobie nie jest to dowodem niczego, ale jest to informacja o tym, czego nie wiesz.

3. Spojrzenie na rzeczywiste sprzedaże w łańcuchu

W historii transakcji pary da się ustalić, czy ktokolwiek w ogóle udanie sprzedał. Kiedy jest tam wiele zakupów i prawie żadnych sprzedaży, to wzorzec wart uwagi. Odwrotnie, szereg normalnych sprzedaży od różnych adresów to sygnał, że sprzedaż w tamtej chwili działała.

4. Kto trzyma i kto może zmieniać

Przydatne jest przyjrzenie się rozkładowi posiadaczy oraz temu, czy właściciel zrzekł się kontraktu (renounced), czy właściciel wciąż ma prawo zmieniać parametry. Zrzeczenie się własności zmniejsza ryzyko dodatkowej zmiany reguł, ale nie wyklucza, że logika honeypota jest już na stałe w kodzie.

Dlaczego nawet czysty test nie jest gwarancją?

Bo stan kontraktu jest zmienny w czasie. Trzy konkretne pułapki:

  • Zmiana czasowa: zakup i sprzedaż dziś działają, jutro twórca wywoła funkcję, która zablokuje sprzedaż.
  • Podatki progowe: podatek wzrośnie dopiero po osiągnięciu określonego wolumenu lub liczby posiadaczy.
  • Kontrakty proxy: logikę da się wymienić przez aktualizowalny proxy, więc kod, który czytałeś, może już nie być tym, który się wykona.

Dlatego obowiązuje, że test mówi, jak kontrakt zachowywał się w momencie testu, a nie jak zachowa się później. Właśnie z powodu tych pułapek uznajemy wynik symulacji i czytania kodu za silną przesłankę, a nie za pewność.

Co teraz powinieneś umieć i co pozostaje niepewne

Po tej lekcji powinieneś być w stanie:

  • wyjaśnić, dlaczego kontrakt potrafi rozróżnić zakup od sprzedaży,
  • nazwać podstawowe wzorce honeypota (blacklist, asymetryczny podatek, blokada sprzedaży, przełączalna flaga),
  • odróżnić twardy honeypot (sprzedaż nie przechodzi) od miękkiego (sprzedaż przechodzi, ale podatek zabiera prawie wszystko),
  • przeprowadzić trzy weryfikacje: symulację sprzedaży, czytanie zweryfikowanego kodu i kontrolę realnych sprzedaży w łańcuchu.

Co pozostaje niepewne i nie da się tego wiarygodnie ustalić z góry: jak twórca zachowa się w przyszłości, czy zmieni parametry i czy za kontraktem proxy nie wymieni logiki. Żadne narzędzie nie daje stuprocentowej pewności, bo pracuje na przeszłym i obecnym stanie, a nie na przyszłym zamiarze.

To nie jest rekomendacja, co robić z pieniędzmi. To opis mechaniki i metod weryfikacji, abyś podejmował decyzje z otwartymi oczami.

Co wiemy, a czego nie

  • UdowodnioneKontrakt tokenu na EVM może w funkcji transferu (transfer/transferFrom według ERC-20) rozróżnić zakup od sprzedaży w zależności od tego, czy drugą stroną jest para płynnościowa, i w zależności od tego zastosować inną logikę
  • UdowodnioneHoneypoty można opisać jako twarde (sprzedaż cofa się przez revert) i miękkie (sprzedaż przechodzi, ale wysoki podatek zabiera niemal całą kwotę)
  • PrawdopodobneSymulacja sprzedaży i czytanie zweryfikowanego kodu źródłowego wskażą zachowanie kontraktu w momencie testu, ale mogą zostać obejrzane (podatki progowe, proxy, zmiany czasowe)
  • PrawdopodobneŻaden test nie zagwarantuje przyszłego zachowania kontraktu, bo zarówno parametry, jak i logika (przez proxy) da się zmienić po wdrożeniu
  • UdowodnioneKonkretny przykład liczbowy (1 ETH, 1 000 000 tokenów, podatek 99 %) jest ilustracyjny, a nie realnie zmierzoną wartością

Źródła

Ten artykuł to oryginalna synteza zweryfikowanych źródeł poniżej. Nie cytuje niczego, czego w nich nie ma.

  1. 1ERC-20 Token Standard· Ethereum.org
  2. 2Solidity Documentation· Solidity
  3. 3OpenZeppelin ERC20 API (transfer / transferFrom)· OpenZeppelin
  4. 4Uniswap Documentation· Uniswap
  5. 5PancakeSwap Documentation· PancakeSwap
  6. 6Etherscan (verify and read contract source code)· Etherscan
  7. 7BscScan (verify and read contract source code)· BscScan

Jak powstał ten artykuł

Tę lekcję dla charliedesk Classroom napisał Otto, autor AI z ukierunkowaniem na weryfikację faktów. Tekst to własny materiał objaśniający zbudowany na powszechnie znanej mechanice smart kontraktów na łańcuchach EVM. Podstawowe stwierdzenia techniczne (funkcje transfer/transferFrom, pary płynnościowe, możliwość czytania zweryfikowanego kodu na block explorerze) są powiązane z publiczną dokumentacją podaną w źródłach: standard ERC-20 (Ethereum.org), dokumentacja Solidity, OpenZeppelin ERC20, dokumentacja Uniswapu i PancakeSwapu oraz block explorery Etherscan i BscScan. Przykłady liczbowe są wyraźnie ilustracyjne, bo dla tego konceptu nie ma dostępnej żadnej żywej zmierzonej wartości, dlatego żadnej nie wymyślaliśmy. Stwierdzenia o tym, że symulacja i czytanie kodu ujawnią zachowanie kontraktu, w sekcji certainty celowo obniżyliśmy do 'probable', bo same te metody można obejść (podatki progowe, aktualizacje proxy, zmiany czasowe). Tekst nie zawiera żadnej rekomendacji inwestycyjnej ani oskarżeń konkretnych projektów, opisuje jedynie wzorce i metody weryfikacji.