Analise smart-contract
28.03.2024

Contracte inteligente cu funcție AntiWhale

Continuăm seria de articole dedicate descrierii schemelor frauduloase în smart contracts. Astăzi vom analiza smart contracts cu mecanismul de limitare a dimensiunii transferului AntiWhale.

În acest articol, vom examina în detaliu ce este mecanismul AntiWhale, cum diferă de mecanismul Cooldown și când sunt folosite împreună și când separat.

Mecanismul Cooldown

Scop:

Mecanismul Cooldown este conceput pentru a impune limite de timp între tranzacțiile consecutive de la aceeași adresă. Scopul său este să reglementeze frecvența tranzacțiilor și să prevină activitatea excesivă de cumpărare sau vânzare în intervale de timp scurte.

Realizare:

Limite de Timp: Mecanismele Cooldown stabilesc perioade de așteptare între tranzacții, adesea bazate pe timpul scurs de la ultima tranzacție de la o anumită adresă. Utilizatorii trebuie să aștepte ca perioada de așteptare să expire înainte de a începe o nouă tranzacție.

Indicatori:

Compararea Timestamp-urilor: Căutați segmente de cod care compară timestamp-urile blocului sau folosesc funcții legate de timp. Variabilele de stare de tipul lastTransactionTimestamp pot fi utilizate pentru a urmări momentul ultimei tranzacții.

Mecanismul AntiWhale

Scop:

Scopul principal al mecanismului AntiWhale este de a reduce impactul tranzacțiilor mari de la o singură adresă sau de la un mic grup de adrese, adesea numite "whale" (baloane). Scopul său este să prevină concentrarea excesivă a tokenilor în aceleași mâini și să combată posibila manipulare sau destabilizare a pieței.

Implementare:

Limite de Dimensiune a Tranzacției: Mecanismele AntiWhale stabilesc în mod tipic limite pentru dimensiunea sau valoarea tranzacțiilor individuale. Tranzacțiile care depășesc o anumită valoare determinată duc la impunerea unor restricții, cum ar fi respingerea tranzacțiilor, taxe mari sau alte mecanisme de redistribuire.

Indicatori:

Căutați segmente de cod care verifică dimensiunea sau valoarea tranzacțiilor și astfel de variabile de stare (cum ar fi maxTransactionAmount sau whaleThreshold), acestea pot indica prezența mecanismului AntiWhale. AntiWhale afectează în primul rând utilizatorii cu volume mari de tranzacții și se concentrează pe abordarea concentrării tokenilor în posesiunea deținătorilor mari.

Principalele diferențe între Cooldown și AntiWhale:

Parametri AntiWhale Cooldown
Parametri:Influență AntiWhale:Afectează în primul rând utilizatorii cu volume mari de tranzacții. Cooldown:Se aplică tuturor utilizatorilor, indiferent de dimensiunea tranzacției.
Parametri:Dinamica pieței AntiWhale:Concentrat pe rezolvarea problemelor de concentrare. Cooldown:Îndreptat spre reglementarea frecvenței tranzacțiilor.
Parametri:Obiectivele proiectului AntiWhale:Scopul este de a distribui tokenii și de a asigura stabilitatea pieței. Cooldown:Axat în primul rând pe asigurarea stabilității pieței și prevenirea tranzacționării rapide.

