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.
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Le déblocage progressif est optionnel dans un lancement LaunchLab. Définissez
vesting_param.total_locked_amount = 0 lors de l’Initialize et la section ci-dessous ne s’applique pas. Une fois activé, le calendrier est figé pour la durée de vie du lancement ; la période d’indisponibilité et le calendrier de déblocage ne peuvent pas être modifiés rétroactivement.Pourquoi le déblocage progressif
La courbe de liaison vendbase_supply_graduation jetons pendant la levée de fonds et amorce le pool post-graduation avec le reste. Le déblocage progressif prélève une tranche supplémentaire de la réserve, la bloque pour une période d’indisponibilité configurable, puis la libère linéairement à un ou plusieurs bénéficiaires — généralement l’équipe du créateur, les conseillers ou les partenaires de la plateforme.
Cas d’usage courants :
- Allocation d’équipe. Un créateur réserve, par exemple, 5 % de la réserve pour l’équipe fondatrice, bloquée pendant 6 mois et débloquée linéairement sur les 12 mois suivants.
- Allocation de plateforme. Une plateforme de lancement reçoit une tranche de chaque jeton qu’elle liste, selon le même calendrier, via
CreatePlatformVestingAccount. - Allocations aux conseillers / contributeurs. Plusieurs bénéficiaires avec leurs propres comptes
VestingRecord, chacun suivant indépendamment son montant réclamé.
base_vault du pool jusqu’à ce que chaque bénéficiaire appelle ClaimVestedToken.
Forme du calendrier
Le déblocage progressif d’un lancement est décrit par trois nombres, enregistrés une seule fois au moment de l’Initialize :
| Champ | Type | Signification |
|---|---|---|
total_locked_amount | u64 | Somme de tous les jetons de base bloqués pour tous les bénéficiaires (créateur + plateforme). Doit satisfaire total_locked_amount <= supply * max_lock_rate / 1_000_000 de la GlobalConfig contraignante. |
cliff_period | u64 (secondes) | Temps d’attente après la fin de la levée de fonds avant que les jetons ne se débloquent. |
unlock_period | u64 (secondes) | Durée de la fenêtre de déblocage linéaire après la période d’indisponibilité. 0 signifie que tout se débloque instantanément à la fin de la période d’indisponibilité. |
PoolState.vesting_schedule (une structure VestingSchedule) plus le start_time en chaîne, que le programme enregistre comme block_time + cliff_period au moment où la levée de fonds se termine avec succès (lorsque les conditions de graduation sont d’abord respectées).
allocated_share_amount est le montant total déjà attribué aux comptes VestingRecord via CreateVestingAccount / CreatePlatformVestingAccount. Il ne doit jamais dépasser total_locked_amount. Si un créateur suralloue, l’appel CreateVestingAccount suivant revient avec InvalidTotalLockedAmount.
Formule de déblocage linéaire
Après la fin de la levée de fonds, le programme calcule le montant cumulatif débloqué pour chaqueVestingRecord comme suit :
unlock_period == 0, l’intégralité de token_share_amount devient réclamable en une seule étape à start_time. Sinon, la courbe est une ligne droite allant de 0 à start_time à token_share_amount à start_time + unlock_period, plafonnée à token_share_amount par la suite.
Le montant transféré à chaque appel ClaimVestedToken est le delta entre le montant cumulatif débloqué fraîchement recalculé et le champ claimed_amount en cours sur le dossier.
start_time revient avec VestingNotStarted. Une réclamation après start_time + unlock_period règle le reste complet.
Dispositions des comptes
VestingSchedule
Vit en ligne sur PoolState. Voir accounts.
VestingRecord
Dossier par bénéficiaire. PDA dérivé comme :
VestingRecord par lancement. Réaffecter au même bénéficiaire sur le même lancement revient parce que le PDA existe déjà.
Instructions
CreateVestingAccount
Réservé au créateur. Alloue une tranche du total_locked_amount du pool à un nouveau bénéficiaire en initialisant un nouveau PDA VestingRecord.
Arguments
| # | Nom | W | S | Notes |
|---|---|---|---|---|
| 1 | creator | W | S | Doit égaler pool_state.creator ; paie le loyer pour le nouveau compte. |
| 2 | beneficiary | W | Reçoit les jetons débloqués plus tard. La clé publique est verrouillée ici — elle ne peut pas être modifiée. | |
| 3 | pool_state | W | Muté pour incrémenter vesting_schedule.allocated_share_amount. | |
| 4 | vesting_record | W | init ; PDA [b"pool_vesting", pool_state, beneficiary]. | |
| 5 | system_program | Nécessaire pour la création de compte. |
share_amount > 0.pool_state.vesting_schedule.allocated_share_amount + share_amount <= total_locked_amount.- La clé publique du
beneficiaryn’a pas deVestingRecordexistant pour ce pool.
vesting_recordinitialisé avectoken_share_amount = share_amount,claimed_amount = 0.pool_state.vesting_schedule.allocated_share_amount += share_amount.
InvalidTotalLockedAmount, InvalidInput.
CreatePlatformVestingAccount
Variante de plateforme-administrateur de CreateVestingAccount. Le portefeuille de déblocage progressif de la plateforme (stocké sur PlatformConfig.platform_vesting_wallet) est le bénéficiaire, et la part est limitée par PlatformConfig.platform_vesting_scale.
Le signataire doit égaler platform_config.platform_vesting_wallet. Les autres comptes reflètent CreateVestingAccount. Utilisez ceci quand une plateforme s’engage à recevoir une part de déblocage progressif fixe à chaque lancement qu’elle liste.
ClaimVestedToken
Réservé au bénéficiaire. Transfère les jetons fraîchement débloqués du base_vault du pool vers le compte ATA du bénéficiaire.
Arguments
Aucun (le programme calcule le montant de la réclamation à partir du calendrier).
Comptes
| # | Nom | W | S | Notes |
|---|---|---|---|---|
| 1 | beneficiary | W | S | Doit égaler vesting_record.beneficiary. |
| 2 | authority | PDA [b"vault_auth_seed"] ; signe le transfert du coffre-fort. | ||
| 3 | pool_state | W | Muté uniquement si le calendrier doit être revalidé. | |
| 4 | vesting_record | W | claimed_amount est mis à jour. | |
| 5 | base_vault | W | Coffre-fort de jetons de base du pool ; débité. | |
| 6 | beneficiary_ata | W | Reçoit les jetons débloqués ; init_if_needed. | |
| 7 | base_mint | Mint de jeton de base du pool. | ||
| 8 | token_program | Programme SPL Token ou Token-2022. | ||
| 9 | associated_token_program | Pour la création d’ATA si nécessaire. | ||
| 10 | system_program | Nécessaire pour la création de compte. |
block_time >= pool_state.vesting_schedule.start_time(sinonVestingNotStarted).pool_state.status == PoolStatus::Migrated— la graduation doit avoir déjà eu lieu. L’appel avant la graduation revient.- Le delta du montant débloqué est supérieur à zéro. Un appel sans opération (delta calculé est 0) revient.
vesting_record.claimed_amountavance vers le nouveau montant cumulatif débloqué.delta_amountde jeton de base est transféré versbeneficiary_ata.
VestingNotStarted, NoAssetsToCollect, MathOverflow.
Exemple détaillé
Un lancement définit :supply = 1_000_000_000total_locked_amount = 100_000_000(10 % de la réserve)cliff_period = 180 * 86400(180 jours)unlock_period = 365 * 86400(1 an linéaire après la période d’indisponibilité)
VestingRecord immédiatement après Initialize :
- Bénéficiaire A (équipe) :
share_amount = 70_000_000 - Bénéficiaire B (conseiller) :
share_amount = 30_000_000
allocated_share_amount = 100_000_000, égal à total_locked_amount — aucune allocation supplémentaire possible.
La levée de fonds se termine le 2027-01-01T00:00Z. Le programme définit start_time = 2027-01-01 + 180 jours = 2027-06-30.
Le 2027-09-30 (90 jours après start_time), le bénéficiaire A appelle ClaimVestedToken :
vesting_record.claimed_amount avance à 17_260_274.
Six mois plus tard (2028-03-31, 270 jours après start_time), A réclame à nouveau :
2028-06-30 (la fin de unlock_period), la prochaine réclamation transfère les ~18,22M restants et laisse claimed_amount == token_share_amount.
Cas limites
- Bénéficiaire perd sa clé. La clé publique sur
VestingRecord.beneficiaryest le seul signataire pouvant appelerClaimVestedToken. Il n’y a pas de chemin de récupération. Définissez le bénéficiaire sur un multisig si la récupération est importante. - Frais de transfert Token-2022. Si le mint de base est un mint Token-2022 avec une extension de frais de transfert, le bénéficiaire reçoit
delta_amount − transfer_fee, pas le delta complet. Le coffre-fort du pool enregistre toujours le montant brut comme transféré — la différence s’accumule sur le compte de frais retenus du mint. - Pool non gradué. L’appel de
ClaimVestedTokenavant la graduation revient. L’horloge de déblocage progressif commence uniquement lorsque la levée de fonds se termine réellement ; un lancement avorté (qui ne définit jamaisstart_time) laisse les jetons bloqués inaccessibles dans le coffre-fort. - Tentatives de surallocation. Le programme applique
allocated_share_amount <= total_locked_amountà chaqueCreateVestingAccount. Le reste (s’il y en a) detotal_locked_amountlaissé non alloué est perdu — ces jetons restent dans le coffre-fort pour toujours une fois que le lancement se termine. Allouez le montant complet sauf si c’est l’intention.
Références
products/launchlab/accounts— disposition complète dePoolStateincluantVestingSchedule.products/launchlab/instructions— cycle de vie de la graduation.products/launchlab/platform-config— sémantique deplatform_vesting_scalepour les allocations de plateforme.products/launchlab/global-config— plafond demax_lock_ratequi limitetotal_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.


