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 →
Bununla yapılanlar. Belirttiğiniz iki mint için yepyeni bir CPMM havuzu oluşturur, %0,25 ücret seviyesini seçer, tohum miktarları tarafından belirtilen fiyattan ilk likiditeyi ekler ve yeni havuz kimliğini ile işlem imzasını yazdırır.

Kurulum

Hızlı başlangıç ön koşullarını okuduğunuzdan ve RPC_URL, KEYPAIR değerleriniz ile bağımlılıkların yüklenmiş olduğundan emin olun. Ayrıca cüzdanı her iki mint’in tohum miktarları ve havuz oluşturma ücreti için yeterli SOL ile finanse etmeniz gerekir (~mainnet’te 0,15 SOL, güncel değer için reference/program-addresses bölümüne bakın).

Script

create-cpmm.mjs olarak kaydedin:
// create-cpmm.mjs
import { Connection, Keypair, PublicKey } from "@solana/web3.js";
import {
  Raydium,
  TxVersion,
  CREATE_CPMM_POOL_PROGRAM,
  CREATE_CPMM_POOL_FEE_ACC,
} 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 MINT_A   = process.env.MINT_A;   // required, base58
const MINT_B   = process.env.MINT_B;   // required, base58
const AMOUNT_A = process.env.AMOUNT_A; // required, integer raw units
const AMOUNT_B = process.env.AMOUNT_B; // required, integer raw units

if (!MINT_A || !MINT_B || !AMOUNT_A || !AMOUNT_B) {
  console.error("Set MINT_A, MINT_B, AMOUNT_A, AMOUNT_B 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",
});

// ── Pick the 0.25% fee tier ─────────────────────────────────────
const feeConfigs = await raydium.api.getCpmmConfigs();
const feeConfig  = feeConfigs.find((c) => c.index === 0);
if (!feeConfig) throw new Error("0.25% fee tier not found in CPMM configs.");

// ── Resolve mint metadata (Token-2022-aware) ────────────────────
const mintA = await raydium.token.getTokenInfo(new PublicKey(MINT_A));
const mintB = await raydium.token.getTokenInfo(new PublicKey(MINT_B));

// ── Build and execute ───────────────────────────────────────────
const { execute, extInfo } = await raydium.cpmm.createPool({
  programId:       CREATE_CPMM_POOL_PROGRAM,
  poolFeeAccount:  CREATE_CPMM_POOL_FEE_ACC,
  mintA,
  mintB,
  mintAAmount:     new BN(AMOUNT_A),
  mintBAmount:     new BN(AMOUNT_B),
  startTime:       new BN(0), // open immediately
  feeConfig,
  associatedOnly:  false,
  ownerInfo:       { useSOLBalance: true },
  txVersion:       TxVersion.V0,
  computeBudgetConfig: {
    units: 600_000,
    microLamports: 100_000,
  },
});

const { txId } = await execute({ sendAndConfirm: true });

console.log(`Pool ID:  ${extInfo.address.poolId.toBase58()}`);
console.log(`LP mint:  ${extInfo.address.lpMint.toBase58()}`);
console.log(`Vault A:  ${extInfo.address.vaultA.toBase58()}`);
console.log(`Vault B:  ${extInfo.address.vaultB.toBase58()}`);
console.log(`Tx:       https://solscan.io/tx/${txId}`);

Çalıştırın

Örnek: 1 SOL ve 160 USDC tohumu ile bir SOL/USDC havuzu oluşturun:
export MINT_A="So11111111111111111111111111111111111111112"   # wSOL
export MINT_B="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"   # USDC
export AMOUNT_A="1000000000"   # 1 SOL (9 decimals)
export AMOUNT_B="160000000"    # 160 USDC (6 decimals)

node create-cpmm.mjs
Beklenen çıktı:
Pool ID:  HgC5...3kXb
LP mint:  4ZAS...9rkV
Vault A:  J9Mu...mP2k
Vault B:  AaJq...8wxx
Tx:       https://solscan.io/tx/5dQ...

Neler oldu

  1. getCpmmConfigs canlı ücret seviyeleri listesini api-v3.raydium.io adresinden çekti ve indeks 0’ı (%0,25 seviyesi) seçti — tam seti reference/fee-comparison adresinde görebilirsiniz.
  2. getTokenInfo her mint’in meta verilerini çözmüştür; hangi token programının sahip olduğu dahil. CPMM hem SPL Token hem de Token-2022 mint’lerini kabul eder; SDK otomatik olarak yönlendirir.
  3. createPool şunları yapan bir işlem oluşturmuştur:
    • mint’leri standart sıraya sokar,
    • havuz PDA’sını, vault’ları, LP mint’ini ve otoriteyi türetir,
    • tek seferlik create_pool_fee ödemesini CREATE_CPMM_POOL_FEE_ACC’ye yapar,
    • eksikse çağıranın ATA’larını oluşturur,
    • vault’ları AMOUNT_A ve AMOUNT_B ile tohum ekler.
  4. İlk fiyat tohum oranı tarafından ayarlanır: price = AMOUNT_B / AMOUNT_A (ondalık ayarından sonra). Bunu dikkatle seçin — botlar havuz açıldıktan sonra saniyeler içinde herhangi bir yanlış fiyatlandırmada arbitraj yapacaklar.
  5. startTime: new BN(0) ticareti hemen açar. Halkı açmadan önce likiditeyi hazırlamak için gelecekteki bir Unix zaman damgası ayarlayın.

Sık karşılaşılan hatalar

  • pool already exists — Bu mint çifti ve ücret seviyesi için zaten bir havuz mevcut. Oluşturmadan önce arayın.
  • insufficient funds — Cüzdanınızda MINT_A, MINT_B veya SOL’un yeterli miktarı yok (havuz oluşturma ücreti + kira için).
  • Token-2022 extension not supported — Mint’lerinizden biri CPMM’nin kabul etmediği bir uzantı kullanıyor. reference/token-2022-support adresine bakın.

Konuşlandırmadan sonra

Yeni havuza karşı hemen swap yapabilirsiniz — Swap from CLI scripti yeni POOL_ID’nizi doğrudan kabul eder. Toplayıcılar (Jupiter, vb.) yeni havuzu dakikalar içinde dizine katacaklardır.

Sonraki adımlar