Analise smart-contract
03.04.2024

Έξυπνες συμβάσεις με λειτουργία παύσης

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

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

Οι κίνδυνοι των έξυπνων συμβολαίων με το χαρακτηριστικό Pause:

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

  • Παραπλανητικές καθυστερήσεις: Κακόβουλα συμβόλαια μπορεί να αναστείλουν κρίσιμες συναλλαγές, όπως αναλήψεις ή μεταφορές, με το πρόσχημα προσωρινής συντήρησης ή μέτρων ασφαλείας, με σκοπό να στερήσουν από τους χρήστες την πρόσβαση στα περιουσιακά τους στοιχεία.

  • Ψευδείς ισχυρισμοί για επείγοντα περιστατικά: Οι απατεώνες μπορεί να ισχυριστούν ψευδώς ότι υπάρχουν επείγοντα περιστατικά ή ευπάθειες για να δικαιολογήσουν την αναστολή της σύμβασης και στη συνέχεια να χρησιμοποιήσουν τα χρήματα των χρηστών κατά τη διάρκεια της παύσης.

  • Προφάσεις ασφαλείας: Κακόβουλα συμβόλαια μπορεί να ισχυριστούν ότι ανακαλύφθηκε μια ευπάθεια ασφαλείας, με αποτέλεσμα την ενεργοποίηση της λειτουργίας αναστολής. Στην πραγματικότητα, οι απατεώνες μπορεί να έχουν σκοπό να εκμεταλλευτούν την κατάσταση.

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

Πώς μπορείτε να προσδιορίσετε ανεξάρτητα αν υπάρχουν τέτοιες απειλές σε έξυπνες συμβάσεις;

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

  1. Εξετάστε τον πηγαίο κώδικα του συμβολαίου για να διαπιστώσετε αν υπάρχει λειτουργία παύσης. Βεβαιωθείτε ότι ο μηχανισμός παύσης είναι καλά τεκμηριωμένος και διαθέτει τους κατάλληλους ελέγχους πρόσβασης.

  2. Βρείτε ποιος ελέγχει τη λειτουργία παύσης. Η μη εξουσιοδοτημένη ή μη ελεγχόμενη κατοχή της λειτουργίας Παύσης αποτελεί πιθανό πρόβλημα.

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

  4. Ελέγξτε τη διαφάνεια της χρήσης της λειτουργίας Παύσης. Βεβαιωθείτε ότι υπάρχουν σαφείς διαδικασίες για τη διαχείριση και τη λήψη αποφάσεων σχετικά με την ενεργοποίηση ή την απενεργοποίηση της λειτουργίας Pause.

  5. Δώστε προσοχή στους εξωτερικούς ελέγχους της ασφάλειας των έξυπνων συμβολαίων, ιδίως του μηχανισμού Pause. Οι ελεγκτές θα πρέπει να αξιολογούν την ασφάλεια και τη διαφάνεια της λειτουργίας Pause.

  6. Παρακολουθήστε τη συμπεριφορά του συμβολαίου και διασφαλίστε ότι η λειτουργία Pause ενεργοποιείται μόνο υπό νόμιμες συνθήκες, όπως για λόγους συντήρησης ή ασφάλειας.

  7. Ενεργήστε με την κοινότητα του έργου και άλλους χρήστες για να κατανοήσετε τις εμπειρίες και τις ανησυχίες τους σχετικά με τη χρήση της λειτουργίας Pause.

  8. Να ενημερώνεστε για τις τελευταίες εξελίξεις στην κοινότητά μας (κανάλι Telegram) και τις βέλτιστες πρακτικές για τον εντοπισμό απάτης (το ιστολόγιο και το κανάλι μας στο YouTube).

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

Ο σαρωτής ασφαλείας της Lotus Market βρίσκει όλες τις κοινές (συμπεριλαμβανομένων των κρυφών) λειτουργίες Pause στο 99,9% των περιπτώσεων. Χρησιμοποιήστε την premium συνδρομή μας και προστατέψτε τα κεφάλαιά σας από απειλές.

Στη συνέχεια, θα εξετάσουμε μερικά από τα πιο συνηθισμένα παραδείγματα της λειτουργίας Παύσης που βρίσκει με επιτυχία η πλατφόρμα της Lotus Market.

independently determine

