Tekan ESC untuk menutup

Cara Buat Bot JIT: Arsitektur Rust & Smart Contract Atomik

Ini adalah artikel ketiga dalam seri kami “Predator di Pool: Seni dan Matematika Likuiditas JIT.” Sekarang kita masuk ke bagian teknik: bagaimana mengubah rumus matematika menjadi kode yang berjalan lebih cepat daripada kedipan mata.

Pada tahun 2026, likuiditas JIT bukan lagi pertarungan ide, melainkan infrastruktur. Jika bot Anda ditulis dengan Python dan berkomunikasi dengan node publik melalui HTTP, Anda tidak hanya akan kalah — Anda bahkan tidak akan menyadari ketika keuntungan Anda diambil.

1. Tumpukan Teknologi: Mengapa Rust Mendominasi

Di dunia MEV, pertarungan terjadi pada mikrodetik latensi.

  • Bahasa: Rust. Penggunaan pustaka Alloy (pengganti ethers-rs) telah menjadi standar industri. Alloy memungkinkan bekerja dengan tipe data Ethereum tanpa alokasi memori yang tidak perlu dan memberikan serialisasi/deserialisasi JSON-RPC yang sangat cepat.
  • Konektivitas: IPC/WebSockets. Bot tidak menggunakan HTTP. Mereka terhubung ke node lokal melalui IPC (Inter-Process Communication) untuk meminimalkan overhead jaringan.
  • Node Sendiri (Geth/Reth): Pemain papan atas menggunakan Reth (Rust Ethereum) karena memungkinkan mesin disesuaikan untuk simulasi transaksi paralel.

2. Smart Contract: Atomik atau Mati

Agar serangan JIT aman, operasi “Masuk ke Pool” dan “Keluar dari Pool” harus dihubungkan dengan logika yang kuat. Jika Anda menambahkan likuiditas tetapi gagal menariknya dalam blok yang sama, Anda berisiko mengalami kerugian Impermanent Loss yang besar.

Bot menggunakan Executor Contract. Tugasnya adalah menerima perintah dari skrip off-chain dan mengeksekusi serangkaian panggilan ke NonfungiblePositionManager (NFPM) Uniswap v3.

Contoh arsitektur kontrak (Solidity 0.8.x):

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface INonfungiblePositionManager {
    struct MintParams {
        address token0;
        address token1;
        uint24 fee;
        int24 tickLower;
        int24 tickUpper;
        uint256 amount0Desired;
        uint256 amount1Desired;
        uint256 amount0Min;
        uint256 amount1Min;
        address recipient;
        uint256 deadline;
    }
    function mint(MintParams calldata params) external returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
    function decreaseLiquidity(uint256 tokenId, uint128 liquidity, uint256 amount0Min, uint256 amount1Min, uint256 deadline) external;
    function collect(uint256 tokenId, address recipient, uint128 amount0Max, uint128 amount1Max) external;
}
contract JITExecutor {
    address private immutable owner;
    INonfungiblePositionManager public immutable nftManager;
    constructor(address _nftManager) {
        owner = msg.sender;
        nftManager = INonfungiblePositionManager(_nftManager);
    }
    // Fungsi utama: dipanggil oleh bot untuk mengeksekusi JIT dalam satu langkah
    function performJit(
        INonfungiblePositionManager.MintParams calldata mintParams
    ) external {
        require(msg.sender == owner, "Unauthorized");
        // 1. Berikan kontrak token (biasanya token sudah ada atau melalui Flash Loan)
        
        // 2. Tambahkan likuiditas (Mint)
        (uint256 tokenId, uint128 liquidity, , ) = nftManager.mint(mintParams);
        // CATATAN: Dalam bundle Flashbots klasik, kontrak ini
        // akan selesai eksekusi di sini, dan penarikan akan dilakukan di transaksi kedua.
        // Alternatifnya, jika menggunakan router khusus, semuanya bisa dilakukan dalam satu langkah.
    }
    
    // Fungsi untuk langsung mengambil keuntungan
    function withdrawJit(uint256 tokenId, uint128 liquidity) external {
        nftManager.decreaseLiquidity(tokenId, liquidity, 0, 0, block.timestamp);
        nftManager.collect(tokenId, msg.sender, type(uint128).max, type(uint128).max);
    }
}

3. Flashbots Bundles: Menyatukan Realitas

Transaksi bot JIT harus mengelilingi transaksi korban. Ini dilakukan menggunakan mekanisme Bundles.

Bot mengirim array transaksi ke Flashbots (atau MEV relay lain seperti BeaverBuild atau Titan):

  • [Tx_Mint] — Transaksi penambahan likuiditas Anda.
  • [Tx_Target] — Transaksi pengguna dari mempool (yang Anda tangkap).
  • [Tx_Burn] — Transaksi penarikan Anda.

Detail yang jarang diketahui: Untuk menghemat gas, bot canggih kadang melewatkan Burn di blok yang sama jika mereka yakin harga tidak akan keluar dari tick di blok berikutnya. Tapi ini sudah menjadi risiko “LP pasif”. Predator JIT sejati selalu menutup posisi di blok $N$.

4. Logika Bot Off-chain (Off-chain Engine)

Bot Rust berjalan dalam loop tak terbatas:

  • Streaming mempool: mendengarkan newPendingTransactions.
  • Simulasi: Untuk setiap transaksi besar, bot melakukan “eksekusi virtual” melalui eth_call atau revm (Rust EVM) untuk memperkirakan fee yang diperoleh.
  • Generasi bundle: Jika profit > 0, paket dibuat.
  • Bidding: Bot menambahkan coinbase.transfer() — suap untuk validator.

Info insider: Pada 2026, tip untuk validator bisa mencapai 99% dari keuntungan bot. Bot bersaing untuk 1% sisa profit bersih, karena dengan volume jutaan dolar, 1% saja sudah jumlah besar.

5. Tips Praktis: Menggunakan multicall

Untuk efisiensi maksimal, gunakan logika multicall dalam kontrak Anda. Ini memungkinkan approve, mint, decreaseLiquidity, dan collect dieksekusi dalam satu transaksi jika menggunakan dana sendiri, bukan Flash Loans. Menghemat sekitar 40–60k gas untuk panggilan berulang.

 

Ringkasan Artikel

Arsitektur bot JIT adalah puncak rekayasa smart contract. Anda membuat likuiditas “sekali pakai” yang hanya ada dalam hitungan detik.

Di artikel berikutnya: kita masuk ke “arsenal berat”. Bagaimana melakukan serangan JIT tanpa memiliki jutaan sendiri? Kita akan membahas Flash-JIT dan penggunaan Flash Loans untuk merebut 99,9% likuiditas di pool raksasa.


Mastery Likuiditas JIT: Panduan Lengkap MEV di Uniswap: Bagian 3 dari 5

Astra EXMON

Astra is the official voice of EXMON and the editorial collective dedicated to bringing you the most timely and accurate information from the crypto market. Astra represents the combined expertise of our internal analysts, product managers, and blockchain engineers.

...

Sampaikan pemikiran Anda

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *