Zum Hauptinhalt springen
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Vesting ist optional bei einem LaunchLab-Launch. Setzen Sie vesting_param.total_locked_amount = 0 bei Initialize, und der folgende Abschnitt gilt nicht. Einmal aktiviert, bleibt der Zeitplan für die gesamte Lebensdauer des Launches festgelegt; Cliff und Unlock-Perioden können später nicht rückwirkend geändert werden.

Warum Vesting?

Die Bonding Curve verkauft während der Fundraising-Phase base_supply_graduation Token und bestückt den Pool nach der Graduation mit dem Rest. Vesting entzieht der Versorgung zusätzlich eine Portion, sperrt sie für einen konfigurierbaren Cliff, gibt sie dann aber linear an einen oder mehrere Begünstigte frei – typischerweise das Team des Gründers, Berater oder Plattformpartner. Praktische Anwendungsfälle:
  • Team-Zuteilung. Ein Gründer reserviert z. B. 5 % der Versorgung für das Gründungsteam, gesperrt für 6 Monate und linear über die folgenden 12 Monate freigegeben.
  • Plattform-Zuteilung. Eine Launch-Plattform erhält einen Anteil an jedem Token, den sie auflistet, nach dem gleichen Zeitplan, über CreatePlatformVestingAccount.
  • Berater- / Mitwirkendenzuschüsse. Mehrere Begünstigte mit eigenen VestingRecord-Konten, die jeweils ihren beanspruchten Betrag unabhängig nachverfolgen.
Gesperrte Token treten nie in die Curve ein und sind nicht Teil der Graduation LP. Sie ruhen untätig im base_vault des Pools, bis jeder Begünstigte ClaimVestedToken aufruft.

Zeitplan-Form

Vesting für einen Launch wird durch drei Zahlen beschrieben, die einmalig bei Initialize erfasst werden: Diese drei Werte befinden sich auf PoolState.vesting_schedule (eine VestingSchedule-Struktur) plus dem On-Chain-start_time, den das Programm als block_time + cliff_period in dem Moment erfasst, in dem die Fundraising erfolgreich endet (wenn Graduationsbedingungen zuerst erfüllt sind).
allocated_share_amount ist der Gesamtbetrag, der bereits über CreateVestingAccount / CreatePlatformVestingAccount VestingRecord-Konten zugeordnet wurde. Darf nie total_locked_amount überschreiten. Wenn ein Gründer über-allokiert, wird der nächste CreateVestingAccount-Aufruf mit InvalidTotalLockedAmount rückgängig gemacht.

Lineare Freigabeformel

Nach Ende der Fundraising berechnet das Programm den kumulativen freigegeben Betrag für jeden VestingRecord wie folgt:
Wenn unlock_period == 0, wird der gesamte token_share_amount in einem Schritt bei start_time abrufbar. Andernfalls ist die Kurve eine gerade Linie von 0 bei start_time bis token_share_amount bei start_time + unlock_period, danach auf token_share_amount begrenzt. Der auf jedem ClaimVestedToken-Aufruf übertragene Betrag ist die Differenz zwischen dem neu berechneten kumulativen freigegeben Betrag und dem laufenden claimed_amount-Feld im Record.
Eine Inanspruchnahme vor start_time wird mit VestingNotStarted rückgängig gemacht. Eine Inanspruchnahme nach start_time + unlock_period begleicht den verbleibenden Rest.

Konto-Layouts

VestingSchedule

Befindet sich inline auf PoolState. Siehe accounts.

VestingRecord

Pro-Begünstigter Record. PDA abgeleitet als:
Ein Begünstigter kann nur einen VestingRecord pro Launch haben. Eine erneute Zuordnung zum gleichen Begünstigten auf dem gleichen Launch wird rückgängig gemacht, da die PDA bereits existiert.

Instruktionen

CreateVestingAccount

Nur Gründer. Weist einen Anteil des Pools total_locked_amount einem neuen Begünstigten zu, indem eine neue VestingRecord-PDA initialisiert wird. Argumente
Konten Vorbedingungen
  • share_amount > 0.
  • pool_state.vesting_schedule.allocated_share_amount + share_amount <= total_locked_amount.
  • Der beneficiary-Pubkey hat keinen bestehenden VestingRecord für diesen Pool.
Nachbedingungen
  • vesting_record initialisiert mit token_share_amount = share_amount, claimed_amount = 0.
  • pool_state.vesting_schedule.allocated_share_amount += share_amount.
Häufige FehlerInvalidTotalLockedAmount, InvalidInput.

CreatePlatformVestingAccount

