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 →
PlatformConfig é a sobreposição em nível de plataforma que fica sobre GlobalConfig. Enquanto GlobalConfig define as regras em todo o protocolo (“taxa de negociação é 1%, fornecimento deve ser pelo menos 10M, apenas esta carteira pode se formar”), PlatformConfig é o que cada plataforma de lançamento — pump.fun, a própria UI do Raydium, launchpads de terceiros — usa para adicionar sua taxa, reivindicar sua fatia do LP pós-graduação, restringir quais parâmetros de lançamento seus lançamentos podem escolher e exibir sua marca (nome, site, imagem) on-chain.

O que é

Uma conta PlatformConfig gerencia cinco responsabilidades transversais para uma plataforma:
  1. Marca — nome, site, link de imagem, todos armazenados inline para que qualquer explorador ou agregador possa exibir a plataforma que lançou um token.
  2. Taxa de plataforma — uma taxa de negociação extra (fee_rate) além da trade_fee_rate do protocolo. Acumula na platform_fee_wallet da plataforma. Limitada a 500 bps (50000) tanto no caminho de criação quanto de atualização, aumentada de 100 bps (10000) em 2026-08-26 — veja Limites de taxa.
  3. Divisão de migração de LP — três inteiros armazenados (platform_scale, creator_scale, burn_scale) que somam 1_000_000. Antes da atualização de 2026-08-17, a escala do criador produzia uma Fee Key separada do criador. Migrações executadas após a atualização combinam as duas primeiras em uma compartilhamento de LP bloqueado de propriedade da plataforma; o restante é queimado.
  4. Regras de parâmetros de lançamento — uma restrição opcional (restrict_curve_param) que exige que um lançamento satisfaça a conta PlatformCurveRule do GlobalConfig que selecionou. As regras suportam faixas de valor, níveis alternativos e restrição por tipo de token; elas vivem em suas próprias contas, não em PlatformConfig.
  5. Lista de permissões de configuração global — uma restrição opcional que exige um PlatformAllowConfig criado pela plataforma para o GlobalConfig selecionado.
Derivação de PDA:
(Veja create_platform_config no código-fonte para a lista de seeds canônica.)

Layout

A conta tem um tamanho fixo de 944 bytes. Ela continha um Vec<PlatformCurveParam> à direita até a versão de 2026-08-31 que moveu parâmetros de lançamento para contas PlatformCurveRule; restrict_curve_param, curve_rule_manager e os 4 bytes que o prefixo de comprimento do vec ocupava saem do padding, então a contagem de bytes e cada offset de campo anterior permanecem inalterados. Veja a entrada do changelog para o que os decodificadores devem mudar. platform_scale + creator_scale + burn_scale deve ser igual a 1_000_000. Antes da atualização de 2026-08-17, creator_scale era bloqueado separadamente e sua Fee Key ia para o criador do token. Para migrações executadas após a atualização, é adicionado a platform_scale e seus direitos de LP bloqueado vão para a plataforma. Exemplos de resultados sob a lógica atualizada:
  • (0, 100_000, 900_000) — 90% LP queimado, 10% bloqueado para a plataforma.
  • (50_000, 100_000, 850_000) — 85% queimado, 15% bloqueado para a plataforma.
  • (0, 0, 1_000_000) — queima total, sem cunhagem de NFT. Lançamentos estritos “sem insiders”.

Campos de marca

name, web e img são arrays de bytes inline preenchidos com zeros até suas constantes de tamanho. Para lê-los como strings, fatia até o primeiro \0:
As constantes são deliberadamente generosas (name: 64, web: 256, img: 256) para que as plataformas possam incluir metadados suficientes para exploradores e agregadores sem acessar armazenamento off-chain. Qualquer coisa que exceda esses tamanhos reverte em CreatePlatformConfig com InvalidInput.

Mecânica de taxas

Um swap em uma curva vinculada a um PlatformConfig cobra três taxas em camadas:
  • trade_fee acumula no protocol_fee_owner do protocolo (reivindicado via CollectFee).
  • platform_fee acumula em um cofre por plataforma (reivindicado via ClaimPlatformFee ou ClaimPlatformFeeFromVault; veja instructions).
  • creator_fee acumula em um cofre por criador com chave pela pubkey do criador + mint de cotação (reivindicado via ClaimCreatorFee).

Limites de taxa

Ambas as taxas são denominadas em 1/1_000_000, então 5000 é 50 bps e 50000 é 500 bps. Os dois pontos de aplicação para fee_rate são chamadas require! separadas em arquivos diferentes, então carregam códigos de erro diferentes, mas aplicam o mesmo limite. Uma plataforma criada em qualquer taxa permitida pode ser editada depois, inclusive através da variante AllInfo em massa que reescreve cada campo de uma vez. Ambos os limites de fee_rate eram originalmente 100 bps (10000). O limite de atualização moveu para 25000 (250 bps) em 2026-01-27; em 2026-08-26 ambos moveram para 50000 (500 bps) — veja a entrada do changelog. GlobalConfig.max_share_fee_rate não limita nenhuma das duas taxas. Ele limita o argumento share_fee_rate por transação que as quatro instruções de swap recebem — a taxa de referência — e nada mais. Veja global-config.

Autoridades de taxa de transferência Token-2022

transfer_fee_extension_auth nomeia a chave da plataforma que acaba segurando as autoridades TransferFeeConfig do mint base quando um lançamento é criado através de InitializeWithToken-2022 com uma taxa de transferência anexada. A extensão carrega duas autoridades e são entregues em pontos diferentes do ciclo de vida do lançamento: Antes de 2026-08-27 o mint era criado com o PDA authority em ambas as autoridades, e ambas se moviam para a plataforma na graduação. O programa não expõe nenhuma instrução de retirada de retido ou colheita, então as taxas retidas durante a fase de curva de ligação eram inacessíveis até o lançamento se formar. Escrever o lado de retirada na criação do mint as torna reivindicáveis desde o primeiro trade — veja a entrada do changelog. Duas consequências que valem a pena planejar:
  • Defina o campo antes de lançar, não depois. Um lançamento criado enquanto transfer_fee_extension_auth é Pubkey::default() coloca o PDA authority no lado de retirada. Definir o campo depois ainda funciona — a graduação encontra o PDA no lugar e entrega a autoridade — mas nada pode retirar o saldo retido enquanto isso.
  • Girar o campo durante o lançamento divide as duas autoridades. Mude transfer_fee_extension_auth entre a criação e a graduação de um lançamento e a autoridade de retirada de retido do mint fica com a chave configurada na criação (o PDA não a mantém mais, então a migração pula esse repasse) enquanto a autoridade de configuração de taxa vai para a nova chave. Gire entre lançamentos ou planeje reconciliar as duas chaves você mesmo através de Token-2022 diretamente.
Uma plataforma que deixa o campo em Pubkey::default() pela vida toda de um lançamento mantém ambas as autoridades no PDA authority permanentemente: a taxa nunca pode ser mudada e o saldo retido nunca pode ser retirado. Apenas anexe uma taxa de transferência a um lançamento se a plataforma pretender manter essas chaves.

Divisão de migração de NFT (apenas CPMM)

Quando um lançamento se forma para CPMM, a instrução de migração divide os tokens LP cunhados por CPMM::InitializeWithPermission de duas maneiras:
Se lp_to_platform for diferente de zero, o programa LP-Lock o envolve em um NFT Fee Key de propriedade de platform_nft_wallet. Isso substitui o comportamento pré-atualização que criava Fee Keys separadas de plataforma e criador. Fee Keys criadas por migrações concluídas antes da atualização permanecem inalteradas. Este direito de taxa de LP é separado das taxas de criador CPMM controladas por platform_cp_creator. A fatia de queima é queimada diretamente, então nenhuma conta pode retirá-la ou reivindicar as taxas de LP representadas por essa compartilhamento. Lançamentos existentes com migrate_type = 0 armazenado ainda podem usar o caminho AMM v4 legado. A nova inicialização rejeita esse tipo de migração.

Regras de parâmetros de lançamento

restrict_curve_param é o interruptor. Em 0 o programa não lê regras. Em 1, cada lançamento roteado através desta plataforma deve satisfazer a conta PlatformCurveRule do GlobalConfig que selecionou, e o construtor de lançamento deve anexar essa conta a remaining_accounts.
Uma regra é um menu de formas de lançamento permitidas: restrições dentro de um grupo de verificação são ANDadas, grupos são ORados, e cada restrição é um triplo (field, op, value) suportando Eq, Gte, Lte e Neq. Isso cobre faixas de valor, níveis alternativos, limites de avaliação de graduação, pisos de migração, restrição por tipo de token e grupos com limite de tempo — o modelo completo, a tabela de campos e nove playbooks trabalhados estão em products/launchlab/curve-rules. Duas coisas pertencem aqui em vez de naquela página:
  • curve_rule_manager é uma delegação, não uma transferência. Defina através de UpdatePlatformConfig::CurveRuleManager e essa carteira pode criar, atualizar, remover e fechar as contas de regra desta plataforma sem a chave de admin. O admin da plataforma mantém o mesmo poder em paralelo, então girar ou limpar o campo recupera o controle. Pubkey::default() significa que apenas o admin pode gerenciar regras. Não pode virar restrict_curve_param, que permanece uma chamada apenas de admin.
  • Regras são aplicadas em cima de GlobalConfig, nunca em vez disso. A verificação de regra é executada antes dos próprios limites da config e pode apenas estreitá-los.
Isso substitui a antiga lista de permissões curve_params: Vec<PlatformCurveParam>, que só podia testar igualdade exata, tinha no máximo 10 entradas em todas as configs e crescia a própria conta PlatformConfig. Plataformas que a usavam foram migradas pelo protocolo em uma passagem única; o campo legado, suas duas instruções e MAX_CURVE_PARAMS desapareceram.

