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%, oferta deve ter pelo menos 10M, apenas essa carteira pode graduarse”), PlatformConfig é o que cada plataforma de lançamento — pump.fun, interface própria 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 quatro preocupações 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 da 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 NFT — três inteiros (platform_scale, creator_scale, burn_scale) que somam RATE_DENOMINATOR_VALUE = 1_000_000 e particionam o LP pós-graduação em uma parte emitida para a carteira de NFT da plataforma, uma parte para a carteira de NFT do criador e uma parte queimada (Burn & Earn). Significativo apenas quando a graduação tem como alvo CPMM (migrate_type = 1).
  4. Lista de permissões de parâmetros de curva — um Vec<PlatformCurveParam> listando exatamente quais combinações (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.
Derivação de PDA:
(Veja create_platform_config no source para a lista canônica de seeds.)

Layout

platform_scale + creator_scale + burn_scale deve ser igual a 1_000_000 (validado por MigrateNftInfo::check). Divisões comuns vistas em produção:
  • (0, 100_000, 900_000) — 90% LP queimado, 10% para criador. Lançamento justo estilo pump padrão.
  • (50_000, 100_000, 850_000) — pequena fatia da plataforma (5%), 10% criador, 85% queimada.
  • (0, 0, 1_000_000) — queimadura total, sem emissão de NFT. Lançamentos estritos de “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, corte até o primeiro \0:
As constantes são propositalmente generosas (name: 64, web: 256, img: 256) para que as plataformas possam incluir metadados suficientes para exploradores e agregadores sem recorrer ao 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 chaveado pela pubkey do criador + quote mint (reivindicado via ClaimCreatorFee).
creator_fee_rate é limitado por MAX_CREATOR_FEE_RATE = 5000 (50 bps). fee_rate (a taxa da plataforma) é limitada a 10000 (100 bps) por GlobalConfig.max_share_fee_rate.

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

Quando um lançamento se gradua para CPMM (migrate_type = 1, assinado por migrate_to_cpswap_wallet), a instrução de migração divide os tokens LP emitidos por CPMM::InitializeWithPermission de três formas:
As fatias de plataforma e criador são envolvidas como NFTs pelo programa LP-Lock (LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE) — o titular do NFT tem direito a reivindicar taxas CPMM acumuladas indefinidamente sem conseguir sacar a liquidez subjacente. Veja products/launchlab/creator-fees para o fluxo Fee Key pós-graduação. A fatia de queimadura é enviada ao programa Lock com is_burn = true para que os tokens LP fiquem permanentemente inacessíveis — eles protegem o piso de preço do pool sem nunca pagar taxas de volta a ninguém. Quando migrate_type = 0 (graduarse para AMM v4), os campos de divisão de NFT são ignorados e todo o LP é bloqueado / queimado de acordo com um fluxo separado no lado AMM v4.

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 aplica em Initialize que os parâmetros do lançamento correspondam a pelo menos uma entrada exatamente.
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 oferta / venda / arrecadação de fundos. Um BondingCurveParam com todos os sentinelas é “permitir qualquer coisa” — equivalente ao comportamento de lista de permissões vazia. O algoritmo de correspondência em Initialize:
  1. Filtrar curve_params para entradas cuja global_config corresponde à GlobalConfig escolhida do lançamento.
  2. Se a lista filtrada estiver vazia, permitir qualquer parâmetro (a plataforma não fez lista de permissões de nada para esta GlobalConfig).
  3. Se cada entrada na lista filtrada tiver all_is_invalid() (cada campo é o wildcard), permitir qualquer parâmetro.
  4. Caso contrário, iterar entradas; para cada entrada, verificar os parâmetros do lançamento contra cada campo não-wildcard. Se todos os campos não-wildcard corresponderem, aceitar e retornar.
  5. Se nenhuma entrada corresponder, reverter com InvalidInput.
Isso permite que uma plataforma diga “permitimos apenas a forma padrão de 1B-oferta / 800M-vendida / 30k-USDC-arrecadação / sem-vesting” escrevendo uma única entrada com valores concretos para esses quatro campos e wildcards em todo 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.

PlatformGlobalAccess — autorizando uma plataforma

Quando um GlobalConfig tem requires_platform_auth = 1, cada Initialize contra ele deve incluir um PDA PlatformGlobalAccess comprovando que a plataforma foi pré-autorizada:
Seeds de PDA: [b"platform_global_access", global_config, platform_config]. O admin do protocolo cria um desses por par (GlobalConfig, PlatformConfig) via CreatePlatformGlobalAccess e o revoga via ClosePlatformGlobalAccess. Sem essa conta, um lançamento não pode se vincular a essa GlobalConfig da plataforma bloqueada.

Caminho de leitura

Para uma UI mostrando “de onde esse token foi lançado”, PoolState.platform_config aponta para o PlatformConfig de origem diretamente — buscá-lo uma vez e cache da 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 source para os códigos exatos de param.

Armadilhas comuns

  • Sentinelas da 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 fazer 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 revert; erros de um em tempo de execução emitiriam ou queimariam uma unidade de LP extra, o que é o que a verificação de igualdade estrita está lá para evitar.
  • Dupla alocação de vesting da 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 reivindica).
  • 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 para uma chave real, essa chave é registrada em seu lugar. Isso afeta quem pode chamar CPMM::CollectCreatorFee depois. Decida no momento da criação da configuração da plataforma qual modelo você quer.

Referências

Sources:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, PlatformCurveParam, BondingCurveParam, is_valid_curve_param.
  • raydium-launch/programs/launchpad/src/states/platform_global_access.rsPlatformGlobalAccess.
  • raydium-launch/programs/launchpad/src/lib.rscreate_platform_config, update_platform_config, update_platform_curve_param, remove_platform_curve_param, create_platform_global_access, close_platform_global_access, claim_platform_fee, claim_platform_fee_from_vault.