ΖωντανάΚαθεστώς BULL CHOPBTC $79,795.14 +1.3%F&G 73 απληστίαΠρωινή αναφορά28/8Ενημέρωση 09:29ανανέωση σε 0:30
Εκπαίδευση

Honeypot tokens: τα αγοράζεις αλλά δεν τα πουλάς. Πώς το κάνει το smart contract και πώς να το ελέγξεις

Το honeypot είναι ένα token του οποίου το smart contract σου επιτρέπει να αγοράσεις, αλλά όταν προσπαθείς να πουλήσεις μπλοκάρει τη συναλλαγή ή σου παίρνει σχεδόν ολόκληρο το ποσό. Σε αυτό το μάθημα δείχνουμε τα μοτίβα από τα οποία θα το αναγνωρίσεις, με συγκεκριμένο παράδειγμα και νούμερα. Καμία κατηγορία, μόνο μηχανική, βασισμένη στη δημόσια τεκμηρίωση EVM και DEX.

Otto
OttoΣύνταξη τεχνητής νοημοσύνης
Έλεγχος γεγονότων
Δημοσιεύτηκε

Τι είναι το honeypot σε μία πρόταση;

Το honeypot είναι ένα token όπου το contract σου επιτρέπει την αγορά, αλλά την πώληση την καθιστά τεχνικά αδύνατη ή τη βαραίνει με τόσο υψηλή προμήθεια που από την πώληση δεν σου μένει σχεδόν τίποτα. Στο γράφημα μοιάζει με πύραυλο που μόνο ανεβαίνει, επειδή σχεδόν κανείς δεν μπορεί να πουλήσει.

Σημαντικό: σε αυτό το κείμενο περιγράφουμε γενικά μοτίβα στον κώδικα και στα δεδομένα, όχι συγκεκριμένα projects. Δεν λέμε ότι οποιοδήποτε token είναι απάτη. Δείχνουμε πώς λειτουργεί ο μηχανισμός και πώς μπορεί κάποιος να τον ελέγξει μόνος του. Η μηχανική που παρουσιάζουμε εδώ βασίζεται στη δημόσια τεκμηρίωση του προτύπου ERC-20, της γλώσσας Solidity και στην τεκμηρίωση των αποκεντρωμένων ανταλλακτηρίων (Uniswap, PancakeSwap), στην οποία παραπέμπουμε στις πηγές.

Πώς το κάνει τεχνικά το contract;

Ένα token σε αλυσίδες EVM (Ethereum, BNB Chain και παρόμοιες) είναι απλώς ένα smart contract. Σύμφωνα με το πρότυπο ERC-20, η μεταφορά του token περνάει από τη συνάρτηση transfer ή transferFrom (βλ. τεκμηρίωση ERC-20 και OpenZeppelin στις πηγές). Μέσα στο σώμα αυτής της συνάρτησης ο δημιουργός μπορεί να γράψει στη Solidity οποιεσδήποτε συνθήκες. Η αγορά και η πώληση δεν είναι δύο διαφορετικές συναρτήσεις, είναι απλώς μεταφορές μεταξύ του πορτοφολιού σου και του ζεύγους ρευστότητας (για παράδειγμα στο Uniswap ή στο PancakeSwap, τη μηχανική των ζευγών των οποίων περιγράφει η τεκμηρίωσή τους). Αυτό είναι το κλειδί: το contract μπορεί να διακρίνει αν τα tokens φεύγουν προς το ζεύγος ρευστότητας (πώληση) ή από το ζεύγος προς εσένα (αγορά), και να συμπεριφερθεί ανάλογα διαφορετικά.

Τα πιο συχνά μοτίβα που εμφανίζονται σε τέτοια contracts:

Μοτίβο Τι κάνει Πώς εκδηλώνεται
Blacklist / whitelist Μόνο επιτρεπόμενες διευθύνσεις μπορούν να μεταφέρουν Η πώλησή σου κάνει revert (αποτυγχάνει)
Ασύμμετρος φόρος Αγορά 0 %, πώληση 99 % Πουλάς, αλλά παίρνεις ψίχουλα
Μπλοκάρισμα κατά την πώληση προς το ζεύγος require που αποτυγχάνει όταν παραλήπτης είναι το liquidity pool Η πώληση δεν περνάει καθόλου
Μεταβλητό flag Ο δημιουργός απενεργοποιεί εκ των υστέρων το trading Η αγορά λειτούργησε, η πώληση αργότερα σταμάτησε
Max transaction / cooldown Όριο τόσο χαμηλό που η πώληση δεν περνάει Η συναλλαγή κάνει revert στο όριο

Το κοινό είναι ότι η λογική είναι υπό συνθήκη και μεταβλητή. Το contract δεν χρειάζεται να είναι honeypot από την αρχή. Μπορεί να γίνει τη στιγμή που ο δημιουργός καλέσει μια συνάρτηση που περιορίζει το trading.

Πώς φαίνεται με συγκεκριμένο νούμερο;

Ας φανταστούμε ένα απλοποιημένο, καθαρά ενδεικτικό παράδειγμα (δεν πρόκειται για μετρημένα δεδομένα). Βάζεις στο contract 1 ETH και αγοράζεις 1.000.000 tokens. Η αγορά περνάει χωρίς προβλήματα, επειδή ο φόρος αγοράς είναι ρυθμισμένος στο 0 %.

Έπειτα προσπαθείς να πουλήσεις αυτά τα 1.000.000 tokens πίσω. Προκύπτουν δύο τυπικές καταστάσεις:

  1. Σκληρό honeypot: η συναλλαγή δεν περνάει καθόλου. Το πορτοφόλι δηλώνει ότι η συναλλαγή απέτυχε (revert). Τα tokens σου μένουν, ETH δεν παίρνεις.
  2. Μαλακό honeypot (φορολογικό): η πώληση περνάει, αλλά ο φόρος πώλησης είναι 99 %. Από την αξία που αντιστοιχεί σε 1 ETH σου έρχεται στον λογαριασμό το ισοδύναμο 0,01 ETH. Τυπικά "μπόρεσες να πουλήσεις", στην πραγματικότητα έχασες σχεδόν τα πάντα.

Η διαφορά μεταξύ αυτών των δύο είναι σημαντική: το μαλακό honeypot συχνά περνάει το επιφανειακό test, επειδή η πώληση τεχνικά λειτουργεί. Μόνο η ματιά στο τελικό ποσό δείχνει ότι ο φόρος κατάπιε σχεδόν ολόκληρο το υπόλοιπο.

Πώς μπορεί κάποιος να το ελέγξει πριν την αγορά;

Υπάρχουν αρκετές διαδικασίες που δουλεύουν μόνο με δημόσια διαθέσιμα δεδομένα. Τις περιγράφουμε ως εργαλεία επαλήθευσης, όχι ως εγγύηση.

1. Προσομοίωση πώλησης

Ορισμένα εργαλεία (honeypot checkers, ή προσομοιωτές συναλλαγών) εκτελούν σε δοκιμαστικό περιβάλλον μια προσομοιωμένη αγορά και αμέσως πώληση και μετρούν πόσα θα επέστρεφαν. Η έξοδος συνήθως είναι ο εκτιμώμενος φόρος αγοράς, ο φόρος πώλησης και η πληροφορία αν η πώληση περνάει καθόλου. Περιορισμός: η προσομοίωση βασίζεται στην τρέχουσα κατάσταση του contract. Αν ο δημιουργός αλλάξει τη λογική αργότερα, το αποτέλεσμα μπορεί να μην ισχύει πια.

2. Ανάγνωση επαληθευμένου πηγαίου κώδικα

Στον block explorer (για παράδειγμα Etherscan για το Ethereum ή BscScan για το BNB Chain, βλ. πηγές) στα επαληθευμένα contracts φαίνεται ο κώδικας Solidity. Παρακολουθούμενα μοτίβα:

  • συναρτήσεις που αλλάζουν φόρους ή κανόνες συναλλαγών μετά το deployment,
  • συνθήκες require μέσα στη μεταφορά που διαφέρουν για αγορά και πώληση,
  • ρόλοι τύπου onlyOwner που επιτρέπουν στον ιδιοκτήτη μονομερή παρέμβαση,
  • λίστες διευθύνσεων (_isBlacklisted και παρόμοια).

Αν το contract δεν είναι επαληθευμένο (ο πηγαίος κώδικας δεν έχει δημοσιευτεί), δεν μπορείς να διαβάσεις τι κάνει. Αυτό από μόνο του δεν αποτελεί απόδειξη τίποτα, αλλά είναι πληροφορία για το τι δεν γνωρίζεις.

3. Ματιά στις πραγματικές πωλήσεις στην αλυσίδα

Στο ιστορικό συναλλαγών του ζεύγους μπορείς να διαπιστώσεις αν έχει καν κάποιος πουλήσει επιτυχώς. Όταν εκεί υπάρχουν πολλές αγορές και σχεδόν καθόλου πωλήσεις, είναι ένα μοτίβο που αξίζει προσοχή. Αντίθετα, μια σειρά κανονικών πωλήσεων από διάφορες διευθύνσεις είναι ένδειξη ότι η πώληση εκείνη τη στιγμή λειτουργούσε.

4. Ποιος κατέχει και ποιος μπορεί να αλλάξει

Χρήσιμο είναι να δεις την κατανομή των κατόχων και το αν η ιδιοκτησία του contract έχει αποποιηθεί (renounced), ή αν ο ιδιοκτήτης έχει ακόμη το δικαίωμα να αλλάξει παραμέτρους. Η αποποίηση της ιδιοκτησίας μειώνει τον κίνδυνο μεταγενέστερης αλλαγής των κανόνων, αλλά δεν αποκλείει ότι η λογική honeypot είναι ήδη μόνιμα στον κώδικα.

Γιατί ούτε ένα καθαρό test δεν είναι εγγύηση;

Επειδή η κατάσταση του contract είναι μεταβλητή στον χρόνο. Τρεις συγκεκριμένες παγίδες:

  • Χρονισμένη αλλαγή: αγορά και πώληση λειτουργούν σήμερα, αύριο ο δημιουργός καλεί μια συνάρτηση που μπλοκάρει την πώληση.
  • Φόροι κατωφλίου: ο φόρος αυξάνεται μόνο αφού επιτευχθεί κάποιος όγκος ή αριθμός κατόχων.
  • Proxy contracts: η λογική μπορεί να αντικατασταθεί μέσω ενός αναβαθμίσιμου proxy, οπότε ο κώδικας που διάβασες μπορεί να μην είναι πια αυτός που εκτελείται.

Γι' αυτό ισχύει ότι το test λέει πώς συμπεριφέρθηκε το contract τη στιγμή του test, όχι πώς θα συμπεριφερθεί αργότερα. Ακριβώς εξαιτίας αυτών των παγίδων θεωρούμε το αποτέλεσμα της προσομοίωσης και της ανάγνωσης του κώδικα ισχυρή ένδειξη, όχι βεβαιότητα.

Τι πρέπει να ξέρεις τώρα και τι παραμένει αβέβαιο

Μετά από αυτό το μάθημα θα πρέπει να είσαι σε θέση να:

  • εξηγήσεις γιατί το contract μπορεί να διακρίνει την αγορά από την πώληση,
  • ονομάσεις τα βασικά μοτίβα honeypot (blacklist, ασύμμετρος φόρος, μπλοκάρισμα πώλησης, μεταβλητό flag),
  • διακρίνεις το σκληρό honeypot (η πώληση δεν περνάει) από το μαλακό (η πώληση περνάει, αλλά ο φόρος παίρνει σχεδόν τα πάντα),
  • εκτελέσεις τρεις επαληθεύσεις: προσομοίωση πώλησης, ανάγνωση επαληθευμένου κώδικα και έλεγχο πραγματικών πωλήσεων στην αλυσίδα.

Τι παραμένει αβέβαιο και δεν μπορεί να διαπιστωθεί αξιόπιστα εκ των προτέρων: πώς θα συμπεριφερθεί ο δημιουργός στο μέλλον, αν θα αλλάξει τις παραμέτρους, και αν πίσω από ένα proxy contract δεν θα αντικαταστήσει τη λογική. Κανένα εργαλείο δεν δίνει εκατό τοις εκατό βεβαιότητα, επειδή δουλεύει με την παρελθούσα και την παρούσα κατάσταση, όχι με τη μελλοντική πρόθεση.

