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 release local antes da implantação. Confirme o programa implantado antes de depender da nova instrução ou do layout alterado de
MigrateToAmm.get_upgrade_timestamp, uma data de corte hardcoded que vários checks comparavam contra o clock; um Initialize deprecado que continuava funcionando por três dias após essa data; e a plumbing OpenBook de MigrateToAmm, que não tinha nada para conversar após AMM v4 remover sua própria dependência OpenBook em julho. Todos os três desapareceram. Na mainnet o corte está meses no passado, então o efeito comportamental é nulo — mas os modos de falha mudaram, e uma lista de contas mudou drasticamente.
O framework se moveu ao mesmo tempo: Anchor 0.32.1 para =1.0.2, Agave 2.3.0 para 3.1.10. E, como em AMM v4 e CPMM, há uma nova instrução admin para recuperar aluguel.
Trading, taxas, vesting, regras de curva e configuração de plataforma não foram alterados.
TL;DR para integradores
- Nenhuma instrução de trade mudou suas contas, argumentos ou matemática.
BuyExactIn,BuyExactOut,SellExactIn,SellExactOutsão byte-idênticas. Nenhum layout de conta mudou. Initialize(o deprecado) agora sempre falha comNotApproved(6000), antes de ler qualquer conta. UseInitializeV2. Launches já criados através dele fazem trade e se formam normalmente.MigrateToAmmé uma quebra severa para a carteira de migração. Perdeu todos os três argumentos (base_lot_size,quote_lot_size,market_vault_signer_nonce) e nove contas. Veja abaixo.- As três
remaining_accountsde trade agora são incondicionalmente obrigatórias, e o slotsystem_programé validado. Um builder que as omite agora sempre falha comNotEnoughRemainingAccounts(6018) em vez de apenas após o corte. - Uma instrução é adicionada:
CollectExcessLamports. Apenas admin. Vejaproducts/launchlab/instructions. - Um código de erro é adicionado:
6031LamportsCalculateError. Códigos6000–6030não mudam. - Três constraints de endereço de
MigrateToCpswapse moveram para o corpo da instrução, mudando seu erro deConstraintAddress(2012) paraRequireKeysEqViolated(2502). - Um refresh de IDL é necessário. Uma nova instrução, um conjunto de argumentos removido, nove contas removidas, uma nova variante de erro.
MigrateToAmm perdeu sua metade OpenBook
Esta é a mudança mais provável de quebrar algo. Dados de instrução antigos carregavam 17 bytes de argumentos após o discriminador; dados novos são o discriminador puro. Listas de contas antigas carregavam nove contas que não existem mais na struct, então tudo após a primeira remoção fica desalinhado.
Argumentos removidos: base_lot_size: u64, quote_lot_size: u64, market_vault_signer_nonce: u8. Todos os três existiam apenas para configurar o mercado OpenBook que o programa costumava inicializar por CPI. Esse CPI — initialize_openbook_market — desapareceu, junto com o check gen_vault_signer_key que validava o nonce.
Contas removidas: openbook_program, request_queue, event_queue, bids, asks, market_vault_signer, market_base_vault, market_quote_vault, e amm_open_orders. A última desapareceu porque Initialize2 do AMM v4 não a leva mais.
A conta market permanece, em sua posição original. AMM v4 ainda registra o mercado como um campo de referência em AmmInfo, então LaunchLab ainda o encaminha. Duas coisas sobre ela mudaram: o programa não a inicializa mais, e agora é completamente não validada — sua declaração é um #[account(mut)] puro sem constraint de owner, endereço ou seeds, porque owner = openbook_program.key() saiu junto com a conta openbook_program e nada a substituiu. Qualquer coisa que a carteira de migração passar lá é encaminhada direto para o CPI Initialize2 do AMM v4 e registrada no novo pool. Um chamador que quer um mercado genuinamente inicializado atrás desse campo tem que criá-lo de antemão, e o programa não dirá o contrário.
A lista resultante de 23 contas é documentada completamente em products/launchlab/instructions.
MigrateToCpswap não é afetado — nunca teve argumentos, e sua lista de contas não mudou.
O Initialize deprecado sempre falha
initialize anteriormente executava uma deprecação suave: funcionava até get_upgrade_timestamp() + 3 days, depois retornava NotApproved. Com o helper de timestamp deletado, a falha é incondicional — o handler agora é um msg! e err!(NotApproved) e nada mais.
Um detalhe se você está lendo logs: a struct Accounts não mudou e ainda carrega quatro constraints init, então o prólogo de validação de conta gerado por Anchor executa — e cria essas contas — antes do handler retornar. A transação reverte de qualquer forma, então nada é realmente criado, mas a falha aparece após validação de conta em vez de antes.
A instrução é retida em vez de removida para que seu discriminador permaneça ocupado e o IDL mantenha uma forma estável. Suas definições de argumento e conta ainda valem a pena ter documentadas para decodificar transações históricas, e a página as mantém atrás de um aviso.
O gate get_upgrade_timestamp desapareceu
O helper retornava 0 sob as features local e devnet e o timestamp mainnet hardcoded 1755522000 (2025-08-18 13:00 UTC) caso contrário. Quatro instruções comparavam o clock contra ele, em cinco referências no source. Cada uma se torna o branch pós-corte incondicionalmente:
O timestamp mainnet está mais de um ano no passado, então um builder correto e atualizado não vê mudança de comportamento. O que mudou é que um builder obsoleto agora falha deterministicamente em vez de parecer funcionar contra um build devnet. A nova validação
system_program é genuinamente nova: esse slot anteriormente aceitava qualquer conta.
CollectExcessLamports
Passo 1 de SIMD-0437 chegou na mainnet em 3 de setembro de 2026, cortando o mínimo isento de aluguel em 9% com mais quatro passos por vir. Cada vault de pool LaunchLab, vault de taxa e PDA de propriedade do programa criado antes de um passo agora está sobre-financiado.
A instrução leva quatro contas fixas — a carteira signatária/destino, uma PDA de autoridade de vault, e ambos os programas de token — depois qualquer número de contas de origem em remaining_accounts.
O slot authority é a parte que vale a pena ler cuidadosamente. LaunchLab tem três PDAs de autoridade de vault (vault_auth_seed, platform_fee_vault_auth_seed, creator_fee_vault_auth_seed), e a instrução resolve qual você passou re-derivando todos os três e combinando; uma chave que não combina nenhum falha com InvalidOwner (6001). Porque uma chamada carrega uma autoridade e o programa de token requer que o owner real de cada conta assine, contas de origem devem ser agrupadas por autoridade — vaults de pool, vaults de taxa de plataforma e vaults de taxa de criador varrem em transações separadas. PDAs de propriedade do programa são debitados diretamente e podem andar junto com qualquer autoridade.
Wrapped SOL segue a mesma sequência SyncNative → UnwrapLamports de tamanho delta → assert-unchanged que CPMM e AMM v4 usam, com LamportsCalculateError (6031) se a volta não resultar em zero. Um launch com quote em SOL mantém sua reserva de quote completa.
Mints base não podem ser varridos. InitializeV2 e InitializeWithToken2022 revogam MintTokens na mesma instrução que minta o supply, então nenhuma chave pode assinar um WithdrawExcessLamports para um mint base. Seu aluguel é retido por design.
O signatário pode ser tanto o admin de programa compartilhado quanto uma carteira dedicada de coleta de lamports; endereços estão em reference/program-addresses.
Relocação de constraint de MigrateToCpswap
Três constraints de conta se moveram para fora da struct Accounts e para o corpo da instrução:
PoolState. Apenas a superfície de erro difere: RequireKeysEqViolated (2502) genérico do Anchor, reportado sem um nome de conta, em vez de ConstraintAddress (2012) nomeando a conta ofensora. Atualize qualquer tratamento de erro que correspondesse a 2012 para essas três contas.
Mudanças de toolchain e dependências
As duas mudanças de local de chamada do Anchor 1.0 se aplicam aqui também:
Context colapsa de quatro parâmetros de lifetime para um, e CpiContext::new leva a Pubkey do programa em vez de sua AccountInfo. Veja sdk-api/rust-cpi.
Dois detalhes de sistema de build sem efeito on-chain: a feature local foi substituída por localnet, que compila a carteira local como admin de uma variável de ambiente LAUNCHPAD_LOCALNET_ADMIN (yarn test:local-admin a conecta), e o bloco [profile.release] duplicado em programs/launchpad/Cargo.toml foi deletado — Cargo ignora [profile] fora da raiz do workspace, então o bloco raiz já era o em efeito, incluindo o fato de que o panic = "abort" do bloco de nível de programa nunca foi aplicado.
O que não mudou
- Cada layout de conta.
PoolState,GlobalConfig,PlatformConfig,PlatformCurveRule,PlatformAllowConfig, registros de vesting — mesmos tamanhos, mesmos offsets. - Códigos de erro
6000–6030, incluindo o6020deliberadamente retido. - Matemática de curva, taxas, acúmulo de taxa, cronogramas de vesting e divisão de LP de graduação.
- Regras de curva de plataforma e allowlist de
GlobalConfig. Mesmas instruções, mesmas contas, mesma semântica; apenas o gate de clock ao redor do check de regra de curva desapareceu. - Lista de contas de
MigrateToCpswape índices deremaining_accounts. - A transferência de autoridade de taxa de transferência Token-2022 na graduação.
- ID do programa. Inalterado.
Páginas atualizadas
products/launchlab/instructions—CollectExcessLamportsadicionado com sua lista de contas, tabela de resolução de autoridade e aviso de agrupamento; remoções de argumento e conta deMigrateToAmmdocumentadas com a lista nova completa;Initializefronteado com aviso de sempre-falha; nova seção “Trade remaining accounts” cobrindo as três contas agora-incondicionais e o checksystem_program; nota deMigrateToCpswapno caminho apenas com permissão e constraints relocadas; linhas de inventário e matriz de mudança de estado.products/launchlab/overview— banner de release; invariantes “apenas CPMM” e mint base corrigidas.products/launchlab/accounts— timing de revogação de mint-authority corrigido para criação de launch (foi documentado em graduação); linha deCollectExcessLamportsadicionada.reference/error-codes—6031documentado.reference/program-addresses— nova seção “Excess-lamports collection wallets”.solana-fundamentals/rent-and-reclaimable-rent— nova seção “What the Raydium programs sweep on their own side”.sdk-api/rust-cpi,solana-fundamentals/toolchain— pins do Anchor 1.0 e notas de migração de CPI.

