![](/img/bg-single.png)
Contratti intelligenti con funzione AntiWhale
![](https://lotusmarket.io/storage/files/smart-contracts-with-anti-whale-function/cover.png)
Continuiamo la serie di articoli dedicati alla descrizione di schemi fraudolenti nei contratti intelligenti. Oggi analizzeremo i contratti intelligenti con meccanismo di limitazione delle dimensioni di trasferimento AntiWhale.
In questo articolo, esamineremo dettagliatamente cos'è il meccanismo AntiWhale, come differisce dal meccanismo di cooldown, e quando vengono utilizzati insieme e quando separatamente.
Meccanismo di cooldown
Scopo:
Il meccanismo di cooldown è progettato per imporre limiti temporali tra transazioni consecutive dello stesso indirizzo. Il suo scopo è regolare la frequenza delle transazioni e prevenire attività di acquisto o vendita eccessive in brevi intervalli di tempo.
Realizzazione:
Limiti temporali: I meccanismi di cooldown stabiliscono periodi di attesa tra le transazioni, spesso basati sul tempo trascorso dall'ultima transazione da un particolare indirizzo. Gli utenti devono attendere che il periodo di attesa scada prima di avviare una nuova transazione.
Indicatori:
Confronto dei timestamp: Cercare segmenti di codice che confrontano i timestamp dei blocchi o utilizzano funzioni correlate al tempo. Le variabili di stato di tipo lastTransactionTimestamp possono essere utilizzate per tenere traccia dell'orario dell'ultima transazione.
Meccanismo AntiWhale
Scopo:
Il principale scopo del meccanismo AntiWhale è ridurre l'impatto delle grandi transazioni da parte di un singolo indirizzo o di un piccolo gruppo di indirizzi, spesso indicati come "whale" (balene). Mira a prevenire la concentrazione eccessiva di token nelle stesse mani e a contrastare possibili manipolazioni o destabilizzazioni del mercato.
Implementazione:
Limiti di dimensione delle transazioni: I meccanismi AntiWhale stabiliscono tipicamente limiti sulla dimensione o sul valore delle transazioni individuali. Le transazioni che superano una soglia prestabilita comportano l'imposizione di restrizioni come il rifiuto della transazione, tariffe elevate o altri meccanismi di ridistribuzione.
Indicatori:
Cercare segmenti di codice che verificano la dimensione o il valore delle transazioni, e tali variabili di stato (come maxTransactionAmount o whaleThreshold), possono indicare la presenza del meccanismo AntiWhale. AntiWhale colpisce principalmente gli utenti con grandi volumi di transazioni e si concentra sulla gestione della concentrazione di token nei grandi detentori.
Principali differenze tra Cooldown e AntiWhale:
Parametri | AntiWhale | Cooldown |
Parametri:Influenza | AntiWhale:Colpisce principalmente gli utenti con volumi di transazioni elevati. | Cooldown:Si applica a tutti gli utenti, indipendentemente dalla dimensione della transazione. |
Parametri:Dinamiche di mercato | AntiWhale:Focalizzato sulla risoluzione dei problemi di concentrazione. | Cooldown:Mirato a regolare la frequenza delle transazioni. |
Parametri:Obiettivi del progetto | AntiWhale:Il obiettivo è distribuire i token e garantire la stabilità del mercato. | Cooldown:Principalmente mirato a garantire la stabilità del mercato e prevenire il trading rapido. |
Scenari di utilizzo:
-
Minimizzazione della manipolazione del mercato:
Entrambi i meccanismi possono essere utilizzati insieme per affrontare vari problemi di manipolazione del mercato. Il meccanismo AntiWhale aiuta a limitare le dimensioni delle grandi transazioni, mentre il meccanismo di cooldown impedisce che si verifichino più transazioni rapidamente entro un breve periodo di tempo.
Supponiamo che un'entità possieda una parte significativa dell'offerta totale di token. Senza il meccanismo AntiWhale, questa entità potrebbe effettuare grandi transazioni che potrebbero causare significative fluttuazioni dei prezzi, portando a manipolazioni di mercato. Limitando la dimensione massima o la frequenza delle transazioni presso un singolo indirizzo entro un certo periodo di tempo, il meccanismo AntiWhale mira a prevenire che i grandi detentori abbiano un'influenza indebita sul mercato. -
Garanzia di una distribuzione equa:
Nel contesto di nuovi token o vendite di token, prevenire che un numero limitato di partecipanti acquisisca una quota sproporzionata dell'offerta totale. Impostare limiti sulla quantità massima che un indirizzo individuale può acquistare durante una vendita di token o entro un certo periodo consente una distribuzione più equa dei token tra un numero maggiore di partecipanti. -
Affrontare problemi di liquidità:
Volumi di transazioni elevati di grandi detentori possono influenzare la liquidità e interrompere il processo naturale di scoperta dei prezzi su scambi decentralizzati. Limitando la velocità delle transazioni da parte dei grandi detentori, il meccanismo AntiWhale contribuisce a mantenere una situazione di liquidità più stabile. -
Stabilizzazione dei prezzi:
Prevenire transazioni rapide e su larga scala può contribuire a stabilizzare i prezzi. Applicando restrizioni AntiWhale, il prezzo del token ha più tempo per adattarsi alle condizioni di mercato tra le transazioni. -
Prevenzione del front-running:
AntiWhale può essere implementato per combattere il front-running, dove i trader utilizzano informazioni sensibili al tempo per eseguire operazioni prima degli altri. Il meccanismo AntiWhale può ridurre il vantaggio ottenuto dall'esecuzione rapida delle operazioni. -
Mitigazione degli attacchi di flash-loan e di reentrancy:
AntiWhale può aggiungere un ulteriore livello di difesa contro alcuni attacchi di flash-loan e di reentrancy limitando la velocità di esecuzione delle transazioni.
Rischi potenziali per i detentori di token:
- Impostare limiti AntiWhale troppo stretti può essere un problema per gli utenti che hanno effettivamente bisogno di grandi transazioni.
- Un'eccessiva dipendenza dal meccanismo AntiWhale può promuovere involontariamente la centralizzazione se viene implementato senza considerare l'ecosistema più ampio.
Come è possibile determinare autonomamente la presenza di tali minacce nei contratti intelligenti?
Determinare se un meccanismo di vincolo AntiWhale è presente in un contratto intelligente è un compito importante, ecco alcuni consigli per aiutarti in questo:
- Studia la documentazione del contratto: inizia revisionando la documentazione e le specifiche del contratto.
- Analizza le funzioni di trasferimento: esamina le funzioni responsabili del trasferimento dei token (transfer, transferFrom, ecc.). Cerca dichiarazioni condizionali che impongono restrizioni alle transazioni.
- Verifica i confronti tra i timestamp: cerca casi in cui il contratto confronta i timestamp dei blocchi.
- Controlla le variabili di stato: esamina le variabili di stato che possono essere utilizzate per memorizzare informazioni correlate ad AntiWhale.
- Cerca funzioni o modificatori relativi a calcoli temporali, come block.timestamp, block.number o now.
- Cerca parametri che controllano il comportamento di AntiWhale: questi possono essere maxTransferAmount, maxTxLimit, e simili. Spesso questi parametri sono impostati dal proprietario del contratto o attraverso meccanismi di gestione delle transazioni individuali.
- Analizza i log degli eventi: controlla i log degli eventi per eventi speciali. Le implementazioni saranno in grado di registrare informazioni rilevanti quando viene eseguita una transazione, fornendo una visione del processo di raffreddamento.
- Analizza la logica specifica dell'utente: se sono implementate restrizioni degli utenti nel contratto, controlla la logica per determinare i limiti individuali di trasferimento. Questa logica può includere attributi dell'utente, saldo o altri criteri.
- Mantieniti informato: rimani aggiornato sugli ultimi sviluppi nella nostra comunità (canale Telegram) e sulle migliori pratiche per la rilevazione delle frodi (il nostro Blog e canale YouTube).
Buone notizie: il nostro Security Scanner trova con successo (inclusi quelli nascosti) e calcola le restrizioni di trasferimento (AntiWhale) nel 90% dei casi. Utilizza la nostra sottoscrizione premium e proteggi i tuoi fondi dalle minacce.
Sebbene il meccanismo AntiWhale sia progettato per prevenire la manipolazione di mercato e garantire la distribuzione dei token, i truffatori possono utilizzare le sue capacità per frodare gli utenti. Di seguito ci sono alcuni scenari possibili e consigli per proteggere gli investimenti in token con il meccanismo AntiWhale in atto.
Esempio 1: Limitazioni sulle quantità di transazioni con periodo di raffreddamento (Limiti di importo di transazione con cooldown)
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;
}
Questo esempio limita l'importo massimo che un singolo indirizzo può trasferire entro un certo periodo di tempo.
Include un meccanismo di raffreddamento che prevede un periodo di attesa tra le transazioni allo stesso indirizzo. L'array lastTransactionTimestamp tiene traccia del timestamp dell'ultima transazione per ciascun indirizzo.
Esempio 2: Restrizioni dinamiche di trasferimento (Limiti progressivi di transazione)
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;
}
Questo esempio utilizza un meccanismo dinamico in cui l'importo massimo della transazione aumenta gradualmente nel tempo.
Il parametro maxTransactionIncreaseRate controlla il tasso di aumento dell'importo massimo della transazione. L'array lastTransactionTimestamp tiene traccia del timestamp dell'ultima transazione per ciascun indirizzo.
Esempio 3: Eccezioni di lista bianca (Esenzione dalla lista bianca)
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");
...
}
Questo esempio utilizza esenzioni dalla lista bianca per indirizzi specifici dalle restrizioni di AntiWhale.
Gli indirizzi nell'array whitelistedAddresses sono considerati esenti dal limite massimo dell'importo della transazione. L'array isWhitelisted determina se un determinato indirizzo è nella lista bianca.
Esempio 4: Limiti di transazione a più livelli (Limiti di transazione a più livelli)
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];
}
}
Questo esempio implementa limiti di transazione a più livelli in base al saldo dell'indirizzo del mittente. Gli utenti con un saldo più basso hanno un limite di transazione più alto, mentre gli utenti con un saldo più alto hanno un limite di transazione più basso .
La funzione getTransactionLimit determina il limite di transazione appropriato in base al saldo dell'utente.
Esempio 5: Commissioni sulle grandi transazioni (Tassa sulle grandi transazioni)
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
...
}
}
In questo esempio, viene applicata una commissione sulle transazioni che superano l'importo massimo della transazione.
Il tasso di commissione (TaxRate) determina la percentuale dell'importo della transazione. La commissione viene dedotta e quindi viene elaborato l'importo netto del trasferimento.
Esempio 6: Limiti a più livelli (Limiti di transazione a più livelli)
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");
}
}
Questo esempio implementa limiti di transazione a più livelli, dove vengono applicati limiti diversi a seconda dell'importo della transazione.
Ciò consente di impostare limiti di transazione a livelli di granularità variabile per diverse quantità di token.
Esempio 7: Limiti di transazione dinamici in base al saldo (Limiti di transazione dinamici basati sul saldo del token)
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");
...
}
Questo esempio calcola dinamicamente l'importo massimo della transazione come percentuale dell'offerta totale. Il parametro maxTransactionPercentage definisce la percentuale consentita per una singola transazione.
Esempio 8: Limiti di transazione dipendenti dal tempo (Limiti di transazione dipendenti dal tempo)
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");
...
}
In questo esempio vengono applicate restrizioni di transazione dipendenti dal tempo, consentendo transazioni solo entro un determinato intervallo di tempo.
I parametri startTime e endTime definiscono il periodo durante il quale sono consentite le transazioni.
Esempio 9: Tassazione progressiva (Tassazione progressiva)
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
...
}
Questo esempio presenta un meccanismo di tassazione progressiva, dove viene applicata una tassa su transazioni che superano un importo massimo.
Il tasso di tassazione può essere regolato nel tempo o in base a determinate condizioni.
Esempio 10: Limiti di transazione basati sui saldi dei detentori (Limiti di transazione ponderati basati sui saldi dei detentori di token)
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");
...
}
Questo esempio implementa limiti di transazione basati sia sull'importo totale delle transazioni che sul saldo individuale dei detentori di token.
La mappatura userTransactionLimit consente di impostare limiti personalizzati basati sui saldi di indirizzi specifici.
Speriamo che questi esempi ti abbiano aiutato a comprendere meglio il meccanismo AntiWhale nei contratti intelligenti.
Poiché tutte le informazioni nella blockchain sono aperte (a condizione, naturalmente, che il codice sorgente del contratto sia verificato), armato di questa conoscenza puoi studiare autonomamente i contratti intelligenti e identificare vari schemi fraudolenti.
Tuttavia, abbiamo già fatto tutto questo per te! Iscriviti a una sottoscrizione premium e ottieni accesso a filtri esclusivi sulle funzionalità dei contratti intelligenti e ad analisi fresche. Aumenta le tue possibilità di investire con successo in token redditizi.
Cordiali saluti, il team di Lotus Market.