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
  • Program ID: reference/program-addresses başlığına bakın
  • Son doğrulama: 2026-04
SDK sürümünü package.json dosyasına sabitleyin. Bonding curve arabirimi küçük sürümler arasında değişmiştir.

Kurulum

Buradaki örnekler raydium-sdk-V2-demo/src/launchpad klasöründeki dosyaları yansıtır. Başlatma, demo deposunun config.ts.template dosyasını takip eder:
import { Connection, Keypair, clusterApiUrl, PublicKey } from "@solana/web3.js";
import { Raydium, TxVersion } from "@raydium-io/raydium-sdk-v2";
import BN from "bn.js";
import fs from "node:fs";

const connection = new Connection(process.env.RPC_URL ?? clusterApiUrl("mainnet-beta"));
const owner = Keypair.fromSecretKey(
  new Uint8Array(JSON.parse(fs.readFileSync(process.env.KEYPAIR!, "utf8"))),
);
const raydium = await Raydium.load({
  owner,
  connection,
  cluster: "mainnet",
  disableFeatureCheck: true,
  blockhashCommitment: "finalized",
});
export const txVersion = TxVersion.V0;

Lansman oluşturun

Kaynak: src/launchpad/createMint.ts (ve Bonk varyantı için createBonkMintApi.ts)
import { NATIVE_MINT } from "@solana/spl-token";

const { execute, extInfo } = await raydium.launchpad.createLaunchpad({
  programId: /* reference/program-addresses adresinden LaunchLab program ID'si */,
  // Yeni base mint için token metadata:
  name:   "Example Token",
  symbol: "EXMPL",
  uri:    "https://example.com/metadata.json",
  decimals: 6,

  // Curve parametreleri:
  curveType: 0,                                      // 0 = quadratic
  supply:    new BN(1_000_000_000).mul(new BN(10).pow(new BN(6))), // 1B base (6 dec)
  graduationFractionBps: 8000,                       // 80% → graduation
  initialK:  new BN("40"),                           // curve şekil parametresi

  // Quote tarafı:
  quoteMint: NATIVE_MINT,                            // WSOL
  openTime:  new BN(Math.floor(Date.now() / 1000) + 60),  // 1 dakika içinde açılır

  // Ücret politikası:
  fees: {
    buyNumerator:   new BN(100),                     // 1.00%
    buyDenominator: new BN(10_000),
    sellNumerator:  new BN(100),
    sellDenominator: new BN(10_000),
    lpShare:         new BN(60),
    creatorShare:    new BN(20),
    protocolShare:   new BN(20),
    totalShare:      new BN(100),
  },

  postGraduationLpPolicy: "burn",                    // "burn" | "lock" | "toCreator"

  txVersion: TxVersion.V0,
});

const { txId } = await execute({ sendAndConfirm: true });
console.log("Launch:", extInfo.launchState.toBase58());
console.log("Base mint:", extInfo.baseMint.toBase58());
console.log("Create tx:", txId);
Notlar:
  • initialK, ikinci dereceden curve için ölçeklendirme faktörüdür. Graduation’da belirli bir açılış CPMM fiyatını hedeflemek için ayarlayın. Türetme için products/launchlab/bonding-curve başlığına bakın.
  • SDK, base mint’i, metadata PDA’sını ve her iki vault’u tek bir işlemde oluşturur. Metadata URI’si uzunsa 1232 baytı aşabilir; bu durumda SDK iki işleme böler.
  • Initialize sonrasında, lansman openTime kadar açık değildir. İlk alıcılara az şans vermek için openTime öğesini bir-iki dakika sonra ayarlayın.

Lansman durumunu alın

const launchId = new PublicKey("<LAUNCH_STATE>");

const launch = await raydium.launchpad.getLaunchById({ launchId });
console.log("Status:", ["Active","Graduated","Cancelled"][launch.status]);
console.log("Base sold:", launch.baseSold.toString(),
            "/", launch.baseSupplyMax.toString());
console.log("Quote collected:", launch.quoteReserveReal.toString(),
            "target:", launch.quoteReserveTarget.toString());
if (launch.status === 1) {
  console.log("Post-graduation CPMM pool:", launch.cpmmPoolState.toBase58());
}
getLaunchById, kodu çözülmüş LaunchState değerini ve “graduation’a doğru ilerleme” kesrini Decimal olarak döndürür.

Satın al — tam quote giriş

Kaynak: src/launchpad/buy.ts
const quoteIn        = new BN(1).mul(new BN(10).pow(new BN(9)));  // 1 SOL
const minimumBaseOut = new BN(0);  // herhangi birini kabul et; üretim için sıkılaştır

// Arayüzünüzün beklenen base_out'u gösterebilmesi için quote'u zincir dışında önizleyin:
const preview = raydium.launchpad.computeBuyBase({
  launchState: launch,
  quoteIn,
});
console.log("Expected base_out:", preview.baseOut.toString(),
            "price impact:", preview.priceImpact.toString());

const { execute } = await raydium.launchpad.buyExactIn({
  launchInfo: launch,
  quoteIn,
  minimumBaseOut,
  txVersion: TxVersion.V0,
});

const { txId } = await execute({ sendAndConfirm: true });
console.log("Buy tx:", txId);
computeBuyBase, zincir üstündeki Newton çözücüsünü (ikinci dereceden curve) veya kapalı form CPMM-inversini (curve_type 1) yansıtır. “Alacağınız” arayüz alanını doldurmak için kullanın.

Satın al — tam base çıkışı

const baseOut         = new BN(1_000_000).mul(new BN(10).pow(new BN(6)));  // 1M base
const maximumQuoteIn  = new BN(2).mul(new BN(10).pow(new BN(9)));          // 2 SOL'de kapla

const { execute } = await raydium.launchpad.buyExactOut({
  launchInfo: launch,
  baseOut,
  maximumQuoteIn,
  txVersion: TxVersion.V0,
});

await execute({ sendAndConfirm: true });
“Tam olarak X token satın al” arayüzleri için kullanışlıdır. Curve yeterince hareket edip quote gereksiniminin maximumQuoteIn değerini aşması halinde ExceededSlippage ile reddedilir.

Satış

Kaynak: src/launchpad/sell.ts
const baseIn           = new BN(500_000).mul(new BN(10).pow(new BN(6)));  // 0.5M base
const minimumQuoteOut  = new BN(0);

const { execute } = await raydium.launchpad.sellExactIn({
  launchInfo: launch,
  baseIn,
  minimumQuoteOut,
  txVersion: TxVersion.V0,
});

await execute({ sendAndConfirm: true });
Curve’ün satış yolu alış yoluna simetrik olarak işlenir: base_sold’ü baseIn kadar azaltmak, base_sold − baseIn ile base_sold arasında curve’ün altında entegre alan eksi satış ücretine eşit quote_out döndürür.

Eşik geçişi alımında otomatik graduation

SDK, alış sonrası durum eşiği geçeceğini algıladığında buy* işlemi içinde bir Graduate talimatı zincirler:
const { execute, willGraduate } = await raydium.launchpad.buyExactIn({
  launchInfo: launch,
  quoteIn: new BN(100).mul(new BN(10).pow(new BN(9))),    // büyük alım
  minimumBaseOut: new BN(0),
  txVersion: TxVersion.V0,
  autoGraduate: true,                                      // varsayılan
});

if (willGraduate) {
  console.log("Bu alım graduation'ı tetikleyecek.");
}

const { txId } = await execute({ sendAndConfirm: true });
Graduate izinsiz olduğundan, herkes (MEV botu dahil) eşik geçildikten sonra ilk Graduate’i açılmak için yarışabilir — tipik olarak dakikalar değil saniyeler sonra. İlk iniş sahibi yalnızca CPMM havuzu hesaplarının kirasını öder; başka hiçbir yarar almazlar.

Manuel Graduate

autoGraduate kapalıysa veya eşik geçişi işlemi başarısız olduysa, graduation’ı ayrı olarak tetikleyebilirsiniz:
const { execute } = await raydium.launchpad.graduate({
  launchInfo: launch,
  txVersion: TxVersion.V0,
});

await execute({ sendAndConfirm: true });
Gönderim sırasında quote_reserve_real < quote_reserve_target ise NotAtThreshold ile geri alınır. Yeniden deneme korumalıdır — başarıdan sonraki ikinci Graduate denemesi NotActive ile geri alınır.

Yaratıcı ücretlerini toplayın

Kaynak: src/launchpad/claimCreatorFee.ts (tek mint) ve collectAllCreatorFees.ts (toplu)
const { execute } = await raydium.launchpad.collectCreatorFees({
  launchInfo: launch,
  txVersion: TxVersion.V0,
});

await execute({ sendAndConfirm: true });
Birikmiş yaratıcı-ücret sayacı quote miktarını yaratıcının ATA’sına quote mint’inde aktarır. Graduation öncesi veya sonrasında çağrılabilir; büyük bir bakiye birleşmesini bekleme yerine periyodik olarak kullanın.

Lansmanı yaşam döngüsü boyunca izleyin

Bir araya getirerek, izleme komut dosyası şöyle görünebilir:
async function watch(launchId: PublicKey) {
  while (true) {
    const launch = await raydium.launchpad.getLaunchById({ launchId });
    const progress =
      Number(launch.quoteReserveReal) /
      Number(launch.quoteReserveTarget);

    console.log(
      `status=${["Active","Graduated","Cancelled"][launch.status]}`,
      `progress=${(progress * 100).toFixed(2)}%`,
      `num_buys=${launch.stateData.numBuys}`,
    );

    if (launch.status === 1) {
      console.log("Graduated to CPMM pool:", launch.cpmmPoolState.toBase58());
      break;
    }
    await new Promise(r => setTimeout(r, 10_000));
  }
}

Rust CPI

LaunchLab’ı kendi Anchor programınızdan çağırmak nadirdir (çoğu lansman entegrasyonu yalnızca TS tarafıdadır). Bunu yaparsanız, program cpi::accounts::Buy, cpi::accounts::Sell vb. içeren raydium_launchlab Anchor sandığı ile birlikte gelir — desenler CPMM / CLMM CPI örneklerini yansıtır. Bu site doldurulduktan sonra genelleştirilmiş şablon için sdk-api/rust-cpi bölümüne bakın.

Tuzaklar

  • Ücret bölme aritmetiği kapalı birer tane. total_share tam olarak lp_share + creator_share + protocol_share değilse, Initialize InvalidFeeShares ile geri alınır. totalShare’ı toplama eşit ayarlayın.
  • İzin verilmeyen bir quote mint kullanma. launch_config.allowed_quote_mints sabit bir listedir; başka herhangi bir mint geçirmek geri alınır. Önce raydium.launchpad.getConfig() ile kontrol edin.
  • Metadata boyutu. Uzun uri dizgeleri Metaplex CPI’yi bütçenin üzerine çıkarır. uri’yi ~200 karakter altında tutun — çoğu CDN’de barındırılan JSON metadata kolayca sığar.
  • Graduation yarışı. Otomatik botlar quote_reserve_real’i izler ve eşik geçişinin bir-iki slot içinde Graduate’den önce hareket eder. Bu zararsızdır — yalnızca onlara kira maliyeti verir — ancak arayüzünüzün status geçişlerini hızlı olaylar olarak işlemesi gerektiği anlamına gelir.

Sonra nereye gidilir

Kaynaklar: