Analise smart-contract
28.03.2024

Kontrak pintar dengan fungsi AntiWhale

Kami melanjutkan seri artikel yang didedikasikan untuk menjelaskan skema penipuan dalam kontrak pintar. Hari ini kita akan menganalisis kontrak pintar dengan mekanisme AntiWhale untuk pembatasan ukuran transfer.

Dalam artikel ini, kita akan melihat dengan detail apa itu mekanisme AntiWhale, bagaimana perbedaannya dengan mekanisme Cooldown, kapan keduanya digunakan bersamaan, dan kapan mereka digunakan secara terpisah.

Mekanisme Cooldown

Tujuan:

Mekanisme Cooldown dirancang untuk memberlakukan batas waktu antara transaksi berturut-turut dari alamat yang sama. Tujuannya adalah untuk mengatur frekuensi transaksi dan mencegah aktivitas pembelian atau penjualan berlebihan dalam interval waktu singkat.

Realisasi:

Batas Waktu: Mekanisme Cooldown menetapkan periode tunggu antara transaksi, sering kali berdasarkan waktu yang telah berlalu sejak transaksi terakhir dari alamat tertentu. Pengguna harus menunggu periode tunggu berakhir sebelum memulai transaksi baru.

Indikator:

Perbandingan Timestamp: Cari segmen kode yang membandingkan timestamp blok atau menggunakan fungsi terkait waktu. Variabel status seperti lastTransactionTimestamp dapat digunakan untuk melacak waktu dari transaksi terakhir.

Mekanisme AntiWhale

Tujuan:

Tujuan utama dari mekanisme AntiWhale adalah untuk mengurangi dampak dari transaksi besar dari satu alamat atau sekelompok kecil alamat, yang sering disebut sebagai "paus". Tujuannya adalah untuk mencegah konsentrasi token yang berlebihan di tangan yang sama dan untuk melawan manipulasi atau destabilisasi pasar yang mungkin.

Implementasi:

Batas Ukuran Transaksi: Mekanisme AntiWhale umumnya menetapkan batasan pada ukuran atau nilai transaksi individual. Transaksi yang melebihi ambang batas yang ditetapkan mengakibatkan penerapan pembatasan seperti penolakan transaksi, biaya tinggi, atau mekanisme redistribusi lainnya.

Indikator:

Cari segmen kode yang memeriksa ukuran atau nilai transaksi, dan variabel status seperti maxTransactionAmount atau whaleThreshold, yang dapat menunjukkan keberadaan mekanisme AntiWhale. AntiWhale terutama memengaruhi pengguna dengan volume transaksi besar dan berfokus pada mengatasi konsentrasi token pada pemegang besar.

Perbedaan Utama antara Cooldown dan AntiWhale:

Parameter AntiWhale Cooldown
Parameter:Pengaruh AntiWhale:Memengaruhi secara utama pengguna dengan volume transaksi tinggi. Cooldown:Berlaku untuk semua pengguna, terlepas dari ukuran transaksi.
Parameter:Dinamika pasar AntiWhale:Terfokus pada menyelesaikan masalah konsentrasi. Cooldown:Bertujuan untuk mengatur frekuensi transaksi.
Parameter:Objektif Proyek AntiWhale:Tujuannya adalah untuk mendistribusikan token dan memastikan stabilitas pasar. Cooldown:Utamanya bertujuan untuk memastikan stabilitas pasar dan mencegah perdagangan yang cepat.

Skenario Pemanfaatan:

  1. Meminimalkan manipulasi pasar:
    Kedua mekanisme dapat digunakan bersama untuk mengatasi berbagai isu manipulasi pasar. Mekanisme AntiWhale membantu membatasi ukuran transaksi besar, sementara mekanisme Cooldown mencegah terjadinya beberapa transaksi dengan cepat dalam periode waktu singkat.

    Misalnya, satu entitas memiliki bagian signifikan dari total pasokan token. Tanpa mekanisme AntiWhale, entitas ini dapat melakukan transaksi besar yang dapat menyebabkan fluktuasi harga yang signifikan, mengakibatkan manipulasi pasar. Dengan membatasi ukuran maksimum atau frekuensi transaksi di satu alamat dalam periode waktu tertentu, mekanisme AntiWhale bertujuan untuk mencegah pemegang besar memiliki pengaruh yang tidak pantas terhadap pasar.

  2. Memastikan distribusi yang adil:
    Dalam konteks token baru atau penjualan token, mencegah sejumlah kecil peserta dari memperoleh bagian yang tidak proporsional dari total pasokan. Menetapkan batasan pada jumlah maksimum yang dapat dibeli oleh alamat individu selama penjualan token atau dalam periode tertentu memungkinkan distribusi yang lebih merata dari token di antara sejumlah peserta yang lebih besar.

  3. Menangani masalah likuiditas:
    Volume transaksi tinggi dari pemegang besar dapat mempengaruhi likuiditas dan mengganggu proses penemuan harga alami di bursa terdesentralisasi. Dengan membatasi kecepatan transaksi oleh pemegang besar, mekanisme AntiWhale membantu menjaga situasi likuiditas yang lebih stabil.

  4. Stabilisasi harga:
    Mencegah transaksi besar-besaran dan cepat dapat membantu menstabilkan harga. Dengan memberlakukan pembatasan AntiWhale, harga token memiliki lebih banyak waktu untuk beradaptasi dengan kondisi pasar antara transaksi.

  5. Mencegah front-running:
    AntiWhale dapat diimplementasikan untuk melawan front-running, di mana trader menggunakan informasi yang sensitif terhadap waktu untuk melakukan transaksi sebelum orang lain. Mekanisme AntiWhale dapat mengurangi keuntungan yang diperoleh dengan melakukan transaksi dengan cepat.

  6. Pengurangan serangan pinjaman kilat dan reentransi:
    AntiWhale dapat menambah lapisan pertahanan tambahan terhadap beberapa serangan pinjaman kilat dan reentransi dengan membatasi kecepatan eksekusi transaksi.

scenarios of utilization

Potensi risiko bagi pemegang token:

  1. Menetapkan batasan AntiWhale yang terlalu ketat dapat menjadi masalah bagi pengguna yang benar-benar membutuhkan transaksi besar.

  2. Ketergantungan berlebihan pada mekanisme AntiWhale dapat secara tidak sengaja mempromosikan sentralisasi jika diimplement asikan tanpa mempertimbangkan ekosistem lebih luas.

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

Menentukan apakah mekanisme pembatasan AntiWhale hadir dalam kontrak pintar adalah tugas penting, berikut adalah beberapa tips untuk membantu dalam hal ini:

  1. Pelajari dokumentasi kontrak: mulailah dengan meninjau dokumentasi dan spesifikasi kontrak.

  2. Analisis fungsi transfer: periksa fungsi yang bertanggung jawab untuk mentransfer token (transfer, transferFrom, dll.). Cari pernyataan kondisional yang memberlakukan pembatasan pada transaksi.

  3. Periksa perbandingan timestamp: cari kasus di mana kontrak membandingkan timestamp blok.

  4. Periksa variabel status: periksa variabel status yang dapat digunakan untuk menyimpan informasi terkait AntiWhale.

  5. Cari fungsi atau modifier yang terkait dengan perhitungan waktu, seperti block.timestamp, block.number, atau now.

  6. Cari parameter yang mengontrol perilaku AntiWhale: ini bisa menjadi maxTransferAmount, maxTxLimit, dan sejenisnya. Parameter-parameter ini sering kali diatur oleh pemilik kontrak atau melalui mekanisme manajemen transaksi individual.

  7. Analisis log event: periksa log event untuk peristiwa khusus. Implementasi akan dapat mencatat informasi yang relevan ketika transaksi dieksekusi, yang memberikan wawasan tentang proses pendinginan.

  8. Analisis logika khusus pengguna: jika pembatasan pengguna diimplementasikan dalam kontrak, periksa logika untuk menentukan batasan transfer individu. Logika ini mungkin mencakup atribut pengguna, saldo, atau kriteria lainnya.

  9. Tetap terinformasi: Tetap up to date dengan perkembangan terbaru dalam komunitas kami (saluran Telegram) dan praktik terbaik untuk deteksi penipuan (Blog dan saluran YouTube kami).

Berita baik: Scanner Keamanan kami berhasil menemukan (termasuk yang tersembunyi) serta menghitung pembatasan transfer (AntiWhale) dalam 90% kasus. Gunakan langganan premium kami dan lindungi dana Anda dari ancaman.

Meskipun mekanisme AntiWhale dirancang untuk mencegah manipulasi pasar dan memastikan distribusi token, penipu dapat menggunakan kemampuannya untuk menipu pengguna. Berikut adalah beberapa skenario dan tips yang mungkin untuk mengamankan investasi token dengan mekanisme AntiWhale di tempat.

Contoh 1: Pembatasan jumlah transaksi dengan periode pendinginan (Batas Jumlah Transaksi dengan 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;
    }

Contoh ini membatasi jumlah maksimum yang dapat ditransfer oleh satu alamat dalam periode waktu tertentu.

Ini termasuk mekanisme pendinginan yang memberikan periode tunggu antara transaksi di alamat yang sama. Array lastTransactionTimestamp melacak timestamp dari transaksi terakhir untuk setiap alamat.

Contoh 2: Pembatasan transaksi dinamis (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;
    }

Contoh ini menggunakan mekanisme dinamis di mana jumlah maksimum transaksi secara bertahap meningkat seiring waktu.

Parameter maxTransactionIncreaseRate mengontrol tingkat di mana jumlah maksimum transaksi meningkat. Array lastTransactionTimestamp melacak timestamp dari transaksi terakhir untuk setiap alamat.

pembatasan transaksi dinamis

Contoh 3: Pengecualian daftar putih (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");
        ...
    }

Contoh ini menggunakan pengecualian daftar putih untuk alamat tertentu dari pembatasan AntiWhale.

Alamat dalam array whitelistedAddresses dianggap terkecuali dari pembatasan jumlah transaksi maksimum. Array isWhitelisted menentukan apakah suatu alamat tertentu terdaftar dalam daftar putih.

Contoh 4: Batas transaksi bertingkat (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];
        }
    }

Contoh ini menerapkan batas transaksi bertingkat tergantung pada saldo alamat pengirim. Pengguna dengan saldo lebih rendah memiliki batas transaksi yang lebih tinggi, dan pengguna dengan saldo lebih tinggi memiliki batas transaksi yang lebih rendah.

Fungsi getTransactionLimit menentukan batas transaksi yang sesuai berdasarkan saldo pengguna.

Contoh 5: Biaya pada transaksi besar (Tax on Large Transactions)

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

Pada contoh ini, biaya dikenakan pada transaksi yang melebihi jumlah maksimum transaksi.

Tarif komisi (TaxRate) menentukan persentase dari jumlah transaksi. Biaya dikurangkan dan kemudian jumlah neto transfer diproses.

Contoh 6: Batas bertingkat (Multi-Level Transaction Limits)

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

Contoh ini menerapkan beberapa tingkatan batas transaksi, di mana batas yang berbeda diterapkan tergantung pada jumlah transaksi.

Ini memungkinkan penyetelan batas transaksi pada tingkat granularitas yang berbeda untuk volume token yang berbeda.

Contoh 7: Batas transaksi dinamis berdasarkan saldo (Dynamic Transaction Limits based on Token Balance)

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

Contoh ini secara dinamis menghitung jumlah maksimum transaksi sebagai persentase dari Total Pasokan. Parameter maxTransactionPercentage menentukan persentase yang diizinkan untuk satu transaksi.

batas transaksi dinamis

Contoh 8: Batasan yang tergantung pada waktu (Time-Dependent Transaction Limits)

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

Pada contoh ini, diterapkan pembatasan transaksi yang tergantung pada waktu, memungkinkan transaksi hanya dalam rentang waktu tertentu.

Parameter startTime dan endTime mendefinisikan periode di mana transaksi diizinkan.

Contoh 9: Pajak progresif (Progressive Taxation)

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

Contoh ini menggambarkan mekanisme pajak progresif, di mana pajak (biaya) dikenakan pada transaksi yang melebihi jumlah maksimum tertentu.

Tingkat pajak (biaya) dapat disesuaikan dari waktu ke waktu atau berdasarkan kondisi tertentu.

Contoh 10: Batasan transaksi berdasarkan saldo pemegang token (Weighted Transaction Limits based on Token Holders' Balances)

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

Contoh ini menerapkan batasan transaksi berdasarkan jumlah total transaksi dan saldo individu pemegang token.

Penetapan userTransactionLimit memungkinkan Anda untuk menetapkan batasan personal berdasarkan saldo alamat tertentu.


Kami harap contoh-contoh ini membantu Anda memahami mekanisme AntiWhale dalam kontrak pintar.

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

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

Salam, tim Lotus Market.

All posts

Connect to a wallet

Metamask