Analise smart-contract
28.03.2024

Viedie līgumi ar AntiWhale funkciju

Mēs turpinām sēriju rakstu, kas veltīti apkrāpīgām shēmām viedajos līgumos. Šodien mēs analizēsim viedos līgumus ar AntiWhale pārneses ierobežojumu mehānismu.

Šajā rakstā detalizēti aplūkosim, kas ir AntiWhale mehānisms, kā tas atšķiras no Atdzesēšanas mehānisma, un kad tie tiek izmantoti kopā un kad tie tiek izmantoti atsevišķi.

Atdzesēšanas mehānisms

Mērķis:

Atdzesēšanas mehānisms ir izstrādāts, lai noteiktu laika ierobežojumus starp secīgām transakcijām no tās pašas adreses. Tā mērķis ir regulēt transakciju biežumu un novērst pārmērīgu pirkšanas vai pārdošanas aktivitāti īsos laika periodos.

Realizācija:

Laika ierobežojumi: Atdzesēšanas mehānismi iestata gaidīšanas periodus starp transakcijām, bieži balstoties uz laika, kas pagājis kopš pēdējās transakcijas no konkrētas adreses. Lietotājiem jāgaida, kamēr gaidīšanas periods beidzas, pirms sāk jaunu transakciju.

Indikatori:

Laika zīmju salīdzinājums: Meklēt kodola segmentus, kas salīdzina bloka laika zīmes vai izmanto laika saistītas funkcijas. Stāvokļa mainīgie, piemēram, lastTransactionTimestamp tipa, var tikt izmantoti, lai sekotu pēdējās transakcijas laikam.

AntiWhale mehānisms

Mērķis:

Galvenais AntiWhale mehānisma mērķis ir samazināt lielu transakciju ietekmi no vienas adreses vai nelielas grupas adresēm, bieži sauktām par "valēm". Tā mērķis ir novērst pārmērīgu žetonu koncentrāciju vienās rokās un cīnīties pret iespējamu manipulāciju vai tirgus destabilizāciju.

Implementācija:

Transakciju lieluma ierobežojumi: AntiWhale mehānismi parasti iestata ierobežojumus individuālo transakciju lielumam vai vērtībai. Transakcijas, kas pārsniedz noteiktu slieksni, izraisa ierobežojumu piemērošanu, piemēram, transakciju noraidīšanu, augstas maksas vai citus pārdalīšanas mehānismus.

Indikatori:

Meklēt kodola segmentus, kas pārbauda transakciju lielumu vai vērtību, un tādus stāvokļa mainīgos (piemēram, maxTransactionAmount vai whaleThreshold), kas var norādīt uz AntiWhale mehānisma klātbūtni. AntiWhale galvenokārt ietekmē lietotājus ar lielu transakciju apjomu un koncentrējas uz žetonu koncentrāciju lielajos turētājos.

Galvenās atšķirības starp Atdzesēšanu un AntiWhale:

Parametri AntiWhale Atdzesēšana
Parametri:Ietekme AntiWhale:Primāri ietekmē lietotājus ar lielu transakciju apjomu. Atdzesēšana:Piemērojams visiem lietotājiem, neatkarīgi no transakciju apjoma.
Parametri:Tirgus dinamika AntiWhale:Vērsts uz koncentrācijas problēmu risināšanu. Atdzesēšana:Vērsts uz transakciju biežuma regulēšanu.
Parametri:Projekta mērķi AntiWhale:Mērķis ir izplatīt žetonus un nodrošināt tirgus stabilitāti. Atdzesēšana:Pirmkārt vērsts uz tirgus stabilitāti un ātru tirdzniecību novēršanu.

Izmantošanas scenāriji:

  1. Tirgus manipulāciju minimizēšana:
    Abi mehānismi var tikt izmantoti kopā, lai risinātu dažādas tirgus manipulāciju problēmas. AntiWhale mehānisms palīdz ierobežot lielu transakciju lielumu, kamēr Atdzesēšanas mehānisms novērš vairāku darījumu veikšanu ātri īsā laika periodā.

    Pielāgojiet situāciju, ja viena entitāte pieder nozīmīgai daļai no kopējā žetonu piedāvājuma. Bez AntiWhale mehānisma šī entitāte varētu veikt lielas transakcijas, kas varētu izraisīt būtiskas cenas svārstības, veicinot tirgus manipulāciju. Ierobežojot maksimālo darījumu apjomu vai frekvenci vienas adrešu ietvaros noteiktā laika periodā, AntiWhale mehānisms mērķē uz lielu turētāju ietekmes novēršanu tirgū.

  2. Taisnīgas sadale:
    Jaunie žetoni vai žetonu pārdošanas kontekstā, novēršot to, ka neliels dalībnieku skaits iegūst nes amērīgu daļu no kopējā piedāvājuma. Iestatot ierobežojumus maksimālajam apjomam, ko var iegādāties viena adrese laikā, vai noteiktā laika periodā, ļauj līdzsvarotāk sadalīt žetonus starp lielāku dalībnieku skaitu.

  3. Likviditātes problēmu risināšana:
    Lielo turētāju augstais transakciju apjoms var ietekmēt likviditāti un traucēt dabiskās cenas noteikšanas procesu decentralizētajās biržās. Ierobežojot transakciju ātrumu lielu turētāju gadījumā, AntiWhale mehānisms palīdz uzturēt stabilāku likviditāti.

  4. Cenu stabilizācija:
    Ātri veiktu un lielapjomīgu darījumu novēršana var palīdzēt stabilizēt cenas. Īstenojot AntiWhale ierobežojumus, žetona cena vairāk laika ir pieejama, lai pielāgotos tirgus apstākļiem starp darījumiem.

  5. Priekšdarbības novēršana:
    AntiWhale mehānisms var tikt izmantots, lai cīnītos pret priekšdarbību, kad tirgotāji izmanto laika jutīgu informāciju, lai veiktu darījumus pirms citiem. Tas var samazināt ieguvumu, ko iegūst, izpildot darījumus ātri.

  6. Flash-aizdevumu un reentrancy uzbrukumu mazināšana:
    AntiWhale var pievienot papildu aizsardzības līmeni pret dažiem flash-aizdevumu un reentrancy uzbrukumiem, ierobežojot darījumu izpildes ātrumu.

