Ana içeriğe atla

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.

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 →
Sürüm bilgisi.
  • SDK: @raydium-io/raydium-sdk-v2@0.2.42-alpha
  • Cluster: Solana mainnet-beta
  • Stable AMM program ID: 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h (bkz reference/program-addresses)
  • Son doğrulama: 2026-04
SDK’nın liquidity modülü Stable AMM havuzlarını yerel olarak destekler. Stable havuzlar ApiV3PoolInfoStandardItem üzerinde version: 5 (veya pooltype: "StablePool") olarak görünür; AMM v4 (version: 4) sabit çarpım havuzları için kullanılan aynı addLiquidity / removeLiquidity / swap yardımcıları bunlar için de çalışır — SDK türü tespit eder ve doğru talimatları otomatik olarak gönderir. Zincir dışı sabit eğri matematikleri src/raydium/liquidity/stable.ts dosyasında bulunur.

Kurulum

npm install @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
import { Raydium, TxVersion } from "@raydium-io/raydium-sdk-v2";
import { Connection, Keypair, clusterApiUrl } from "@solana/web3.js";
import BN from "bn.js";
import bs58 from "bs58";

const connection = new Connection(clusterApiUrl("mainnet-beta"));
const owner = Keypair.fromSecretKey(bs58.decode(process.env.PRIVATE_KEY!));

const raydium = await Raydium.load({
  connection,
  owner,
  cluster: "mainnet",
  // İsteğe bağlı: `liquidity/stable.ts` dosyasındaki alıntı
  // yardımcılarını doğrudan çağırmayı planlıyorsanız sabit eğri model
  // düzenini yükleyin. Havuz düzeyinde swap / add / remove
  // bunu sizin için tembel olarak yapabilir, bu nedenle çoğu arayanlar
  // bu adımı atlayabilir.
});

// Tek seferlik: zincir dışı sabit eğri yardımcıları tarafından
// kullanılan zincir üstü model veri düzenini önceden yükleyin. Yalnızca
// getStablePrice / getDxByDyBaseIn / getDyByDxBaseIn öğelerini doğrudan
// çağırırsanız gerekli. addLiquidity / removeLiquidity / swap buna ihtiyaç duymaz.
await raydium.liquidity.initLayout();

Stable havuzunu tanımlama

ApiV3PoolInfoStandardItem üzerinde iki eşdeğer sinyal:
const isStable =
  pool.version === 5 ||
  pool.pooltype.includes("StablePool"); // SDK bunu dahili olarak kontrol eder

// Alternatif olarak, program ID'ye göre:
const STABLE_AMM_PROGRAM_ID = "5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h";
const isStableByProgram = pool.programId === STABLE_AMM_PROGRAM_ID;
Hem AMM v4 (version: 4, sabit çarpım) hem de Stable AMM (version: 5) SDK’daki aynı LiquidityModule API’sinden geçer. Dahili olarak modül şu durumlara gönderir:
  • InstructionType.AmmV4AddLiquidity / AmmV4RemoveLiquidity v4 havuzları için
  • InstructionType.AmmV5AddLiquidity / AmmV5RemoveLiquidity v5 (Stable) havuzları için
Havuzun programId (havuz anahtarları ile döndürülen) SDK’ya hangi programa CPI yapacağını söyler; bunu hardcode etmeniz gerekmez.

Mint çiftine göre havuz bulma

import { PublicKey } from "@solana/web3.js";

// Örnek olarak kullanmak için iki yaygın mint
const mintA = new PublicKey("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"); // USDT
const mintB = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"); // USDC

const pools = await raydium.api.fetchPoolByMintPair({
  mint1: mintA.toBase58(),
  mint2: mintB.toBase58(),
});

const stablePool = pools.find(
  (p) => p.version === 5 || p.pooltype.includes("StablePool"),
);

if (!stablePool) {
  throw new Error("Bu mint çifti için Stable havuz yoktur");
}

console.log("Stable havuz id:", stablePool.id);
console.log("Stable havuz programId:", stablePool.programId);
console.log("TVL:", stablePool.tvl);
Mint çiftinin hem v4 (sabit çarpım) havuzu hem de v5 (stable) havuzu varsa, yanıt her ikisini de içerir — akışınızın ihtiyaç duyduğu seçeneği seçin veya her ikisini de AMM Routing programına teslim edin ve en iyi rotayı seçmesine izin verin.

Stable havuz aracılığıyla takas yapma

LiquidityModule.swap akışı v4 havuzları ile aynı şekildedir — sadece v5 havuz nesnesi geçirin:
import { Percent, TokenAmount, toToken } from "@raydium-io/raydium-sdk-v2";

const inputAmount = new TokenAmount(toToken(stablePool.mintA), 1_000_000); // 1 USDT
const slippage = new Percent(50, 10_000); // 0.5%

// SDK'nın sabit eğri yardımcılarını dahili olarak kullanarak beklenen çıktıyı hesapla.
const { amountOut, minAmountOut } = raydium.liquidity.computeAmountOut({
  poolInfo: stablePool,
  amountIn: inputAmount,
  mintIn:  stablePool.mintA.address,
  mintOut: stablePool.mintB.address,
  slippage,
});

console.log("Beklenen çıktı:", amountOut.toSignificant());
console.log("Minimum çıktı:", minAmountOut.toSignificant());

// Takas işlemini oluştur ve imzala.
const { transaction, execute } = await raydium.liquidity.swap({
  poolInfo: stablePool,
  amountIn:    inputAmount.raw,
  amountOut:   minAmountOut.raw,
  fixedSide:   "in",
  txVersion:   TxVersion.V0,
});

const { txId } = await execute({ sendAndConfirm: true });
console.log("Stable takas tx:", txId);
SDK havuz anahtarlarından havuzun programId’sini okur ve Stable AMM programına gönderir. Özel bir programId argümanına ihtiyaç yoktur.

Likidite ekleme ve kaldırma

addLiquidity ve removeLiquidity v4 ve v5 havuzları için özdeş şekilde çalışır:
import { Percent, TokenAmount, toToken } from "@raydium-io/raydium-sdk-v2";

const amountInA = new TokenAmount(toToken(stablePool.mintA), 100_000_000); // 100 USDT
const slippage  = new Percent(50, 10_000); // 0.5%

// Eğrinin bu A boyutu için gerektirdiği eşleşen B miktarını hesapla.
const { anotherAmount, minAnotherAmount } = raydium.liquidity.computePairAmount({
  poolInfo: stablePool,
  amount:   amountInA.toSignificant(),
  baseIn:   true,
  slippage,
});

const { execute } = await raydium.liquidity.addLiquidity({
  poolInfo: stablePool,
  amountInA,
  amountInB:      anotherAmount,
  otherAmountMin: minAnotherAmount,
  fixedSide:      "a",
  txVersion:      TxVersion.V0,
});

const { txId } = await execute({ sendAndConfirm: true });
console.log("Likidite ekleme tx:", txId);
SDK dahili olarak pooltype.includes("StablePool") doğru olduğu için InstructionType.AmmV5AddLiquidity gönderir. İlgili removeLiquidity akışı simetrik — lpAmount ve her bir tarafta kabul edeceğiniz minimum miktarları girin.

Zincir dışı alıntı yardımcıları (stable.ts)

Sunucu tarafı alıntısı veya geriye dönük test için SDK, temel sabit eğri matematiklerini gösterir:
import {
  getStablePrice,
  getDxByDyBaseIn,
  getDyByDxBaseIn,
} from "@raydium-io/raydium-sdk-v2";

// Bunları kullanmadan önce initLayout() öğesini bir kez çağırmalısınız (zincir üstü
// `ModelDataInfo` PDA'sını SDK'nın StableLayout önbelleğine yükler).
await raydium.liquidity.initLayout();

const modelData = raydium.liquidity.stableLayout;

// Spot fiyatı havuzun mevcut rezervleri.
const price = getStablePrice(modelData, /* x */, /* y */, /* withFee */);
console.log("Spot fiyatı:", price);

// Alıntı: dx giriş verildiğinde, ne kadar dy çıkış (ücret uygulanmaz)?
const dyOut = getDyByDxBaseIn(modelData, /* x */, /* y */, /* dx */);

// Alıntı: dy çıkış hedefi verildiğinde, ne kadar dx giriş gerekli?
const dxIn  = getDxByDyBaseIn(modelData, /* x */, /* y */, /* dy */);
Bunlar saf işlevlerdir — RPC yok, imzalama yok. Zincir üstü ModelDataInfo initLayout() tarafından bir kez getirilir ve raydium.liquidity.stableLayout dosyasında önbelleğe alınır. Mevcut rezervleri (x, y) geçin ve yardımcılar arama tablosunu ikiye bölünerek arayarak ve çevresindeki iki DataElement satırı arasında doğrusal olarak enterpolasyon yaparak hesaplar. Temel algoritma için bkz products/stable/math.

AMM Routing aracılığıyla yönlendirme (çok atlamalı / en iyi fiyat)

Bir mekanı kendiniz seçmek istemiyorsanız, AMM Routing programı her Raydium AMM’yi (v4 / CPMM / CLMM / Stable) dikkate alacak ve hangisinin en iyi olduğu kombinasyondan geçecektir:
const route = await raydium.tradeV2.fetchRoutes({
  inputMint:  mintA,
  outputMint: mintB,
  amount:     new BN(1_000_000),
  slippage,
});

// route.routes[0].poolType size en iyi rotanın hangi programları kullandığını söyler;
// Stable havuzu en iyi yolun bir parçası olduğunda "Stable" burada görünür.
console.log(route.routes[0]);

const { execute } = await raydium.tradeV2.swap({
  inputMint:    mintA,
  outputMint:   mintB,
  inputAmount:  new BN(1_000_000),
  swapResult:   route.routes[0],
  slippage,
  txVersion:    TxVersion.V0,
});

const { txId } = await execute({ sendAndConfirm: true });
Bu, üretim takasçıları ve toplayıcıları için önerilen yoldur — bir Stable havuzunun var olup olmadığını veya bugün daha iyi bir mekan olup olmadığını asla manuel olarak karar vermeniz gerekmez.

Öneriler

  1. Yalnız kullanıcı takaları için tradeV2 yönlendirme akışını tercih edin. Her Raydium havuz türünü Stable dahil olmak üzere yönetir.
  2. Havuza özgü işlemler için (bilinen Stable havuzdan LP ekleme / kaldırma) LiquidityModule’ü doğrudan kullanın — v5 havuzlarını otomatik olarak algılar.
  3. Zincir dışı alıntı / analitik için initLayout() sonrasında getStablePrice / getDyByDxBaseIn / getDxByDyBaseIn öğesini çağırın. Model verisi önbelleğe alındıktan sonra alıntı başına RPC trafiği yoktur.
  4. Ham SwapBaseIn talimatlarını el ile kodlamayın. Stable AMM programı (AMM v4’ten forklanan) V1 swap giriş noktaları için 17–19 OpenBook hesabı bekler, model_data_account bunların arasına yerleştiriliyor. SDK’nın önceden hazırlanmış yardımcıları her hesabı ve sıralamayı doğru şekilde yönetir; kendi kodunuzu yazmak hata yapmaya açıktır.

Sonraki adım

  • Math — arama tablosu enterpolasyonunun nasıl çalıştığı.
  • Instructions — tam talimat referansı.
  • AMM Routing — AMM v4, CPMM, CLMM, Stable arasında çok havuzlu yönlendirme.
Kaynaklar: