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

# LaunchLab kod örnekleri

> Uçtan uca TypeScript: LaunchLab lansmanı oluşturun, bonding curve üzerinde alım-satım yapın, CPMM havuzuna geçiş yapın ve yaratıcı ücretleri toplayı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 →](/products/launchlab/code-demos)
</Info>

<Info>
  **Sürüm bilgisi.**

  * SDK: `@raydium-io/raydium-sdk-v2@0.2.42-alpha`
  * Cluster: Solana `mainnet-beta`
  * Program ID: [`reference/program-addresses`](/tr/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.
</Info>

## Kurulum

Buradaki örnekler [`raydium-sdk-V2-demo/src/launchpad`](https://github.com/raydium-io/raydium-sdk-V2-demo/tree/master/src/launchpad) klasöründeki dosyaları yansıtır. Başlatma, demo deposunun [`config.ts.template`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/config.ts.template) dosyasını takip eder:

```ts theme={null}
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`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/launchpad/createMint.ts) (ve Bonk varyantı için [`createBonkMintApi.ts`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/launchpad/createBonkMintApi.ts))

```ts theme={null}
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`](/tr/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

```ts theme={null}
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`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/launchpad/buy.ts)

```ts theme={null}
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ışı

```ts theme={null}
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`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/launchpad/sell.ts)

```ts theme={null}
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:

```ts theme={null}
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:

```ts theme={null}
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`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/launchpad/claimCreatorFee.ts) (tek mint) ve [`collectAllCreatorFees.ts`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/launchpad/collectAllCreatorFees.ts) (toplu)

```ts theme={null}
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:

```ts theme={null}
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`](/tr/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

* [`products/launchlab/bonding-curve`](/tr/products/launchlab/bonding-curve) — curve matematiği.
* [`products/cpmm/code-demos`](/tr/products/cpmm/code-demos) — sonuç havuzuyla ne yapılır.
* [`user-flows/launch-token-launchlab`](/tr/user-flows/launch-token-launchlab) — zincir dışı adımlar da dahil olmak üzere uçtan uca token lansmanı kılavuzu.

Kaynaklar:

* [Raydium SDK v2](https://github.com/raydium-io/raydium-sdk-V2)
* Raydium LaunchLab program kaynağı
