Co je honeypot v jedné větě?
Honeypot je token, u kterého vám kontrakt umožní nákup, ale prodej technicky znemožní nebo ho zatíží tak vysokým poplatkem, že vám z prodeje nezbyde téměř nic. V grafu to vypadá jako raketa, která jen roste, protože téměř nikdo nemůže prodat.
Důležité: v tomto textu popisujeme obecné vzorce v kódu a v datech, ne konkrétní projekty. Neříkáme, že jakýkoli token je podvod. Ukazujeme, jak mechanismus funguje a jak si ho člověk může prověřit sám. Mechanika, kterou zde uvádíme, vychází z veřejné dokumentace standardu ERC-20, jazyka Solidity a dokumentace decentralizovaných burz (Uniswap, PancakeSwap), na kterou odkazujeme ve zdrojích.
Jak to kontrakt technicky udělá?
Token na EVM řetězcích (Ethereum, BNB Chain a podobné) je jen smart kontrakt. Podle standardu ERC-20 prochází převod tokenu funkcí transfer nebo transferFrom (viz dokumentace ERC-20 a OpenZeppelin ve zdrojích). Do těla této funkce může tvůrce v Soliditech zapsat libovolné podmínky. Nákup a prodej přitom nejsou dvě různé funkce, jsou to jen převody mezi vaší peněženkou a likviditním párem (například na Uniswapu nebo PancakeSwapu, jejichž mechaniku párů popisuje jejich dokumentace). To je klíč: kontrakt umí rozlišit, jestli tokeny odcházejí k likviditnímu páru (prodej), nebo od páru k vám (nákup), a podle toho se zachovat jinak.
Nejčastější vzorce, které se v takových kontraktech objevují:
| Vzorec | Co dělá | Jak se projeví |
|---|---|---|
| Blacklist / whitelist | Jen povolené adresy mohou převádět | Váš prodej revertuje (spadne) |
| Asymetrická daň | Nákup 0 %, prodej 99 % | Prodáte, ale dostanete drobky |
| Blokace při prodeji na pár | require, který selže, když příjemcem je liquidity pool |
Prodej vůbec neprojde |
| Přepínatelný flag | Tvůrce dodatečně vypne obchodování | Nákup fungoval, prodej později přestal |
| Max transaction / cooldown | Limit tak nízký, že prodej neprojde | Transakce revertuje na limitu |
Společné je, že logika je podmíněná a přepínatelná. Kontrakt nemusí být honeypot od začátku. Může se jím stát ve chvíli, kdy tvůrce zavolá funkci, která obchodování omezí.
Jak to vypadá na konkrétním čísle?
Představme si zjednodušený, čistě ilustrativní příklad (nejde o měřená data). Do kontraktu vložíte 1 ETH a nakoupíte 1 000 000 tokenů. Nákup projde bez problémů, protože daň z nákupu je nastavená na 0 %.
Pak zkusíte prodat těch 1 000 000 tokenů zpět. Nastanou dvě typické situace:
- Tvrdý honeypot: transakce vůbec neprojde. Peněženka hlásí, že transakce selhala (revert). Vaše tokeny zůstávají, ETH nedostanete.
- Měkký honeypot (daňový): prodej projde, ale daň z prodeje je 99 %. Z hodnoty odpovídající 1 ETH vám na účet přijde ekvivalent 0,01 ETH. Formálně jste "mohli prodat", reálně jste přišli skoro o vše.
Rozdíl mezi těmito dvěma je důležitý: měkký honeypot často projde povrchním testem, protože prodej technicky funguje. Teprve pohled na výslednou částku ukáže, že daň spolkla skoro celý zůstatek.
Jak si to člověk může otestovat před nákupem?
Existuje několik postupů, které pracují jen s veřejně dostupnými daty. Popisujeme je jako nástroje k ověření, ne jako záruku.
1. Simulace prodeje
Některé nástroje (honeypot checkery, případně simulátory transakcí) provedou v testovacím prostředí simulovaný nákup a hned prodej a změří, kolik by se vrátilo. Výstupem bývá odhadovaná daň z nákupu, daň z prodeje a informace, jestli prodej vůbec projde. Omezení: simulace vychází z aktuálního stavu kontraktu. Pokud tvůrce logiku později změní, výsledek už nemusí platit.
2. Čtení ověřeného zdrojového kódu
Na block exploreru (například Etherscan pro Ethereum nebo BscScan pro BNB Chain, viz zdroje) je u ověřených kontraktů vidět Solidity kód. Sledované vzorce:
- funkce, které mění daně nebo obchodní pravidla po nasazení,
- podmínky
requireuvnitř převodu, které se liší pro nákup a prodej, - role typu
onlyOwner, které umožňují vlastníkovi jednostranně zasáhnout, - seznamy adres (
_isBlacklisteda podobně).
Pokud kontrakt není ověřený (zdrojový kód není zveřejněný), nedá se přečíst, co dělá. To samo o sobě není důkaz ničeho, ale je to informace o tom, co nevíte.
3. Pohled na skutečné prodeje na řetězci
V historii transakcí páru se dá zjistit, jestli vůbec někdo úspěšně prodal. Když je tam mnoho nákupů a téměř žádné prodeje, je to vzorec, který stojí za pozornost. Naopak řada normálních prodejů od různých adres je signál, že prodej v tu chvíli fungoval.
4. Kdo drží a kdo může měnit
Užitečné je podívat se na rozložení držitelů a na to, jestli je vlastnictví kontraktu zřeknuté (renounced), nebo jestli má vlastník stále právo měnit parametry. Zřeknutí vlastnictví snižuje riziko dodatečné změny pravidel, ale nevylučuje, že honeypot logika už je napevno v kódu.
Proč ani čistý test není záruka?
Protože stav kontraktu je proměnný v čase. Tři konkrétní pasti:
- Časovaná změna: nákup i prodej dnes fungují, zítra tvůrce zavolá funkci, která prodej zablokuje.
- Prahové daně: daň se zvýší až po dosažení určitého objemu nebo počtu držitelů.
- Proxy kontrakty: logika se dá vyměnit přes upgradovatelný proxy, takže kód, který jste četli, už nemusí být ten, který se vykoná.
Proto platí, že test říká, jak se kontrakt choval v momentě testu, ne jak se zachová později. Právě kvůli těmto pastem považujeme výsledek simulace i čtení kódu za silnou indicii, ne za jistotu.
Co byste teď měli umět a co zůstává nejisté
Po této lekci byste měli být schopni:
- vysvětlit, proč kontrakt dokáže rozlišit nákup od prodeje,
- pojmenovat základní vzorce honeypotu (blacklist, asymetrická daň, blokace prodeje, přepínatelný flag),
- rozlišit tvrdý honeypot (prodej neprojde) od měkkého (prodej projde, ale daň sebere skoro vše),
- provést tři ověření: simulaci prodeje, čtení ověřeného kódu a kontrolu reálných prodejů na řetězci.
Co zůstává nejisté a nelze to spolehlivě zjistit dopředu: jak se tvůrce zachová v budoucnu, jestli změní parametry, a jestli za proxy kontraktem nevymění logiku. Žádný nástroj nedává stoprocentní jistotu, protože pracuje s minulým a přítomným stavem, ne s budoucím záměrem.
Toto není doporučení, co dělat s penězi. Je to popis mechaniky a metod ověření, abyste se rozhodovali s otevřenýma očima.

