> ## 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.

# 2026-08-26 — LaunchLab: platform fee rate cap raised to 500 bps

> The platform fee_rate ceiling moves to 500 bps on both the create and the update path. CreatePlatformConfig was capped at 100 bps and UpdatePlatformConfig at 250 bps; both are now 50000. No account layout, instruction, or error change.

<Info>
  This entry covers an upcoming LaunchLab program update. It was verified against the local release branch before deployment. Confirm the deployed program before creating or updating a platform above the old ceilings.
</Info>

This release raises the platform fee ceiling to 500 bps. `PlatformConfig.fee_rate` is validated in two places — once when `CreatePlatformConfig` builds the account, and once on every `UpdatePlatformConfig` variant that writes the field — and both now accept up to `50000`. In the program's `1/1_000_000` rate denominator that is 5% of trade volume on every pre-graduation buy and sell.

Before this release the two checks disagreed: create allowed 100 bps and update allowed 250 bps. They now hold the same value, so the rate a platform can be created at is exactly the rate it can be updated to.

Nothing else changed. No account grew or shrank, no instruction gained or lost an account, and no error code moved.

## TL;DR for integrators

* **The platform fee ceiling is 500 bps on both paths.** `CreatePlatformConfig` and `UpdatePlatformConfig` both accept `fee_rate` up to `50000`.
* **Create moved from 100 bps.** `PlatformParams::check()` had been `<= 10000` since the program's first release.
* **Update moved from 250 bps.** `update_platform_fee_rate` was `<= 25000`, itself raised from 100 bps on 2026-01-27.
* **The create/update mismatch is gone.** A config created above 250 bps could not previously survive an `UpdatePlatformConfig` call, because `AllInfo` re-validates `fee_rate` while rewriting every other field. Both checks now agree, so that edit path works at any permitted rate.
* **`creator_fee_rate` is unchanged** at `MAX_CREATOR_FEE_RATE = 5000` (50 bps) on both paths.
* **`GlobalConfig.max_share_fee_rate` is unchanged** at `10_000` (100 bps), and never bounded the platform fee. It bounds the per-transaction `share_fee_rate` referral argument. Earlier versions of this documentation said otherwise; this release corrects that.
* **Nothing existing repriced.** These constants gate writes to `fee_rate`, not reads. Every `PlatformConfig` already on-chain keeps its current rate, and every launch bound to one keeps its current fee.
* **No IDL refresh is required.** No layouts, accounts, arguments, or error codes changed.

## What changed

```rust theme={null}
// states/platform_config.rs — PlatformParams::check(), run by CreatePlatformConfig
- require!(self.fee_rate <= 10000, ErrorCode::InvalidInput);
+ require!(self.fee_rate <= 50000, ErrorCode::InvalidInput);

// instructions/platform/update_platform_config.rs — update_platform_fee_rate
- require!(fee_rate <= 25000, ErrorCode::InvalidPlatformInfo);
+ require!(fee_rate <= 50000, ErrorCode::InvalidPlatformInfo);
```

Rates in LaunchLab are denominated in `1/1_000_000` (`RATE_DENOMINATOR_VALUE`), so:

| Value   | Rate | Basis points | Where it appears                                                                                                                         |
| ------- | ---- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `10000` | 1%   | 100 bps      | Both fee caps at the program's first release. Also the current `GlobalConfig.max_share_fee_rate`, which is a different, unchanged limit. |
| `25000` | 2.5% | 250 bps      | The update cap between 2026-01-27 and this release. No longer used.                                                                      |
| `50000` | 5%   | 500 bps      | Both caps after this release.                                                                                                            |

## Where the two checks live

The ceiling is enforced by two separate `require!` calls in two files. They now hold the same value, but they still raise different errors, so error handling needs to recognize both:

| Path                            | Function                   | Error on violation             |
| ------------------------------- | -------------------------- | ------------------------------ |
| `CreatePlatformConfig`          | `PlatformParams::check()`  | `InvalidInput` (`6002`)        |
| `UpdatePlatformConfig::FeeRate` | `update_platform_fee_rate` | `InvalidPlatformInfo` (`6014`) |
| `UpdatePlatformConfig::AllInfo` | `update_platform_fee_rate` | `InvalidPlatformInfo` (`6014`) |

`AllInfo` is the bulk-update variant: it rewrites the wallets, the branding strings, the vesting scale, the NFT split, the transfer-fee authority, the creator fee rate, and `fee_rate` in one call, running the same check on `fee_rate` that the single-field variant does. Under the old constants that made `AllInfo` unusable for a platform created in the 250–500 bps band, even for an edit that only touched an image URL. Aligning the two constants removes that trap.

## What did not change

* **Fee accounting and distribution.** `platform_fee = amount_in × platform_config.fee_rate / 1_000_000` is the same formula, accruing to the same per-platform vault, swept by the same `ClaimPlatformFee` and `ClaimPlatformFeeFromVault` instructions.
* **Existing platforms and launches.** The constants gate writes, not reads. No stored rate changed, so no live launch reprices.
* **`creator_fee_rate`.** Still capped at `MAX_CREATOR_FEE_RATE = 5000` (50 bps) on both paths.
* **`GlobalConfig.max_share_fee_rate`.** Still `10_000`, still bounding only the `share_fee_rate` argument on the four swap instructions.
* **Error codes.** `6000`–`6023` are unchanged; this release adds none.
* **Account layouts and the IDL.** Unchanged.

## Documentation correction

Two pages attributed the platform fee cap to `GlobalConfig.max_share_fee_rate`. The program never did that — it compares `max_share_fee_rate` against the `share_fee_rate` instruction argument, and validates `PlatformConfig.fee_rate` only in the two functions listed above. This release corrects those sentences. The referral-fee cap itself is unchanged at 100 bps, so if you read the old wording as "the platform fee is capped at 100 bps", the number was right for the create path until this release even though the reason was not.

## Pages updated

* `products/launchlab/platform-config` — new "Rate caps" section covering both rates, both enforcement points, and the rate history.
* `products/launchlab/global-config` — `max_share_fee_rate` corrected to describe the referral share fee it actually bounds.
