Analise smart-contract
28.03.2024

AntiWhale funktsiooniga arukad lepingud

Jätkame artiklite seeriat, mis on pühendatud petturlikele skeemidele nutikates lepingutes. Täna analüüsime nutikaid lepinguid, millel on AntiWhale'i ülekande suuruse piirangumehhanism.

Selles artiklis vaatleme põhjalikult, mis on AntiWhale mehhanism, kuidas see erineb Jahutuse mehhanismist ning millal neid kasutatakse koos ja millal eraldi.

Jahutuse mehhanism

Eesmärk:

Jahutuse mehhanism on mõeldud aja piirangute kehtestamiseks järjestikuste tehingute vahel samast aadressist. Selle eesmärk on reguleerida tehingute sagedust ja takistada ülemäärast ostmis- või müümistegevust lühikestel ajavahemikel.

Rakendamine:

Ooteajad: Jahutuse mehhanismid seavad tehingute vahele ooteperioode, sageli põhinedes ajale, mis on möödunud viimasest tehingust teatud aadressilt. Kasutajad peavad ootama, kuni ooteperiood aegub, enne uue tehingu alustamist.

Näitajad:

Ajatempli võrdlus: Otsige koodilõike, mis võrdleb ploki ajatemplite või kasutab ajaga seotud funktsioone. Oleku muutujad nagu lastTransactionTimestamp tüübist võivad jälgida viimase tehingu aega.

AntiWhale mehhanism

Eesmärk:

AntiWhale mehhanismi peamine eesmärk on vähendada suurte tehingute mõju ühest aadressist või väikesest aadressirühmast, mida sageli nimetatakse "vaaladeks". Selle eesmärk on takistada tokenite liigset kontsentreerumist samade kätesse ning võidelda võimaliku manipuleerimise või turu destabiliseerimise vastu.

Rakendamine:

Tehingu suuruse piirangud: AntiWhale mehhanismid seavad tavaliselt piirangud üksikute tehingute suurusele või väärtusele. Piirangutest suurema väärtusega tehingud viivad kaasa piirangute, näiteks tehingu tagasilükkamise, kõrgete tasude või muude ümberjaotamismehhanismide kehtestamise.

Näitajad:

Otsige koodilõike, mis kontrollivad tehingute suurust või väärtust, ja selliseid olekumuutujaid (nagu maxTransactionAmount või whaleThreshold), mis võivad viidata AntiWhale mehhanismi olemasolule. AntiWhale mõjutab peamiselt kasutajaid, kellel on suured tehingumahtude ja keskendub tokenite kontsentratsiooni suurtele hoidjatele.

Põhilised erinevused Jahutuse ja AntiWhale vahel:

Parameetrid AntiWhale Jahutus
Parameetrid:Mõju AntiWhale:Mõjutab peamiselt kasutajaid, kellel on suured tehingumahtud. Jahutus:Rakendub kõigile kasutajatele, olenemata tehingu suurusest.
Parameetrid:Turu dünaamika AntiWhale:Keskendub kontsentratsiooniprobleemide lahendamisele. Jahutus:Eesmärk on reguleerida tehingute sagedust.
Parameetrid:Projekti eesmärgid AntiWhale:Eesmärk on tokenite jaotamine ning turu stabiilsuse tagamine. Jahutus:Peamiselt suunatud turu stabiilsuse tagamisele ja kiirete tehingute ennetamisele.

