Meteora DLMM — Yield Farming di Solana

published:

tags: [ #solana, #defi, #dlmm, #meteora, #yield-farming, #liquidity ]

Dynamic Liquidity Market Maker (DLMM) adalah protokol AMM generasi terbaru di Solana dari Meteora. Bedanya sama AMM klasik (Uniswap, Raydium) yang nyebarin liquidity di kurva harga infinite, DLMM pakai sistem bin-based — liquidity hanya terkonsentrasi di rentang harga tertentu yang lo tentuin sendiri.

Ini bikin capital efficiency jauh lebih tinggi. Lo bisa dapetin yield 1-3% per bulan di pool stablecoin dengan modal kecil ($50-$100), sesuatu yang mustahil di AMM tradisional karena liquidity lo bakal tersebar terlalu tipis.

Kenapa Solana?

  • Gas fee murah — ~$0.01-0.02 per transaksi, cocok buat bot/automation
  • Finality cepat — confirm dalam detik
  • Ekosistem DeFi mature — Jupiter, Meteora, Kamino, Orca all mature
  • Liquidity dalem — pool stablecoin USDC/USDT punya volume jutaan dolar

Kenapa USDC & USDT?

Pool USDC/USDT adalah stablecoin pair — kedua token dipatok ke USD. Ini berarti minimal impermanent loss (IL). Cocok buat:

  • Yield konsisten tanpa risiko harga
  • Spot strategy dengan range sempit (±8 bin = ±0.08%)
  • Fee accumulation dari swap volume (arbitrageur nyari arbitrase USDC/USDT)

SOL dipake buat gas fee — setiap transaksi butuh ~0.001-0.005 SOL. Cukup sisain 0.1-0.5 SOL.

The Setup

Wallet

  • Address: 5VdJzgqRcFaFjs9DNTxHYbxrjd8y3bsCGHX68LNfBjqz
  • Keypair: ~/.config/solana/id.json
  • Fund via Indodax (support Solana network) → swap via Jupiter

Pool

  • Pool: ARwi1S4DaiTG5DX7S4M4ZsrXqpMD1MrTmbu9ue2tpmEq
  • Token X: USDC (EPjFWdd5...)
  • Token Y: USDT (Es9vMFrza...)
  • Active bin: #6 (price ~$1.0006)
  • Bin step: 1 (0.01% per bin)

Strategy: Spot ±8 bin

  • Range: #-2 sampai #14
  • Capital efficiency tinggi — liquidity cuma di range sempit deket harga pasar
  • Auto rebalance kalo harga keluar range

Position

  • Position: DzEreXQnYmjkiA8GtzZ7JhtdW5XCvvqUzWfLbcvc8uuM
  • Deposited: ~$39.61 USDC + $30.24 USDT
  • Status: ✅ IN RANGE

Scripts (~/meteora-bot/)

ScriptFungsi
monitor.jsCek wallet, pool, position, fees
create-position.jsFirst-time LP deposit
rebalance.jsRemove + create ulang posisi
swap-usdc-to-usdt.jsSwap USDC→USDT via Jupiter

Dashboard Web

Flask app di port 5050 — monitoring realtime:

  • Wallet balance (SOL, USDC, USDT)
  • Pool info (active bin, price)
  • Position (range, in/out, fees)
  • Bin range visualization
  • Total value estimasi dalam IDR

Auto-start via systemd user service.

Key Learnings

1. DNS Block

quote-api.jup.ag gak resolve (AdGuard di CasaOS). Solusi: pake @jup-ag/api npm package.

2. Borsh BN.js Bug

Node.js 22 + nested @coral-xyz/borsh di DLMM SDK throw src.toArrayLike is not a function. Fix: patch BNLayout.encode dengan guard konversi manual.

3. SDK Pattern

initializePositionAndAddLiquidityByStrategy return Transaction (bukan {txId}). Parameter user pake PublicKey, totalXAmount/totalYAmount harus BN.js.

4. Cron Monitoring

Setup cron tiap 6 jam via Hermes — notif Telegram kalo position out of range.

Total Investasi

ItemUSDIDR (≈)
LP Position~$69.85~Rp1.255.000
SOL (gas)~$31.57 (0.42 SOL)~Rp567.000
Total~$101.42~Rp1.822.000

Referensi