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.
بيان الإصدار.
- SDK:
@raydium-io/raydium-sdk-v2@0.2.42-alpha
- Cluster: Solana
mainnet-beta
- معرّف البرنامج: انظر
reference/program-addresses
- آخر تحقق: 2026-04
ثبّت إصدار SDK في ملف package.json الخاص بك. واجهة منحنى الربط تطورت بين الإصدارات الثانوية.
الإعداد
العروض التوضيحية هنا تعكس الملفات في raydium-sdk-V2-demo/src/launchpad. يتبع التمهيد ملف config.ts.template في مستودع العروض التوضيحية:
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;
إنشاء إطلاق
المصدر: src/launchpad/createMint.ts (وcreateBonkMintApi.ts لمتغير Bonk المدفوع بواسطة API)
import { NATIVE_MINT } from "@solana/spl-token";
const { execute, extInfo } = await raydium.launchpad.createLaunchpad({
programId: /* معرّف برنامج LaunchLab من reference/program-addresses */,
// بيانات رمز جديد لرمز الأساس:
name: "Example Token",
symbol: "EXMPL",
uri: "https://example.com/metadata.json",
decimals: 6,
// معاملات المنحنى:
curveType: 0, // 0 = تربيعي
supply: new BN(1_000_000_000).mul(new BN(10).pow(new BN(6))), // 1B أساسي (6 ديسيمال)
graduationFractionBps: 8000, // 80% → التخرج
initialK: new BN("40"), // معامل شكل المنحنى
// جانب الاقتباس:
quoteMint: NATIVE_MINT, // WSOL
openTime: new BN(Math.floor(Date.now() / 1000) + 60), // يفتح خلال 1 دقيقة
// سياسة الرسوم:
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);
ملاحظات:
initialK هو عامل القياس لمنحنى التربيعي. اضبطه للوصول إلى سعر افتتاح معين في CPMM عند التخرج. انظر products/launchlab/bonding-curve للاشتقاق.
- يتعامل SDK مع إنشاء رمز الأساس وPDA البيانات الوصفية وكلا المستودعين في معاملة واحدة. قد يتجاوز 1232 بايت إذا كان عنوان البيانات الوصفية طويلاً؛ في تلك الحالة ينقسم SDK إلى معاملتين.
- بعد
Initialize، لا يمكن تداول الإطلاق حتى openTime. عيّن openTime قبل دقيقة أو دقيقتين لإعطاء صائدي المستقبلات فرصة أقل لالتقاط أول عملية شراء.
جلب حالة الإطلاق
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 المفكك LaunchState بالإضافة إلى جزء “التقدم نحو التخرج” المحسوب كـ Decimal.
الشراء — إدخال اقتباس دقيق
المصدر: src/launchpad/buy.ts
const quoteIn = new BN(1).mul(new BN(10).pow(new BN(9))); // 1 SOL
const minimumBaseOut = new BN(0); // قبول أي شيء؛ شدّد للإنتاج
// معاينة الاقتباس خارج السلسلة بحيث يمكن لواجهة المستخدم عرض base_out المتوقع:
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 يعكس محلل Newton على السلسلة (منحنى تربيعي) أو معكوس CPMM بصيغة مغلقة (curve_type 1). استخدمه لملء حقل واجهة المستخدم “تستقبل”.
الشراء — إخراج أساسي دقيق
const baseOut = new BN(1_000_000).mul(new BN(10).pow(new BN(6))); // 1M أساسي
const maximumQuoteIn = new BN(2).mul(new BN(10).pow(new BN(9))); // حد أقصى 2 SOL
const { execute } = await raydium.launchpad.buyExactOut({
launchInfo: launch,
baseOut,
maximumQuoteIn,
txVersion: TxVersion.V0,
});
await execute({ sendAndConfirm: true });
مفيد لواجهات المستخدم “اشتر X من الرموز بالضبط”. يرفض مع ExceededSlippage إذا تحرك المنحنى بحيث يتجاوز متطلب الاقتباس الآن maximumQuoteIn.
البيع
المصدر: src/launchpad/sell.ts
const baseIn = new BN(500_000).mul(new BN(10).pow(new BN(6))); // 0.5M أساسي
const minimumQuoteOut = new BN(0);
const { execute } = await raydium.launchpad.sellExactIn({
launchInfo: launch,
baseIn,
minimumQuoteOut,
txVersion: TxVersion.V0,
});
await execute({ sendAndConfirm: true });
مسار البيع في المنحنى متماثل مع مسار الشراء: تقليل base_sold بمقدار baseIn يعيد quote_out مساوياً للمنطقة المتكاملة تحت المنحنى بين base_sold − baseIn و base_sold، مطروحاً منها رسم البيع.
التخرج التلقائي عند شراء عبور الحد الأدنى
يربط SDK تعليمة Graduate داخل معاملة buy* عندما يكتشف أن حالة ما بعد الشراء ستعبر الحد الأدنى:
const { execute, willGraduate } = await raydium.launchpad.buyExactIn({
launchInfo: launch,
quoteIn: new BN(100).mul(new BN(10).pow(new BN(9))), // شراء كبير
minimumBaseOut: new BN(0),
txVersion: TxVersion.V0,
autoGraduate: true, // الإعداد الافتراضي
});
if (willGraduate) {
console.log("This buy will trigger graduation.");
}
const { txId } = await execute({ sendAndConfirm: true });
لأن Graduate غير مرخصة، يمكن لأي شخص (بما في ذلك بوت MEV) أن يتسابق للهبوط أول Graduate بعد عبور الحد الأدنى — عادة ثوان لاحقة، وليس دقائق. الهابط الأول فقط يدفع إيجار حسابات مجمع CPMM؛ لا يحصلون على أي فائدة أخرى.
Graduate يدوي
إذا كان autoGraduate معطلاً أو فشلت معاملة عبور الحد الأدنى، يمكنك إطلاق التخرج بشكل منفصل:
const { execute } = await raydium.launchpad.graduate({
launchInfo: launch,
txVersion: TxVersion.V0,
});
await execute({ sendAndConfirm: true });
يرجع NotAtThreshold إذا كان quote_reserve_real < quote_reserve_target عند وقت الإرسال. آمن للإعادة — محاولة Graduate الثانية بعد النجاح ترجع NotActive.
جمع رسوم المنشئ
المصدر: src/launchpad/claimCreatorFee.ts (رمز واحد) وcollectAllCreatorFees.ts (مجمّع)
const { execute } = await raydium.launchpad.collectCreatorFees({
launchInfo: launch,
txVersion: TxVersion.V0,
});
await execute({ sendAndConfirm: true });
ينقل مبلغ العداد المتراكم لرسم المنشئ إلى ATA للمنشئ على رمز الاقتباس. قابل للاستدعاء قبل أو بعد التخرج؛ استخدمه بشكل دوري بدلاً من الانتظار حتى تتراكم رصيد ضخم.
تتبع إطلاق عبر دورة حياته
بالجمع، قد يبدو سكريبت المراقبة كالتالي:
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 من برنامج Anchor الخاص بك نادر (معظم تكاملات الإطلاق هي TS فقط). إذا فعلت ذلك، فإن البرنامج يشحن صندوق Anchor raydium_launchlab مع cpi::accounts::Buy و cpi::accounts::Sell وغيرها — النمط يعكس أمثلة CPMM / CLMM CPI. انظر sdk-api/rust-cpi للحصول على نموذج معمم بمجرد ملء الموقع.
الأخطاء الشائعة
- حساب تقسيم الرسوم معطل بـ one-off. إذا لم يكن
total_share مساوياً بالضبط lp_share + creator_share + protocol_share، فإن Initialize يرجع InvalidFeeShares. عيّن totalShare مساوياً للمجموع.
- استخدام رمز اقتباس غير مسموح.
launch_config.allowed_quote_mints قائمة ثابتة؛ تمرير أي رمز آخر يرجع. تحقق مع raydium.launchpad.getConfig() أولاً.
- حجم البيانات الوصفية. سلاسل
uri الطويلة تدفع Metaplex CPI فوق الميزانية. احتفظ بـ uri تحت ~200 حرف — معظم البيانات الوصفية JSON المستضافة على CDN تناسب بسهولة.
- سباق التخرج. الروبوتات الآلية تراقب
quote_reserve_real وتسبق Graduate في فتحة أو اثنتين من عبور الحد الأدنى. هذا حميد — إنه يكلفهم الإيجار فقط — لكن هذا يعني أن واجهة المستخدم الخاصة بك يجب أن تعامل انتقالات status كأحداث سريعة.
الخطوات التالية
المصادر: