> ## 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-31 — LaunchLab: regras de curva de plataforma substituem a lista de permissões de parâmetros de curva

> As restrições de parâmetros de lançamento saem de PlatformConfig.curve_params para contas PlatformCurveRule por configuração com restrições (campo, operador, valor), faixas de valor, grupos de verificação com OU, e uma carteira gerenciadora delegada. PlatformConfig mantém seu tamanho de 944 bytes; o campo legado e suas duas instruções são removidos, e sete códigos de erro são adicionados.

<Info>
  **Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.**

  [Ver versão em inglês →](/reference/changelog/2026-08-31-launchlab-platform-curve-rules)
</Info>

<Info>
  Esta entrada cobre uma atualização futura do programa LaunchLab. Foi verificada contra o branch de lançamento local antes da implantação. Confirme o programa implantado antes de depender das novas contas ou instruções.
</Info>

Uma plataforma já podia restringir quais formatos de lançamento seus criadores podem escolher, através de `PlatformConfig.curve_params`. Esse mecanismo testava **apenas igualdade exata**: uma entrada fixava um campo a um valor ou o colocava em curinga com um sentinela. Também continha no máximo 10 entradas em cada `GlobalConfig` que uma plataforma suportava, e vivia na própria conta `PlatformConfig`, aumentando-a em 491 bytes por entrada.

Essas três propriedades colidiram conforme o protocolo adicionava configurações. Expressar "uma meta de arrecadação entre 50 e 200 SOL" precisava de uma entrada por valor permitido e era, portanto, impossível. Os próprios pisos de `GlobalConfig` haviam sido abertos amplamente — taxas de 1 bps, limites de fornecimento de 99999 — precisamente para que cada plataforma se encaixe sob eles, o que deixava as plataformas sem forma de estreitá-los.

Este lançamento substitui a lista de permissões por **regras de curva**: uma conta `PlatformCurveRule` por par (plataforma, configuração), contendo até 10 grupos de verificação, cada um contendo até 25 restrições `(campo, operador, valor)` sobre 19 parâmetros de lançamento, com `Eq`, `Gte`, `Lte` e `Neq`. Restrições dentro de um grupo são ANDadas, grupos são ORados. Um intervalo é um `Gte` mais um `Lte` no mesmo campo.

O modelo completo e nove playbooks trabalhados estão na nova página: [`products/launchlab/curve-rules`](/pt/products/launchlab/curve-rules).

## TL;DR para integradores

