Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Eine Kurvenregel ist die Antwort einer Plattform auf die Frage „welche Starts bin ich bereit zu hosten?”.
GlobalConfig setzt die Protokoll-Untergrenze — mindestens 10M Supply, mindestens 20% der Supply auf der Kurve verkauft, und so weiter — und diese Untergrenzen sind absichtlich weit gefasst, damit jede Art von Plattform darunter passt. Eine Kurvenregel ist der Ort, an dem Sie diese auf die Form eingrenzen, die Ihr Produkt tatsächlich unterstützt.Regeln leben in ihrem eigenen PlatformCurveRule-Konto, eines pro (Plattform, GlobalConfig)-Paar. Sie können nur das einengen, was die Config bereits erlaubt; eine Regel kann niemals eine Protokoll-Obergrenze aufheben.Das mentale Modell
Drei Ebenen, von außen nach innen:- Constraints innerhalb einer Gruppe werden UND-verknüpft. Alle müssen erfüllt sein.
- Gruppen innerhalb einer Regel werden ODER-verknüpft. Ein Start ist erlaubt, sobald er eine einzelne Gruppe erfüllt.
Eine Regel tritt nur in Kraft, während
PlatformConfig.restrict_curve_param auf 1 gesetzt ist. Bei 0 liest das Programm Regeln überhaupt nicht, was auch der Schalter ist, den Sie zum Ausrollen und Zurückrollen einer Regel verwenden.
Constraints
Ein Constraint ist ein(Feld, Operator, Wert)-Tripel. Nichts anderes — keine Ausdrücke, keine Verschachtelung.
Gte für die Untergrenze und ein Lte für die Obergrenze. Das gleiche (Feld, Operator)-Paar darf nicht zweimal in einer Gruppe vorkommen, was verhindert, dass Sie zwei widersprüchliche Mindestwerte schreiben.
Felder
Feld-IDs sind dauerhaft. Neue Felder werden nur angehängt, daher ändert sich eine ID nie in ihrer Bedeutung, sobald ein Regelkonto sie enthält.
Die abgeleiteten Felder sind diejenigen, die Regeln portierbar machen. Das Festlegen von
Supply und TotalFundRaisingB auf exakte Zahlen fixiert eine Startform; das Einschränken von FundRaisingRateB fixiert die Beziehung zwischen ihnen und lässt einen Ersteller jede Supply wählen, die sie beibehält.
Die neun Playbooks
Jedes Playbook unten ist eine Regel. Constraints werden als(Feld, Operator, Wert) geschrieben.
1. Eine Standard-Stufe
Die einfachste Regel und das exakte Verhalten, das die eingestellte Kurvenparameter-Whitelist bot: eine Form, festgelegt.
Jeder Start, der in einem der drei abweicht, wird mit
CurveParamNotMatchPlatformRule abgelehnt.
2. Ein Band statt einer Zahl
Der Grund, warum Bänder existieren: Ein Ersteller wählt ein Fundraising-Ziel, mit dem Sie sich wohlfühlen, ohne dass Sie jeden Wert aufzählen müssen.
Eine Gruppe, vier Constraints, und der Ersteller hat einen 50–200 SOL-Korridor. Unter der alten Whitelist brauchte dies einen Eintrag pro zulässigem Wert, und die Obergrenze von zehn Einträgen machte es unmöglich.
3. Stufen nebeneinander
Gruppen werden ODER-verknüpft, daher ist jede Stufe eine Gruppe.
Die Reihenfolge ist wichtig für die Berechnung, nicht für die Semantik: Die Auswertung stoppt bei der ersten Gruppe, die passt, daher sollten Sie Ihre am häufigsten verwendete Stufe zuerst platzieren.
4. Ein Abschluss-Valuierungsband
FundRaisingRateB ist TotalFundRaisingB / Supply in Millionsten. Das Einschränken davon begrenzt, wie wertvoll ein Token unabhängig von der Supply, die der Ersteller wählte, abschließen kann.
Mit einer 1e12 Supply und einer 9-dezimalen Quote-Mint sitzt
85e9 / 1e12 × 1e6 = 85_000 innerhalb dieses Bandes. Ein Ersteller, der die Supply verdoppelt, muss das Ziel ungefähr verdoppeln, um darin zu bleiben — das ist der Sinn. Zwei Constraints ersetzen, was sonst eine Tabelle von (Supply, Ziel)-Paaren wäre.
5. Eine Migrationsuntergrenze
MigrateRateA ist der Anteil der Supply, der beim Abschluss tatsächlich in den CPMM-Pool gelangt: Supply − TotalSellA − TotalLockedAmount, über Supply. Es ist die Tiefe des abgeschlossenen Pools und es ist der einzige Protokoll-Knopf ohne plattformseitiges Äquivalent vor Regeln.
Mindestens 15% der Supply erreichen den Pool. Ein Ersteller kann nicht 95% auf der Kurve verkaufen und ein flaches Buch hinterlassen.
Wenn die Parameter nicht aufgehen — ein gesperrter Betrag größer als das, was nach dem Kurvenverkauf übrig bleibt — kann der abgeleitete Wert nicht berechnet werden und das Constraint schlägt geschlossen fehl, daher wird der Start abgelehnt, anstatt stillschweigend erlaubt zu werden.
6. Vesting, das Sie tatsächlich durchsetzen
GlobalConfig.max_lock_rate begrenzt Vesting von oben. Eine Regel kann eine Untergrenze darunter setzen und einen echten Cliff erfordern.
Zwischen 5% und 20% der Supply gesperrt, mit mindestens einem 30-Tage-Cliff. Nützlich für eine Plattform, deren Pitch „keine Instant-Unlock-Starts” ist.
7. Token-Typ-Gating
BaseTokenProgram und TransferFeeEnabled sind unabhängig, was wichtig ist: Eine Token-2022-Mint ohne TransferFeeConfig meldet TransferFeeEnabled = 0 genau wie eine SPL Token-Mint.
8. Eine bedingte Transfergebühr-Obergrenze
Es gibt keinen „if”-Operator, und keiner ist nötig — zwei Gruppen drücken die Bedingung aus.
Eine Null-Rate
TransferFeeConfig rutscht nicht durch Gruppe 0: die Erweiterung ist vorhanden, daher ist TransferFeeEnabled 1 und nur Gruppe 1 kann sie akzeptieren.
9. Eine zeitlich begrenzte Promo, im Voraus geplant
UnixTimestamp ist die Blockzeit des Starts, daher kann eine Gruppe ihr eigenes Gültigkeitsfenster tragen. Sie schreiben beide Gruppen heute und der Wechsel passiert von selbst.
An der Grenze ist keine Transaktion erforderlich. Die Kosten sind zwei Gruppenplätze statt eines.
Kurventyp-Einschränkungen
Vier Felder lesenTotalSellA: TotalSellA, SellRateA, MigrateAmountA und MigrateRateA. Bei einer Constant-Product-Config liefert der Ersteller diese Zahl. Bei einer Fixed-Price- oder Linear-Price-Config leitet die Kurve sie stattdessen ab, und der Wert, den das Programm vergleicht, ist 0, was jeden Start ablehnen würde.
Anstatt Sie eine Regel schreiben zu lassen, die Ihre eigene Config stillschweigend blockiert, weigert sich das Programm, diese vier Felder zum Schreibzeitpunkt bei einer Non-Constant-Product-Config zu akzeptieren, mit CurveRuleFieldNotSupportedByCurve. Nur Constant-Product-Configs existieren heute, daher werden Sie diesen Fehler in der Praxis nicht antreffen.
Prüfen Sie vor dem Senden
Beide Richtungen der On-Chain-Prüfung sind Off-Chain verfügbar, daher muss weder ein Ersteller noch eine Plattform eine Regel durch das Beobachten von Transaktionsrückgängigmachungen lernen.Versionsbanner.
- SDK:
@raydium-io/raydium-sdk-v2@0.2.42-alphaist die Version, auf die jede andere Code-Demo auf dieser Website gepinnt ist. Die beiden Helfer unten kommen mit der SDK-Version, die Kurvenregel-Unterstützung ausliefert; bis dahin portieren Sie sie aus derplatform_curve_rule.rsdes Programms oder rufen das Programm auf und lesen den Fehlercode. - Cluster: testen Sie zuerst auf Solana
devnet— siehe Testen Sie zuerst auf devnet. - Programm-ID: siehe
reference/program-addresses
Vor einem Start: Werden diese Parameter bestehen?
checkLaunchAgainstCurveRule spiegelt die Startzeit-Prüfung des Programms genau wider, einschließlich ihres Fail-Closed-Verhaltens. Führen Sie es in Ihrem Startformular aus und Sie können die Schaltfläche „Senden” mit einem Grund deaktivieren, anstatt den Ersteller für eine rückgängig gemachte Transaktion bezahlen zu lassen.
- Ein fehlendes Regelkonto und eine Regel ohne Gruppe bestehen beide. Ebenso eine Gruppe ohne Constraints. Übergeben Sie
rule: undefinedfür ein nicht existierendes Konto; behandeln Sie es nicht als Ablehnung. - Nicht berechenbare Werte schlagen geschlossen fehl. Eine Null-Supply hat keine Raten, und ein gesperrter Betrag größer als das, was der Kurvenverkauf hinterlässt, hat keinen Migrationsbetrag.
actualkommt alsundefinedzurück und das Constraint zählt als unerfüllt, genau wie On-Chain. - Alle fehlgeschlagenen Constraints werden gemeldet, nicht nur das erste. Das Programm nimmt eine Abkürzung, weil es nur ein Urteil braucht; der Helfer sammelt alles, damit Ihr Formular jedes Problem auf einmal auflisten kann.
UnixTimestamp in der Nähe einer Grenze verwendet, behandeln Sie einen Pass als vorläufig.
Vor dem Schreiben einer Regel: Ist diese Gruppe gültig?
checkCurveRuleGroupWritable spiegelt die Schreibzeit-Validierung von UpdatePlatformCurveRule wider — Constraint-IDs, die doppelte (Feld, Operator)-Regel, beide Zählgrenzen und die Kurventyp-Einschränkung. Führen Sie es in Ihrem Plattform-Admin-Tool aus, bevor Sie signieren.
Das Bestehen dieser Prüfung bedeutet, dass die Transaktion nicht wegen Fehlformation abgelehnt wird. Es sagt nichts darüber aus, ob die Regel das ist, was Sie gemeint haben — eine Gruppe kann perfekt gültig sein und trotzdem jeden Start ablehnen, den Ihre UI produzieren kann. Das ist der Grund für die Startseite-Prüfung oben: Nach dem Schreiben einer Gruppe führen Sie jede Form, die Ihr Produkt anbietet, durch
checkLaunchAgainstCurveRule aus und bestätigen, dass jede immer noch eine Gruppe findet.Testen Sie zuerst auf devnet
Das Aktivieren vonrestrict_curve_param auf mainnet ändert, was Ihre Ersteller tun können, sofort, für jeden Start. Üben Sie die gesamte Sequenz auf devnet, bevor Sie mainnet berühren:
- Erstellen Sie eine Plattform-Config und eine Regel auf devnet, und schreiben Sie die gleichen Gruppen, die Sie ausliefern möchten.
- Führen Sie jede Startform, die Ihre UI produzieren kann, durch
checkLaunchAgainstCurveRuleaus, und bestätigen Sie, dass die Urteile die sind, die Sie erwarten — sowohl die Formen, die bestehen sollten, als auch die Formen, die abgelehnt werden sollten. - Aktivieren Sie
restrict_curve_param, dann starten Sie tatsächlich einen Token, der bestehen sollte, und einen, der abgelehnt werden sollte. Der zweite sollte mitCurveParamNotMatchPlatformRule(6025) fehlschlagen, nicht mitNotEnoughRemainingAccounts(6018) — letzteres bedeutet, dass Ihr Builder die Regel-PDA nicht anhängt und die Prüfung nicht wirklich ausgeübt wird. - Nur dann auf mainnet wiederholen, in der gleichen Reihenfolge.
Eine Regel betreiben
Der delegierte Manager
Das Bearbeiten von Regeln ist Routinearbeit; ein Plattform-Admin-Schlüssel ist normalerweise ein Multisig.PlatformConfig.curve_rule_manager existiert genau dafür: setzen Sie ihn einmal durch UpdatePlatformConfig::CurveRuleManager, und dieser Hot Wallet kann dann Regelkonten auf eigene Faust erstellen, aktualisieren, entfernen und schließen. Der Plattform-Admin behält die gleiche Macht parallel, daher ist ein verlorener Manager-Schlüssel wiederherstellbar — rotieren Sie ihn mit einem anderen Admin-Aufruf.
Umfang eines kompromittierten Manager-Schlüssels: Er kann Ihre Parameterregeln lockern oder löschen und die Miete eines Regelkontos zurückfordern. Er kann Gebühren-Wallets, Vesting, die CPMM-Config nicht berühren, kann restrict_curve_param nicht umschalten und kann eine GlobalConfig-Grenze nicht brechen. Behandeln Sie ihn als Konfigurationsschlüssel, nicht als Treasury-Schlüssel.
Miete folgt dem Inhalt
Ein Regelkonto wird erstellt, das keine Gruppe hält, und wird bei jeder Änderung vergrößert, daher zahlen Sie für die Regeln, die Sie tatsächlich geschrieben haben. Das Entfernen einer Gruppe erstattet die Differenz an den Unterzeichner.Ausrollungsreihenfolge
- Üben Sie die gesamte Sequenz auf devnet — siehe Testen Sie zuerst auf devnet.
- Erstellen Sie das Regelkonto und schreiben Sie seine Gruppen. Noch nichts ändert sich — mit
restrict_curve_paramimmer noch0liest das Programm sie nicht. - Prüfen Sie die Regel Off-Chain mit
checkLaunchAgainstCurveRule: für jede Startform, die Ihre UI produzieren kann, bestätigen Sie, dass eine Gruppe sie akzeptiert. - Setzen Sie
restrict_curve_paramauf1. Von diesem Moment an werden die Starts Ihrer Ersteller geprüft. - Zum Zurückrollen setzen Sie es auf
0zurück. Das Regelkonto bleibt intakt.
Kosten zum Startzeitpunkt
Die Prüfung läuft bei jedem Start, während sie aktiviert ist, daher ist ihre Rechenkosten eine Pro-Start-Steuer. Gemessen von Ende zu Ende — PDA-Ableitung, derremaining_accounts-Scan, Deserialisierung und Auswertung:
„Billig” ist ein direktes Feldlesen wie
Supply; „abgeleitet” ist ein berechnetes wie MigrateRateA, das etwa 223 CU pro Constraint kostet, gegenüber etwa 48. Selbst eine vollständig beladene Regel abgeleiteter Constraints bleibt unter einem Drittel des Standard-Budgets von 200 000 CU pro Anweisung, und eine realistische Drei-Gruppen-Regel liegt unter 6 000. Gruppen werden ausgewertet, bis eine passt, daher ist das Platzieren Ihrer häufigen Stufe zuerst kostenlose Einsparungen.
Wo es weitergeht
products/launchlab/platform-config— diePlatformConfig-Felder, die Regeln gating und delegieren.products/launchlab/global-config— die Protokoll-Untergrenzen, die eine Regel eingrenzt.products/launchlab/instructions— die vier Regelanweisungen und ihre Konten.products/launchlab/accounts—PlatformCurveRuleim Kontobestand.sdk-api/typescript-sdk— die SDK-Oberfläche, auf der die beiden Check-Helfer leben.reference/changelog/2026-08-31-launchlab-platform-curve-rules— was die Kurvenparameter-Whitelist ersetzte und was Decoder ändern müssen.
raydium-launch/programs/launchpad/src/states/platform_curve_rule.rs—PlatformCurveRule,CurveRuleGroup,ParamConstraint, die Feld- und Operator-ID-Räume undCurveRuleContext::value_of.raydium-launch/programs/launchpad/src/utils/platform_curve_rule.rs— die Startzeit-Prüfung.raydium-launch/programs/launchpad/src/instructions/platform/—create,update,removeundclose_platform_curve_rule.