Παράδειγμα 1: Βασική λειτουργία Παύσης


  contract BasicPauseToken {
    address public owner;
    bool public paused;

    constructor() {
        owner = msg.sender;
        paused = false;
    }

    modifier whenNotPaused() {
        require(!paused, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused
    }
}

Συμβουλές για τον εντοπισμό: Αναζητήστε ένα συμβόλαιο με συναρτήσεις όπως pause και unpause ή παρόμοιες συναρτήσεις που μπορούν να αλλάζουν την κατάσταση παύσης.

Ελέγξτε για έναν τροποποιητή τύπου whenNotPaused που εφαρμόζεται σε ορισμένες συναρτήσεις για να διασφαλίσετε ότι μπορούν να εκτελεστούν μόνο όταν το συμβόλαιο δεν έχει ανασταλεί.

Ελέγξτε τον μηχανισμό ελέγχου πρόσβασης, ο οποίος θα πρέπει να επιτρέπει μόνο στον ιδιοκτήτη ή σε εξουσιοδοτημένα άτομα να αναστέλλουν και να ανακαλούν την αναστολή μιας σύμβασης.

Παράδειγμα 2: Παύση με ενεργοποίηση χρόνου


  contract TimeActivatedPauseToken {
    address public owner;
    bool public paused;
    uint256 public pauseStartTime;
    uint256 public pauseDuration;

    constructor(uint256 _duration) {
        owner = msg.sender;
        paused = false;
        pauseStartTime = 0;
        pauseDuration = _duration;
    }

    modifier whenNotPaused() {
        require(!paused, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
        pauseStartTime = block.timestamp;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused
    }
}

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

Ελέγξτε αν υπάρχει τροποποιητής τύπου whenNotPaused που εφαρμόζεται σε ορισμένες συναρτήσεις. Βεβαιωθείτε ότι το συμβόλαιο επιβάλλει τη διάρκεια της παύσης και επιτρέπει την ακύρωσή της μόνο μετά την παρέλευση του καθορισμένου χρονικού διαστήματος.

Κατά τον εντοπισμό των χαρακτηριστικών παύσης σε ένα έξυπνο συμβόλαιο, είναι κρίσιμο να εξετάσετε τον κώδικα, τους ελέγχους πρόσβασης και τον σκοπό του μηχανισμού παύσης. Εξετάστε προσεκτικά την τεκμηρίωση και το μοντέλο διαχείρισης της σύμβασης και συνεργαστείτε με την κοινότητα του έργου για να αξιολογήσετε τη νομιμότητα της σύμβασης και κατά πόσον είναι κατάλληλη για το σκοπό της. Να είστε πάντοτε προσεκτικοί και να διεξάγετε τη δέουσα επιμέλεια προτού εμπλακείτε σε οποιαδήποτε συναλλαγή ή επένδυση που περιλαμβάνει συμβάσεις με δυνατότητα αναστολής.

time-activated pause

Παράδειγμα 3: Λειτουργία παύσης υπό όρους


  contract ConditionalPauseToken {
    address public owner;
    bool public paused;

    constructor() {
        owner = msg.sender;
        paused = false;
    }

    modifier whenNotPaused() {
        require(!paused || msg.sender == owner, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused, except for the owner
    }
}

Συμβουλές για τον εντοπισμό: Αναζητήστε ένα συμβόλαιο με μηχανισμό παύσης υπό όρους που επιτρέπει στον ιδιοκτήτη να εκτελεί ορισμένες συναλλαγές ακόμη και αν το συμβόλαιο έχει ανασταλεί.

Ελέγξτε αν ο τροποποιητής τύπου whenNotPaused εφαρμόζεται σε συναρτήσεις που απαιτούν το συμβόλαιο να βρίσκεται σε κατάσταση μη παύσης.

Παράδειγμα 4: Συνάρτηση παύσης έκτακτης ανάγκης


  contract EmergencyPauseToken {
    address public owner;
    bool public paused;

    constructor() {
        owner = msg.sender;
        paused = false;
    }

    modifier whenNotPaused() {
        require(!paused || msg.sender == owner, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
    }

    function emergencyPause() public {
        require(msg.sender == owner, "Only the owner can initiate emergency pause");
        paused = true;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused, except for the owner
    }
}

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

Ελέγξτε για έναν τροποποιητή τύπου whenNotPaused για να καθορίσετε ποιες λειτουργίες περιορίζονται όταν το συμβόλαιο αναστέλλεται.

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

Συνδυάστε τις λειτουργίες αναστολής της σύμβασης με το μοντέλο διακυβέρνησης και τις διαδικασίες λήψης αποφάσεων για την ενεργοποίηση και την απενεργοποίηση της λειτουργίας αναστολής.

Παράδειγμα 5: Ελεγχόμενη από τον ιδιοκτήτη παύση με χρονικό όριο


  contract TimedPauseToken {
    address public owner;
    bool public paused;
    uint256 public pauseStartTime;
    uint256 public pauseDuration;

    constructor(uint256 _duration) {
        owner = msg.sender;
        paused = false;
        pauseStartTime = 0;
        pauseDuration = _duration;
    }

    modifier whenNotPaused() {
        require(!paused, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
        pauseStartTime = block.timestamp;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused
    }
}

Συμβουλές για τον εντοπισμό: Αναζητήστε ένα συμβόλαιο με ελεγχόμενη από τον ιδιοκτήτη παύση που περιλαμβάνει συγκεκριμένη διάρκεια παύσης και ακύρωση παύσης.

Ελέγξτε για έναν τροποποιητή τύπου whenNotPaused που εφαρμόζεται στις κατάλληλες συναρτήσεις για τον περιορισμό των λειτουργιών όταν η σύμβαση αναστέλλεται.

owner-controlled pause with time limit

Παράδειγμα 6: Παύση τρίτου μέρους με χρονικό όριο


  contract ThirdPartyTimedPauseToken {
    address public owner;
    address public thirdParty;
    bool public paused;
    uint256 public pauseStartTime;
    uint256 public pauseDuration;

    constructor(address _thirdParty, uint256 _duration) {
        owner = msg.sender;
        thirdParty = _thirdParty;
        paused = false;
        pauseStartTime = 0;
        pauseDuration = _duration;
    }

    modifier whenNotPaused() {
        require(!paused || msg.sender == owner || msg.sender == thirdParty, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == thirdParty, "Only the third party can pause");
        paused = true;
        pauseStartTime = block.timestamp;
    }

    function unpause() public {
        require(msg.sender == thirdParty, "Only the third party can unpause");
        require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused, except for the owner and the third party
    }
}

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

Ελέγξτε για έναν τροποποιητή τύπου whenNotPaused για να προσδιορίσετε ποιες λειτουργίες περιορίζονται όταν ένα συμβόλαιο είναι σε αναστολή.

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

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

 

Ελπίζουμε ότι αυτά τα παραδείγματα σας βοήθησαν να κατανοήσετε καλύτερα τα σχήματα της λειτουργίας παύσης στις έξυπνες συμβάσεις.

 

 

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

 

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

Χαιρετισμούς, ομάδα της Lotus Market.

All posts

Connect to a wallet

Metamask