izmantošanas scenāriji

Šķietamie risksi žetonu īpašniekiem:

  1. Pārāk stingru AntiWhale ierobežojumu noteikšana var radīt problēmas lietotājiem, kuriem tiešām ir nepieciešami lieli darījumi.

  2. Pārmērīga atkarība no AntiWhale mehānisma var nejauši veicināt centralizāciju, ja tas tiek īstenots, neliekot lielu uzsvaru uz plašāku ekosistēmu.

Kā neatkarīgi noteikt, vai šādas draudzes ir klāt viedos līgumos?

Noteikt, vai viedajā līgumā ir klāt AntiWhale ierobežojumu mehānisms, ir svarīgs uzdevums, šeit ir daži padomi, kas var palīdzēt:

  1. Iepazīstieties ar līguma dokumentāciju: sāciet ar līguma dokumentācijas un specifikāciju pārskatu.

  2. Analizējiet pārneses funkcijas: izpētiet funkcijas, kas atbild par žetonu pārnesi (transfer, transferFrom utt.). Meklējiet nosacījuma izteiksmes, kas ievieš ierobežojumus darījumiem.

  3. Pārbaudiet laika zīmju salīdzinājumus: meklējiet gadījumus, kad līgums salīdzina bloka laika zīmes.

  4. Pārbaudiet stāvokļa mainīgos: izpētiet stāvokļa mainīgos, kas var tikt izmantoti, lai uzglabātu AntiWhale saistīto informāciju.

  5. Meklējiet funkcijas vai modificētājus, kas saistīti ar laika aprēķiniem, piemēram, block.timestamp, block.number vai now.

  6. Meklējiet parametrus, kas kontrolē AntiWhale darbību: tie var būt maxTransferAmount, maxTxLimit un tamlīdzīgi. Šie parametri bieži tiek iestatīti līguma īpašnieka vai individuālo darījumu vadības mehānismu caur.

  7. Analizējiet notikumu žurnālus: pārbaudiet notikumu žurnālus, lai redzētu īpašus notikumus. Implementācijas var reģistrēt atbilstošu informāciju, kad tiek veikta transakcija, kas sniedz ieskatu atdzesošanas procesā.

  8. Analizējiet lietotāja specifisko loģiku: ja līgumā ir ieviestas lietotāja ierobežojumu, pārbaudiet loģiku, kas nosaka individuālos pārneses ierobežojumus. Šī loģika var ietvert lietotāja atribūtus, atlikumu vai citus kritērijus.

  9. Būt informētam: Sekojiet līdzi jaunākajām mūsu kopienas attīstības aktualitātēm (Telegrammas kanāls) un labākajiem pievilkšanas atklāšanas veidiem (mūsu bloga un YouTube kanāls).

Labas ziņas: mūsu drošības skeneris veiksmīgi atrod (tai skaitā paslēptos) un aprēķina pārneses ierobežojumus (AntiWhale) 90% gadījumu. Izmantojiet mūsu premium abonementu un aizsargājiet savus līdzekļus no draudiem.

Neraugoties uz to, ka AntiWhale mehānisms ir izstrādāts, lai novērstu tirgus manipulācijas un nodrošinātu žetonu izplatību, krāpnieki var izmantot tās iespējas, lai apkrāptu lietotājus. Zemāk ir daži iespējamie scenāriji un padomi, kā nodrošināt žetonu ieguldījumu ar darbībā esošo AntiWhale mehānismu.

Piemērs 1: Ierobežojumi transakciju apjomā ar atdzesošanas periodu (Darījumu apjomu ierobežojumi ar atdzesošanu)

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

Šis piemērs ierobežo maksimālo summu, kuru viena adrese var pārsūtīt noteiktā laika periodā.

