Analise smart-contract
28.03.2024

Chytré smlouvy s funkcí AntiWhale

Pokračujeme v sérii článků věnovaných popisu podvodných schémat v chytrých smlouvách. Dnes budeme analyzovat chytré smlouvy s mechanismem omezení velikosti převodů AntiWhale.

V tomto článku se podrobně podíváme na to, co mechanismus AntiWhale je, jak se liší od mechanismu Cooldown a kdy jsou používány společně a kdy samostatně.

Mechanismus Cooldown

Účel:

Mechanismus Cooldown je navržen k ukládání časových limitů mezi po sobě jdoucími transakcemi ze stejné adresy. Jeho cílem je regulovat frekvenci transakcí a zabránit nadměrné aktivitě nákupu nebo prodeje v krátkých časových intervalech.

Realizace:

Časové limity: Mechanismy Cooldown nastavují čekací doby mezi transakcemi, často na základě času uplynulého od poslední transakce z konkrétní adresy. Uživatelé musí počkat, než čekací doba vyprší, než zahájí novou transakci.

Indikátory:

Srovnání časovek: Hledejte úseky kódu, které porovnávají časové razítko bloku nebo používají funkce související s časem. Stavové proměnné typu lastTransactionTimestamp mohou sloužit k sledování času poslední transakce.

Mechanismus AntiWhale

Účel:

Hlavním účelem mechanismu AntiWhale je snížit dopad velkých transakcí z jedné adresy nebo malé skupiny adres, často označovaných jako "velryby". Cílem je zabránit nadměrné koncentraci tokenů v těch samých rukou a bojovat proti možné manipulaci nebo destabilizaci trhu.

Implementace:

Limity velikosti transakce: Mechanismy AntiWhale obvykle stanovují limity na velikost nebo hodnotu jednotlivých transakcí. Transakce překračující stanovený práh vedou k uvalení omezení, jako je odmítnutí transakce, vysoké poplatky nebo jiné mechanismy redistribuce.

Indikátory:

Hledejte úseky kódu, které kontrolují velikost nebo hodnotu transakcí, a stavové proměnné (jako například maxTransactionAmount nebo whaleThreshold), které mohou naznačovat přítomnost mechanismu AntiWhale. AntiWhale primárně ovlivňuje uživatele s vysokým objemem transakcí a zaměřuje se na řešení koncentrace tokenů u velkých držitelů.

Hlavní rozdíly mezi Cooldown a AntiWhale:

Parametry AntiWhale Cooldown
Parametry:Vliv AntiWhale:Primárně ovlivňuje uživatele s vysokým objemem transakcí. Cooldown:Platí pro všechny uživatele, bez ohledu na velikost transakce.
Parametry:Dynamika trhu AntiWhale:Zaměřen na řešení problémů koncentrace. Cooldown:Zaměřen na regulaci frekvence transakcí.
Parametry:Cíle projektu AntiWhale:Cílem je distribuce tokenů a zajištění stability trhu. Cooldown:Především zaměřen na zajištění stability trhu a prevenci rychlého obchodování.

Scénáře využití:

  1. Minimalizace manipulace na trhu:
    Oba mechanismy mohou být použity společně k řešení různých problémů manipulace s trhem. Mechanismus AntiWhale pomáhá omezit velikost velkých transakcí, zatímco mechanismus Cooldown brání v opakovaných transakcích během krátké doby.

    Předpokládejme, že jedna entita vlastní významnou část celkového zásobování tokeny. Bez mechanismu AntiWhale by tato entita mohla provádět velké transakce, které by mohly způsobit významné fluktuace cen, což vede k manipulaci trhu. Omezením maximální velikosti nebo frekvence transakcí na jedné adrese během určitého časového období má mechanismus AntiWhale za cíl zabránit velkým držitelům, aby měli nepřiměřený vliv na trh.

  2. Zajištění spravedlivé distribuce:
    V kontextu nových tokenů nebo prodejů tokenů brání tomu, aby malý počet účastníků získal nepřiměřený podíl na celkovém zásobování. Nastavením limitů na maximální množství, které může jednotlivá adresa zakoupit během prodeje tokenů nebo v určitém období, umožňuje rozdělit tokeny rovnoměrněji mezi větší počet účastníků.

  3. Řešení problémů s likviditou:
    Vysoké objemy transakcí velkých držitelů mohou ovlivnit likviditu a narušit přirozený proces objevování cen na decentralizovaných burzách. Mechanismus AntiWhale pomáhá udržovat stabilnější situaci s likviditou omezováním rychlosti transakcí velkých držitel ů.

  4. Stabilizace cen:
    Zabránění rychlým a velkoobjemovým transakcím může pomoci stabilizovat ceny. Vynucováním omezení AntiWhale má token více času na přizpůsobení se tržním podmínkám mezi transakcemi.

  5. Prevence front-runningu:
    AntiWhale může být implementován k boji proti front-runningu, kdy obchodníci využívají časově citlivé informace k provedení obchodů před ostatními. Mechanismus AntiWhale může snížit výhodu získanou rychlým prováděním obchodů.

  6. Omezení útoků s flash loans a reentrance:
    AntiWhale může přidat další ochrannou vrstvu proti některým útokům s flash loans a reentrance omezováním rychlosti provedení transakcí.

scénáře využití

Potenciální rizika pro držitele tokenů:

  1. Nastavení příliš těsných limitů AntiWhale může být problém pro uživatele, kteří skutečně potřebují provádět velké transakce.

  2. Přílišná závislost na mechanismu AntiWhale může neúmyslně podporovat centralizaci, pokud není implementována s ohledem na širší ekosystém.

Jak můžete nezávisle určit, zda jsou v chytrých smlouvách přítomné takové hrozby?

Určení, zda je v chytré smlouvě přítomný mechanismus AntiWhale, je důležitý úkol, zde jsou některé tipy, které vám s tím mohou pomoci:

  1. Zjistěte dokumentaci smlouvy: začněte tím, že si prostudujete dokumentaci smlouvy a specifikace.

  2. Analyzujte přenosové funkce: zkoumejte funkce zodpovědné za přenos tokenů (transfer, transferFrom, atd.). Hledejte podmíněné výroky, které ukládají omezení na transakce.

  3. Zkontrolujte porovnání časovek: hledejte případy, kde smlouva porovnává časové razítko bloku.

  4. Zkontrolujte stavové proměnné: zkoumejte stavové proměnné, které mohou být použity k ukládání informací souvisejících s AntiWhale.

  5. Hledejte funkce nebo modifikátory související s časovými výpočty, jako jsou block.timestamp, block.number, nebo now.

  6. Hledejte parametry ovládající chování AntiWhale: mohou to být maxTransferAmount, maxTxLimit a podobně. Tyto parametry často nastavuje vlastník smlouvy nebo prostřednictvím individuálních mechanismů správy transakcí.

  7. Analyzujte záznamy událostí: zkontrolujte záznamy událostí na speciální události. Implementace bude schopna zaznamenávat relevantní informace při provedení transakce, což poskytuje vhled do procesu ochlazování.

  8. Analyzujte uživatelskou specifickou logiku: pokud jsou v smlouvě implementována omezení uživatelů, zkoumejte logiku pro určení individuálních limitů přenosu. Tato logika může zahrnovat uživatelské atributy, zůstatky nebo jiná kritéria.

  9. Buďte informováni: Sledujte nejnovější události ve naší komunitě (Telegramový kanál) a osvědčené postupy pro detekci podvodů (náš blog a YouTube kanál).

Dobrá zpráva: náš bezpečnostní skener úspěšně nachází (včetně skrytých) a vypočítává omezení převodů (AntiWhale) ve 90% případů. Využijte naši prémiovou subscripci a chráníte své prostředky před hrozbami.

Ačkoli je mechanismus AntiWhale navržen k prevenci manipulace s trhem a zajištění distribuce tokenů, podvodníci mohou využít jeho schopností k podvodu uživatelů. Níže jsou některé možné scénáře a tipy k zabezpečení investic do tokenů při použití mechanismu AntiWhale.

Příklad 1: Omezení množství transakcí s chlazením (Limitace množství transakcí s cooldown)

    uint256 public maxTransactionAmount = 1000000; // Maximum transaction amount
    uint256 public cooldownTime = 1 days; // Cooldown time between transactions
    
    mapping(address => uint256) private lastTransactionTimestamp;
    
    function transfer(address to, uint256 value) public {
        require(value <= maxTransactionAmount, "Exceeded maximum transaction amount");
        require(block.timestamp - lastTransactionTimestamp[msg.sender] >= cooldownTime, "Wait for cooldown period to end");
        ...
        lastTransactionTimestamp[msg.sender] = block.timestamp;
    }

