Skip to main content
Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
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.
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.

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_accountsincluindo 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, 60246030. 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.
  • 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.
  • 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.

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

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. 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: 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 60006023. 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-rulesnova 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/accountsPlatformCurveRule adicionado ao inventário e recebendo sua própria seção com o layout completo e o aviso de tamanho variável.
  • reference/error-codes60246030 documentados; 6018 e 6020 anotados.