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 página documenta o grafo de contas por lançamento: a PoolState (a conta de estado raiz para um lançamento), seus dois vaults, a PDA de autoridade e as referências pós-graduação que ela ganha quando o lançamento se liquida. Para a configuração em nível de protocolo que limita cada lançamento, consulte products/launchlab/global-config. Para a sobreposição por plataforma, consulte products/launchlab/platform-config. Para contas de vesting (VestingSchedule em PoolState, VestingRecord por beneficiário), consulte products/launchlab/vesting.

Inventário de contas

O SDK lê isso com raydium.launchpad.getRpcPoolInfo({ poolId }), que retorna o PoolState decodificado com a GlobalConfig vinculada anexada como configInfo (getRpcPoolsInfo({ poolIdList }) para a forma em lote). Não existe getLaunchById. O id do pool em si é uma PDA de (programId, mintA, mintB) — getPdaLaunchpadPoolId.

PoolState

O estado raiz por lançamento. Os nomes de campo abaixo correspondem à struct Rust on-chain (states/pool.rs); alguns valores são simplificados para legibilidade — consulte a fonte para o layout de memória exato.
Valores de PoolStatus (os nomes das variantes no IDL são Fund / Migrate / Trade):
Campos voltados para integradores:
  • status — três valores, monotônicos (Fund → Migrate → Trade). Leituras sempre seguras; escritas controladas. ClaimVestedToken requer Trade.
  • real_base, real_quote — estado atual da curva. Combinados com virtual_base / virtual_quote são suficientes para calcular o preço spot sem acessar os vaults. Consulte bonding-curve.
  • total_base_sell vs real_base — razão de “progresso em direção à graduação” para UIs.
  • migrate_type — nova inicialização requer 1 (CPSWAP). Um 0 armazenado permanece significativo apenas para um lançamento existente criado antes da aplicação exclusiva de CPMM.
  • amm_creator_fee_on — escolhe creator_fee_on = OnlyQuoteToken (0) ou BothToken (1) no pool CPMM pós-graduação. Não escolhe o alvo de migração. Consulte creator-fees.
  • token_program_flag — um campo de bits, não um booleano. Bit0 é o mint base e bit1 é o mint quote, cada um 0 para SPL Token e 1 para Token-2022, então o byte assume quatro valores: 0 (ambos legados), 1 (Token-2022 base), 2 (Token-2022 quote), 3 (ambos Token-2022). Leia um mint com (token_program_flag >> bit) & 1. Comparar o byte inteiro contra 0 para classificar o mint base resolve 2 para o programa errado. Bit1 era constante 0 até que mints quote Token-2022 fossem suportados.
  • quote_protocol_fee / platform_fee / migrate_fee — três contadores de taxa independentes. Cada um tem sua própria instrução de reivindicação; consulte instructions.
  • vesting_schedule — presente em cada PoolState mas inativo quando total_locked_amount == 0. Consulte vesting para o ciclo de vida completo.

A PDA de autoridade

LaunchLab usa uma única PDA de autoridade em todos os lançamentos, derivada sem seed por lançamento:
Essa PDA única é:
  • A autoridade em cada base_vault e quote_vault de lançamento.
  • Nada no base_mint — a autoridade de mint é revogada antes de InitializeV2 retornar (veja abaixo).
  • O signatário no CPI de graduação CPMM e na graduação AMM v4 legada para estado existente.
  • O signatário em transferências ClaimVestedToken para fora do base vault.
  • A transfer_fee_config_authority no TransferFeeConfig de um mint base Token-2022, para toda a fase pré-graduação — e sua withdraw_withheld_authority também, mas apenas quando a plataforma deixou PlatformConfig.transfer_fee_extension_auth não definido.
A mint_authority é revogada na instrução initialize, não na graduação: InitializeV2 e InitializeWithToken2022 fazem mint do fornecimento completo em base_vault e então definem MintTokens para None na mesma instrução. O fornecimento é portanto fixo a partir do momento em que o lançamento existe, e a migração não tem etapa de autoridade de mint. Um efeito colateral: ninguém pode assinar pelo mint base, então seu aluguel não pode ser recuperado por CollectExcessLamports. Duas PDAs adicionais controlam os vaults de taxa:
Essas assinam a transferência para fora dos vaults de taxa correspondentes durante ClaimCreatorFee e ClaimPlatformFeeFromVault.

Mint base

Criado inline por Initialize com:
  • mint_authority = authority (revogada na graduação).
  • freeze_authority = None.
  • supply = supply, inteiramente feito mint em base_vault.
  • decimals escolhido pelo criador em Initialize (comumente 6).