Tas ietver atdzesošanas mehānismu, kas nodrošina gaidīšanas periodu starp transakcijām no vienas un tās pašas adreses. lastTransactionTimestamp masīvs uztur katras adrešu pēdējās transakcijas laika zīmi.

Piemērs 2: Dinamiski tulkotu ierobežojumu (Progresīvi darījumu ierobežojumi)

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

Šis piemērs izmanto dinamisku mehānismu, kurā maksimālais darījuma apjoms pakāpeniski p alielinās laika gaitā.

maxTransactionIncreaseRate parametrs kontrolē, kādā ātrumā maksimālais darījuma apjoms palielinās. lastTransactionTimestamp masīvs uztur katras adreses pēdējās transakcijas laika zīmi.

dinamisku tulkotu ierobežojumu

Piemērs 3: Bālaistēto izņēmumu (Bālistēto izņēmumu)

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

Šis piemērs izmanto bālaistēto izņēmumu konkrētām adresēm no AntiWhale ierobežojumiem.

Adreses whitelistedAddresses masīvā tiek uzskatītas par izņemtām no maksimālā darījuma apjoma ierobežojuma. isWhitelisted masīvs nosaka, vai konkrēta adrese ir bālistēta.

Piemērs 4: Kārātie darījumu ierobežojumi (Kārātie darījumu ierobežojumi)

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

Šis piemērs īsteno kārātos darījumu ierobežojumus atkarībā no sūtītāja adreses atlikuma. Lietotāji ar zemāku atlikumu ir augstāks darījumu ierobežojums, bet lietotāji ar augstāku atlikumu ir zemāks darījumu ierobežojums.

The getTransactionLimit function determines the appropriate transaction limit based on the user's balance.

Piemērs 5: Maksas par lieliem darījumiem (Nodoklis par lieliem darījumiem)

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

Šajā piemērā tiek iekasēta komisija par darījumiem, kas pārsniedz maksimālo darījuma apjomu.

Komisijas likme (TaxRate) nosaka procentuālo attiecību no darījuma summas. Komisija tiek atskaitīta, un tad tiek apstrādāta pārneses neto summa.

Piemērs 6: Kārātie ierobežojumi (Vairāku līmeņu darījumu ierobežojumi)

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

Šis piemērs īsteno vairākus darījumu ierobežojumu līmeņus, kurus piemēro atkarībā no darījuma summas.

Tas ļauj iestatīt darījumu ierobežojumus dažādās granulācijas līmeņos atkarībā no žetonu apjoma.

Piemērs 7: Dinamiski darījumu ierobežojumi atkarībā no bilances (Dinamiskie darījumu ierobežojumi balstoties uz žetonu bilanci)

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

Šis piemērs dinamiski aprēķina maksimālo darījuma apjomu kā procentu no Kopējā piegādes. maxTransactionPercentage parametrs definē atļauto procentuālo daļu vienai transakcijai.

dinamiski darījumu ierobežojumi

Piemērs 8: Laika atkarīgie ierobežojumi (Laika atkarīgie darījumu ierobežojumi)

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

Šajā piemērā tiek piemēroti laika atkarīgi darījumu ierobežojumi, atļaujot darījumus tikai noteiktā laika intervālā.

startTime un endTime parametri definē periodu, kurā tiek atļauti darījumi.

Piemērs 9: Progresīvās nodokļu politikas piemērs (Progresīvā nodokļu politika)

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

Šis piemērs demonstrē progresīvu nodokļu sistēmu, kurā par darījumiem, kas pārsniedz maksimālo summu, tiek iekasēts nodoklis (komisija).

Nodokļu (komisijas) likme var tikt pielāgota laikā vai atkarībā no noteiktiem apstākļiem.

Piemērs 10: Darījumu ierobežojumi, balstoties uz turētāju bilancēm (Svarītie darījumu ierobežojumi balstoties uz žetonu turētāju bilancēm)

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

Šis piemērs īsteno darījumu ierobežojumus gan pamatsummai, gan individuālo žetonu īpašnieku bilancēm.

userTransactionLimit saistība ļauj iestatīt personalizētus ierobežojumus, pamatojoties uz konkrētu adreses atlikumu.


Cer am, ka šie piemēri ir palīdzējuši jums labāk saprast AntiWhale mehānismu viedajos līgumos.

Ņemot vērā, ka visi blokķēdes dati ir publiski pieejami (protams, ja kontraktu avota kods ir pārbaudīts), apbruņoti ar šo zināšanu, jūs varat neatkarīgi izpētīt viedos līgumus un identificēt dažādas krāpniecības shēmas.

Tomēr mēs to jau esam izdarījuši visu jūsu vietā! Pieteikties premium abonementam un iegūt piekļuvi ekskluzīviem filtriem viedajos līgumos un svaigām analītikas ziņām. Palieliniet savas iespējas veiksmīgi ieguldīt peļņu nesošos žetonus.

Ar cieņu, Lotus Market komanda.

All posts

Connect to a wallet

Metamask