Plattform-Admin-Variante von CreateVestingAccount. Das Vesting-Wallet der Plattform (gespeichert auf PlatformConfig.platform_vesting_wallet) ist der Begünstigte, und der Anteil ist durch PlatformConfig.platform_vesting_scale begrenzt. Der Unterzeichner muss platform_config.platform_vesting_wallet entsprechen. Andere Konten spiegeln CreateVestingAccount. Verwenden Sie dies, wenn sich eine Plattform darauf einigt, auf jedem Launch, den sie auflistet, einen festen Vesting-Anteil zu erhalten.

ClaimVestedToken

Nur Begünstigter. Überträgt alle neu freigegeben Token aus dem base_vault des Pools auf das ATA des Begünstigten. Argumente Keine (das Programm berechnet den Beanspruchungsbetrag aus dem Zeitplan). Konten Vorbedingungen
  • block_time >= pool_state.vesting_schedule.start_time (andernfalls VestingNotStarted).
  • pool_state.status == PoolStatus::Migrated – Graduation muss bereits stattgefunden haben. Ein Aufruf vor Graduation wird rückgängig gemacht.
  • Das entsperrte-Betrag-Delta ist größer als Null. Ein No-Op-Aufruf (berechneters Delta ist 0) wird rückgängig gemacht.
Nachbedingungen
  • vesting_record.claimed_amount geht zum neuen kumulativen entsperrten Betrag über.
  • delta_amount Basis-Token wird zu beneficiary_ata übertragen.
Häufige FehlerVestingNotStarted, NoAssetsToCollect, MathOverflow.

Bearbeitetes Beispiel

Ein Launch setzt:
  • supply = 1_000_000_000
  • total_locked_amount = 100_000_000 (10 % der Versorgung)
  • cliff_period = 180 * 86400 (180 Tage)
  • unlock_period = 365 * 86400 (1 Jahr linear nach dem Cliff)
Der Gründer weist sofort nach Initialize zwei VestingRecord-Konten zu:
  • Begünstigter A (Team): share_amount = 70_000_000
  • Begünstigter B (Berater): share_amount = 30_000_000
allocated_share_amount = 100_000_000, gleich total_locked_amount – weitere Zuordnungen sind nicht möglich. Fundraising wird am 2027-01-01T00:00Z abgeschlossen. Das Programm setzt start_time = 2027-01-01 + 180 Tage = 2027-06-30. Am 2027-09-30 (90 Tage nach start_time) ruft Begünstigter A ClaimVestedToken auf:
A’s Wallet empfängt 17,26 M Basis-Token. vesting_record.claimed_amount geht zu 17_260_274 über. Sechs Monate später (2028-03-31, 270 Tage nach start_time) macht A Anspruch:
A empfängt weitere 34,52 M Token. Nach 2028-06-30 (Ende von unlock_period) überträgt der nächste Anspruch die verbleibenden ~18,22 M und lässt claimed_amount == token_share_amount.

Grenzfälle

  • Begünstigter verliert seinen Schlüssel. Der Pubkey auf VestingRecord.beneficiary ist der einzige Unterzeichner, der ClaimVestedToken aufrufen kann. Es gibt keinen Wiederherstellungspfad. Setzen Sie den Begünstigten auf eine Multisig, wenn Wiederherstellung wichtig ist.
  • Token-2022-Transfergebühren. Wenn die Basis-Mint eine Token-2022-Mint mit einer Transfergebührerweiterung ist, empfängt der Begünstigte delta_amount − transfer_fee, nicht das vollständige Delta. Der Vault des Pools erfasst immer noch den Bruttobetrag als übertragen – die Differenz wird dem Withheld-Fee-Konto der Mint zugerechnet.
  • Pool nicht graduiert. Ein Aufruf von ClaimVestedToken vor Graduation wird rückgängig gemacht. Die Vesting-Uhr beginnt nur, wenn die Fundraising tatsächlich abgeschlossen ist; ein abgebrochener Launch (der nie start_time setzt) hinterlässt gesperrte Token unerreichbar im Vault.
  • Über-Allokations-Versuche. Das Programm setzt allocated_share_amount <= total_locked_amount auf jedem CreateVestingAccount durch. Der Rest (falls vorhanden) von total_locked_amount bleibt unzugeordnet und ist verloren – diese Token bleiben einmal Graduation für immer im Vault. Ordnen Sie den vollständigen Betrag zu, es sei denn, das ist beabsichtigt.

Verweise

Quellen:
  • raydium-launch/programs/launchpad/src/states/vesting.rsVestingRecord.
  • raydium-launch/programs/launchpad/src/states/pool.rsVestingSchedule, 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.