![](/img/bg-single.png)
Έξυπνες συμβάσεις με λειτουργία AntiWhale
![](https://lotusmarket.io/storage/files/smart-contracts-with-anti-whale-function/cover.png)
Συνεχίζουμε τη σειρά άρθρων που είναι αφιερωμένα στην περιγραφή των απατηλών σχημάτων σε έξυπνα συμβόλαια. Σήμερα θα αναλύσουμε έξυπνα συμβόλαια με μηχανισμό περιορισμού μεγέθους μεταφοράς AntiWhale.
Σε αυτό το άρθρο θα εξετάσουμε λεπτομερώς τι είναι ο μηχανισμός AntiWhale, πώς διαφέρει από τον μηχανισμό Ανάκλησης (Cooldown), και πότε χρησιμοποιούνται μαζί και πότε χρησιμοποιούνται ξεχωριστά.
Μηχανισμός Ανάκλησης (Cooldown)
Σκοπός:
Ο μηχανισμός Ανάκλησης σχεδιάστηκε για να επιβάλλει χρονικά όρια μεταξύ διαδοχικών συναλλαγών από την ίδια διεύθυνση. Ο σκοπός του είναι να ρυθμίσει τη συχνότητα των συναλλαγών και να αποτρέψει την υπερβολική αγοραπωλησία ή πώληση εντός σύντομων χρονικών διαστημάτων.
Υλοποίηση:
Χρονικά Όρια: Οι μηχανισμοί Ανάκλησης ορίζουν περίοδους αναμονής μεταξύ συναλλαγών, συχνά βασισμένους στον χρόνο που έχει παρέλθει από την τελευταία συναλλαγή από μια συγκεκριμένη διεύθυνση. Οι χρήστες πρέπει να περιμένουν τη λήξη της περιόδου αναμονής πριν από την έναρξη μιας νέας συναλλαγής.
Ενδείξεις:
Σύγκριση Χρονοσημάδων: Αναζητήστε τμήματα κώδικα που συγκρίνουν χρονοσημάδες μπλοκ ή χρησιμοποιούν συναρτήσεις σχετικές με το χρόνο. Τα μεταβλητά κατάστασης τύπου lastTransactionTimestamp μπορούν να χρησιμοποιηθούν για να καταγραφεί ο χρόνος της τελευταίας συναλλαγής.
Μηχανισμός AntiWhale
Σκοπός:
Ο βασικός σκοπός του μηχανισμού AntiWhale είναι να μειώσει την επίδραση μεγάλων συναλλαγών από μια μόνο διεύθυνση ή ένα μικρό γκρουπ διευθύνσεων, συχνά αναφερόμενων ως "φάλαινες". Στοχεύει στο να αποτρέψει την υπερβολική συγκέντρωση των τοκενίων στα ίδια χέρια και να καταπολεμήσει ενδεχόμενες αλλοιώσεις ή αποσταθεροποιήσεις της αγοράς.
Υλοποίηση:
Όρια μεγέθους συναλλαγής: Οι μηχανισμοί AntiWhale ορίζουν τυπικά όρια για το μέγεθος ή την αξία των μεμονωμένων συναλλαγών. Οι συναλλαγές που υπερβαίνουν ένα ορισμένο κατώτατο όριο οδηγούν στην επιβολή περιορισμών, όπως η απόρριψη συναλλαγών, υψηλά τέλη ή άλλοι μηχανισμοί αναδιανομής.
Ενδείξεις:
Αναζητήστε τμήματα κώδικα που ελέγχουν το μέγεθος ή την αξία των συναλλαγών, καθώς και τέτοιες μεταβλητές κατάστασης (όπως maxTransactionAmount ή whaleThreshold), οι οποίες μπορ εί να υποδεικνύουν την παρουσία του μηχανισμού AntiWhale. Ο AntiWhale επηρεάζει κυρίως χρήστες με μεγάλους όγκους συναλλαγών και επικεντρώνεται στη διευθέτηση της συγκέντρωσης των τοκενίων σε μεγάλους κατόχους.
Βασικές διαφορές μεταξύ Cooldown και AntiWhale:
Παράμετροι | AntiWhale | Cooldown |
Παράμετροι:Επίδραση | AntiWhale:Επηρεάζει κυρίως χρήστες με υψηλούς όγκους συναλλαγών. | Cooldown:Ισχύει για όλους τους χρήστες, ανεξαρτήτως μεγέθους συναλλαγής. |
Παράμετροι:Δυναμική αγοράς | AntiWhale:Επικεντρώνεται στην επίλυση προβλημάτων συγκέντρωσης. | Cooldown:Στοχεύει στη ρύθμιση της συχνότητας των συναλλαγών. |
Παράμετροι:Στόχοι Έργου | AntiWhale:Ο στόχος είναι η διανομή των τοκενίων και η διασφάλιση της σταθερότητας της αγοράς. | Cooldown:Κυρίως στοχεύει στην εξασφάλιση της σταθερότητας της αγοράς και την αποτροπή γρήγορων συναλλαγών. |
Σενάρια Χρησιμοποίησης:
-
Ελαχιστοποίηση της αγοραπωλησίας:
Και οι δύο μηχανισμοί μπορούν να χρησιμοποιηθούν μαζί για να αντιμετωπίσουν διάφορα προβλήματα αγοραπωλησίας. Ο μηχανισμός AntiWhale βοηθάει να περιοριστεί το μέγεθος των μεγάλων συναλλαγών, ενώ ο μηχανισμός Ανάκλησης αποτρέπει τις πολλαπλές συναλλαγές που πραγματοποιούνται γρήγορα εντός σύντομου χρονικού διαστήματος.
Υποθέστε ότι ένας οντότητα κατέχει ένα σημαντικό μέρος του συνολικού εφοδιασμού τοκενίων. Χωρίς τον μηχανισμό AntiWhale, αυτή η οντότητα θα μπορούσε να κάνει μεγάλες συναλλαγές που θα μπορούσαν να προκαλέσουν σημαντικές διακυμάνσεις τιμής, οδηγώντας σε αγοραπωλησία. Με τον περιορισμό του μέγιστου μεγέθους ή της συχνότητας των συναλλαγών σε μια μόνο διεύθυνση εντός ενός συγκεκριμένου χρονικού διαστήματος, ο μηχανισμός AntiWhale στοχεύει να αποτρέψει τους μεγάλους κατόχους από το να έχουν αδίκη επίδραση στην αγορά. -
Διασφάλιση δίκαιης διανομής:
Στο πλαίσιο νέων τοκενίων ή πωλήσεων τοκενίων, προλαμβάνοντας έναν μικρό αριθμό συμμετεχόντων από το να αποκτήσουν αναλογία που είναι ανανήστευτη σε σχέση με τον συνολικό εφοδιασμό. Ορίζοντας όρια στο μέγιστο ποσό που μπ ορεί να αγοράσει ένα ατομικό ταχυδρομείο κατά τη διάρκεια μιας πώλησης τοκενίων ή εντός ενός συγκεκριμένου χρονικού διαστήματος, επιτρέπεται η πιο ισόρροπη διανομή των τοκενίων ανάμεσα σε ένα μεγαλύτερο αριθμό συμμετεχόντων. -
Αντιμετώπιση προβλημάτων ρευστότητας:
Οι υψηλοί όγκοι συναλλαγών των μεγάλων κατόχων μπορούν να επηρεάσουν τη ρευστότητα και να διαταράξουν τη διαδικασία φυσικής ανακάλυψης τιμών στις αποκεντρωμένες αγορές. Με τον περιορισμό της ταχύτητας των συναλλαγών από τους μεγάλους κατόχους, ο μηχανισμός AntiWhale βοηθά να διατηρηθεί μια πιο σταθερή κατάσταση ρευστότητας. -
Σταθεροποίηση τιμών:
Η αποτροπή γρήγορων και μεγάλων συναλλαγών μπορεί να βοηθήσει στην σταθεροποίηση των τιμών. Με την επιβολή περιορισμών AntiWhale, η τιμή του τοκενίου έχει περισσότερο χρόνο να προσαρμοστεί στις αγοραστικές συνθήκες ανάμεσα στις συναλλαγές. -
Αποτροπή front-running:
Ο AntiWhale μπορεί να εφαρμοστεί για την καταπολέμηση του front-running, όπου οι εμπόροι χρησιμοποιούν πληροφορίες που εξαρτώνται από το χρόνο για να εκτελέσουν συναλλαγές πριν από άλλους. Ο μηχανισμός AntiWhale μπορεί να μειώσει το πλεονέκτημα που κερδίζεται από την εκτέλεση γρήγορων συναλλαγών. -
Ελαφρύ δάνειο και επιθέσεις επαναπατήσεως:
Ο AntiWhale μπορεί να προσθέσει ένα επιπλέον επίπεδο άμυνας εναντίον κάποιων επιθέσεων flash-loan και reentrancy με τον περιορισμό της ταχύτητας εκτέλεσης συναλλαγής.
Πιθανοί κίνδυνοι για τους κατόχους τοκενίων:
- Η οριστικοποίηση των όρων AntiWhale που είναι πολύ αυστηροί μπορεί να αποτελέσει πρόβλημα για χρήστες που έχουν πραγματική ανάγκη για μεγάλες συναλλαγές.
- Η υπερεξάρτηση από τον μηχανισμό AntiWhale μπορεί να προωθήσει αθέμιτα την κεντρικοποίηση αν υλοποιηθεί χωρίς να ληφθεί υπόψη το ευρύτερο οικοσύστημα.
Πώς μπορείτε να καθορίσετε ανεξάρτητα εάν τέτοιες απειλές υπάρχουν σε έξυπνα συμβόλαια;
Η καθοριστική εξέταση εάν ένα μηχανισμός περιορισμού AntiWhale είναι παρόν σε ένα έξυπνο συμβόλαιο αποτελεί σημαντική εργασία. Εδώ είναι μερικές συμβουλές για να βοηθήσουν σε αυτό:
- Μάθετε την τεκμηρίωση του συμβολαίου: Ξεκινήστε αναθεωρώντας την τεκμηρίωση και τις προδιαγραφές του συμβολαίου.
- Αναλύστε τις λειτουργίες μεταφοράς: Εξετάστε τις λειτουργίες που είναι υπεύθυνες για τη μεταφορά των τοκενίων (transfer, transferFrom κλπ.). Αναζητήστε συνθήκες που επιβάλλουν περιορισμούς στις συναλλαγές.
- Ελέγξτε για συγκρίσεις χρονικών σφραγίδων: Ψάξτε για περιπτώσεις όπου το συμβόλαιο συγκρίνει τις χρονικές σφραγίδες των μπλοκ.
- Ελέγξτε για μεταβλητές κατάστασης: Εξετάστε τις μεταβλητές κατάστασης που μπορούν να χρησιμοποιηθούν για την αποθήκευση σχετικών πληροφοριών σχετικά με το AntiWhale.
- Αναζητήστε λειτουργίες ή τροποποιητές που σχετίζονται με χρονικούς υπολογισμούς, όπως block.timestamp, block.number, ή now.
- Ψάξτε για παραμέτρους που ελέγχουν τη συμπεριφορά του AntiWhale: αυτοί μπορεί να είναι οι maxTransferAmount, maxTxLimit και άλλοι παρόμοιοι. Συχνά αυτές οι παράμετροι ορίζονται από τον ιδιοκτήτη του συμβολαίου ή μέσω μηχανισμών διαχείρισης ατομικών συναλλαγών.
- Αναλύστε τα αρχεία καταγραφής συμβάντων: Ελέγξτε τα αρχεία καταγραφής συμβάντων για ειδικά συμβάντα. Οι υλοποιήσεις θα μπορούσαν να καταγράψουν σχετικές πληροφορίες κατά την εκτέλεση μιας συναλλαγής, προσφέροντας ματιά στη διαδικασία ψύξης.
- Αναλύστε την ειδική λογική για τους χρήστες: εάν οι περιορισμοί χρηστών είναι υλοποιημένοι στο συμβόλαιο, ελέγξτε τη λογική για την καθοριστική ανίχνευση των ατομικών ορίων μεταφοράς. Αυτή η λογική μπορεί να περιλαμβάνει χαρακτηριστικά χρηστών, ισορροπία ή άλλα κριτήρια.
- Να ενημερώνεστε: Παραμείνετε ενήμεροι για τις τελευταίες εξελίξεις στην κοινότητά μας (κανάλι Telegram) και τις καλύτερες πρακτικές για τον εντοπισμό απάτης (το Blog και το κανάλι μας στο YouTube).
Καλά νέα: ο Security Scanner μας εντοπίζει επιτυχώς (συμπεριλαμβανομένων των κρυφών) και υπολογίζει περιορισμούς μεταφοράς (AntiWhale) σε 90% των περιπτώσεων. Χρησιμοποιήστε την προνομιακή συνδρομή μας και προστατεύστε τα κεφάλαιά σας από απειλές.
Αν και ο μηχανισμός AntiWhale σχεδιάστηκε για να αποτρέπει την αγοραπωλησία και να εξασφαλίζει τη διανομή των τοκενίων, οι απατεώνες μπορούν να χρησιμοποιήσουν τις δυνατότητές του για να εξαπατήσουν τους χρήστες. Παρακάτω παρουσιάζονται μερικά πιθανά σενάρια και συμβουλές για την ασφάλεια των επενδύσεων σε τοκενίες με τον μηχανισμό AntiWhale σε εφαρμογή.
Παράδειγμα 1: Περιορισμοί στο ποσό των συναλλαγών με περίοδο ψύξης (Transaction Amount Limits with 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;
}
Αυτό το παράδειγμα περιορίζει το μέγιστο ποσό που μπορεί να μεταφέρει μια μοναδική διεύθυνση εντός ενός συγκεκριμένου χρονικού διαστήματος.
Περιλαμβάνει ένα μηχανισμό ψύξης που προσφέρει μια περίοδο αναμονής μεταξύ των συναλλαγών στην ίδια διεύθυνση. Το πίνακας lastTransactionTimestamp καταγράφει τη χρονική σήμανση της τελευταίας συναλλαγής για κάθε διεύθυνση.
Παράδειγμα 2: Δυναμικοί περιορισμοί μεταφοράς (Progressive Transaction Limits)
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;
}
Αυτό το παράδειγμα χρησιμοποιεί ένα δυναμικό μηχανισμό όπου το μέγιστο ποσό συναλλαγής αυξάνεται σταδιακά με τον χρόνο.
Η παράμετρος maxTransactionIncreaseRate ελέγχει τον ρυθμό με τον οποίο αυξάνεται το μέγιστο ποσό συναλλαγής. Ο πίνακας lastTransactionTimestamp καταγράφει τη χρονική σήμανση της τελευταίας συναλλαγής για κάθε διεύθυνση.
Παράδειγμα 3: Εξαιρέσεις με λευκή λίστα (Whitelist Exemption)
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");
...
}
Αυτό το παράδειγμα χρησιμοποιεί εξαιρέσεις με λευκή λίστα για συγκεκριμένες διευθύνσεις από τους περιορισμούς AntiWhale.
Οι διευθύνσεις στον πίνακα whitelistedAddresses θεωρούνται εξαιρεμένες από τον περιορισμό του μέγιστου ποσού συναλλαγής. Ο πίνακας isWhitelisted καθορίζει εάν μια συγκεκριμένη διεύθυνση είναι στη λευκή λίστα.
Παράδειγμα 4: Κατώτεροι περιορισμοί συναλλαγών (Tiered Transaction Limits)
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];
}
}
Αυτό το παράδειγμα υλοποιεί κατώτερους περιορισμούς συναλλαγών ανάλογα με το υπόλοιπο της διεύθυνσης αποστολέα. Οι χρήστες με χαμηλότερο υπόλοιπο έχουν υψηλότερο όριο συναλλαγών, ενώ οι χρήστες με υψηλότερο υπόλοιπο έχουν χαμηλότερο όριο συναλλαγών.
Η λειτουργία getTransactionLimit καθορίζει το κατάλληλο όριο συναλλαγών με βάση το υπόλοιπο του χρήστη.
Παράδειγμα 5: Επιβολή τελών σε μεγάλες συναλλαγές (Φόρος σε Μεγάλες Συναλλαγές)
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
...
}
}
Σε αυτό το παράδειγμα, το τέλος επιβάλλεται σε συναλλαγές που υπερβαίνουν το μέγιστο ποσό συναλλαγής.
Ο ρυθμός προμήθειας (TaxRate) καθορίζει το ποσοστό του ποσού της συναλλαγής. Η προμήθεια αφαιρείται και στη συνέχεια επεξεργάζεται το καθαρό ποσό της μεταφοράς.
Παράδειγμα 6: Κατώτεροι περιορισμοί (Πολυεπίπεδοι Περιορισμοί Συναλλαγών)
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");
}
}
Αυτό το παράδειγμα υλοποιεί πολυεπίπεδους περιορισμούς συναλλαγών, όπου εφαρμόζονται διαφορετικοί περιορισμοί ανάλογα με το ποσό της συναλλαγής.
Αυτό επιτρέπει την ρύθμιση των ορίων συναλλαγών σε διάφορα επίπεδα λεπτομέρειας για διαφορετικούς όγκους τοκενίων.
Παράδειγμα 7: Δυναμικοί περιορισμοί συναλλαγών ανάλογα με το υπόλοιπο (Δυναμικοί Περιορισμοί Συναλλαγών με Βάση το Υπόλοιπο των Τοκενίων)
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");
...
}
Αυτό το παράδειγμα υπολογίζει δυναμικά το μέγιστο ποσό συναλλαγής ως ποσοστό της Συνολικής Προσφοράς. Η παράμετρος maxTransactionPercentage καθορίζει το επιτρεπόμενο ποσοστό για μια μεμονωμένη συναλλαγή.
Παράδειγμα 8: Περιορισμοί συναλλαγώ ν εξαρτώμενοι από το χρόνο (Περιορισμοί Συναλλαγών Εξαρτώμενοι από το Χρόνο)
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");
...
}
Σε αυτό το παράδειγμα, εφαρμόζονται περιορισμοί συναλλαγών εξαρτώμενοι από το χρόνο, επιτρέποντας συναλλαγές μόνο εντός ενός δεδομένου χρονικού πλαισίου.
Οι παράμετροι startTime και endTime καθορίζουν την περίοδο κατά την οποία επιτρέπονται οι συναλλαγές.
Παράδειγμα 9: Προοδευτική φορολόγηση (Προοδευτική Φορολόγηση)
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
...
}
Αυτό το παράδειγμα παρουσιάζει ένα μηχανισμό προοδευτικής φορολόγησης, όπου επιβάλλεται φόρος (τέλος) σε συναλλαγές που υπερβαίνουν ένα μέγιστο ποσό.
Ο ρυθμός φόρου (τέλους) μπορεί να προσαρμοστεί με την πάροδο του χρόνου ή βάσει συγκεκριμένων συνθηκών.
Παράδειγμα 10: Περιορισμοί συναλλαγών βασισμένοι στα ισοζύγια των κατόχων (Βαρυσήμαντοι Περιορισμοί Συναλλαγών βασισμένοι στα ισοζύγια των Κατόχων Τοκενίων)
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");
...
}
Αυτό το παράδειγμα υλοποιεί περιορισμούς συναλλαγών βασισμένους τόσο στο συνολικό ποσό συναλλαγών όσο και στο υπόλοιπο των ατομικών κατόχων τοκενίων.
Το binding userTransactionLimit σάς επιτρέπει να ορίσετε προσωποποιημένους περιορισμούς βασισμένους στα ισοζύγια συγκεκριμένων διευθύνσεων.
Ελπίζουμε ότι αυτά τα παραδείγματα σας βοήθησαν να κατανοήσετε καλύτερα το μηχανισμό AntiWhale σε έξυπνα συμβόλαια.
Καθώς όλες οι πληροφορίες στο blockchain είναι ανοικτές (φυσικά, παρέχεται ότι ο πηγαίος κώδικας του συμβολαίου είναι επαληθευμένος), έχοντας αυτή τη γνώση μπορείτε να μελετήσετε ανεξάρτητα έξυπνα συμβόλαια και να αναγνωρίσετε διάφορα σχέδια απάτης.
Ωστόσο, εμείς τα έχουμε κάνει όλα για εσάς! Εγγραφείτε για ένα premium συνδρομή και αποκτήστε πρόσβαση σε αποκλειστικά φίλτρα για χαρακτηριστικά έξυπνων συμβολαίων και φρέσκα αναλυτικά δεδομένα. Αυξήστε τις πιθανότητές σας για επιτυχημένες επενδύσεις σε κερδοφόρα τοκενίδια.
Με εκτίμηση, ομάδα Lotus Market.