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

# CLI'dan Swap Yapma

> CPMM swap'i fiyatlandıran ve yürüten yapıştırılabilir Node script'i. Dört ortam değişkenini yapılandırın ve çalıştırın.

<Info>
  **Bu sayfa yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.**

  [İngilizce sürümü görüntüle →](/quick-start/swap-from-cli)
</Info>

<Info>
  **Bunu ne yapar?** CPMM pool'u RPC'den yükler, %0,5 slippage ile swap'i fiyatlandırır, işlemi derler, anahtar çiftinizle imzalar ve gönderir. Başından sonuna kadar \~30 satırda.
</Info>

## Kurulum

[Hızlı başlangıç önkoşullarını](/tr/quick-start) okuduğunuzdan ve `RPC_URL`, `KEYPAIR` ve bağımlılıkları yüklediğinizden emin olun.

## Script

`swap.mjs` olarak kaydedin:

```ts theme={null}
// swap.mjs
import { Connection, Keypair, PublicKey } from "@solana/web3.js";
import { Raydium, TxVersion, CurveCalculator } from "@raydium-io/raydium-sdk-v2";
import BN from "bn.js";
import fs from "node:fs";

// ── Config from env ──────────────────────────────────────────────
const RPC_URL    = process.env.RPC_URL    ?? "https://api.mainnet-beta.solana.com";
const KEYPAIR    = process.env.KEYPAIR    ?? `${process.env.HOME}/.config/solana/id.json`;
const POOL_ID    = process.env.POOL_ID;     // required, base58
const INPUT_MINT = process.env.INPUT_MINT;  // required, base58
const AMOUNT_RAW = process.env.AMOUNT_RAW;  // required, integer in raw units (e.g. 1_000_000_000 for 1 SOL)

if (!POOL_ID || !INPUT_MINT || !AMOUNT_RAW) {
  console.error("Set POOL_ID, INPUT_MINT, AMOUNT_RAW env vars.");
  process.exit(1);
}

// ── Setup ────────────────────────────────────────────────────────
const connection = new Connection(RPC_URL, "confirmed");
const owner = Keypair.fromSecretKey(
  new Uint8Array(JSON.parse(fs.readFileSync(KEYPAIR, "utf8"))),
);
const raydium = await Raydium.load({
  owner,
  connection,
  cluster: "mainnet",
  disableFeatureCheck: true,
  blockhashCommitment: "finalized",
});

// ── Load pool ────────────────────────────────────────────────────
const { poolInfo, poolKeys, rpcData } =
  await raydium.cpmm.getPoolInfoFromRpc(new PublicKey(POOL_ID));

const baseIn = poolInfo.mintA.address === INPUT_MINT;

// ── Quote ────────────────────────────────────────────────────────
const inputAmount = new BN(AMOUNT_RAW);
const swapResult  = CurveCalculator.swap(
  inputAmount,
  baseIn ? rpcData.baseReserve : rpcData.quoteReserve,
  baseIn ? rpcData.quoteReserve : rpcData.baseReserve,
  rpcData.configInfo.tradeFeeRate,
);

console.log(`Quote: ${inputAmount.toString()} -> ${swapResult.destinationAmountSwapped.toString()}`);
console.log(`Fee:   ${swapResult.tradeFee.toString()}`);

// ── Build and execute ────────────────────────────────────────────
const { execute } = await raydium.cpmm.swap({
  poolInfo,
  poolKeys,
  inputAmount,
  swapResult,
  slippage: 0.005, // 0.5%
  baseIn,
  txVersion: TxVersion.V0,
  computeBudgetConfig: {
    units: 250_000,
    microLamports: 50_000,
  },
});

const { txId } = await execute({ sendAndConfirm: true });
console.log(`Swap landed: https://solscan.io/tx/${txId}`);
```

## Çalıştırın

Likiditeye sahip olduğunuz herhangi bir CPMM pool'u seçin. Canonical SOL/USDC CPMM pool'u kullanarak örnek:

```bash theme={null}
export POOL_ID="<CPMM pool ID yapıştırın — Raydium UI'ın Pools sekmesinde bulun>"
export INPUT_MINT="So11111111111111111111111111111111111111112"
export AMOUNT_RAW="10000000"   # 0.01 SOL

node swap.mjs
```

Beklenen çıktı:

```
Quote: 10000000 -> 1640000
Fee:   25000
Swap landed: https://solscan.io/tx/4Z9...
```

## Ne oldu?

1. **`Raydium.load`** SDK'yı başlattı — global yapılandırmayı getirdi, cüzdan bağlamınızı kurdu.
2. **`getPoolInfoFromRpc`** canlı pool durumunu doğrudan RPC'den çekti (API önbelleğinden değil). Yüksek değerli swaplar için her zaman güncel durumu isteyebilirsiniz.
3. **`CurveCalculator.swap`** havuzun ücretinin net olarak sabit ürün çıktısını hesapladı. Bu, programın zincir üzerinde çalıştırdığı matematikle aynıdır; böylece fiyatlandırmaları zincir dışında ve zincir üzerinde karşılaştırabilirsiniz.
4. **`raydium.cpmm.swap`** işlemi V0 biçimiyle derled (adres arama tabloları etkinleştirildi) ve açık hesaplama bütçesi yapılandırması ekledi. Hesaplama bütçesi bahşişi, işlemi meşgul dönemlerde iniş yaptırmaya yardımcı olur.
5. **`execute({ sendAndConfirm: true })`** imzaladı, gönderdi ve onaylanmayı bekledi.

## Genel hatalar

* **`Pool not found`** — Yanlış `POOL_ID` veya yanlış kümeye işaret ediyorsunuz (mainnet pool ID'si devnet RPC'ye karşı, vb.).
* **`Insufficient funds for transaction`** — Cüzdanınızda swap girişi + ücretler + ATA kirası için yeterli SOL yok.
* **`Slippage tolerance exceeded`** — Havuzun fiyatı fiyatlandırma ve yürütme arasında değişti. Yeniden çalıştırın; veya `slippage` parametresini artırın; veya her zaman rezervleri yeniden getiren SDK'nın `computeAmountOut`'unu kullanın.
* **`Token account not initialized`** — Çıkış token'ının ATA yoktu ve örtük-oluştur talimatı inişe geçti ama başka bir nedenle başarısız oldu; cüzdanınızın SOL bakiyesini kontrol edin ve yeniden deneyin.

## Sonraki adımlar

* [`sdk-api/typescript-sdk`](/tr/sdk-api/typescript-sdk) — tam SDK başvurusu.
* [`products/cpmm/instructions`](/tr/products/cpmm/instructions) — swap talimatının zincir üzerinde nasıl göründüğü.
* [`integration-guides/priority-fee-tuning`](/tr/integration-guides/priority-fee-tuning) — üretim için `computeBudgetConfig` boyutlandırma.
