Analise smart-contract
28.03.2024

Intelligens szerződések AntiWhale funkcióval

Folytatjuk a cikksorozatot, amely az okos szerződésekben előforduló csalásos séma leírásának szentelt. Ma az AntiWhale átutalási méretkorlátozó mechanizmusú okos szerződéseket vizsgáljuk.

Ebben a cikkben részletesen megvizsgáljuk, mi is az AntiWhale mechanizmus, hogyan különbözik a Cooldown mechanizmustól, és mikor használják őket együtt, illetve mikor külön-külön.

Cooldown mechanizmus

Cél:

A Cooldown mechanizmus arra szolgál, hogy időkorlátokat írjon elő egymást követő tranzakciók között ugyanattól a címtől. Célja a tranzakciók gyakoriságának szabályozása, és hogy megakadályozza a túlzott vásárlói vagy eladói tevékenységet rövid időközönként.

Megvalósítás:

Időkorlátok: A Cooldown mechanizmusok várakozási időt írnak elő tranzakciók között, gyakran az utolsó tranzakció óta eltelt idő alapján. A felhasználóknak meg kell várniuk, hogy lejárjon a várakozási időszak, mielőtt új tranzakciót indítanának.

Jelzők:

Időbélyeg összehasonlítás: Keresse azokat a kódrészleteket, amelyek blokk időbélyegeket hasonlítanak össze, vagy idővel kapcsolatos funkciókat használnak. Az utolsó tranzakció időbélyeg típusú állapotváltozóit használhatják az utolsó tranzakció idejének nyomon követésére.

AntiWhale mechanizmus

Cél:

Az AntiWhale mechanizmus fő célja a nagy tranzakciók egyetlen címről vagy kis csoport címéről, gyakran „bálnák”-ról nevezett tranzakciók hatásának csökkentése. Célja a tokenek túlzott koncentrációjának megakadályozása ugyanazon kézben, és a piac esetleges manipulációjának vagy destabilizálódásának megfékezése.

Megvalósítás:

Tranzakcióméret korlátok: Az AntiWhale mechanizmusok általában korlátozásokat állítanak be az egyedi tranzakciók méretére vagy értékére. A meghatározott küszöbértéket túllépő tranzakciók esetén korlátozásokat vezetnek be, például tranzakció elutasítása, magas díjak vagy más újraelosztási mechanizmusok.

Jelzők:

Keresse azokat a kódrészleteket, amelyek ellenőrzik a tranzakciók méretét vagy értékét, és olyan állapotváltozókat (például maxTransactionAmount vagy whaleThreshold), amelyek jelenlétére utalhatnak az AntiWhale mechanizmus. Az AntiWhale elsősorban azokat a felhasználókat érinti, akik nagy tranzakciókötegekkel rendelkeznek, és a nagy tulajdonosok kezében lévő tokenek koncentrációjára összpontosít.

Fő különbségek a Cooldown és az AntiWhale között:

Paraméterek AntiWhale Cooldown
Paraméterek: Befolyás AntiWhale: Főként azokat a felhasználókat érinti, akik nagy tranzakciókötegekkel rendelkeznek. Cooldown: Minden felhasználóra vonatkozik, függetlenül a tranzakció méretétől.
Paraméterek: Piaci dinamika AntiWhale: A koncentrációs problémák megoldására összpontosít. Cooldown: A tranzakciók gyakoriságának szabályozására irányul.
Paraméterek: Projekt célkitűzések AntiWhale: Célja a tokenek elosztása és a piac stabilitásának biztosítása. Cooldown: Főként a piaci stabilitás biztosítására és a gyors kereskedés megakadályozására irányul.

Felhasználási forgatókönyvek:

  1. Piaci manipuláció minimalizálása:
    Mindkét mechanizmus együtt használható a különböző piaci manipulációs problémák kezelésére. Az AntiWhale mechanizmus segít korlátozni a nagy tranzakciók méretét, míg a Cooldown mechanizmus megakadályozza, hogy több tranzakció gyorsan megtörténjen rövid idő alatt.

    Tegyük fel, hogy egy entitás jelentős részét birtokolja a teljes token kínálatnak. Az AntiWhale mechanizmus nélkül ez az entitás nagy tranzakciókat végezhetne, amelyek jelentős ár ingadozásokat okozhatnak, piaci manipulációhoz vezethet. Azzal, hogy korlátozza a maximális méretet vagy a tranzakciók gyakoriságát egy címre egy bizonyos időszakon belül, az AntiWhale mechanizmus arra törekszik, hogy megakadályozza, hogy a nagy tulajdonosok túlzott befolyással legyenek a piacon.

  2. Igazságos elosztás biztosítása:
    Új tokenek vagy token értékesítések esetén megakadályozni, hogy néhány résztvevő aránytalan részesedést szerezzen a teljes kínálatból. A maximális összeg meghatározása, amelyet egyé ni cím vásárolhat egy token értékesítés során vagy egy bizonyos időszakban belül, lehetőséget biztosít a tokenek egyenletesebb elosztására a résztvevők szélesebb körében.

  3. Likviditási problémák kezelése:
    A nagy tulajdonosok magas tranzakció kötésének következményeként a likviditást és a decentralizált tőzsdéken a természetes árképzési folyamatot befolyásolhatja. Az AntiWhale mechanizmus segítségével, amely korlátozza a nagy tulajdonosok általi tranzakciók sebességét, fenntarthatóbb likviditási helyzetet lehet fenntartani.

  4. Árstabilitás:
    A gyors és nagyméretű tranzakciók megakadályozása hozzájárulhat az árstabilitáshoz. Az AntiWhale korlátozások érvényesítésével a token árának több ideje van alkalmazkodni a piaci feltételekhez a tranzakciók között.

  5. Front-running megelőzése:
    Az AntiWhale használható front-running elleni küzdelemben is, ahol a kereskedők időérzékeny információkat használnak fel az ügyletek előtti végrehajtásához. Az AntiWhale mechanizmus csökkentheti az általuk szerzett előnyt, hogy gyorsan végrehajtsák a tranzakciókat.

  6. Flash-kölcsön és reentrancia támadások enyhítése:
    Az AntiWhale extra védelmi réteget jelenthet egyes flash-kölcsön és reentrancia támadásokkal szemben a tranzakció végrehajtásának sebességének korlátozásával.

