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.
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
قفل الأموال (Vesting) اختياري على إطلاقة LaunchLab. عيّن
vesting_param.total_locked_amount = 0 عند Initialize والقسم أدناه لا ينطبق. بمجرد التفعيل، يكون الجدول ثابتًا طوال عمر الإطلاقة؛ لا يمكن تغيير فترة الانتظار وفترات الفتح بأثر رجعي.لماذا قفل الأموال
منحنى الربط يبيعbase_supply_graduation رموز أثناء جمع التمويل وينشئ مجمع ما بعد التخرج ببقية الرموز. يقوم قفل الأموال بحجز شريحة إضافية من الإمدادات، وتقفلها لفترة انتظار قابلة للتكوين، ثم يحررها خطيًا لمستفيد واحد أو أكثر — عادة فريق المنشئ أو المستشارون أو شركاء المنصة.
حالات الاستخدام العملية:
- تخصيص الفريق. يحتفظ المنشئ، على سبيل المثال، بـ 5% من الإمدادات لفريق التأسيس، مقفولة لمدة 6 أشهر والفتح الخطي على مدار 12 شهرًا التالية.
- تخصيص المنصة. تتلقى منصة الإطلاقة شريحة من كل رمز تدرجه، على نفس الجدول، عبر
CreatePlatformVestingAccount. - منح المستشار / المساهم. عدة مستفيدين لديهم حساباتهم الخاصة من
VestingRecord، كل منها يتتبع المبلغ المطالب به بشكل مستقل.
base_vault الخاص بالمجمع حتى يستدعي كل مستفيد ClaimVestedToken.
شكل الجدول
يتم وصف قفل الأموال للإطلاقة بثلاثة أرقام، مسجلة مرة واحدة في وقتInitialize:
| الحقل | النوع | المعنى |
|---|---|---|
total_locked_amount | u64 | مجموع جميع الرموز الأساسية المقفولة عبر جميع المستفيدين (المنشئ + المنصة). يجب أن يكون total_locked_amount <= supply * max_lock_rate / 1_000_000 من GlobalConfig الملزمة. |
cliff_period | u64 (ثانية) | وقت الانتظار بعد انتهاء جمع التمويل قبل فتح أي رموز. |
unlock_period | u64 (ثانية) | مدة نافذة الفتح الخطي بعد فترة الانتظار. 0 يعني أن كل شيء يُفتح فورًا عند نهاية فترة الانتظار. |
PoolState.vesting_schedule (struct VestingSchedule) بالإضافة إلى start_time على السلسلة، والذي يسجله البرنامج باسم block_time + cliff_period في لحظة انتهاء جمع التمويل بنجاح (عند استيفاء شروط التخرج لأول مرة).
allocated_share_amount هو المبلغ الإجمالي المخصص بالفعل لحسابات VestingRecord عبر CreateVestingAccount / CreatePlatformVestingAccount. يجب ألا تتجاوز أبدًا total_locked_amount. إذا أفرط المنشئ في التخصيص، فإن استدعاء CreateVestingAccount التالي سيرجع مع InvalidTotalLockedAmount.
صيغة الفتح الخطي
بعد انتهاء جمع التمويل، يحسب البرنامج المبلغ المفتوح التراكمي لكلVestingRecord كـ:
unlock_period == 0، فإن كل token_share_amount يصبح قابلاً للمطالبة في خطوة واحدة في start_time. وإلا فإن المنحنى هو خط مستقيم من 0 في start_time إلى token_share_amount في start_time + unlock_period، محصور في token_share_amount بعد ذلك.
المبلغ المحول عند كل استدعاء ClaimVestedToken هو الفرق بين المبلغ المفتوح التراكمي المحسوب حديثًا وحقل claimed_amount الجاري على السجل.
start_time سترجع مع VestingNotStarted. المطالبة بعد start_time + unlock_period تسوي الباقي الكامل.
تخطيطات الحسابات
VestingSchedule
يعيش مضمنًا على PoolState. انظر accounts.
VestingRecord
سجل لكل مستفيد. PDA مشتق كـ:
VestingRecord لكل إطلاقة. التخصيص مرة أخرى لنفس المستفيد على نفس الإطلاقة سيرجع لأن PDA موجود بالفعل.
التعليمات
CreateVestingAccount
متاح فقط للمنشئ. يخصص شريحة من total_locked_amount الخاص بالمجمع لمستفيد جديد بتهيئة PDA VestingRecord جديد.
الوسائط
| # | الاسم | W | S | الملاحظات |
|---|---|---|---|---|
| 1 | creator | W | S | يجب أن يساوي pool_state.creator؛ يدفع الإيجار للحساب الجديد. |
| 2 | beneficiary | W | يتلقى الرموز المفتوحة لاحقًا. لا يمكن تغيير المفتاح العام المحفوظ هنا. | |
| 3 | pool_state | W | يتم تعديله لزيادة vesting_schedule.allocated_share_amount. | |
| 4 | vesting_record | W | init؛ PDA [b"pool_vesting", pool_state, beneficiary]. | |
| 5 | system_program | مطلوب لإنشاء الحساب. |
share_amount > 0.pool_state.vesting_schedule.allocated_share_amount + share_amount <= total_locked_amount.- لا يوجد
VestingRecordحالي للمفتاح العامbeneficiaryلهذا المجمع.
- تم تهيئة
vesting_recordمعtoken_share_amount = share_amount,claimed_amount = 0. pool_state.vesting_schedule.allocated_share_amount += share_amount.
InvalidTotalLockedAmount, InvalidInput.
CreatePlatformVestingAccount
متغير المسؤول عن المنصة لـ CreateVestingAccount. محفظة قفل الأموال الخاصة بالمنصة (المخزنة على PlatformConfig.platform_vesting_wallet) هي المستفيد، والمشاركة محدودة بـ PlatformConfig.platform_vesting_scale.
يجب أن يساوي الموقّع platform_config.platform_vesting_wallet. الحسابات الأخرى تعكس CreateVestingAccount. استخدم هذا عندما توافق المنصة على تلقي حصة قفل أموال ثابتة على كل إطلاقة تدرجها.
ClaimVestedToken
متاح فقط للمستفيد. ينقل أي رموز مفتوحة حديثًا من base_vault الخاص بالمجمع إلى ATA الخاص بالمستفيد.
الوسائط
بدون وسائط (يحسب البرنامج مبلغ المطالبة من الجدول).
الحسابات
| # | الاسم | W | S | الملاحظات |
|---|---|---|---|---|
| 1 | beneficiary | W | S | يجب أن يساوي vesting_record.beneficiary. |
| 2 | authority | PDA [b"vault_auth_seed"]؛ يوقّع نقل الخزان. | ||
| 3 | pool_state | W | يتم تعديله فقط إذا كان الجدول يحتاج إلى إعادة التحقق. | |
| 4 | vesting_record | W | يتم تحديث claimed_amount. | |
| 5 | base_vault | W | خزان الرمز الأساسي للمجمع؛ يتم الخصم منه. | |
| 6 | beneficiary_ata | W | يتلقى الرموز المفتوحة؛ init_if_needed. | |
| 7 | base_mint | نعناع الرمز الأساسي للمجمع. | ||
| 8 | token_program | برنامج SPL Token أو Token-2022. | ||
| 9 | associated_token_program | لإنشاء ATA إذا لزم الأمر. | ||
| 10 | system_program | مطلوب لإنشاء الحساب. |
block_time >= pool_state.vesting_schedule.start_time(وإلاVestingNotStarted).pool_state.status == PoolStatus::Migrated— يجب أن يكون التخرج قد حدث بالفعل. الاستدعاء قبل التخرج سيرجع.- فرق المبلغ المفتوح أكبر من صفر. استدعاء بدون فائدة (الفرق المحسوب هو 0) سيرجع.
vesting_record.claimed_amountيتقدم إلى المبلغ المفتوح التراكمي الجديد.- يتم نقل
delta_amountمن الرمز الأساسي إلىbeneficiary_ata.
VestingNotStarted, NoAssetsToCollect, MathOverflow.
مثال عملي
تعيّن الإطلاقة:supply = 1_000_000_000total_locked_amount = 100_000_000(10% من الإمدادات)cliff_period = 180 * 86400(180 يوم)unlock_period = 365 * 86400(سنة واحدة خطية بعد فترة الانتظار)
VestingRecord فورًا بعد Initialize:
- المستفيد أ (الفريق):
share_amount = 70_000_000 - المستفيد ب (المستشار):
share_amount = 30_000_000
allocated_share_amount = 100_000_000، يساوي total_locked_amount — لا توجد تخصيصات إضافية ممكنة.
ينتهي جمع التمويل في 2027-01-01T00:00Z. يعيّن البرنامج start_time = 2027-01-01 + 180 يوم = 2027-06-30.
في 2027-09-30 (90 يوم بعد start_time)، يستدعي المستفيد أ ClaimVestedToken:
vesting_record.claimed_amount إلى 17_260_274.
بعد ستة أشهر (2028-03-31، 270 يوم بعد start_time)، يطالب أ مرة أخرى:
2028-06-30 (نهاية unlock_period)، تنقل المطالبة التالية ~18.22 مليون المتبقي وتترك claimed_amount == token_share_amount.
الحالات الحدية
- فقدان المستفيد لمفتاحه. المفتاح العام على
VestingRecord.beneficiaryهو الموقّع الوحيد الذي يمكنه استدعاءClaimVestedToken. لا توجد مسار استرجاع. عيّن المستفيد إلى multisig إذا كان الاسترجاع مهمًا. - رسوم نقل Token-2022. إذا كان نعناع الرمز الأساسي رمز Token-2022 بامتداد رسم نقل، يتلقى المستفيد
delta_amount − transfer_fee، وليس الفرق الكامل. يسجل خزان المجمع المبلغ الإجمالي كمنقول — يتراكم الفرق في حساب الرسم المحتفظ به للنعناع. - المجمع لم يتخرج. استدعاء
ClaimVestedTokenقبل التخرج سيرجع. تبدأ ساعة قفل الأموال فقط عند انتهاء جمع التمويل بالفعل؛ الإطلاقة المجهضة (التي لا تعيّنstart_time) تترك الرموز المقفولة غير قابلة للوصول في الخزان. - محاولات الإفراط في التخصيص. يفرض البرنامج
allocated_share_amount <= total_locked_amountعلى كلCreateVestingAccount. البقية (إن وجدت) منtotal_locked_amountالمتروكة غير مخصصة مفقودة — تبقى تلك الرموز في الخزان إلى الأبد بمجرد تخرج الإطلاقة. خصص المبلغ الكامل ما لم يكن هذا هو القصد.
المؤشرات
products/launchlab/accounts— تخطيطPoolStateالكامل بما في ذلكVestingSchedule.products/launchlab/instructions— دورة حياة التخرج.products/launchlab/platform-config— دلالاتplatform_vesting_scaleللتخصيصات على المنصة.products/launchlab/global-config— سقفmax_lock_rateالذي يحددtotal_locked_amount.
raydium-launch/programs/launchpad/src/states/vesting.rs—VestingRecord.raydium-launch/programs/launchpad/src/states/pool.rs—VestingSchedule,VestingParams,is_vesting_started,vesting_end_time.raydium-launch/programs/launchpad/src/instructions/create_vesting_account.rs.raydium-launch/programs/launchpad/src/instructions/claim_vested_token.rs.