PlatformAllowConfig — restringindo uma plataforma

Cada plataforma decide se restringe quais contas GlobalConfig seus lançamentos podem usar. Defina restrict_global_config com UpdatePlatformConfig::RestrictGlobalConfig(0 | 1).
Seeds de PDA: [b"platform_allow_config", platform_config, global_config]. O admin da plataforma cria ou fecha uma conta por par permitido via CreatePlatformAllowConfig e ClosePlatformAllowConfig. Quando a restrição é 1, a inicialização procura em remaining_accounts pelo PDA esperado e rejeita uma conta ausente com NotEnoughRemainingAccounts. Quando a restrição é 0, nenhuma conta de permissão é necessária. A antiga conta PlatformGlobalAccess gerenciada pelo admin do protocolo e suas instruções de criar/fechar são aposentadas. Os tamanhos existentes de PlatformConfig e GlobalConfig não mudam, mas os decodificadores devem substituir o antigo sinalizador global pelo novo sinalizador de plataforma. PDAs de acesso antigos não são consumidos pela nova verificação.

Caminho de leitura

Para uma UI mostrando “de onde este token foi lançado”, PoolState.platform_config aponta para o PlatformConfig originário diretamente — busque uma vez e coloque em cache a marca.

Caminho de atualização

Rotações de carteira (platform_fee_wallet, platform_nft_wallet, platform_vesting_wallet, platform_cp_creator, transfer_fee_extension_auth, cpswap_config) todas passam por UpdatePlatformConfig. Leia a tabela de despacho update_platform_config do código-fonte para os códigos param exatos.

Armadilhas comuns

  • restrict_curve_param habilitado antes do construtor ser atualizado. Enquanto for 1 o PDA de regra deve estar em remaining_accounts em cada lançamento, mesmo para uma config sem conta de regra — uma conta ausente é NotEnoughRemainingAccounts, não uma passagem. Envie a mudança do construtor primeiro, depois vire a bandeira.
  • restrict_curve_param habilitado com uma regra vazia. Uma regra segurando zero grupos, ou um grupo segurando zero restrições, permite tudo. Habilitar a bandeira não é por si só uma restrição; escreva os grupos primeiro, verifique-os com a verificação do SDK e ensaie a sequência inteira em devnet.
  • Arredondamento de divisão de NFT. As três escalas devem somar exatamente 1_000_000. Erros de um em CreatePlatformConfig revertam; um erro de um em tempo de execução cunharia ou queimaria uma unidade LP extra, que é o que a verificação de igualdade estrita está lá para prevenir.
  • Dupla alocação de vesting de plataforma. Se platform_vesting_scale > 0, a plataforma deve chamar CreatePlatformVestingAccount uma vez após o término da arrecadação do lançamento; se esquecer, essa compartilhamento permanece não alocada e dormente para sempre (o orçamento total_locked_amount do lançamento é consumido mas a plataforma nunca reclama).
  • Ambiguidade de platform_cp_creator. Quando definido para Pubkey::default(), o criador do lançamento é registrado como o pool_creator do pool CPMM pós-graduação; quando definido para uma chave real, essa chave é registrada. Isso determina o beneficiário das taxas de criador CPMM pós-graduação e quem pode assinar o caminho original CPMM::CollectCreatorFee. O caminho de coleta sem permissão ainda paga as ATAs canônicas dessa chave registrada. Decida no momento da criação da config de plataforma qual modelo você quer.
  • transfer_fee_extension_auth definido tarde ou girado. O campo é lido duas vezes por lançamento Token-2022 — uma vez na criação do mint para withdraw_withheld_authority, uma vez na graduação para transfer_fee_config_authority — então um valor que muda entre esses dois momentos deixa as duas autoridades em chaves diferentes. Veja Autoridades de taxa de transferência Token-2022.
  • Restrição sem uma conta de permissão. Habilitar restrict_global_config antes de criar o PlatformAllowConfig necessário bloqueia novos lançamentos que selecionam essa config.

Ponteiros

Fontes:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, is_curve_rule_manager, is_platform_admin.
  • raydium-launch/programs/launchpad/src/states/platform_curve_rule.rsPlatformCurveRule, CurveRuleGroup, ParamConstraint.
  • raydium-launch/programs/launchpad/src/states/platform_allow_config.rsPlatformAllowConfig.
  • raydium-launch/programs/launchpad/src/instructions/platform/update_platform_config.rs — despacho PlatformConfigParam e os setters por campo que aplicam os limites de taxa em tempo de atualização.
  • raydium-launch/programs/launchpad/src/lib.rs — pontos de entrada de config de plataforma e allow-config.
  • raydium-launch/programs/launchpad/src/instructions/initialize_with_token_2022.rs — onde transfer_fee_extension_auth é escrito no TransferFeeConfig do novo mint.
  • raydium-launch/programs/launchpad/src/instructions/admin/migrate_to_cpswap.rs — o repasse de autoridade em tempo de graduação e sua guarda get_withdraw_withheld_authority.