Felhasználási forgatókönyvek

A token tulajdonosok potenciális kockázatai:

  1. Túl szigorú AntiWhale korlátok beállítása problémát okozhat azoknak a felhasználóknak, akik valóban szükségük van nagy tranzakciókra.

  2. Az AntiWhale mechanizmus túlzott támaszkodása véletlenül központosítást is elősegíthet, ha nem veszi figyelembe a szélesebb ökoszisztémát.

Hogyan lehet függetlenül eldönteni, hogy ilyen fenyegetések jelen vannak-e az okos szerződésekben?

Fontos feladat meghatározni, hogy van-e jelen AntiWhale korlátozó mechanizmus egy okos szerződésben, íme néhány tipp, amely segíthet ebben:

  1. Tanulmányozza a szerződés dokumentációját: kezdje a szerződés dokumentációjának és specifikációinak áttekintésével.

  2. Elemezze az átutalási funkciókat: vizsgálja meg azokat a funkciókat, amelyek felelősek a tokenek átutalásáért (transfer, transferFrom stb.). Keresse azokat a feltételes állításokat, amelyek korlátozásokat írnak elő tranzakciókra.

  3. Ellenőrizze az időbélyeg összehasonlításokat: keresse azokat az eseteket, amikor a szerződés blokk időbélyegeket hasonlít össze.

  4. Ellenőrizze az állapotváltozókat: vizsgálja meg az állapotváltozókat, amelyeket az AntiWhale-hez kapcsolódó információk tárolására használhatnak.

  5. Keresse a időszámítási logikával kapcsolatos funkciókat vagy módosítókat, például block.timestamp, block.number vagy now.

  6. Keresse azokat a paramétereket, amelyek szabályozzák az AntiWhale viselkedését: ezek lehetnek például maxTransferAmount, maxTxLimit stb. Ezeket a paramétereket gyakran a szerződés tulajdonosa állítja be, vagy az egyedi tranzakciókezelési mechanizmusok révén.

  7. Elemzze az eseménynaplókat: ellenőrizze az eseménynaplókat speciális események esetén. Az implementációk képesek releváns információkat naplózni egy tranzakció végrehajtásakor, ami betekintést nyújt a hűtési folyamatba.

  8. Elemzze a felhasználóspecifikus logikát: ha a szerződésben felhasználói korlátozások vannak beépítve, ellenőrizze a logikát az egyedi átutalási korlátok meghatározására. Ez a logika magában foglalhat felhasználói attribútumokat, egyenleget vagy más kritériumokat.

  9. Legyen tájékozott: Maradjon naprakész a közösség legújabb fejleményeivel kapcsolatban (Telegram csatorna) és a csalások felismerésének legjobb gyakorlataival (Blog és YouTube csatorna).

Jó hír: Biztonsági szkennere sikeresen megtalálja (beleértve a rejtetteket is) és kiszámítja a tranzakciós korlátozásokat (AntiWhale) az esetek 90%-ában. Használja prémium előfizetésünket, és védje meg pénzét a fenyegetésektől.

Bár az AntiWhale mechanizmus a piaci manipuláció megakadályozására és a tokenek elosztásának biztosítására lett kifejlesztve, a csalók képesek lehetnek a képességeit kihasználni a felhasználók átverésére. Az alábbiakban néhány lehetséges forgatókönyv és tipp található a token befektetések biztosítására az AntiWhale mechanizmus jelenlétével.

Példa 1: Tranzakciók mennyiségére vonatkozó korlátok hűtési idővel (Tranzakciós mennyiségi korlátok hűtési idővel)

    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;
    }

Ez a példa korlátozza a maximális összeget, amelyet egyetlen cím képes átutalni bizonyos időszak alatt.