Tento příklad omezuje maximální množství, které může jedna adresa převést během určitého časového období.

Obsahuje chladicí mechanismus, který poskytuje čekací dobu mezi transakcemi na stejné adrese. Pole lastTransactionTimestamp udržuje časové razítko poslední transakce pro každou adresu.

Příklad 2: Dynamická omezení transakcí (Progresivní omezení transakcí)

    uint256 public initialMaxTransactionAmount = 500000; // Initial maximum transaction amount
    uint256 public maxTransactionIncreaseRate = 20000; // Maximum increase rate per transaction
    uint256 public cooldownTime = 2 days; // Cooldown time between transactions
            
    mapping(address => uint256) private lastTransactionTimestamp;
            
    function transfer(address to, uint256 value) public {
        uint256 currentMaxTransactionAmount = initialMaxTransactionAmount + (maxTransactionIncreaseRate * (block.timestamp - lastTransactionTimestamp[msg.sender]) / cooldownTime);
        require(value <= currentMaxTransactionAmount, "Exceeded maximum transaction amount");
        ...
        lastTransactionTimestamp[msg.sender] = block.timestamp;
    }

Tento příklad používá dynamický mechanismus, ve kterém se maximální množství transakce postupně zvyšuje časem.

Parametr maxTransactionIncreaseRate řídí míru, jakou se maximální množství transakce zvyšuje. Pole lastTransactionTimestamp udržuje časové razítko poslední transakce pro každou adresu.

dynamická omezení transakcí

Příklad 3: Výjimky ve whitelistu (Výjimky v whitelistu)

    address[] public whitelistedAddresses;
    mapping(address => bool) public isWhitelisted;
    
    uint256 public maxTransactionAmount = 1000000; // Maximum transaction amount
    
    function transfer(address to, uint256 value) public {
        require(value <= maxTransactionAmount || isWhitelisted[msg.sender], "Exceeded maximum transaction amount");
        ...
    }

Tento příklad používá výjimky ve whitelistu pro konkrétní adresy z omezení AntiWhale.

Adresy v poli whitelistedAddresses jsou považovány za vyjmuté z omezení maximálního množství transakce. Pole isWhitelisted určuje, zda je určitá adresa na whitelistu.

Příklad 4: Stupňovaná omezení transakcí (Stupňovaná omezení transakcí)

    uint256[] public tieredLimits = [5000000, 2000000, 1000000]; // Tiered transaction limits for different address balances

    function transfer(address to, uint256 value) public {
        require(value <= getTransactionLimit(msg.sender), "Exceeded maximum transaction amount");
        ...
    }
    
    function getTransactionLimit(address user) internal view returns (uint256) {
        uint256 userBalance = balanceOf(user);
    
        if (userBalance < 10000) {
            return tieredLimits[0];
        } else if (userBalance < 50000) {
            return tieredLimits[1];
        } else {
            return tieredLimits[2];
        }
    }

Tento příklad implementuje stupeňovaná omezení transakcí v závislosti na zůstatku adresy odesílatele. Uživatelé s nižším zůstatkem mají vyšší limit transakcí a uživatelé s vyšším zůstatkem mají nižší limit transakcí.

Funkce getTransactionLimit určuje vhodný limit transakce na základě zůstatku uživatele.

Příklad 5: Poplatky za velké transakce (Daň z velkých transakcí)

    uint256 public taxRate = 75; // 5% tax rate on transactions exceeding the limit
    uint256 public maxTransactionAmount = 1000000; // Maximum transaction amount
    
    function transfer(address to, uint256 value) public {
        if (value > maxTransactionAmount) {
            uint256 taxAmount = (value * taxRate) / 100;
            uint256 netTransferAmount = value - taxAmount;
    
            // Transfer logic here for the net transfer amount
            ...
        } else {
            // Transfer logic here for amounts within the limit
            ...
        }
    }

V tomto příkladu je poplatek účtován za transakce, které překračují maximální množství transakce.

Sazba poplatku (taxRate) určuje procento z množství transakce. Poplatek je odečten a poté je zpracována čistá částka převodu.