Scenarii de utilizare:

  1. Minimizarea manipulării pieței:
    Ambele mecanisme pot fi folosite împreună pentru a aborda diverse probleme de manipulare a pieței. Mecanismul AntiWhale ajută la limitarea dimensiunii tranzacțiilor mari, în timp ce mecanismul Cooldown previne realizarea mai multor tranzacții într-un timp scurt.

    Să presupunem că o entitate deține o parte semnificativă din totalul ofertei de tokenuri. Fără mecanismul AntiWhale, această entitate ar putea realiza tranzacții mari care ar putea provoca fluctuații semnificative de preț, ducând la manipularea pieței. Prin limitarea dimensiunii maxime sau frecvenței tranzacțiilor la o singură adresă într-un anumit interval de timp, mecanismul AntiWhale își propune să împiedice deținătorii mari să aibă o influență excesivă asupra pieței.

  2. Asigurarea distribuției echitabile:
    În contextul tokenurilor noi sau vânzărilor de tokenuri, prevenirea ca un număr mic de participanți să dobândească o parte disproporționată din oferta totală. Stabilirea unor limite pentru suma maximă pe care o adresă individuală o poate achiziționa în timpul unei vânzări de tokenuri sau într-un anumit interval permite o distribuție mai uniformă a tokenurilor între un număr mai mare de participanți.

  3. Abordarea problemelor de lichiditate:
    Volumul mare de tranzacții al posesorilor mari poate afecta lichiditatea și poate perturba procesul natural de descoperire a prețurilor pe schimburile decentralizate. Prin limitarea vitezei tranzacțiilor de către posesorii mari, mecanismul AntiWhale ajută la menținerea unei situații mai stabile de lichiditate.

  4. Stabilizarea prețurilor:
    Prevenirea tranzacțiilor rapide și la scară mare poate contribui la stabilizarea prețurilor. Prin impunerea restricțiilor AntiWhale, prețul tokenului are mai mult timp să se adapteze la condițiile pieței între tranzacții.

  5. Prevenirea front-running-ului:
    AntiWhale poate fi implementat pentru a combate front-running-ul, unde traderii folosesc informații sensibile la timp pentru a realiza tranzacții înaintea altora. Mecanismul AntiWhale poate reduce avantajul obținut prin executarea rapidă a tranzacțiilor.

  6. Mitigarea atacurilor de tip flash-loan și reentrancy:
    AntiWhale poate adăuga un strat suplimentar de apărare împotriva unor atacuri de tip flash-loan și reentrancy prin limitarea vitezei de executare a tranzacțiilor.

scenarii de utilizare

Riscuri potențiale pentru deținătorii de tokeni:

  1. Setarea limitelor AntiWhale prea strânse poate fi o problemă pentru utilizatorii care au într-adevăr nevoie de tranzacții mari.

  2. Dependenta excesivă de mecanismul AntiWhale poate promova în mod inadvertent centralizarea dacă este implementată fără a lua în considerare ecosistemul mai larg.

Cum puteți determina independent dacă aceste amenințări sunt prezente în smart contracts?

Determinarea dacă un mecanism de constrângere AntiWhale este prezent într-un smart contract este o sarcină importantă, iată câteva sfaturi care vă pot ajuta în acest sens:

  1. Învățați documentația contractului: începeți prin revizuirea documentației și specificațiilor contractului.

  2. Analizați funcțiile de transfer: examinați funcțiile responsabile pentru transferul tokenilor (transfer, transferFrom, etc.). Căutați declarații condiționale care impun restricții asupra tranzacțiilor.

  3. Verificați comparațiile timestamp-urilor: căutați cazuri în care contractul compară timestamp-urile blocului.

  4. Verificați variabilele de stare: examinați variabilele de stare care pot fi utilizate pentru a stoca informații legate de AntiWhale.

  5. Căutați funcții sau modificatori legați de calculul timpului, cum ar fi block.timestamp, block.number sau now.

  6. Căutați parametri care controlează comportamentul AntiWhale: aceștia pot fi maxTransferAmount, maxTxLimit și altele asemenea. Acești parametri sunt adesea setați de proprietarul contractului sau prin mecanisme individuale de gestionare a tranzacțiilor.

  7. Analizați jurnalele de evenimente: verificați jurnalele de evenimente pentru evenimente speciale. Implementările vor putea înregistra informații relevante în momentul executării unei tranzacții, oferind o înțelegere a procesului de răcire.

  8. Analizați logica specifică utilizatorului: dacă restricțiile pentru utilizatori sunt implementate în contract, verificați logica pentru determinarea limitelor individuale de transfer. Această logică poate include atribute ale utilizatorului, sold sau alte criterii.

  9. Fiți informat: Mențineți-vă la curent cu cele mai recente dezvoltări din comunitatea noastră (canalul nostru de Telegram) și cele mai bune practici pentru detectarea fraudelor (Blogul nostru și canalul YouTube).

Vestea bună: Scannerul nostru de securitate găsește cu succes (inclusiv cele ascunse) și calculează restricțiile de transfer (AntiWhale) în 90% din cazuri. Utilizați abonamentul nostru premium și protejați-vă fondurile împotriva amenințărilor.

Deși mecanismul AntiWhale este conceput pentru a preveni manipularea pieței și a asigura distribuția tokenilor, infractorii pot folosi capacitățile sale pentru a fraudă utilizatorii. Mai jos sunt câteva scenarii posibile și sfaturi pentru securizarea investițiilor în tokeni cu mecanismul AntiWhale implementat.

Exemplu 1: Limitări privind suma tranzacțiilor cu perioade de răcire (Limitări ale sumei tranzacțiilor cu perioadă de răcire)

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