* **`PlatformConfig` mantém seu tamanho e cada deslocamento de campo existente.** É um tamanho fixo de 944 bytes. `curve_params` desapareceu; `restrict_curve_param` (`u8`), `curve_rule_manager` (`Pubkey`) e os 4 bytes que o prefixo de comprimento do vetor ocupava saem do preenchimento, que encolhe de 107 para 78.
* **Decodificadores devem descartar o vetor final.** Um decodificador que ainda espera `Vec<PlatformCurveParam>` após o preenchimento lerá os dois novos campos como bytes de vetor. Tudo antes do preenchimento não é afetado, então um decodificador que apenas lê carteiras de taxas e taxas continua funcionando intacto.
* **Construtores de lançamento precisam de uma conta adicional quando a flag está ativa.** Enquanto `restrict_curve_param` é `1`, `InitializeV2` e `InitializeWithToken2022` exigem o PDA da regra em `remaining_accounts` — *incluindo quando a conta não existe*, para que omiti-la não possa pular a verificação. Derivação: `[b"platform_curve_rule", platform_config, global_config]`.
* **Nenhuma plataforma é restrita por padrão.** `restrict_curve_param` é `0` em cada conta existente, e `0` significa que o programa não lê regras.
* **Duas instruções são removidas:** `UpdatePlatformCurveParam` e `RemovePlatformCurveParam`. Quatro são adicionadas: `CreatePlatformCurveRule`, `UpdatePlatformCurveRule`, `RemovePlatformCurveRule`, `ClosePlatformCurveRule`.
* **`UpdatePlatformConfig` ganha duas variantes:** `RestrictCurveParam(u64)` no índice de despacho 13 e `CurveRuleManager(Pubkey)` em 14. Os índices existentes 0–12 não mudam.
* **Sete códigos de erro são adicionados,** `6024`–`6030`. `6020` `CurveParamIsNotExist` é retido como um espaço reservado mesmo que seu último chamador tenha desaparecido, então nada depois dele muda. Veja [`reference/error-codes`](/pt/reference/error-codes).
* **Uma atualização de IDL é necessária.** Novo tipo de conta, quatro novas instruções, duas removidas, duas novas variantes de despacho, sete novos códigos de erro.
* **Verifique as regras off-chain antes de enviar qualquer coisa.** O SDK expõe `checkLaunchAgainstCurveRule` (espelha a verificação em tempo de lançamento, comportamento fail-closed incluído) e `checkCurveRuleGroupWritable` (espelha a validação em tempo de escrita). Ambas são funções puras. Veja [Verificar antes de enviar](/pt/products/launchlab/curve-rules#check-before-you-send).
* **Ensaie na devnet antes de ativar na mainnet.** Ativar `restrict_curve_param` muda o que seus criadores podem fazer imediatamente. A sequência recomendada — incluindo lançar um token que deve ser rejeitado, para provar que seu construtor realmente passa a conta de regra — está em [Testar na devnet primeiro](/pt/products/launchlab/curve-rules#test-on-devnet-first).

## O que uma regra pode expressar que a lista de permissões não podia

| Intenção                                                         | Lista de permissões          | Regra de curva                                    |
| ---------------------------------------------------------------- | ---------------------------- | ------------------------------------------------- |
| Um formato de lançamento exato                                   | Uma entrada                  | Um grupo com restrições `Eq`                      |
| Uma meta de arrecadação em um intervalo                          | Não expressável              | Duas restrições: `Gte` + `Lte`                    |
| Três níveis de lançamento                                        | Três entradas, apenas exatas | Três grupos                                       |
| Uma faixa de valuation de graduação independente do fornecimento | Não expressável              | Duas restrições no `FundRaisingRateB` derivado    |
| Um piso no que chega ao pool graduado                            | Não expressável              | Uma restrição no `MigrateRateA` derivado          |
| Apenas SPL Token, ou apenas Token-2022                           | Não expressável              | Uma restrição em `BaseTokenProgram`               |
| "Se uma taxa de transferência for definida, limite-a a 1%"       | Não expressável              | Dois grupos, controlados por `TransferFeeEnabled` |
| Uma regra que ativa em uma data, sem supervisão                  | Não expressável              | Dois grupos, controlados por `UnixTimestamp`      |

Os 19 campos incluem as quatro taxas derivadas — `SellRateA`, `LockRate`, `MigrateRateA`, `FundRaisingRateB` — o que torna uma regra portável entre fornecimentos em vez de fixada a um.

## Gerenciamento delegado

`PlatformConfig.curve_rule_manager` é uma carteira ativa que pode criar, atualizar, remover e fechar as contas de regra dessa plataforma. Editar regras é rotina e uma chave de administrador de plataforma geralmente é um multisig; este é o campo que mantém o multisig fora do loop. Defina-o uma vez através de `UpdatePlatformConfig::CurveRuleManager`.

O administrador da plataforma retém o mesmo poder em paralelo — o programa o aceita re-derivando o PDA `PlatformConfig` do signatário — então uma chave de gerenciador perdida é recuperável rotacionando o campo. `Pubkey::default()` significa apenas administrador.

Uma chave de gerenciador comprometida pode afrouxar ou deletar regras de parâmetros e recuperar o aluguel de uma conta de regra. Não pode alternar `restrict_curve_param`, tocar em nenhuma carteira de taxa, campo de vesting ou configuração CPMM, ou quebrar um limite de `GlobalConfig`.

## Aluguel e tamanho

Uma conta de regra é criada sem grupo e redimensionada a cada mudança, então uma plataforma paga pelas regras que realmente escreveu, e remover um grupo reembolsa a diferença ao signatário.

| Conteúdo da regra             | Tamanho     | Aluguel      |
| ----------------------------- | ----------- | ------------ |
| Vazio                         | 150 bytes   | \~0.0019 SOL |
| 1 grupo, 2 restrições         | 200 bytes   | \~0.0023 SOL |
| 3 grupos, 4 restrições cada   | 408 bytes   | \~0.0037 SOL |
| 10 grupos, 25 restrições cada | 4 790 bytes | \~0.034 SOL  |

Como o tamanho é dinâmico, decodificadores devem ler o comprimento real da conta em vez de assumir uma constante.

## Custo de computação no lançamento

A verificação é executada a cada lançamento enquanto está ativada. Medida de ponta a ponta — derivação de PDA, varredura de `remaining_accounts`, desserialização, avaliação:

| Conteúdo da regra             | Campos diretos | Campos derivados |
| ----------------------------- | -------------- | ---------------- |
| Ativado, sem conta de regra   | 1 936          | —                |
| 1 grupo, 2 restrições         | 2 576          | 2 926            |
| 3 grupos, 4 restrições cada   | 3 624          | 5 724            |
| 10 grupos, 25 restrições cada | 24 344         | 68 094           |

Uma restrição derivada custa cerca de 223 CU contra cerca de 48 para uma leitura de campo direto. Mesmo uma regra totalmente carregada fica dentro de um terço do orçamento padrão de 200 000 CU por instrução. Grupos são avaliados até que um corresponda, então o nível mais usado deve vir primeiro.

## A migração única

Plataformas que usavam a lista de permissões foram migradas pelo protocolo em uma única passagem, antes da flag estar disponível para ativar. Uma autoridade dedicada executou uma transação por plataforma que traduziu cada entrada legada nos grupos de verificação da conta de regra da configuração que nomeava, limpou as entradas de `PlatformConfig` e encolheu essa conta de volta para 944 bytes.

A tradução preservou a semântica antiga exatamente: cada entrada se tornou um grupo, cada campo não-sentinela se tornou uma restrição `Eq`, e uma entrada all-sentinela — que correspondia a cada lançamento — se tornou um grupo sem restrições, que também corresponde a cada lançamento.

A migração escreveu regras mas não as ativou. Uma plataforma migrada permaneceu irrestrita até definir `restrict_curve_param` para `1` ela mesma. A instrução de migração foi removida do programa agora que a passagem está completa, junto com o campo legado que lia.

## O que não mudou

* **`GlobalConfig`.** Mesmo layout, mesmos limites, mesmas instruções. Regras estreitam esses limites e são verificadas junto com eles; nunca podem ampliar um.
* **As listas de contas e argumentos das instruções de lançamento.** `InitializeV2` e `InitializeWithToken2022` recebem as mesmas contas fixas e os mesmos argumentos. Apenas `remaining_accounts` ganha uma entrada, e apenas enquanto a flag está ativa.
* **Caminhos de trade, graduação, taxa e vesting.** Intocados.
* **`PlatformAllowConfig`.** Inalterado e não relacionado: decide *quais configurações* os lançamentos de uma plataforma podem usar, enquanto uma regra decide *quais parâmetros* dentro de uma configuração. Os dois flags são independentes.
* **Códigos de erro `6000`–`6023`.** Inalterados, `6020` incluído.
* **Tamanho de `PlatformConfig` e deslocamentos pré-preenchimento.** Inalterados, então contas existentes não precisam de migração própria.

## Páginas atualizadas

* `products/launchlab/curve-rules` — **nova página.** O modelo de três níveis, as tabelas de 19 campos e 4 operadores, nove playbooks, a restrição de tipo de curva, os dois auxiliares de verificação off-chain, a sequência de ensaio na devnet, gerenciamento delegado, aluguel, ordem de lançamento e custo de computação.
* `products/launchlab/platform-config` — "Lista de permissões de parâmetros de curva" substituída por "Regras de parâmetros de lançamento"; layout atualizado para `restrict_curve_param`, `curve_rule_manager` e preenchimento de 78 bytes; tabela de caminho de atualização, snippet de caminho de leitura e armadilhas reescritas.
* `products/launchlab/instructions` — nova seção "Regras de parâmetros de lançamento de plataforma" cobrindo as quatro instruções, suas contas, argumentos e erros; linha de inventário substituída.
* `products/launchlab/accounts` — `PlatformCurveRule` adicionado ao inventário e recebendo sua própria seção com o layout completo e o aviso de tamanho variável.
* `reference/error-codes` — `6024`–`6030` documentados; `6018` e `6020` anotados.
