Analise smart-contract
23.01.2024

Πώς να εντοπίσετε το BlackList DeFi token?

Συνεχίζουμε τη σειρά άρθρων που είναι αφιερωμένα στην περιγραφή των απατηλών σχημάτων στα έξυπνα συμβόλαια. Σήμερα θα αναλύσουμε έξυπνα συμβόλαια με λειτουργίες Λίστας Μαύρης (Black List).

Οι κίνδυνοι των έξυπνων συμβολαίων με λειτουργίες Λίστας Μαύρης:

Τα έξυπνα συμβόλαια που περιλαμβάνουν λειτουργίες Μαύρης Λίστας φέρνουν συγκεκριμένους κινδύνους και προβλήματα τόσο για το έργο όσο και για τους χρήστες του. Ορισμένοι από αυτούς τους κινδύνους περιλαμβάνουν:

  1. Κεντρικός Έλεγχος: Οι λειτουργίες Μαύρης Λίστας παρέχουν συχνά κεντρικό έλεγχο στον ιδιοκτήτη του συμβολαίου ή τους διαχειριστές του.

  2. Κατάχρηση της Μαύρης Λίστας για Αναίτιες Πρακτικές: Οι κακόπιστοι (συμπεριλαμβανομένου του ιδιοκτήτη του συμβολαίου) μπορούν να χρησιμοποιήσουν τη Μαύρη Λίστα για να στοχεύσουν συγκεκριμένες διευθύνσεις. Αυτό μπορεί να περιλαμβάνει τον πάγωμα ή τον περιορισμό της λειτουργικότητας λογαριασμών χωρίς καλό λόγο.

  3. Έλλειψη Διαφάνειας: Η ύπαρξη λειτουργιών Μαύρης Λίστας, ιδίως αν δεν τεκμηριώνονται, μπορεί να οδηγήσει σε έλλειψη διαφάνειας. Οι χρήστες ενδέχεται να μην είναι ενήμεροι για τα κριτήρια της μαύρης λίστας ή τις διαδικασίες μαύρης λίστας.

  4. Κινδύνοι Ασφαλείας: Εάν η Μαύρη Λίστα δεν εφαρμόζεται με ασφάλεια, υπάρχει κίνδυνος ευπάθειας που μπορεί να επιτρέψει σε μη εξουσιοδοτημένα μέρη να χειριστούν τη μαύρη λίστα, με αποτέλεσμα μη εξουσιοδοτημένο πάγωμα ή μεταφορά κεφαλαίων.

  5. Εμπιστοσύνη των Χρηστών: Η ύπαρξη λειτουργιών Μαύρης Λίστας μπορεί να υπονομεύσει την εμπιστοσύνη των χρηστών καθώς τα περιουσιακά τους στοιχεία μπορεί να βρεθούν στην μαύρη λίστα χωρίς σαφείς κανόνες.

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

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

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

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

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

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

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

  • Ελέγξτε αν έχουν γίνει ανεξάρτητοι ελέγχοι ασφαλείας από αξιόπιστες εταιρείες τρίτων στο έξυπνο συμβόλαιο.

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

  • Με τη διεξαγωγή μιας λεπτομερούς ανάλυσης και λαμβάνοντας υπόψη τους παραπάνω παράγοντες, θα είστε σε θέση να αξιολογήσετε καλύτερα τους κινδύνους που σχετίζονται με τις λειτουργίες Μαύρης Λίστας σε έξυπνα συμβόλαια. Παραμείνετε ενημερωμένοι για τις τελευταίες εξελίξεις στην κοινότητά μας (κανάλι Telegram) και τις βέλτιστες πρακτικές για την ανίχνευση απάτης (το ιστολόγιό μας και το κανάλι YouTube μας).

 

Καλά νέα: Ο Scanner Ασφαλείας μας εντοπίζει όλες τις συνήθεις (συμπεριλαμβανομένων των κρυφών) λειτουργίες Μαύρης Λίστας (BlackList) το 99,9% του χρόνου. Χρησιμοποιήστε την προνομιακή μας συνδρομή και προστατεύστε τα κεφάλαιά σας από απειλές.

 

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

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

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


    contract TokenWithBlackListAndFee {
      address public owner;
      mapping(address => bool) public BlackList;
      uint256 public BlackListFee;
  
      constructor(uint256 _fee) {
          owner = msg.sender;
          BlackListFee = _fee;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListWithFee(address _account) public payable onlyOwner {
          require(msg.value >= BlackListFee, "Insufficient fee");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

Συμβουλές Ανίχνευσης: Αναζητήστε λειτουργίες (όπως addToBlackList και removeFromBlackList) που έχουν τροποποιητές πρόσβασης (onlyOwner). Η ύπαρξη τέτοιων τροποποιητών σημαίνει ότι μόνο ο Ιδιοκτήτης μπορεί να τροποποιήσει τη Μαύρη Λίστα.

κοινές συμβουλές

Παράδειγμα 2: Μαύρη Λίστα με Μηχανισμό Χρέωσης (BlackList με Χρέωση)


    contract TokenWithBlackListAndFee {
      address public owner;
      mapping(address => bool) public BlackList;
      uint256 public BlackListFee;
  
      constructor(uint256 _fee) {
          owner = msg.sender;
          BlackListFee = _fee;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListWithFee(address _account) public payable onlyOwner {
          require(msg.value >= BlackListFee, "Insufficient fee");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

Συμβουλές Ανίχνευσης: Ορίστε λειτουργίες (όπως addToBlackListWithFee) που απαιτούν χρέωση (msg.value) για να γίνει κάποιος μέλος της μαύρης λίστας. Αυτό είναι ένα πολύ επικίνδυνο σημάδι.

Παράδειγμα 3: Μαύρη Λίστα με συνθήκες εξαρτημένες από το χρόνο


    contract TokenWithTimeLock {
      address public owner;
      mapping(address => bool) public BlackList;
      uint256 public BlackListTimeLock;
  
      constructor(uint256 _timeLock) {
          owner = msg.sender;
          BlackListTimeLock = _timeLock;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListTimed(address _account) public onlyOwner {
          require(block.timestamp >= BlackListTimeLock, "Time lock not yet expired");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

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

Παράδειγμα 4: Μαύρη Λίστα με καταγραφή συμβάντων


    contract TokenWithBlackListAndEvents {
      address public owner;
      mapping(address => bool) public BlackList;
  
      event AddressAddedToBlackList(address indexed account);
      event AddressRemovedFromBlackList(address indexed account);
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackList(address _account) public onlyOwner {
          BlackList[_account] = true;
          emit AddressAddedToBlackList(_account);
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
          emit AddressRemovedFromBlackList(_account);
      }
  }

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

Παράδειγμα 5: Μαύρη Λίστα με λειτουργίες Λευκής Λίστας (Λευκή Λίστα)


    contract TokenWithBlackListAndWhitelist {
      address public owner;
      mapping(address => bool) public BlackList;
      mapping(address => bool) public whitelist;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the lists");
          _;
      }
  
      function addToBlackList(address _account) public onlyOwner {
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  
      function addToWhitelist(address _account) public onlyOwner {
          whitelist[_account] = true;
      }
  
      function removeFromWhitelist(address _account) public onlyOwner {
          whitelist[_account] = false;
      }
  }

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

common tips

Παράδειγμα 6: Μαύρη Λίστα με Έλεγχο Διακυβέρνησης (Έλεγχος Διακυβέρνησης)


    interface Governance {
      function canBlackList(address _caller) external view returns (bool);
  }
  
  contract TokenWithGovernanceControl {
      address public owner;
      address public governanceContract;
      mapping(address => bool) public BlackList;
  
      constructor(address _governanceContract) {
          owner = msg.sender;
          governanceContract = _governanceContract;
      }
  
      modifier onlyOwnerOrGovernance() {
          require(msg.sender == owner || Governance(governanceContract).canBlackList(msg.sender), "Not authorized");
          _;
      }
  
      function addToBlackListGoverned(address _account) public onlyOwnerOrGovernance {
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwnerOrGovernance {
          BlackList[_account] = false;
      }
  }
  

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

Παράδειγμα 7: Μαύρη Λίστα με Επείγουσα Διακοπή


    contract TokenWithEmergencyStop {
      address public owner;
      bool public emergencyStop;
      mapping(address => bool) public BlackList;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      modifier whenNotPaused() {
          require(!emergencyStop, "Contract is paused");
          _;
      }
  
      function addToBlackList(address _account) public onlyOwner whenNotPaused {
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner whenNotPaused {
          BlackList[_account] = false;
      }
  
      function toggleEmergencyStop() public onlyOwner {
          emergencyStop = !emergencyStop;
      }
  }

Συμβουλές Ανίχνευσης: Ο μηχανισμός έκτακτης παύσης μπορεί να παύσει ορισμένες λειτουργίες, συμπεριλαμβανομένων των αλλαγών στη μαύρη λίστα.

Παράδειγμα 8: Μαύρη Λίστα με δυναμικές συνθήκες


    contract TokenWithDynamicBlackList {
      address public owner;
      mapping(address => bool) public BlackList;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function conditionallyBlackList(address _account, uint256 _threshold) public onlyOwner {
          require(getBalance(_account) < _threshold, "Account balance exceeds threshold");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

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

Παράδειγμα 9: Μαύρη Λίστα με χρονοκλειδωμένη κατάργηση (Χρονοκλειδωμένη Κατάργηση)


    contract TokenWithTimeLockedRemoval {
      address public owner;
      mapping(address => bool) public BlackList;
      mapping(address => uint256) public removalTimeLock;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackList(address _account) public onlyOwner {
          BlackList[_account] = true;
          removalTimeLock[_account] = block.timestamp + 7 days;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          require(block.timestamp >= removalTimeLock[_account], "Time lock not expired");
          BlackList[_account] = false;
          removalTimeLock[_account] = 0;
      }
  }

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

Παράδειγμα 10: Μαύρη Λίστα με όρια αερίου (Προστασία Όριου Αερίου)


    contract TokenWithGasLimitProtection {
      address public owner;
      mapping(address => bool) public BlackList;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      modifier limitGas() {
          require(gasleft() >= 100000, "Insufficient gas");
          _;
      }
  
      function addToBlackListGasLimited(address _account) public onlyOwner limitGas {
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

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

common tips

Παράδειγμα 11: Μαύρη Λίστα με εξωτερική ολοκλήρωση με Οράκολο (Οράκολο)


  interface Oracle {
    function isBlackListed(address _account) external view returns (bool);
}

contract TokenWithOracleIntegration {
    address public owner;
    Oracle public oracle;

    constructor(address _oracleAddress) {
        owner = msg.sender;
        oracle = Oracle(_oracleAddress);
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Only the owner can modify the BlackList");
        _;
    }

    function addToBlackListByOracle(address _account) public onlyOwner {
        require(oracle.isBlackListed(_account), "Oracle did not confirm BlackListing");
    }
}

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

Παράδειγμα 12: Μαύρη Λίστα με αλληλεπίδραση με εξωτερικό συμβόλαιο


    interface ExternalContract {
      function addToBlackList(address _account) external;
      function removeFromBlackList(address _account) external;
  }
  
  contract TokenWithExternalInteraction {
      address public owner;
      ExternalContract public externalContract;
  
      constructor(address _externalContract) {
          owner = msg.sender;
          externalContract = ExternalContract(_externalContract);
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListExternal(address _account) public onlyOwner {
          externalContract.addToBlackList(_account);
      }
  
      function removeFromBlackListExternal(address _account) public onlyOwner {
          externalContract.removeFromBlackList(_account);
      }
  }       

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

Παράδειγμα 13: Μαύρη Λίστα με Δυναμικό Όριο (Δυναμικό Όριο)


    contract TokenWithDynamicThreshold {
      address public owner;
      mapping(address => bool) public BlackList;
      uint256 public dynamicThreshold;
  
      constructor(uint256 _initialThreshold) {
          owner = msg.sender;
          dynamicThreshold = _initialThreshold;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListDynamicThreshold(address _account) public onlyOwner {
          require(getBalance(_account) > dynamicThreshold, "Account balance is below threshold");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  
      function updateDynamicThreshold(uint256 _newThreshold) public onlyOwner {
          dynamicThreshold = _newThreshold;
      }
  }

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

Γενικές συμβουλές για την αναγνώριση λειτουργιών Μαύρης Λίστας (BlackList)

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

  2. Ελέγξτε την πρόσβαση μόνο για τον ιδιοκτήτη:
    Οι λειτουργίες Μαύρης Λίστας συχνά έχουν περιορισμούς πρόσβασης που επιτρέπουν μόνο στον ιδιοκτήτη του συμβολαίου ή τους διαχειριστές να τις εκτελέσουν. Αναζητήστε τη χρήση του μετατροπέα onlyOwner ή παρόμοιους μηχανισμούς ελέγχου πρόσβασης.

  3. Ελέγξτε τη συνάρτηση constructor():
    Η συνάρτηση constructor() καθορίζει την αρχική κατάσταση του συμβολαίου. Ελέγξτε εάν γίνονται αρχικοποιήσεις διευθύνσεων ή λιστών στο constructor, που υποδηλώνουν την ύπαρξη μαύρης λίστας.

  4. Εξετάστε τη λογική των modifiers:
    Αναλύστε τη λογική των modifiers τύπου onlyOwner για να κατανοήσετε υπό ποιες συνθήκες μπορούν να εκτελεστούν οι συναρτήσεις που σχετίζονται με τη μαύρη λίστα.

  5. Βρείτε βασικούς όρους:
    Ψάξτε για λέξεις-κλειδιά όπως "BlackList", "addBlackList", "removeBlackList" ή παρόμοιους όρους στον κώδικα του έξυπνου συμβολαίου (στην απλούστερη περίπτωση αυτές οι συναρτήσεις έχουν παρόμοια ονόματα, σε πιο περίπλοκες παραλλαγές τα ονόματα μπορεί να μην αντανακλούν την ουσία της συνάρτησης για να την κρύψουν).

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

  7. Ελέγξτε εξωτερικές κλήσεις (call) ή γεγονότα (event):
    Αναζητήστε εξωτερικές κλήσεις ή γεγονότα που μπορούν να πυροδοτηθούν όταν μια διεύθυνση προστίθεται ή αφαιρείται από τη μαύρη λίστα. Αυτό μπορεί να παρέχει εισαγωγή στο πώς το συμβόλαιο αλληλεπιδρά με εξωτερικά στοιχεία βασισμένα στις ενέργειες που συσχετίζονται με τη μαύρη λίστα.

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

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

  10. Ανακαλύψτε τις χρήσεις και την tokenomics:
    Κατανοήστε τις σενάριο χρήσης και την tokenomics του έργου. Αν το έργο σχετίζεται με τη διαχείριση της διεύθυνσης χρήστη ή έχει λειτουργίες που σχετίζονται με τα δικαιώματα του χρήστη, ενδέχεται να υπάρχει λόγος για την ύπαρξη μαύρης λίστας.

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

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

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

  14. Ανεξάρτητες ελέγχους:
    Αναζητήστε έξυπνα συμβόλαια που έχουν υποστεί ανεξάρτητους ελέγχους από αξιόπιστες ελεγκτικές εταιρείες. Οι εκθέσεις ελέγχου παρέχουν εισαγωγές στην ασφάλεια και τη λειτουργικότητα του συμβολαίου.

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









  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  

κοινές συμβουλές

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

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

 

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

 

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

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

Χαιρετισμοί, ο Λαϊκός Αγορά ομάδα.

All posts

Connect to a wallet

Metamask