Como o fornecimento completo é pré-feito mint, base_mint.supply é constante pela vida do lançamento. Compras de curva movem tokens de base_vault para o comprador, mas não chamam mint_to. Initialize / InitializeV2 criam mints base SPL Token. A instrução dedicada InitializeWithToken2022 permite que o mint base seja um mint Token-2022 (com TransferFeeConfig opcional). Todos os três caminhos de inicialização requerem graduação CPMM. Quando InitializeWithToken2022 anexa um TransferFeeConfig, o mint é criado com transfer_fee_config_authority = authority e withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth, voltando para authority quando a plataforma não definiu esse campo. Ambas as autoridades são reatribuídas à chave de plataforma na graduação, o lado de retirada apenas se a PDA ainda a mantiver. Consulte platform-config. O mint quote é independente do mint base e pode ser um mint Token-2022 — InitializeV2 e InitializeWithToken2022 aceitam qualquer programa em seu slot de programa quote. O Initialize descontinuado não: sua conta de programa quote ainda é tipada para SPL Token, então uma configuração cujo mint quote é Token-2022 só pode ser lançada através das outras duas. O mint quote nunca é criado por LaunchLab; é o que GlobalConfig.quote_mint nomeia. Consulte global-config e reference/token-2022-support.

Vaults

Tanto base_vault quanto quote_vault são contas de token possuídas pela PDA LaunchLab authority, cada uma criada no programa que possui seu próprio mint — então um lançamento pode ter um vault base legado e um vault quote Token-2022, ou qualquer outra combinação. token_program_flag registra qual é qual. Os endereços são armazenados em PoolState e também podem ser derivados:
(Verifique os prefixos de seed exatos da struct de contas Initialize da fonte antes de confiar em uma derivação em produção.)

Vaults de taxa

Duas PDAs agregam taxas entre lançamentos:
  • Vault de taxa de criador — PDA em seeds [creator, quote_mint]. Cada lançamento que ganha as mesmas taxas de criador no mesmo mint quote despeja no mesmo vault. O criador o limpa via ClaimCreatorFee.
  • Vault de taxa de plataforma — PDA em seeds [platform_config, quote_mint]. Cada lançamento roteado através da mesma plataforma que usa o mesmo mint quote despeja no mesmo vault. A platform_fee_wallet da plataforma o limpa via ClaimPlatformFeeFromVault. Há também uma variante de limpeza por lançamento (ClaimPlatformFee) que puxa do quote_vault do lançamento diretamente sem passar pelo vault agregado.
Ambos são criados preguiçosamente no primeiro swap que acumula uma taxa, no programa que possui o mint quote. Um criador ou plataforma que executa lançamentos contra um mint quote legado e um Token-2022 acaba com um vault por mint, como já fazia para dois mints legados diferentes. O padrão de vault agregado é o que permite que um criador ou plataforma de alto volume amortize o custo de aluguel da acumulação de taxa entre muitos lançamentos.

Quote vault ↔ real_quote

quote_vault.balance e PoolState.real_quote devem permanecer sincronizados. Podem divergir no máximo pela soma dos três contadores de taxa pendentes (quote_protocol_fee, platform_fee, migrate_fee), que ficam no vault mas pertencem aos contadores de taxa e não à reserva de curva. A matemática de curva sempre usa real_quote, nunca o saldo bruto do vault. Invariante pré-graduação:

PlatformCurveRule

Uma conta por par (PlatformConfig, GlobalConfig), contendo as formas de lançamento que a plataforma permite nessa configuração. As seeds da PDA são [b"platform_curve_rule", platform_config, global_config].
A conta é criada sem grupo e redimensionada a cada mudança de grupo, então seu comprimento é 150 + Σ(14 + 18 × constraints) e decodificadores não devem assumir um tamanho fixo. Grupos são ORed: um lançamento é permitido assim que as restrições de um grupo todas se mantêm. Zero grupos significa sem restrição. Leia apenas quando o PlatformConfig.restrict_curve_param proprietário for 1 — em 0 o programa ignora a conta, e uma regra obsoleta pode bem estar lá. IDs de campo, operadores e os playbooks estão em products/launchlab/curve-rules.

Transições de conta do ciclo de vida

Próximos passos

Fontes:
  • raydium-launch/programs/launchpad/src/states/pool.rs — PoolState, PoolStatus, VestingSchedule, AmmCreatorFeeOn.
  • raydium-launch/programs/launchpad/src/lib.rs — constantes de seed da PDA (AUTH_SEED, CREATOR_FEE_VAULT_AUTH_SEED, PLATFORM_FEE_VAULT_AUTH_SEED).
  • Módulo launchpad do Raydium SDK v2.