![](/img/bg-single.png)
Pametne pogodbe s funkcijo AntiWhale
![](https://lotusmarket.io/storage/files/smart-contracts-with-anti-whale-function/cover.png)
Nadaljujemo s serijo člankov, posvečenih opisu goljufivih shem v pametnih pogodbah. Danes bomo analizirali pametne pogodbe z mehanizmom za omejitev velikosti prenosa AntiWhale.
V tem članku si bomo podrobno ogledali, kaj je mehanizem AntiWhale, kako se razlikuje od mehanizma Cooldown ter kdaj se uporabljata skupaj in kdaj ločeno.
Uporaba mehanizma ohlajanja (Cooldown)
Namen:
Mehanizem ohlajanja je zasnovan za uvedbo časovnih omejitev med zaporednimi transakcijami iz istega naslova. Njegov namen je regulacija pogostosti transakcij in preprečevanje pretiranega nakupovanja ali prodajne aktivnosti v kratkih časovnih intervalih.
Uresničitev:
Časovne omejitve: Mehanizmi ohlajanja določajo čakanje med transakcijami, pogosto na podlagi časa, pretečenega od zadnje transakcije z določenega naslova. Uporabniki morajo počakati, da čakalno obdobje poteče, preden začnejo novo transakcijo.
Indikatorji:
Primerjava časovnih žigov: Preverite segmente kode, ki primerjajo časovne žige bloka ali uporabljajo funkcije povezane s časom. Spremenljivke stanja, kot je lastniški časovni žig zadnje transakcije, se lahko uporabljajo za sledenje času zadnje transakcije.
Mehanizem AntiWhale
Namen:
Glavni namen mehanizma AntiWhale je zmanjšati vpliv velikih transakcij iz enega naslova ali majhne skupine naslovov, pogosto imenovane "kiti". Cilj je preprečiti prekomerno koncentracijo žetonov v istih rokah ter boj proti morebitni manipulaciji ali destabilizaciji trga.
Implementacija:
Omejitve velikosti transakcij: Mehanizmi AntiWhale običajno določajo omejitve velikosti ali vrednosti posameznih transakcij. Transakcije, ki presegajo določen prag, vodijo v uvedbo omejitev, kot so zavrnitev transakcije, visoki stroški ali druge mehanizme prerazporeditve.
Indikatorji:
Preverite segmente kode, ki preverjajo velikost ali vrednost transakcij, in take spremenljivke stanja (kot so maxTransactionAmount ali whaleThreshold), ki lahko nakazujejo prisotnost mehanizma AntiWhale. AntiWhale predvsem vpliva na uporabnike z velikimi obsegi transakcij in se osredotoča na reševanje koncentracije žetonov pri velikih lastnikih.
Glavne razlike med ohlajanjem (Cooldown) in AntiWhale:
Parametri | AntiWhale | Cooldown |
Parametri:Vpliv | AntiWhale:Pretežno vpliva na uporabnike z visokimi obsegi transakcij. | Cooldown:Velja za vse uporabnike, ne glede na velikost transakcije. |
Parametri:Dinamika trga | AntiWhale:Osredotočen na reševanje problemov koncentracije. | Cooldown:Usmerjen v regulacijo pogostosti transakcij. |
Parametri:Cilji projekta | AntiWhale:Cilj je razdelitev žetonov in zagotavljanje stabilnosti trga. | Cooldown:Predvsem usmerjen v zagotavljanje stabilnosti trga in preprečevanje hitrega trgovanja. |
Scenariji uporabe:
-
Minimizacija manipulacije trga:
Oba mehanizma se lahko uporabljata skupaj za reševanje različnih težav z manipulacijo trga. Mehani...
Predstavljajte si, da ena entiteta lastništvo velikega deleža celotne zaloge žetonov. Brez mehanizma AntiWhale bi ta entiteta lahko izvedla velike transakcije, ki bi povzročile pomembne nihanja cen, kar bi vodilo v manipulacijo trga. Z omejevanjem največje velikosti ali pogostosti transakcij na enem naslovu v določenem časovnem obdobju mehanizem AntiWhale cilja na preprečevanje neupravičenega vpliva velikih lastnikov na trg. -
Zagotavljanje poštene distribucije:
V kontekstu novih žetonov ali prodaje žetonov preprečevanje, da bi majhno število udeležencev pridobilo nerazmeren delež celotne ponudbe. Določanje omejitev za največjo količino, ki jo lahko posamezen naslov kupi med prodajo žetonov ali v določenem obdobju, omogoča bolj enakomerno porazdelitev žetonov med večjim številom udeležencev. -
Reševanje težav z likvidnostjo:
Visoki obsegi transakcij velikih lastnikov lahko vplivajo na likvidnost in motijo naravni proces odkrivanja cen na decentraliziranih borzah. Z omejevanjem hitrosti transakcij s strani velikih lastnikov mehanizem AntiWhale pomaga vzdrževati bolj stabilno likvidnostno situacijo. -
Stabilizacija cen:
Preprečevanje hitrih in obsežnih transakcij lahko pomaga stabilizirati cene. Z uveljavljanjem omejitev AntiWhale ima token več časa, da se prilagodi tržnim razmeram med transakcijami. -
Preprečevanje prednosti pri izvajanju trgovinskih operacij:
AntiWhale se lahko uporablja za boj proti predhodnemu trgovanju, kjer trgovci uporabljajo časovno občutljive informacije za izvajanje transakcij pred drugimi. Mehani... -
Omilitev napadov s hitrimi posojili in napadov na re entrance:
AntiWhale lahko dodatno zaščiti pred nekaterimi napadi s hitrimi posojili in napadi na reentrance z omejevanjem hitrosti izvajanja transakcij.
Potencialna tveganja za imetnike žetonov:
- Nastavitev pretesnih AntiWhale omejitev lahko predstavlja težavo za uporabnike, ki resnično potrebujejo velike transakcije.
- Prevelika odvisnost od mehanizma AntiWhale lahko nenamerno spodbuja centralizacijo, če se izvaja brez upoštevanja širšega ekosistema.
Kako lahko neodvisno ugotovite, ali so takšne grožnje prisotne v pametnih pogodbah?
Določanje, ali je v pametni pogodbi prisoten mehanizem omejevanja AntiWhale, je pomembna naloga, tukaj je nekaj nasvetov, ki vam lahko pomagajo pri tem:
- Preučite dokumentacijo pogodbe: začnite z pregledom dokumentacije in specifikacij pogodbe.
- Analizirajte funkcije prenosa: preglejte funkcije, odgovorne za prenos žetonov (transfer, transferFrom, itd.). Iščite pogojne izjave, ki uvedejo omejitve transakcij.
- Preverite primerjave časovnih žigov: poiščite primere, kjer pogodba primerja časovne žige blokov.
- Preverite spremenljivke stanja: preučite spremenljivke stanja, ki se lahko uporabljajo za shranjevanje informacij, povezanih z AntiWhale.
- Iščite funkcije ali modifikatorje, povezane s časovnimi izračuni, kot so block.timestamp, block.number ali now.
- Iščite parametre, ki nadzorujejo delovanje AntiWhale: to lahko vključuje maxTransferAmount, maxTxLimit in podobno. Te parametre pogosto nastavi lastnik pogodbe ali preko mehanizmov posameznih transakcij.
- Analizirajte dnevniške dogodke: preverite dnevniške dogodke za posebne dogodke. Implementacije bodo lahko zabeležile relevantne informacije ob izvedbi transakcije, kar omogoča vpogled v ohlajanje.
- Analizirajte uporabniško specifično logiko: če so v pogodbi implementirane omejitve uporabnikov, preverite logiko za določanje posameznih omejitev prenosa. Ta logika lahko vključuje uporabniške atribute, stanje ali druge kriterije.
- Bodite informirani: Bodite na tekočem z najnovejšimi razvoji v naši skupnosti (Telegram kanal) in najboljšimi praksami za odkrivanje goljufij (naš blog in YouTube kanal).
Dobra novica: Naš varnostni skener uspešno odkrije (vključno skrite) in izračuna omejitve prenosa (AntiWhale) v 90% primerov. Uporabite našo premium naročnino in zaščitite svoja sredstva pred grožnjami.
Čeprav je mehanizem AntiWhale zasnovan za preprečevanje manipulacije trga in zagotavljanje distribucije žetonov, goljufi lahko uporabijo njegove zmogljivosti za goljufanje uporabnikov. Spodaj so nekateri možni scenariji in nasveti za varovanje naložb v žetone z uporabo mehanizma AntiWhale.
Primer 1: Omejitve za količino transakcij z obdobjem ohlajanja (Omejitve količine transakcij z ohlajanjem)
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;
}
Ta primer omejuje največji znesek, ki ga lahko en sam naslov prenese v določenem časovnem obdobju.
Vključuje mehanizem ohlajanja, ki zagotavlja čakanje med transakcijami na istem naslovu. Tabela lastTransactionTimestamp beleži časovni žig zadnje transakcije za vsak naslov.
Primer 2: Dinamične omejitve transakcij (Progresivne omejitve transakcij)
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;
}
Ta primer uporablja dinamičen mehanizem, v katerem se največji znesek transakcije postopoma povečuje s časom.
Parameter maxTransactionIncreaseRate nadzoruje stopnjo, s katero se največji znesek transakcije povečuje. Tabela lastTransactionTimestamp beleži časovni žig zadnje transakcije za vsak naslov.
Primer 3: Izjeme iz belih seznamov (Izjema iz beleženja)
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");
...
}
Ta primer uporablja izjeme iz belih seznamov za določene naslove, ki so izvzeti iz omejitev AntiWhale.
Naslovi v tabeli whitelistedAddresses so izvzeti iz omejitve največjega zneska transakcije. Polje isWhitelisted določa, ali je določen naslov na beli listi.
Primer 4: Nivojske omejitve transakcij (Nivojske omejitve transakcij)
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];
}
}
Ta primer izvaja nivojske omejitve transakcij, odvisne od stanja naslova pošiljatelja. Uporabniki z nižjim saldom imajo višje omejitve transakcij, uporabniki z višjim saldom pa nižje omejitve transakcij.
Funkcija getTransactionLimit določa ustrezno omejitev transakcije glede na stanje uporabnika.
Primer 5: Dajatve na velike transakcije (Davek na velike transakcije)
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 tem primeru se davek zaračuna na transakcije, ki presegajo največji znesek transakcije.
Stopnja davka (TaxRate) določa odstotek zneska transakcije. Dajatev se odšteje, nato pa se obdela neto znesek prenosa.
Primer 6: Nivojske omejitve (Nivojske omejitve transakcij)
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");
}
}
Ta primer izvaja več nivojev omejitev transakcij, kjer se različne omejitve uporabljajo glede na znesek transakcije.
To omogoča nastavitev omejitev transakcij na različnih nivojih natančnosti za različne količine žetonov.
Primer 7: Dinamične omejitve transakcij glede na stanje (Dinamične omejitve transakcij na podlagi stanja žetonov)
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");
...
}
Ta primer dinamično izračuna največji znesek transakcije kot odstotek Skupne dobave. Parameter maxTransactionPercentage določa dovoljeni odstotek za eno transakcijo.
Primer 8: Časovno odvisne omejitve (Časovno odvisne omejitve transakcij)
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 tem primeru so uporabljene časovno odvisne omejitve transakcij, ki dovoljujejo transakcije le v določenem časovnem okviru.
Parametra startTime in endTime določata obdobje, v katerem so transakcije dovoljene.
Primer 9: Progresivno obdavčenje (Progresivno obdavčenje)
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
...
}
Ta primer predstavlja mehanizem progresivnega obdavčenja, kjer se davek (pristojbina) zaračuna na transakcije, ki presegajo največji znesek.
Stopnja davka (pristojbine) se lahko prilagodi čez čas ali glede na določene pogoje.
Primer 10: Omejitve transakcij na podlagi stanj imetnikov (Tehtane omejitve transakcij na podlagi stanj imetnikov žetonov)
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");
...
}
Ta primer izvaja omejitve transakcij na podlagi tako skupne količine transakcij kot tudi stanja posameznih imetnikov žetonov.
Tabela userTransactionLimit omogoča nastavitev prilagojenih omejitev glede na stanja določenih naslovov.
Upamo, da so vam ti primeri pomagali bolje razumeti mehanizem AntiWhale v pametnih pogodbah.
Ker je vse informacije na verigi odprto (seveda, če je vir koda pogodbe preverjen), oboroženi s tem znanjem lahko samostojno preučujete pametne pogodbe in prepoznavate različne goljufije.
Vendar smo to že naredili za vas! Prijavite se na premium naročnino in pridobite dostop do ekskluzivnih filtrov za funkcije pametnih pogodb ter svežih analiz. Povečajte svoje možnosti za uspešno naložbo v donosne žetone.
Lep pozdrav, Lotus Market team.