> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# TypeScript SDK

> End-to-end @raydium-io/raydium-sdk-v2 — instalasi, empat modul facade, pembuatan transaksi, dan perangkap umum yang dijumpai setiap integrator baru.

<Info>
  **Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.**

  [Lihat versi bahasa Inggris →](/sdk-api/typescript-sdk)
</Info>

## Instalasi

```bash theme={null}
npm install @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
# atau
pnpm add @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
```

SDK ditulis dalam TypeScript dan dilengkapi `.d.ts` bersama artefak JS-nya. Persyaratan minimum: Node 18+, TypeScript 5.0+, `moduleResolution: "bundler"` atau `"node16"`.

## Inisialisasi

Titik masuk adalah `Raydium.load`:

```ts theme={null}
import { Raydium } from "@raydium-io/raydium-sdk-v2";
import { Connection, Keypair, clusterApiUrl } from "@solana/web3.js";

const connection = new Connection(process.env.RPC_URL ?? clusterApiUrl("mainnet-beta"));
const owner      = Keypair.fromSecretKey(/* ... */);

const raydium = await Raydium.load({
  owner,
  connection,
  cluster: "mainnet",           // "mainnet" | "devnet"
  disableFeatureCheck: true,    // lewati API deteksi fitur SDK saat startup
  blockhashCommitment: "confirmed",
});
```

`Raydium.load` bersifat async karena ia mengambil muatan `/config` kecil dari `api-v3.raydium.io` saat startup (yang mencantumkan akun `AmmConfig` saat ini, tier biaya, dll). Tetapkan `disableFeatureCheck: true` di lingkungan offline; Anda harus memberikan nilai tersebut secara manual ke beberapa builder.

## Empat modul facade

Setelah dimuat, objek `raydium` mengekspos empat modul facade, satu per permukaan produk:

```ts theme={null}
raydium.cpmm       // Pool CPMM: createPool, addLiquidity, withdrawLiquidity, swap, ...
raydium.clmm       // Pool CLMM: createPool, openPositionFromBase, increasePositionFromBase,
                   //            decreaseLiquidity, harvestAllRewards, swap, ...
raydium.liquidity  // Pool AMM v4: computeAmountOut, swap, addLiquidity, removeLiquidity, ...
raydium.farm       // Farm v3/v5/v6: deposit, withdraw, harvestAllRewards, create, setRewards
raydium.launchpad  // LaunchLab: createLaunchpad, buyExactIn, sellExactIn, graduate, ...
raydium.trade      // Routing multi-pool: quotes, route-execution (beta di 0.2.41)
raydium.token      // Helpers: ambil token list, metadata, pembuatan ATA
```

(Ya, lima facade secara total — "empat" adalah cara Raydium mengelompokkannya secara publik, dengan `trade` dan `token` sebagai utilitas pendukung.)

## Builder transaksi

Setiap fungsi mutasi mengembalikan builder daripada mengeksekusi segera:

```ts theme={null}
const { execute, builder, transaction, innerTransactions, extInfo } =
  await raydium.cpmm.addLiquidity({
    poolInfo,
    amountInA,
    amountInB,
    slippage: 0.005,
    txVersion: TxVersion.V0,
  });
```

Bidang yang dikembalikan:

* **`execute`** — fungsi kenyamanan yang menandatangani + mengirim. Setara dengan `builder.execute`.
* **`builder`** — instans `TxBuilder` dengan semua instruksi dan penanda tangan terakumulasi. Panggil `.build()` untuk mendapatkan `VersionedTransaction[]`; berguna saat Anda perlu menyuntikkan instruksi sendiri atau menandatangani dengan penanda tangan eksternal.
* **`transaction` / `innerTransactions`** — larik instruksi mentah. Gunakan saat membangun transaksi multi-program yang disusun.
* **`extInfo`** — extras khusus produk. Misalnya, `createPool` mengembalikan `extInfo.poolId`; `createLaunchpad` mengembalikan PDA status peluncuran baru.

`txVersion` mengontrol format transaksi legacy vs V0. V0 (address lookup tables) adalah rekomendasi default — memungkinkan swap yang lebih besar muat dalam satu transaksi.

### Mengapa async builders?

Hampir setiap builder secara internal mengambil state on-chain: info pool (untuk quotes), kepemilikan program token (untuk Token-2022 vs routing SPL), rent-exemption akun (untuk pembuatan ATA), dll. SDK menyimpan cache secara agresif tetapi panggilan pertama untuk pool baru melibatkan round-trip RPC. Pertahankan instans `raydium` yang hidup lama untuk menghindari pengambilan ulang.

## Penambahan modul CLMM (rilis terbaru)

Facade CLMM mendapatkan permukaan untuk fitur dynamic-fee baru, single-sided-fee, dan limit-order:

* **`raydium.clmm.createCustomizablePool`** — superset dari `createPool` yang menerima `collectFeeOn`, `enableDynamicFee`, dan `dynamicFeeConfigId`. Gunakan ini untuk pool baru apa pun yang memerlukan knob baru; `createPool` klasik terus bekerja untuk pool dengan biaya default.
* **`raydium.clmm.openLimitOrder`** — buka limit order single-tick pada pool yang mendukungnya. Mengambil `poolInfo`, `poolKeys`, `limitOrderConfig` (dari `/main/clmm-limit-order-config`), `inputMint`, `inputAmount`, dan `tick` target.
* **`raydium.clmm.increaseLimitOrder` / `decreaseLimitOrder`** — sesuaikan bagian unfilled dari order yang ada. Menurun kembali pada order fully-filled dengan `InvalidOrderPhase`.
* **`raydium.clmm.settleLimitOrder` / `settleAllLimitOrder`** — pindahkan output yang terisi ke ATA pemilik. Baik pemilik order maupun penjaga `limit_order_admin` pool dapat memanggilnya.
* **`raydium.clmm.closeLimitOrder` / `closeAllLimitOrder`** — tutup order yang fully-settled untuk memulihkan rent.
* **`raydium.api.getClmmDynamicConfigs()` / `getClmmLimitOrderConfigs()`** — helper REST yang mengenai endpoint `/main/clmm-dynamic-config` dan `/main/clmm-limit-order-config` baru.

Reorganisasi kecil juga memindahkan `utils/` ke `libraries/`. Kode yang diimpor dari `@raydium-io/raydium-sdk-v2/utils/...` harus beralih ke `@raydium-io/raydium-sdk-v2/libraries/...`. Barrel paket tingkat atas tidak berubah, jadi sebagian besar pengguna tidak pernah melihat penggantian nama.

Panduan walkthrough TypeScript end-to-end tinggal di [`products/clmm/code-demos`](/id/products/clmm/code-demos).

## Perangkap umum

### 1. Ketidaksesuaian cluster

Konfigurasi startup SDK spesifik cluster. Menggabungkan `cluster: "mainnet"` dengan `Connection` devnet menyebabkan mis-routing senyap: SDK membuat quote terhadap `AmmConfig` mainnet tetapi mengirim ke devnet. Selalu berikan keduanya.

### 2. Lupa pra-membuat ATA

Pada interaksi pertama dengan mint, Associated Token Account pengguna mungkin tidak ada. SDK secara otomatis menambahkan instruksi `AssociatedTokenAccount::create` saat mendeteksi ATA yang hilang, yang mengorbankan sejumlah kecil rent. Jika dompet Anda rendah SOL ini akan gagal senyap. Periksa dan danai sebelum mencoba ulang.

### 3. `poolInfo` basi

`poolInfo` adalah snapshot yang di-cache. Jika state pool telah berubah sejak Anda mengambilnya (perdagangan besar memindahkan harga, katakanlah), `minAmountOut` swap mungkin dihitung terhadap state lama dan mendarat di bawah amount-out on-chain, reverting. Ambil ulang `poolInfo` segera sebelum membangun transaksi bernilai tinggi, atau gunakan `computeAmountOut` SDK yang me-query ulang reserves.

### 4. Priority fees

SDK tidak menambahkan compute-unit prices secara default. Di jendela volume tinggi (peluncuran pool baru, acara meme-coin) ini berarti transaksi Anda bersaing dengan banyak yang lain dan mungkin tidak landing. Berikan `computeBudgetConfig` eksplisit:

