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 no nível da plataforma que fica acima de 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 interface do Raydium, launchpads de terceiros — usa para adicionar sua taxa, reivindicar sua fatia do LP pós-graduação, restringir quais formas de curva 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 100 bps por GlobalConfig.max_share_fee_rate.
  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. Lista de permissões de parâmetros de curva — um Vec<PlatformCurveParam> listando exatamente quais combinações de (supply, total_base_sell, total_quote_fund_raising, migrate_type, migrate_cpmm_fee_on, vesting_params...) são permitidas nesta plataforma. Se o vetor estiver vazio ou todas as entradas forem inválidas, qualquer combinação é permitida; caso contrário, os lançamentos devem corresponder exatamente a uma das entradas.
  5. Lista de permissões de configuração global — uma restrição opt-in que requer um PlatformAllowConfig criado pela plataforma para a GlobalConfig selecionada.
Derivação de PDA:
(Veja create_platform_config no código-fonte para a lista de seeds canônica.)

Layout

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 do pubkey do criador + quote mint (reivindicado via ClaimCreatorFee).
creator_fee_rate é limitado por MAX_CREATOR_FEE_RATE = 5000 (50 bps). fee_rate (a taxa de plataforma) é limitado a 10000 (100 bps) por GlobalConfig.max_share_fee_rate.

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 uma Fee Key NFT 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, portanto nenhuma conta pode sacá-la ou reivindicar as taxas de LP representadas por essa fatia. 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.

Lista de permissões de parâmetros de curva

curve_params: Vec<PlatformCurveParam> é o mecanismo da plataforma para restringir quais formas de curva seus lançamentos podem escolher. Se o vetor não estiver vazio e pelo menos uma entrada for válida, o programa força em Initialize que os parâmetros do lançamento correspondam exatamente a pelo menos uma entrada.
Cada campo tem um valor sentinela que significa wildcard (qualquer valor corresponde): u64::MAX para os campos u64, u8::MAX para os campos u8, 0 para os campos de fornecimento / venda / arrecadação de fundos. Um BondingCurveParam com todos os sentinelas é “permitir qualquer coisa” — equivalente ao comportamento de lista vazia. O algoritmo de correspondência em Initialize:
  1. Filtra curve_params para entradas cuja global_config corresponde à GlobalConfig escolhida do lançamento.
  2. Se a lista filtrada estiver vazia, permite qualquer parâmetro (a plataforma não colocou na lista de permissões nada para esta GlobalConfig).
  3. Se cada entrada na lista filtrada tiver all_is_invalid() (cada campo é o wildcard), permite qualquer parâmetro.
  4. Caso contrário, itera entradas; para cada entrada, verifica os parâmetros do lançamento contra cada campo não-wildcard. Se todos os campos não-wildcard corresponderem, aceita e retorna.
  5. Se nenhuma entrada correspondeu, reverte com InvalidInput.
Isso permite que uma plataforma diga “permitimos apenas a forma padrão de 1B de fornecimento / 800M vendidos / 30k USDC de arrecadação / sem vesting” escrevendo uma única entrada com valores concretos para esses quatro campos e wildcards em qualquer outro lugar. Ou uma plataforma mais rigorosa pode enumerar três ou quatro formas discretas, uma por nível de lançamento suportado. MAX_CURVE_PARAMS = 10 limita o tamanho da lista de permissões.

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 administrador 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 conta PlatformGlobalAccess gerenciada anteriormente pelo administrador do protocolo e suas instruções de criar/fechar são descontinuadas. Os tamanhos existentes de PlatformConfig e GlobalConfig não mudam, mas os decodificadores devem substituir o sinalizador global antigo pelo novo sinalizador de plataforma. PDAs de acesso antigos não são consumidos pela nova verificação.

Caminho de leitura

Para uma interface mostrando “de onde este token foi lançado”, PoolState.platform_config aponta diretamente para o PlatformConfig originário — 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

  • Sentinelas de lista de permissões mal definidas. Um BondingCurveParam com total_locked_amount = 0 não é um wildcard — corresponde a lançamentos que explicitamente optam por não usar vesting. O wildcard para esse campo é u64::MAX. A mesma armadilha existe para cliff_period e unlock_period. Use clear() (que o programa expõe) para definir sentinelas corretamente.
  • Arredondamento de divisão de NFT. As três escalas devem somar exatamente 1_000_000. Erros de um em CreatePlatformConfig revertam; erros de um em tempo de execução cunhariam ou queimariam 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 de fundos do lançamento; se esquecer, essa fatia 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 como Pubkey::default(), o criador do lançamento é registrado como pool_creator do pool CPMM pós-graduação; quando definido como 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 configuração da plataforma qual modelo você quer.
  • 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 configuração.

Referências

Fontes:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, PlatformCurveParam, BondingCurveParam, is_valid_curve_param.
  • raydium-launch/programs/launchpad/src/states/platform_allow_config.rsPlatformAllowConfig.
  • raydium-launch/programs/launchpad/src/lib.rs — pontos de entrada de configuração de plataforma e configuração de permissão.