![](/img/bg-single.png)
Älykkäät sopimukset AntiWhale-toiminnolla
![](https://lotusmarket.io/storage/files/smart-contracts-with-anti-whale-function/cover.png)
Jatkamme artikkelisarjaa, joka on omistettu huijausmekanismien kuvaamiselle älykkäissä sopimuksissa. Tänään analysoimme älykkäitä sopimuksia, joissa on AntiWhale-siirtorajoitusmekanismi.
Tässä artikkelissa tarkastelemme yksityiskohtaisesti, mikä AntiWhale-mekanismi on, miten se eroaa Cooldown-mekanismista ja milloin niitä käytetään yhdessä ja milloin erikseen.
Cooldown-mekanismi
Tarkoitus:
Cooldown-mekanismi on suunniteltu asettamaan aikarajoja peräkkäisille saman osoitteen tekemille siirroille. Sen tarkoituksena on säännellä siirtojen taajuutta ja estää yliaktiivista ostamista tai myymistä lyhyillä aikaväleillä.
Toteutus:
Aikarajat: Cooldown-mekanismit asettavat odotusajat siirtojen välille, usein perustuen kuluneeseen aikaan viimeisimmästä siirrosta tietyltä osoitteelta. Käyttäjien on odotettava, kunnes odotusaika on kulunut ennen uuden siirron aloittamista.
Indikaattorit:
Aikaleima vertailu: Etsi koodin osuuksia, jotka vertaavat lohkojen aikaleimoja tai käyttävät aikaan liittyviä funktioita. Tyyppiä lastTransactionTimestamp sisältäviä tilamuuttujia voidaan käyttää seuraamaan viimeisen siirron ajankohtaa.
AntiWhale-mekanismi
Tarkoitus:
AntiWhale-mekanismin pääasiallinen tarkoitus on vähentää suurten siirtojen vaikutusta yhdestä osoitteesta tai pienestä ryhmästä osoitteita, usein kutsuttu "valaiksi". Sen tavoitteena on estää tokenien liiallista keskittymistä samoille käsille ja torjua mahdollista markkinoiden manipulointia tai destabilisoitumista.
Toteutus:
Siirtokokorajoitukset: AntiWhale-mekanismit asettavat tyypillisesti rajoituksia yksittäisten siirtojen koolle tai arvolle. Asetettua kynnystä suuremmat siirrot johtavat rajoitusten soveltamiseen, kuten siirtojen hylkäämiseen, korkeisiin maksuihin tai muihin uudelleenjakomekanismeihin.
Indikaattorit:
Etsi koodin osuuksia, jotka tarkistavat siirtojen kokoa tai arvoa, ja tällaisia tilamuuttujia (kuten maxTransactionAmount tai whaleThreshold), jotka voivat viitata AntiWhale-mekanismin läsnäoloon. AntiWhale vaikuttaa pääasiassa suurten siirtovolyymien käyttäjiin ja keskittyy suurten tokenien haltijoiden keskittymisen käsittelemiseen.
Pääerot Cooldownin ja AntiWhalen välillä:
Parametrit | AntiWhale | Cooldown |
Parametrit: Vaikutus | AntiWhale: Vaikuttaa pääasiassa suuriin siirtovolyymeihin. | Cooldown: Koskee kaikkia käyttäjiä riippumatta siirtovolyymistä. |
Parametrit: Markkinadynamiikka | AntiWhale: Keskitetty ratkaisemaan keskittymisongelmia. | Cooldown: Pyritään säätämään siirtojen taajuutta. |
Parametrit: Projektin tavoitteet | AntiWhale: Tavoitteena on jakaa tokenit ja varmistaa markkinoiden vakaus. | Cooldown: Pääasiassa tavoitteena on varmistaa markkinoiden vakaus ja estää nopeat kaupankäynnit. |
Käyttötapaukset:
-
Markkinamanipulaation minimoiminen:
Molemmat mekanismit voidaan ottaa käyttöön yhdessä käsittelemään erilaisia markkinamanipulaation ongelmia. AntiWhale-mekanismi auttaa rajoittamaan suurten siirtojen kokoa, kun taas Cooldown-mekanismi estää useiden siirtojen nopean toteutuksen lyhyessä ajassa.
Oletetaan, että yksi toimija omistaa merkittävän osan kokonaistarjonnasta. Ilman AntiWhale-mekanismia tämä toimija voisi tehdä suuria siirtoja, jotka voisivat aiheuttaa merkittäviä hintavaihteluita ja johtaa markkinoiden manipulointiin. Rajoittamalla suurten siirtojen enimmäiskokoa tai -taajuutta yhdelle osoitteelle tietyllä aikavälillä AntiWhale-mekanismi pyrkii estämään suurten haltijoiden liiallista vaikutusta markkinoilla. -
Oikeudenmukaisen jakelun varmistaminen:
Uusien tokenien tai tokenimyynnin yhteydessä estämällä pienten osallistujien saamasta epäsuhtaisesta osuudesta kokonaistarjonnasta. Asettamalla enimmäismäärä, jonka yksittäinen osoite voi ostaa tokenimyynnin aikana tai tietyn ajanjakson aikana, voidaan varmistaa, että tokenit jaetaan tasaisemmin suuremman osallistujamäärän kesken. -
Likviditeettiongelmien käsitteleminen:
Suurten haltijoiden korkeat siirtovolyymit voivat vaikuttaa likviditeettiin ja häiritä hajautettujen pörssien luonnollista hintalöytöprosessia. Rajoittamalla suurten haltijoiden siirtojen nopeutta AntiWhale-mekanismi auttaa ylläpitämään vakaampaa likviditeettiluokitusta. - Hintojen vakaannuttaminen:< br /> Nopeat ja suuret siirrot estämällä voidaan auttaa vakauttamaan hintoja. Noudattamalla AntiWhale-rajoituksia tokenihinta saa enemmän aikaa sopeutua markkinaolosuhteisiin siirtojen välillä.
-
Front-runningin estäminen:
AntiWhalea voidaan käyttää torjumaan front-runningia, jossa kauppiaat käyttävät aikaherkkää tietoa toteuttaakseen kauppoja ennen muita. AntiWhale-mekanismi voi vähentää nopeilla kaupoilla saavutettua etua. -
Flash-lainojen ja uudelleenkirjoitusiskujen lieventäminen:
AntiWhale voi lisätä ylimääräisen puolustuskerroksen joitakin flash-lainoja ja uudelleenkirjoitusiskuja vastaan rajoittamalla siirtojen nopeutta.
Tokenin haltijoille mahdolliset riskit:
- Liian tiukkojen AntiWhale-rajoitusten asettaminen voi olla ongelma niille käyttäjille, joilla on todellinen tarve suurille siirroille.
- Yliriippuvuus AntiWhale-mekanismiin saattaa vahingossa edistää keskittymistä, jos sitä käytetään toteuttamatta laajempaa ekosysteemiä.
Miten voit itsenäisesti määrittää, ovatko tällaiset uhat läsnä älykkäissä sopimuksissa?
On tärkeää määrittää, onko AntiWhale-rajoitusmekanismi läsnä älykkäässä sopimuksessa. Tässä muutamia vinkkejä auttamaan siinä:
- Opiskele sopimuksen dokumentaatiota: aloita tarkastelemalla sopimuksen dokumentaatiota ja määrittelyjä.
- Analysoi siirtofunktioita: tarkastele funktioita, jotka ovat vastuussa tokenien siirroista (transfer, transferFrom jne.). Etsi ehtolausekkeita, jotka asettavat rajoituksia siirroille.
- Tarkista aikaleima vertailut: etsi tapauksia, joissa sopimus vertaa lohkojen aikaleimoja.
- Tarkista tilamuuttujat: tutki tilamuuttujia, jotka voivat sisältää AntiWhaleen liittyvää tietoa.
- Etsi aikaa koskevia laskentatoimintoja tai muokkaimia, kuten block.timestamp, block.number tai now.
- Etsi parametreja, jotka hallitsevat AntiWhale-mekanismin käyttäytymistä: nämä voivat olla maxTransferAmount, maxTxLimit ja vastaavat. Nämä parametrit asettaa usein sopimuksen omistaja tai yksittäisten siirtomekanismien kautta.
- Analysoi tapahtumalokia: tarkista tapahtumalokit erityistapahtumista. Toteutukset voivat kirjata asiaankuuluvia tietoja, kun siirto suoritetaan, mikä tarjoaa käsityksen jäähdytysprosessista.
- Analysoi käyttäjäkohtaista logiikkaa: jos käyttäjärajoituksia on toteutettu sopimuksessa, tarkista logiikka yksilöllisten siirtorajoitusten määrittämiseksi. Tämä logiikka voi sisältää käyttäjän ominaisuuksia, saldoa tai muita kriteereitä.
- Pysy ajan tasalla: Pidä ajan tasalla viimeisimmistä kehityksistä yhteisössämme (Telegram-kanava) ja parhaista käytännöistä huijausten havaitsemisessa (blogi ja YouTube-kanava).
Hyviä uutisia: Turvallisuusskannerimme tunnistaa (mukaan lukien piilotetut) ja laskee siirtojen rajoitukset (AntiWhale) onnistuneesti 90 %:ssa tapauksista. Käytä premium-tilaustamme ja suojele varojasi uhilta.
Vaikka AntiWhale-mekanismi on suunniteltu estämään markkinoiden manipulointia ja varmistamaan tokenien jakelua, huijarit voivat käyttää sen ominaisuuksia pettääkseen käyttäjiä. Alla on joitakin mahdollisia skenaarioita ja vinkkejä token-sijoitusten turvaamiseksi AntiWhale-mekanismin avulla.
Esimerkki 1: Siirtomäärien rajoittaminen viilennyksen aikana (Siirtomäärän rajoitukset viilennyksellä)
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;
}
Tässä esimerkissä rajoitetaan suurinta määrää, jonka yksi osoite voi siirtää tiettynä ajanjaksona.
Siihen sisältyy jäähdytysmekanismi, joka tarjoaa odotusajan saman osoitteen välillä tapahtuvien siirtojen välillä. lastTransactionTimestamp-taulukko pitää kirjaa kunkin osoitteen viimeisimmästä siirron aikaleimasta.
Esimerkki 2: Dynaamiset siirtorajoitukset (Progressiiviset siirtorajoitukset)
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;
}
Tässä esimerkissä käytetään dynaamista mekanismia, jossa suurin siirtomäärä kasvaa ajan myötä.
maxTransactionIncreaseRate-parametri ohjaa sitä vauhtia, jolla suurin siirtomäärä kasvaa. lastTransactionTimestamp-taulukko pitää kirjaa kunkin osoitteen viimeisimmästä siirron aikaleimasta.
Esimerkki 3: Poikkeukset valkolistalla (Valkolista poikkeus)
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");
...
}
Tässä esimerkissä käytetään valkolistapoikkeuksia tietyille osoitteille AntiWhale-rajoituksista.
whitelistedAddresses-taulukon osoitteet ovat poikkeuksia suurimman siirtomäärän rajoituksesta. isWhitelisted-taulukko määrittää, onko tietty osoite valkoisella listalla.
Esimerkki 4: Tasotetut siirtorajoitukset (Tasotetut siirtorajoitukset)
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];
}
}
Tässä esimerkissä toteutetaan tasotetut siirtorajoitukset lähettäjän osoitteen saldosta riippuen. Käyttäjillä, joilla on pienempi saldo, on suurempi siirtorajoitus, kun taas käyttäjillä, joilla on suurempi saldo, on pienempi siirtorajoitus.
getTransactionLimit-funktio määrittää sopivan siirtorajoituksen käyttäjän saldon perusteella.
Esimerkki 5: Palkkiot suurista siirroista (Vero suurista siirroista)
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
...
}
}
Tässä esimerkissä veloitetaan maksu siirroista, jotka ylittävät suurimman siirtomäärän.
Komissioaste (TaxRate) määrittää siirtojen määrän prosentteina. Komissio vähennetään ja sitten nettosiirto määrä käsitellään.
Esimerkki 6: Tasotetut rajat (Monitasoiset siirtorajoitukset)
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");
}
}
Tässä esimerkissä toteutetaan useita tasoja siirtorajoituksia, joissa erilaiset rajat sovelletaan riippuen siirron määrästä.
Tämä mahdollistaa siirtorajoitusten asettamisen eri tasoille er i tokenimäärien osalta.
Esimerkki 7: Dynaamiset siirtorajoitukset saldojen mukaan (Dynaamiset siirtorajoitukset tokenien saldon perusteella)
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");
...
}
Tässä esimerkissä lasketaan dynaamisesti suurin siirtomäärä prosenttiosuutena kokonaistarjonnasta. maxTransactionPercentage-parametri määrittää sallitun prosenttiosuuden yhdelle siirrolle.
Esimerkki 8: Aikariippuvaiset rajat (Aikariippuvaiset siirtorajoitukset)
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");
...
}
Tässä esimerkissä sovelletaan aikariippuvaisia siirtorajoituksia, jotka sallivat siirrot vain tietyllä aikavälillä.
startTime- ja endTime-parametrit määrittävät ajanjakson, jolloin siirrot ovat sallittuja.
Esimerkki 9: Progressiivinen verotus (Progressiivinen verotus)
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
...
}
Tässä esimerkissä esitellään progressiivinen verotusmekanismi, jossa vero (maksu) peritään siirroista, jotka ylittävät tietyn määrän.
Vero (maksu) voi muuttua ajan myötä tai tietyin edellytyksin.
Esimerkki 10: Siirtorajoitukset pidättäjäsaldojen mukaan (Painotetut siirtorajoitukset pidättäjän saldojen mukaan)
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");
...
}
Tässä esimerkissä toteutetaan siirtorajoitukset sekä kaikkien siirtojen kokonaismäärän että yksittäisten tokenin pidättäjien saldojen perusteella.
userTransactionLimit-sitova mahdollistaa henkilökohtaisten rajoitusten asettamisen tiettyjen osoitteiden saldojen perusteella.
Toivottavasti nämä esimerkit ovat auttaneet sinua ymmärtämään paremmin AntiWhale-mekanismia älykkäissä sopimuksissa.
Koska kaikki tiedot lohkoketjussa ovat avoimia (tietysti kun sopimuksen lähdekoodi on varmennettu), tämän tiedon avulla voit itsenäisesti opiskella älykkäitä sopimuksia ja tunnistaa erilaisia huijausjärjestelmiä.
Mutta me olemme jo tehneet sen kaiken sinulle! Tilaa premium-tilaus ja saat pääsyn eksklusiivisiin suodattimiin älykkäissä sopimuksissa sekä tuoreisiin analytiikkoihin. Lisää mahdollisuuksiasi menestykselliseen sijoittamiseen kannattaviin tokeneihin.
Ystävällisin terveisin, Lotus Market -tiimi.