Analise smart-contract
23.01.2024

Bagaimana cara mengidentifikasi token BlackList DeFi?

Kami melanjutkan seri artikel yang didedikasikan untuk deskripsi skema penipuan dalam kontrak pintar. Hari ini kami akan menganalisis kontrak pintar dengan fungsi Black List (BlackList).

Bahaya dari kontrak pintar dengan fungsi BlackList:

Kontrak pintar yang mencakup fungsi Blacklist membawa risiko dan masalah tertentu baik untuk proyek maupun penggunanya. Berikut beberapa bahaya yang terkait dengan fungsi daftar hitam:

  1. Kontrol Terpusat: Fungsi Blacklist sering memberikan kontrol terpusat kepada pemilik kontrak atau administrator.

  2. Penyalahgunaan Blacklist untuk Praktik Tidak Adil: Penyalahguna (termasuk pemilik kontrak) dapat menggunakan daftar hitam untuk menargetkan alamat tertentu. Ini dapat mencakup membekukan atau membatasi fungsionalitas akun tanpa alasan yang baik.

  3. Kurangnya Transparansi: Keberadaan fungsi daftar hitam, terutama jika tidak didokumentasikan, dapat menyebabkan kurangnya transparansi. Pengguna mungkin tidak menyadari kriteria daftar hitam atau prosedur daftar hitam.

  4. Risiko Keamanan: Jika BlackList tidak diimplementasikan secara aman, ada risiko kerentanan yang dapat memungkinkan pihak tidak berwenang untuk memanipulasi daftar hitam, yang dapat mengakibatkan pembekuan atau transfer dana yang tidak sah.

  5. Ketidakpercayaan Pengguna: Keberadaan fungsi daftar hitam dapat merusak kepercayaan pengguna karena aset mereka dapat dimasukkan ke dalam daftar hitam tanpa aturan yang jelas.

  6. Konfiskasi Token: Penyerang dapat menggunakan daftar hitam untuk menyita token atau aset dari alamat tertentu tanpa alasan yang tepat. Hal ini dapat mengakibatkan kerugian keuangan yang signifikan.

Bagaimana Anda bisa menentukan secara independen apakah ancaman semacam ini ada dalam kontrak pintar?

Saat memvalidasi sebuah kontrak pintar, langkah-langkah tertentu dapat diambil untuk menentukan apakah ada ancaman yang terkait dengan fungsi daftar hitam:

  • Sebelum Anda mulai bekerja dengan kontrak pintar, baca dan teliti dengan seksama kode-kode, termasuk semua fungsi terkait daftar hitam. Cari fungsi yang terkait dengan daftar hitam, pembekuan, atau membatasi fungsionalitas akun. Periksa fungsi yang memungkinkan Anda untuk menambahkan atau menghapus alamat dari daftar hitam.

  • Analisis siapa yang memiliki kepemilikan atau kontrol administratif atas kontrak. Nilai derajat kontrol dan hak-hak yang terkait dengan pemilik atau administrator.

  • Periksa dokumentasi kontrak untuk memahami bagaimana fungsi-fungsi daftar hitam dimaksudkan untuk digunakan. Cari informasi tentang mekanisme tata kelola yang mengendalikan penggunaan daftar hitam.

  • Nilai transparansi: Apakah kontrak memastikan bahwa kriteria daftar hitam transparan? Periksa apakah ada prosedur yang jelas untuk menghilangkan false positives atau menghapus alamat dari daftar hitam.

  • Audit keamanan: periksa apakah kontrak pintar telah mengalami audit keamanan oleh perusahaan pihak ketiga yang terkemuka.

  • Kenali umpan balik dari komunitas atau forum online tentang penggunaan daftar hitam dalam proyek. Berhati-hatilah terhadap bendera merah yang dibangkitkan oleh anggota komunitas tentang praktik tidak adil atau kurangnya transparansi.

  • Dengan melakukan analisis mendalam dan mempertimbangkan faktor-faktor di atas, Anda akan lebih mampu menilai risiko yang terkait dengan fungsi daftar hitam dalam kontrak pintar. Tetap terinformasi dengan perkembangan terbaru di komunitas kami (saluran Telegram) dan praktik terbaik untuk deteksi penipuan (Blog dan saluran YouTube kami).

 

Kabar baik: Pemindai Keamanan kami menemukan semua fungsi Blacklist umum (termasuk yang tersembunyi) 99,9% dari waktu. Gunakan langganan premium kami dan lindungi dana Anda dari ancaman.

 

Selanjutnya, kita akan melihat beberapa contoh paling umum dari fungsi BlackList yang Platform kami berhasil mendeteksi.

Perhatikan bahwa ini adalah contoh-contoh yang disederhanakan dan implementasi aktualnya dapat berbeda. Saat menganalisis kontrak pintar, Anda harus selalu melakukan tinjauan kode yang teliti dan mempertimbangkan faktor-faktor yang bergantung pada konteks.

Contoh 1: Fungsionalitas Dasar dari Daftar Hitam


    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;
      }
  }

>

Tips Deteksi: Cari fungsi (seperti addToBlackList dan removeFromBlackList) yang memiliki modifier akses (onlyOwner). Keberadaan modifier tersebut berarti hanya Pemilik yang dapat memodifikasi daftar hitam.

common tips

Contoh 2: Blacklist dengan Mekanisme Biaya (BlackList dengan Biaya)


    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;
      }
  }

Tips Deteksi: Tentukan fungsi (seperti addToBlackListWithFee) yang memerlukan biaya (msg.value) untuk dimasukkan ke dalam daftar hitam. Ini adalah sinyal yang sangat berbahaya.

Contoh 3: Blacklist dengan kondisi bergantung pada waktu


    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;
      }
  }

Tips Deteksi: Tentukan fungsi (mis. addToBlackListTimed) yang memberlakukan kondisi bergantung pada waktu blok pada daftar hitam. Ini biasanya digunakan untuk daftar hitam yang ditunda atau dijadwalkan.

Contoh 4: Daftar Hitam dengan Pencatatan Event


      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);
        }
    }
    

Tips Deteksi: Pencatatan Event: Perhatikan event yang mencatat tindakan penghitaman hitam. Event memberikan transparansi dan sangat penting untuk memantau tindakan kontrak. Anda bisa mengatakan bahwa ini adalah jenis BlackList yang paling aman karena pengembang tidak menyembunyikan fungsi ini tetapi secara terbuka mencatat semua panggilannya dalam log event.

Contoh 5: Daftar Hitam dengan Fungsi Whitelist (Whitelist)


      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;
        }
    }
    

Tips Deteksi: Fungsi Whitelist: Perhatikan kontrak yang memiliki fungsi daftar hitam dan daftar putih secara bersamaan. Fungsionalitas ganda seperti ini dapat memiliki implikasi pada transfer token tanpa pengetahuan pemilik atau aktivitas curang lainnya.

common tips

Contoh 6: Daftar Hitam dengan Kontrol Pemerintahan (Governance Control)


      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;
        }
    }
    

Tips Deteksi: Identifikasi kontrak di mana kegiatan penghitaman hitam tunduk pada pengendalian oleh manajer kontrak eksternal. Saat mempertimbangkan kontrak pintar, teliti dengan hati-hati kode-kode, perhatikan kontrol akses, mekanisme pembayaran, syarat dan ketentuan yang tergantung pada waktu, pencatatan event, perlindungan anti-pembelokan, dan faktor penting lainnya. Selain itu, pertimbangkan spesifikasinya dari proyek dan tujuannya ketika menilai implikasi dari penggunaan fungsi daftar hitam.

Contoh 7: Daftar Hitam dengan Penghentian Darurat


      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;
        }
    }
    

Tips Deteksi: Mekanisme jeda darurat dapat menjeda beberapa fungsi, termasuk perubahan daftar hitam.