```ts theme={null}
const { execute } = await raydium.cpmm.swap({
  poolInfo,
  inputAmount: new BN(...),
  swapResult: ...,
  slippage: 0.005,
  txVersion: TxVersion.V0,
  computeBudgetConfig: {
    units: 250_000,          // Batas CU
    microLamports: 50_000,   // Priority fee per CU
  },
});
```

Lihat [`integration-guides/priority-fee-tuning`](/id/integration-guides/priority-fee-tuning) untuk panduan sizing.

### 5. Toleransi slippage harus sesuai tipe pool

CPMM dan AMM v4 adalah matematik CPMM (dampak rendah pada perdagangan normal). CLMM adalah piecewise (dampak melompat pada tick crossings). Jika Anda menyalin toleransi slippage 0,5% dari contoh CPMM ke swap CLMM yang melintasi beberapa tick, transaksi kemungkinan akan revert. `computeAmountOut` SDK mengembalikan `priceImpact`; ukuran toleransi Anda di atasnya.

### 6. `BN` vs `number`

Semua bidang amount dalam SDK adalah instans `bn.js` `BN` — tidak pernah JavaScript `number`. Konversi nilai amount melalui `.toNumber()` secara senyap memotong di `2^53`; untuk nilai apa pun di atas \~9 kuadriliun (tidak jarang pada mint 9-decimal), ini menghasilkan hasil yang salah. Pertahankan semuanya dalam `BN` hingga render UI final.

## Kebijakan versioning

* `@raydium-io/raydium-sdk-v2` adalah satu-satunya SDK yang Raydium pertahankan. Semua docs, demos, dan panduan integrasi menargetkannya.
* Paket v1 yang lebih lama (`@raydium-io/raydium-sdk`) ada di npm untuk alasan historis. Maintenance berakhir setelah CPMM dan LaunchLab diluncurkan (v1 tidak pernah mendapatkan dukungan untuk keduanya), dan tidak ada rilis v1 sejak 2024. Perlakukan v1 sebagai end-of-life: jangan gunakan untuk kode baru, dan migrasikan integrasi v1 yang tersisa ke v2.
* SDK v2 adalah pre-1.0. Perubahan breaking antara rilis minor 0.x adalah mungkin; pin versi yang telah Anda verifikasi dan periksa catatan rilis GitHub saat upgrade.

## Upgrade

Saat upgrade antara versi minor SDK:

1. Periksa kembali tipe return dari setiap panggilan mutasi — perubahan shape (misalnya `extInfo`) mendarat sering.
2. Regenerasi signature pengambilan `poolInfo` — bidang mungkin telah diganti nama.
3. Verifikasi ulang penanganan slippage Anda; SDK telah bergeser antara perilaku auto-bound dan opt-in bound di seluruh rilis.
4. Jika Anda menggunakan `raydium.trade` (routing), verifikasi ulang bentuk route — ini adalah bagian paling tidak stabil dari permukaan.

## Mendapatkan bantuan

Untuk pertanyaan SDK dan API:

* **GitHub issues** — file di [github.com/raydium-io/raydium-sdk-V2/issues](https://github.com/raydium-io/raydium-sdk-V2/issues) untuk bug dan permintaan fitur. Tim Raydium memantau secara aktif.
* **Discord** — saluran `#dev-support` di [discord.gg/raydium](https://discord.gg/raydium) untuk bantuan sinkron.
* **Telegram** — developer chat terhubung dari [raydium.io](https://raydium.io) (hindari grup Telegram yang tidak terverifikasi).

Untuk masalah keamanan, jangan posting di saluran publik — lihat [`security/disclosure`](/id/security/disclosure).

## Pointers

* [`sdk-api/rest-api`](/id/sdk-api/rest-api) — komplemen HTTP ke SDK.
* [`sdk-api/trade-api`](/id/sdk-api/trade-api) — transaksi swap yang dibangun server.
* [`sdk-api/anchor-idl`](/id/sdk-api/anchor-idl) — regenerasi klien langsung dari program IDL.
* [`sdk-api/python-integration`](/id/sdk-api/python-integration) — ekuivalen Python melalui `solana-py`.
* [`integration-guides/priority-fee-tuning`](/id/integration-guides/priority-fee-tuning) — sizing `computeBudgetConfig`.

Sumber:

* [Raydium SDK v2 source](https://github.com/raydium-io/raydium-sdk-V2)
* Catatan rilis Raydium SDK.