Kasutamise stsenaariumid:

  1. Turumoonutuste minimeerimine:
    Mõlemad mehhanismid saavad koos kasutada, et lahendada erinevaid turumoonutuste probleeme. AntiWhale mehhanism aitab piirata suurte tehingute suurust, samas kui Jahutuse mehhanism takistab mitme tehingu kiiret toimumist lühikese aja jooksul.

    Oletame, et üks entiteet omab olulist osa kogu tokeni pakkumisest. Ilma AntiWhale mehhanismita võiks see entiteet teha suuri tehinguid, mis võiksid põhjustada olulisi hinnakõikumisi, viies turu manipuleerimiseni. Piirates ühe aadressi maksimaalset tehingu suurust või sagedust teatud aja jooksul, püüab AntiWhale mehhanism vältida suurte hoidjate ebamõistlikku mõju turule.

  2. Õiglase jaotuse tagamine:
    Uute tokenite või tokenimüügi kontekstis välditakse väikese arvu osalejate saamist ebaõiglaselt suure osa kogu pakkumisest. Piirates maksimaalset summat, mida üksik aadress saab osta tokenimüügi ajal või teatud perioodi jooksul, võimaldab see tokenite ühtlasemat jaotamist suurema osalejate arvu vahel.

  3. Likviidsusprobleemide lahendamine:
    Suurte hoidjate kõrged tehingumahtud võivad mõjutada likviidsust ja häirida detsentraliseeritud börsidel loomuliku hinna avastamise protsessi. Piirates suurte hoidjate tehingute kiirust, aitab AntiWhale mehhanism säilitada stabiilsemat likviidsuse olukorda.

  4. Hinna stabiliseerimine:
    Kiirete ja suurte tehingute takistamine võib aidata stabiliseerida hindu. AntiWhale piirangute rakendamisega on tokeni hinnal ro hkem aega turutingimustega kohandumiseks tehingute vahel.

  5. Eelhüppest takistamine:
    AntiWhale'i saab rakendada eelhüppe vastu võitlemiseks, kus kauplejad kasutavad ajatundlikku teavet tehingute tegemiseks enne teisi. AntiWhale mehhanism võib vähendada eeliseid, mida saab kiirete tehingute tegemisest.

  6. Flash-laenu ja taasastus rünnakute leevendamine:
    AntiWhale saab lisada täiendava kaitsekihi mõnede flash-laenu ja taasastus rünnakute vastu, piirates tehingute kiirust.

kasutamise stsenaariumid

Potentsiaalsed riskid tokeni omanikele:

  1. Liiga tihedate AntiWhale piirangute seadmine võib olla probleemiks kasutajatele, kellel on tõepoolest vajadus suurte tehingute järele.

  2. Ülemäärane sõltuvus AntiWhale mehhanismist võib juhuslikult soodustada keskendamist, kui see on ellu viidud, arvestamata laiemat ökosüsteemi.

Kuidas saate iseseisvalt kindlaks teha, kas sellised ohud on olemas nutikates lepingutes?

AntiWhale piirangu mehhanismi olemasolu kindlakstegemine nutikas lepingus on oluline ülesanne, siin on mõned näpunäited selleks:

  1. Uurige lepingu dokumentatsiooni: alustage lepingu dokumentatsiooni ja spetsifikatsioonide ülevaatamisega.

  2. Analüüsige ülekande funktsioone: uurige funktsioone, mis vastutavad tokenite ülekandmise eest (ülekanne, ülekanneFrom jne). Otsige tingimuslauseid, mis kehtestavad tehingutele piiranguid.

  3. Kontrollige ajatemplite võrdlusi: otsige juhtumeid, kus leping võrdleb ploki ajatempleid.

  4. Kontrollige olekumuutujaid: uurige olekumuutujaid, mis võivad olla seotud AntiWhale'iga seotud teabega.

  5. Otsige ajakalkulatsioonidega seotud funktsioone või muutujaid, nagu block.timestamp, block.number või now.

  6. Otsige AntiWhale käitumist kontrollivaid parameetreid: need võivad olla maxTransferAmount, maxTxLimit ja muud sarnased. Need parameetrid on sageli seatud lepingu omaniku või individuaalsete tehinguhaldusmehhanismide kaudu.

  7. Analüüsige sündmuste logisid: kontrollige sündmuste logisid eriliste sündmuste jaoks. Implementatsioonid suudavad logida asjakohast teavet tehingu täitmise ajal, mis annab ülevaate jahutusprotsessist.

  8. Analüüsige kasutajaspetsiifilist loogikat: kui kasutajapiirangud on lepingus rakendatud, kontrollige loogikat, mis määrab individuaalsed ülekande piirangud. See loogika võib hõlmata kasutaja atribuute, saldo või muid kriteeriume.

  9. Olge teadlik: Püsige kursis meie kogukonna (Telegrami kanal) viimaste arengutega ja pettuste avastamise parimate tavade (meie Blogi ja YouTube'i kanal) osas.

Hea uudis: meie turvaskanner tuvastab (sh varjatud) edukalt ülekandepiirangud (AntiWhale) 90% juhtudest. Kasutage meie premium tellimust ja kaitsege oma vahendeid ohtude eest.

Kuigi AntiWhale mehhanism on loodud turumanipulatsiooni ennetamiseks ja tokenite jaotuse tagamiseks, võivad petturid selle võimalusi kasutada kasutajate petmiseks. Allpool on mõned võimalikud stsenaariumid ja näpunäited, kuidas turvaliselt investeerida tokenitesse, kus AntiWhale mehhanism on rakendatud.

Näide 1: Tehingute summa piirangud jahutusperioodiga (Tehingu summa piirangud koos jahutusajaga)

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

See näide piirab maksimaalset summat, mida üksik aadress teatud aja jooksul saab üle kanda.

Siia kuulub jahutusmehhanism, mis pakub ooteaega tehingute vahel samast aadressist. lastTransactionTimestamp massiiv jälgib iga aadressi viimase tehingu ajatempli.

Näide 2: Dünaamilised ülekande piirangud (Progressiivsed tehingu piirangud)

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

See näide kasutab dünaamilist mehhanismi, kus maksimaalne tehingusumma suureneb järk-järgult ajas.

maxTransactionIncreaseRate parameeter juhib määra, millega maksimaalne tehingusumma suureneb. lastTransactionTimestamp massiiv jälgib iga aadressi viimase tehingu ajatempli.

dünaamilised ülekande piirangud

Näide 3: Valgete erandite kasutamine (Valge nimekirja erand)

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

See näide kasutab AntiWhale piirangutest erandite loetelu konkreetsete aadresside jaoks.

WhitelistedAddresses massiivis olevaid aadresse käsitletakse maksimaalse tehingusumma piirangu suhtes erandina. isWhitelisted massiiv määrab, kas konkreetne aadress on valges nimekirjas.

Näide 4: Astmelised tehingu piirangud (Astmelised tehingu piirangud)

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

See näide rakendab astmelisi tehingu piiranguid, sõltuvalt saatja aadressi tasakaalust. Kasutajatel, kellel on madalam saldo, on suurem tehingupiirang, ja kasutajatel, kellel on suurem saldo, on madalam tehingupiirang.

getTransactionLimit funktsioon määrab vastava tehingupiirangu kasutaja saldo põhjal.

Näide 5: Tasud suurte tehingute eest (Maks suurte tehingute eest)

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

Selles näites võetakse tasu tehingutelt, mis ületavad maksimaalset tehingusummat.

Komisjonitasu määr (taxRate) määrab tehingusumma protsendi. Komisjon arvatakse maha ja seejärel töödeldakse ülekande netosummat.

Näide 6: Astmelised piirangud (Mitmetasemelised tehingupiirangud)

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

See näide rakendab mitmetasemelisi tehingupiiranguid, kus erinevad piirangud kehtivad tehingu summa järgi.

See võimaldab tehing upiirangutel seada erineva granulaarsuse taseme sõltuvalt tokenite erinevatest mahtudest.

Näide 7: Dünaamilised tehingu piirangud sõltuvalt saldost (Dünaamilised tehingu piirangud tokenite saldost lähtuvalt)

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

Selles näites arvutatakse maksimaalne tehingusumma dünaamiliselt protsendina Kogu Pakkumisest. maxTransactionPercentage parameeter määratleb lubatud protsendi ühe tehingu jaoks.

dünaamilised tehingu piirangud

Näide 8: Ajasõltuvad piirangud (Ajapõhised tehingu piirangud)

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

Selles näites rakendatakse ajasõltuvaid tehingupiiranguid, lubades tehinguid ainult määratud ajavahemikus.

startTime ja endTime parameetrid määratlevad perioodi, mil tehingud on lubatud.

Näide 9: Progressiivne maksustamine (Progressiivne maksustamine)

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

Selles näites esitatakse progressiivne maksustamismehhanism, kus tehingutelt, mis ületavad maksimaalset summat, võetakse maks (tasu).

Maksu (tasu) määr võib ajas muutuda või põhineda teatud tingimustel.

Näide 10: Tehingupiirangud kasutaja saldode põhjal (Kaalu alusel tehingupiirangud tokeniomanike saldode alusel)

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

Selles näites rakendatakse tehingupiiranguid nii kogu tehingusumma kui ka individuaalsete tokeniomanike saldode põhjal.

userTransactionLimit sidumine võimaldab seada isikupärastatud piiranguid, mis põhinevad konkreetsete aadresside saldodel.


Loodame, et need näited aitasid teil paremini mõista AntiWhale mehhanismi nutikates lepingutes.

Kuna kogu teave blockchainis on avalik (muidugi eeldusel, et lepingu lähtekood on kontrollitud), saate selle teadmise abil iseseisvalt uurida nutikaid lepinguid ja tuvastada erinevaid pettusskeeme.

Kuid meie oleme selle kõik juba teinud! Registreeruge premium tellimuseks ja saage juurdepääs eksklusiivsetele filtritele nutikate lepingute funktsioonidele ja värsketele analüütikutele. Suurendage oma võimalusi edukalt investeerida kasumlikesse tokenitesse.

Parimate soovidega, Lotus Marketi meeskond.

All posts

Connect to a wallet

Metamask