Contoh 8: Daftar Hitam dengan Kondisi Dinamis


      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;
        }
    }
    

Tips Deteksi: Penghitaman sering kali didasarkan pada kondisi atau peristiwa tertentu. Teliti dengan hati-hati fungsi-fungsi yang diperiksa sebelum mengaktifkan Daftar Hitam. Fungsi-fungsi ini mengandung logika untuk menambahkan pemilik ke Daftar Hitam, dalam contoh ini kondisinya adalah bahwa saldo akun di atas ambang batas yang ditentukan.

Contoh 9: Daftar Hitam Penghapusan dengan Kunci Waktu (Penghapusan Penguncian Waktu)


      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;
        }
    }
    

Tips Deteksi: Identifikasi kontrak di mana penghapusan penghitaman hitam dibatasi waktu. Sering kali dalam kasus seperti ini, perhitungan waktu berdasarkan block.timestamp digunakan.

Contoh 10: Daftar Hitam dengan Batas Gas (Perlindungan Batas Gas)


      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;
        }
    }
    

Tips Deteksi: Identifikasi kontrak di mana fungsi tertentu, seperti penghitaman hitam, tunduk pada batasan gas.

common tips

Contoh 11: Daftar Hitam dengan Integrasi Eksternal menggunakan Oracle (Oracle)


      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");
        }
    }
    

Tips Deteksi: Hati-hati dengan kontrak yang bergantung pada Oracles eksternal untuk membuat keputusan penghitaman hitam. Selalu periksa keandalan dan transparansi Oracle yang digunakan oleh kontrak pintar.

Contoh 12: Daftar Hitam dengan Interaksi Kontrak Eksternal


      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);
        }
    }        
    

Tips Deteksi: Saat membuat keputusan penghitaman hitam, berhati-hatilah dengan kontrak yang berinteraksi dengan kontrak eksternal, terutama jika kode sumber kontrak eksternal tidak diverifikasi.

Contoh 13: Daftar Hitam dengan Ambang Dinamis (Ambang Dinamis)


      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;
        }
    }
    

Tips Deteksi: Identifikasi kontrak di mana ambang batas penghitaman hitam dinamis dan dapat diatur oleh pemilik dari waktu ke waktu (dengan memanggil beberapa metode kontrak tertentu).

Tip Umum untuk Mengidentifikasi Fungsi Daftar Hitam (BlackList)

  1. Cari fungsi yang memodifikasi daftar alamat (mapping):
    Periksa kode kontrak pintar untuk mengidentifikasi fungsi yang memodifikasi daftar alamat, seperti menambahkan atau menghapus alamat.

  2. Periksa akses hanya pemilik:
    Fungsi daftar hitam sering kali memiliki pembatasan akses yang hanya memungkinkan pemilik kontrak atau administrator untuk menjalankannya. Cari penggunaan modifier onlyOwner atau mekanisme kontrol akses serupa.

  3. Periksa fungsi constructor():
    Fungsi constructor() menentukan keadaan awal kontrak. Periksa apakah ada ikatan alamat atau daftar yang diinisialisasi di constructor, yang mengindikasikan daftar hitam.

  4. Telusuri logika modifier:
    Analisis logika modifier seperti onlyOwner untuk memahami dalam kondisi apa fungsi terkait penghitaman hitam dapat dilakukan.

  5. Temukan istilah kunci:
    Cari kata kunci seperti "BlackList", "addBlackList", "removeBlackList", atau istilah serupa dalam kode kontrak pintar (pada kasus paling sederhana fungsi-fungsi ini memiliki nama yang mirip, dalam varian yang lebih kompleks nama-nama tersebut mungkin tidak mencerminkan inti dari fungsi untuk menyamarkan).

  6. Periksa dokumentasi dan komentar:
    Tinjau dokumentasi dan komentar kontrak untuk mencari informasi tentang fungsi-fungsi daftar hitam. Pengembang sering memberikan informasi tentang cara penggunaan fungsi tertentu, termasuk penghitaman hitam.

  7. Periksa panggilan eksternal (call) atau event:
    Cari panggilan eksternal atau event yang mungkin dipicu ketika suatu alamat ditambahkan atau dihapus dari daftar hitam. Ini dapat memberikan wawasan tentang bagaimana kontrak berinteraksi dengan komponen eksternal berdasarkan tindakan yang terkait dengan daftar hitam.

  8. Evaluasi kemampuan pembaruan dan manajemen kode kontrak:
    Evaluasi kontrak pintar untuk mekanisme pembaruan atau struktur pemerintahan yang memungkinkan perubahan logika penghitaman hitam. Memahami bagaimana pembaruan dikelola sangat penting untuk memperkirakan perubahan potensial pada fungsi daftar hitam.

  9. Periksa logika daftar hitam di fungsi lain:
    Periksa fungsi-fungsi lain dalam kontrak untuk pemeriksaan apakah suatu alamat berada dalam daftar hitam sebelum melakukan tindakan tertentu.

  10. Temukan kasus penggunaan dan tokenomics:
    Pahami skenario penggunaan dan tokenomics dari proyek. Jika proyek terkait dengan manajemen alamat pengguna atau memiliki fungsi terkait hak pengguna, mungkin ada alasan untuk penghitaman hitam.

  11. Pencatatan event:
    Perhatikan adanya log event yang terkait dengan tindakan penghitaman hitam. Event sering digunakan untuk mencatat perubahan status yang signifikan, memberikan transparansi terhadap perilaku kontrak.

  12. Perlindungan Batas Gas:
    Gunakan kewaspadaan dengan fungsi-fungsi yang dilindungi oleh batas gas. Meskipun ini bisa menjadi implementasi fitur keamanan, ini juga dapat digunakan untuk mengontrol atau membatasi kinerja fungsi kontrak kritis tertentu.

  13. Kondisi yang bergantung pada waktu:
    Periksa kondisi yang bergantung pada waktu terkait dengan daftar hitam. Misalnya, kontrak dapat menerapkan penguncian waktu pada penghapusan atau mekanisme lain yang sensitif terhadap waktu.

  14. Audit independen:
    Cari kontrak pintar yang telah diaudit secara independen oleh perusahaan audit terkemuka. Laporan audit memberikan wawasan tentang keamanan dan fungsionalitas kontrak.

  15. Ulasan umpan balik komunitas:
    Periksa forum komunitas, media sosial, atau saluran komunikasi resmi untuk diskusi tentang keberadaan dan penggunaan fungsi daftar hitam. Pengguna dapat memberikan wawasan dan kekhawatiran berharga.







  16.  
  17.  
  18.  
  19.  
  20.  
  21.  

tips umum

Saat menganalisis kontrak pintar, sangat penting untuk memahami fitur dan fungsionalitasnya dengan baik. Tips ini akan membantu Anda mengidentifikasi dan mengevaluasi keberadaan fungsi daftar hitam, memungkinkan Anda untuk membuat keputusan yang terinformasi tentang berinteraksi dengan kontrak.

Jika memungkinkan, pilihlah kontrak yang mematuhi standar yang telah mapan (misalnya ERC-20). Standar ini sering kali diperiksa dengan teliti dan memiliki reputasi keandalan.

 

Kami berharap contoh-contoh ini telah membantu Anda memahami skema Daftar Hitam (BlackList) dalam kontrak pintar.

 

Karena semua informasi di blockchain terbuka (tentu saja, asalkan kode sumber kontrak diverifikasi), dengan pengetahuan ini Anda dapat secara mandiri mempelajari kontrak pintar dan mengidentifikasi berbagai skema penipuan.

Namun, kami telah melakukannya semua untuk Anda! Daftar langganan premium dan dapatkan akses ke filter eksklusif pada fungsi kontrak pintar dan analisis terbaru. Tingkatkan peluang Anda untuk berhasil berinvestasi dalam token yang menguntungkan.

Salam, tim Lotus Market.

 

All posts

Connect to a wallet

Metamask