Tartalmaz egy hűtési mechanizmust, amely várakozási időt biztosít a tranzakciók között ugyanazon a címen. Az utolsó tranzakció időbélyeg tömb nyomon követi az utolsó tranzakció időbélyegét minden címre.

Példa 2: Dinamikus átutalási korlátozások (Progresszív tranzakciós korlátok)

    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;
    }

Ez a példa dinamikus mechanizmust használ, ahol a maximális tranzakciós összeg idővel fokozatosan növekszik.

A maxTransactionIncreaseRate paraméter szabályozza, hogy milyen arányban növekszik a maximális tranzakciós összeg. Az utolsó tr anzakció időbélyeg tömb nyomon követi az utolsó tranzakció időbélyegét minden címre.

dinamikus átutalási korlátozások

Példa 3: Fehérlista kivételek (Fehérlista mentesség)

    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");
        ...
    }

Ez a példa fehérlista mentességet használ specifikus címek számára az AntiWhale korlátozások alól.

A whitelistedAddresses tömbben szereplő címek mentesülnek a maximális tranzakciós összeg korlátozás alól. Az isWhitelisted tömb meghatározza, hogy egy adott cím fehérlistán szerepel-e.

Példa 4: Szintelt tranzakciós korlátozások (Szintelt tranzakciós korlátozások)

Példa: Szintelt korlátok a feladó címegyensúlyától függően

    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];
        }
    }

Ez a példa szintelt tranzakciós korlátokat valósít meg a feladó címének egyensúlyától függően. Az alacsonyabb egyenlegű felhasználók magasabb tranzakciós limitet kapnak, míg a magasabb egyenlegű felhasználók alacsonyabb tranzakciós limitet kapnak.

A getTransactionLimit függvény meghatározza a megfelelő tranzakciós limitet a felhasználó egyensúlya alapján.

5. Példa: Díjak nagy tranzakciók esetén (Adó nagy tranzakciókra)

    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
            ...
        }
    }

Ebben a példában az adót azokra a tranzakciókra számolják fel, amelyek meghaladják a maximális tranzakciós összeget.

Az adókulcs (taxRate) meghatározza a tranzakciós összeg százalékát. Az adó levonásra kerül, majd az átutalás nettó összege feldolgozásra kerül.

6. Példa: Szintelt korlátok (Többszintű tranzakciós korlátok)

    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");
        }
    }

Ez a példa többszintű tranzakciós korlátokat valósít meg, ahol a tranzakció összegétől függően különböző korlátokat alkalmaznak.

Ez lehetővé teszi, hogy a tranzakciós korlátokat különböző token mennyiségekhez igazítsák.

7. Példa: Dinamikus tranzakciós korlátok egyenleg függvényében (Dinamikus tranzakciós korlátok a Token Egyenleg függvényében)

    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");
        ...
    }

Ebben a példában dinamikusan számítják ki a maximális tranzakciós összeget a Teljes Kínálat százalékaként. A maxTransactionPercentage paraméter meghatározza a megengedett százalékot egyetlen tranzakcióra.

dinamikus tranzakciós korlátok

8. Példa: Időfüggő korlátok (Időfüggő tranzakciós korlátok)

    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");
        ...
    }

Ebben a példában időfüggő tranzakciós korlátokat alkalmaznak, amelyek csak adott időszakban engedélyezik a tranzakciókat.

A startTime és endTime paraméterek meghatározzák azt az időszakot, amikor a tranzakciók engedélyezettek.

9. Példa: Progresszív adózás (Progresszív adózás)

    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
        ...
    }

Ez a példa progresszív adózási mechanizmust mutat be, ahol adót (díjat) vetnek ki a maximális összeget meghaladó tranzakciókra.

Az adó (díj) kulcsát idővel vagy bizonyos feltételek alapján módosíthatják.

10. Példa: Tranzakciós korlátok a tartózkodó egyenlegek alapján (Súlyozott tranzakciós korlátok a Token Tulajdonosok Egyenlegei alapján)

    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");
        ...
    }

Ez a példa tranzakciós korlátokat valósít meg mind az összes tranzakciós összeg, mind az egyéni token tulajdonosok egyenlege alapján.

A userTransactionLimit lekötés lehetőséget biztosít arra, hogy személyre szabott korlátokat állítsanak be egyes címek egyenlege alapján.


Reméljük, hogy ezek a példák segítettek jobban megérteni az AntiWhale mechanizmust az okos szerződésekben.

Mivel az összes információ a blokkláncon nyilvános (természetesen a szer ződés forráskódjának ellenőrzése esetén), felfegyverkezve ezzel a tudással önállóan tanulmányozhatja az okos szerződéseket és azonosíthatja a különböző csalásokat.

Azonban mi már mindent megtettünk Önért! Iratkozzon fel prémium előfizetésre, és hozzáférést kap az okos szerződések jellemzőinek exkluzív szűrőihez és friss analitikáihoz. Növelje esélyeit a nyereséges tokenekbe történő sikeres befektetésre.

Üdvözlettel, Lotus Market csapata.

All posts

Connect to a wallet

Metamask