Acest exemplu limitează suma maximă pe care o singură adresă o poate transfera într-un anumit interval de timp.

Include un mecanism de răcire care oferă o perioadă de așteptare între tranzacții la aceeași adresă. Matricea lastTransactionTimestamp ține evidența timestamp-ului ultimei tranzacții pentru fiecare adresă.

Exemplu 2: Restricții de transfer dinamice (Limite progresive ale tranzacțiilor)

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

Acest exemplu utilizează un mecanism dinamic în care suma maximă a tranzacției crește treptat în timp.

Parametrul maxTransactionIncreaseRate controlează rata la care suma maximă a tranzacției crește. Matricea lastTransactionTimestamp ține evidența timestamp-ului ultimei tranzacții pentru fiecare adresă.

restricții de transfer dinamice

Exemplu 3: Excepții whitelist (Excepție de pe whitelist)

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

Acest exemplu utilizează excepții de pe whitelist pentru adrese specifice din restricțiile AntiWhale.

Adresele din matricea whitelistedAddresses sunt considerate scutite de restricția de sumă maximă a tranzacției. Matricea isWhitelisted determină dacă o anumită adresă este pe whitelist.

Exemplu 4: Limite de tranzacții pe nivele (Limite de tranzacții pe nivele)

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

Acest exemplu implementează limite de tranzacții pe nivele în funcție de soldul adresei expeditorului. Utilizatorii cu un sold mai mic au o limită de tranzacții mai mare, iar cei cu un sold mai mare au o limită de tranzacții mai mică.

Exemplu 5: Taxe pentru tranzacții mari (Taxă pentru Tranzacții Mari)

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

În acest exemplu, se percepe o taxă pentru tranzacțiile care depășesc suma maximă a tranzacției.

Rata comisioanelor (TaxRate) determină procentul din suma tranzacției. Comisionul este dedus, iar apoi suma netă a transferului este procesată.

Exemplu 6: Limite pe nivele (Limite Multi-Nivel pentru Tranzacții)

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

Acest exemplu implementează limite multiple pentru tranzacții, unde se aplică diferite limite în funcție de suma tranzacției.

Acest lucru permite stabilirea limitelor de tranzacție la nivele variate de granularitate pentru diferite volume de tokeni.

Exemplu 7: Limite de tranzacții dinamice în funcție de sold (Limite Dinamice de Tranzacții bazate pe Soldul de Tokeni)

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

Acest exemplu calculează dinamic suma maximă a tranzacției ca procent din Total Supply. Parametrul maxTransactionPercentage definește procentul permis pentru o singură tranzacție.

limite de tranzacții dinamice

Exemplu 8: Limite de tranzacții dependente de timp (Limite de Tranzacții Dependente de Timp)

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

În acest exemplu, restricțiile de tranzacții dependente de timp sunt aplicate, permitând tranzacții doar într-un anumit interval de timp.

Parametrii startTime și endTime definesc perioada în care sunt permise tranzacțiile.

Exemplu 9: Taxare progresivă (Taxare Progresivă)

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

Acest exemplu prezintă un mecanism de taxare progresivă, în care se percepe o taxă (comision) pentru tranzacțiile care depășesc o sumă maximă.

Rata taxei poate fi ajustată în timp sau în funcție de anumite condiții.

Exemplu 10: Limite de tranzacții bazate pe soldurile deținătorilor (Limite de Tranzacții Ponderate bazate pe Soldurile deținătorilor de Tokeni)

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

Acest exemplu implementează limite de tranzacții bazate atât pe suma totală a tranzacțiilor, cât și pe soldul individual al deținătorilor de tokeni.

Binding-ul userTransactionLimit permite setarea limitelor personalizate bazate pe soldurile adreselor specifice.


Sperăm că aceste exemple v-au ajutat să înțelegeți mai bine mecanismul AntiWhale în smart contracts.

Deoarece toate informațiile din blockchain sunt deschise (furnizate, desigur, că codul sursă al contractului este verificat), înarmat cu această cunoaștere puteți studia independent smart contracts și identifica diverse scheme de scam.

Totuși, noi am făcut deja totul pentru dvs.! Înregistrați-vă pentru un abonament premium și obțineți acces la filtre exclusive privind funcțiile contractelor inteligente și analize proaspete. Creșteți șansele de a investi cu succes în tokeni profitabili.

Cu respect, Echipa Lotus Market.

All posts

Connect to a wallet

Metamask