Αυτό δεν είναι σύσταση για το τι να κάνεις με τα χρήματά σου. Είναι μια περιγραφή της μηχανικής και των μεθόδων επαλήθευσης, ώστε να αποφασίζεις με ανοιχτά μάτια.

Τι ξέρουμε και τι όχι

  • ΑποδεδειγμένοΤο contract ενός token σε EVM μπορεί στη συνάρτηση μεταφοράς (transfer/transferFrom κατά ERC-20) να διακρίνει την αγορά από την πώληση ανάλογα με το αν ο αντισυμβαλλόμενος είναι ζεύγος ρευστότητας, και ανάλογα να εφαρμόσει διαφορετική λογική
  • ΑποδεδειγμένοΤα honeypots μπορούν να περιγραφούν ως σκληρά (η πώληση κάνει revert) και μαλακά (η πώληση περνάει, αλλά υψηλός φόρος παίρνει σχεδόν ολόκληρο το ποσό)
  • ΠιθανόΗ προσομοίωση πώλησης και η ανάγνωση επαληθευμένου πηγαίου κώδικα υποδεικνύουν τη συμπεριφορά του contract τη στιγμή του test, αλλά μπορούν να παρακαμφθούν (φόροι κατωφλίου, proxy, χρονισμένες αλλαγές)
  • ΠιθανόΚανένα test δεν εγγυάται τη μελλοντική συμπεριφορά του contract, επειδή τόσο οι παράμετροι όσο και η λογική (μέσω proxy) μπορούν να αλλάξουν μετά το deployment
  • ΑποδεδειγμένοΤο συγκεκριμένο αριθμητικό παράδειγμα (1 ETH, 1.000.000 tokens, φόρος 99 %) είναι ενδεικτικό, όχι πραγματική μετρημένη τιμή

Πηγές

Αυτό το άρθρο είναι πρωτότυπη σύνθεση των επαληθευμένων πηγών παρακάτω. Δεν παραθέτει τίποτα που να μην βρίσκεται σε αυτές.

  1. 1ERC-20 Token Standard· Ethereum.org
  2. 2Solidity Documentation· Solidity
  3. 3OpenZeppelin ERC20 API (transfer / transferFrom)· OpenZeppelin
  4. 4Uniswap Documentation· Uniswap
  5. 5PancakeSwap Documentation· PancakeSwap
  6. 6Etherscan (verify and read contract source code)· Etherscan
  7. 7BscScan (verify and read contract source code)· BscScan

Πώς φτιάχτηκε αυτό το άρθρο

Αυτό το μάθημα για το charliedesk Classroom το έγραψε ο Otto, AI συγγραφέας με εξειδίκευση στην επαλήθευση γεγονότων. Το κείμενο είναι ιδιόκτητο επεξηγηματικό υλικό βασισμένο στη γενικά γνωστή μηχανική των smart contracts σε αλυσίδες EVM. Οι βασικοί τεχνικοί ισχυρισμοί (συναρτήσεις transfer/transferFrom, ζεύγη ρευστότητας, δυνατότητα ανάγνωσης επαληθευμένου κώδικα σε block explorer) συνδέονται με τη δημόσια τεκμηρίωση που αναφέρεται στις πηγές: το πρότυπο ERC-20 (Ethereum.org), την τεκμηρίωση Solidity, το OpenZeppelin ERC20, την τεκμηρίωση του Uniswap και του PancakeSwap και τους block explorers Etherscan και BscScan. Τα αριθμητικά παραδείγματα είναι ρητά ενδεικτικά, επειδή για αυτή την έννοια δεν υπάρχει διαθέσιμη καμία ζωντανή μετρημένη τιμή, και γι' αυτό δεν επινοήσαμε καμία. Τους ισχυρισμούς ότι η προσομοίωση και η ανάγνωση του κώδικα αποκαλύπτουν τη συμπεριφορά του contract τους μειώσαμε σκόπιμα στην ενότητα certainty σε 'probable', επειδή αυτές οι ίδιες μέθοδοι μπορούν να παρακαμφθούν (φόροι κατωφλίου, proxy upgrades, χρονισμένες αλλαγές). Το κείμενο δεν περιέχει καμία επενδυτική σύσταση ούτε κατηγορίες συγκεκριμένων projects, περιγράφει μόνο μοτίβα και μεθόδους επαλήθευσης.