Příklad 6: Stupňovaná omezení (Víceúrovňová omezení transakcí)

    uint256 public maxTransactionAmount1 = 500000; // Maximum transaction amount for tier 1 (500,000 tokens)
    uint256 public maxTransactionAmount2 = 200000; // Maximum transaction amount for tier 2 (200,000 tokens)
    
    function transfer(address to, uint256 value) public {
        if (value <= maxTransactionAmount1) {
            ...
        } else if (value <= maxTransactionAmount2) {
            ...
        } else {
            revert("Exceeded maximum transaction amount");
        }
    }

Tento příklad implementuje víceúrovňová omezení transakcí, kde jsou aplikovány různé limity v závislosti na výši transakce.

To umožňuje nastavení limitů transakcí na různých úrovních granularity pro různé objemy tokenů.

Příklad 7: Dynamická omezení transakcí podle zůstatku (Dynamická omezení transakcí na základě zůstatku tokenů)

    uint256 public maxTransactionPercentage = 5; // Maximum transaction percentage relative to total token supply
    
    function transfer(address to, uint256 value) public {
        uint256 maxTransactionAmount = (totalSupply() * maxTransactionPercentage) / 100;
        require(value <= maxTransactionAmount, "Exceeded maximum transaction amount");
        ...
    }

Tento příklad dynamicky vypočítává maximální množství transakce jako procento z celkového zásobu. Parametr maxTransactionPercentage definuje povolené procento pro jednu transakci.

dynamická omezení transakcí

Příklad 8: Časově závislá omezení (Časově závislá omezení transakcí)

    uint256 public maxTransactionAmount = 1000000; // Maximum transaction amount (1 million tokens)
    uint256 public startTime = 1700000000; // Start time in Unix timestamp
    uint256 public endTime = 1800000000; // End time in Unix timestamp

    function transfer(address to, uint256 value) public {
        require(block.timestamp >= startTime && block.timestamp <= endTime, "Transaction not allowed at this time");
        require(value <= maxTransactionAmount, "Exceeded maximum transaction amount");
        ...
    }

V tomto příkladu jsou aplikována časově závislá omezení transakcí, která povolují transakce pouze v určitém časovém rámci.

Parametry startTime a endTime definují období, během kterého jsou transakce povoleny.

Příklad 9: Progresivní zdanění (Progresivní zdanění)

    uint256 public maxTransactionAmount = 1000000; // Maximum transaction amount (1 million tokens)
    uint256 public taxRate = 2; // Initial tax rate in percentage
    
    function transfer(address to, uint256 value) public {
        require(value <= maxTransactionAmount, "Exceeded maximum transaction amount");
    
        uint256 taxAmount = (value * taxRate) / 100;
        uint256 netTransferAmount = value - taxAmount;
    
        // Transfer logic here for the net transfer amount
        ...
    }

Tento příklad představuje mechanismus progresivního zdanění, kde je na transakce přesahující maximální částku účtována daň (poplatek).

Sazba daně (poplatku) může být upravena v průběhu času nebo na základě určitých podmínek.

Příklad 10: Omezení transakcí na základě zůstatků držitelů (Vážená omezení transakcí na základě zůstatků držitelů tokenů)

    uint256 public maxTotalTransactionAmount = 5000000; // Maximum total transaction amount for all token holders
    mapping(address => uint256) public userTransactionLimit; // Transaction limits based on individual token holder balances
    
    function transfer(address to, uint256 value) public {
        require(value <= maxTotalTransactionAmount, "Exceeded maximum total transaction amount");
        require(value <= userTransactionLimit[msg.sender], "Exceeded individual transaction limit");
        ...
    }

Tento příklad implementuje omezení transakcí založená jak na celkovém množství transakcí, tak na zůstatku jednotlivých držitelů tokenů.

Proměnná userTransactionLimit umožňuje nastavit personalizovaná omezení na základě zůstatků specifických adres.


Doufáme, že vám tyto příklady pomohly lépe porozumět mechanismu AntiWhale ve smart kontraktech.

Jelikož veškeré informace na blockchainu jsou otevřené (pokud samozřejmě je zdrojový kód kontraktu ověřen), s tímto vědomím můžete samostatně studovat smart kontrakty a identifikovat různé podvodné schéma.

Nicméně, to všechno jsme již udělali za vás! Přihlaste se k prémiové předplatné a získejte přístup k exkluzivním filtrům na vlastnosti smart kontraktů a aktuálním analýzám. Zvýšte své šance na úspěšné investice do ziskových tokenů.

S pozdravem, tým Lotus Market.

All posts

Connect to a wallet

Metamask