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 →
O LaunchLab expõe um conjunto compacto de instruções: seis chamadas voltadas ao usuário mais alguns primitivos administrativos. O SDK envolve todas elas; esta página documenta a superfície bruta para agregadores, ferramentas de monitoramento e programas que precisam de CPI.

Inventário de instruções

A divisão “ExactIn/ExactOut” espelha SwapBaseInput / SwapBaseOutput do CPMM — na cadeia são discriminadores de instrução separados com arredondamento ligeiramente diferente. Seleção de caminho de graduação. Cada chamada nova Initialize, InitializeV2 e InitializeWithToken2022 deve definir migrate_type = 1 (CPSWAP). Qualquer tentativa de inicializar um novo pool vinculado a AMM v4 retorna MigrateTypeNotMatch. amm_creator_fee_on apenas seleciona se a taxa de criador CPMM resultante se aplica ao token de quote ou a ambos os tokens; não seleciona o programa de destino. MigrateToAmm permanece chamável para um PoolState existente que foi inicializado com migrate_type = 0 antes dessa restrição. A versão não reescreve o estado do pool existente ou remove a instrução legada. Programa de token do lado da quote. O mint de quote pode ser de propriedade do programa SPL Token ou Token-2022. Cada instrução que o toca — CreateConfig, InitializeV2, InitializeWithToken2022, todas as quatro instruções de negociação, CollectFee, CollectMigrateFee, ClaimCreatorFee, ClaimPlatformFee e ClaimPlatformFeeFromVault — leva o programa proprietário em seu slot de conta de programa de quote. As posições das contas não mudaram; apenas o valor aceito mudou. Passe o programa que realmente possui GlobalConfig.quote_mint, que você pode ler de PoolState.token_program_flag bit1 para um lançamento existente (veja accounts) ou do proprietário da conta de mint caso contrário. O Initialize descontinuado é a exceção: sua conta de programa de quote ainda é tipada para SPL Token, então uma config cujo mint de quote é Token-2022 deve ser lançada através de InitializeV2 ou InitializeWithToken2022. MigrateToCpswap é a outra exceção, na direção oposta — leva ambos os programas incondicionalmente em vez de um por mint. Veja as contas de migração abaixo.

Initialize

Criar um novo lançamento. Argumentos
Contas (abreviado) Pré-condições
  • quote_mint ∈ launch_config.allowed_quote_mints.
  • base_supply_graduation ≤ base_supply_max.
  • Parâmetros de taxa passam nas verificações launch_config.max_*_fee_rate.
  • open_time ≥ now − slop (SDK impõe ≥ now; programa tolera backdating leve).
  • curve_type é reconhecido.
Pós-condições
  • base_mint tem supply = base_supply_max, tudo em base_vault.
  • base_mint.mint_authority = launch_authority, freeze_authority = None.
  • LaunchState inicializado com status = Active, base_sold = 0, quote_reserve_real = 0.
  • quote_reserve_target computado a partir de parâmetros de curva + base_supply_graduation + buy_numerator (aproximadamente).
  • Para InitializeWithToken2022 com um TransferFeeConfig anexado: transfer_fee_config_authority = launch_authority, e withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth quando esse campo está definido, caso contrário launch_authority. O lado de retirada é escrito na criação de mint precisamente para que a plataforma possa varrer taxas retidas antes da graduação. Veja platform-config.
Erros comunsInvalidQuoteMint, FeeRateTooHigh, InvalidCurveParams, MathOverflow.

Buy (variante canônica: BuyExactIn)

Usuário fornece um quote_in fixo; a curva computa base_out. Argumentos
Contas Pré-condições
  • launch_state.status == Active.
  • now ≥ open_time.
  • user_quote_ata.balance ≥ quote_in.
  • quote_in > 0.
Efeito
  1. Dividir quote_in em quote_in_after_fee e as partes de taxa.
  2. Newton-resolver a curva para base_out dado o quote pós-taxa.
  3. require(base_out ≥ minimum_base_out) caso contrário reverter ExceededSlippage.
  4. Mover quote_in usuário → vault. Mover base_out vault → usuário.
  5. Atualizar base_sold += base_out, quote_reserve_real += quote_in_after_fee × (lp_share / total_share).
  6. Atualizar contadores de taxa (protocol_fees_quote, creator_fees_quote).
  7. state_data.num_buys += 1.
  8. Se quote_reserve_real ≥ quote_reserve_target após a atualização, o SDK tipicamente encadeia uma ix Graduate na mesma transação. O programa não auto-gradua dentro de Buy — um Graduate subsequente é necessário.

BuyExactOut

Usuário especifica o base_out exato; programa computa quote_in. Argumentos
Mesmas contas que BuyExactIn. Usa a integral quadrática de forma fechada (ou inverso CPMM, para curve_type 1) em vez de iteração Newton.

Sell / SellExactIn / SellExactOut

Espelho de Buy. Usuário retorna base_in à curva e recebe quote_out. A taxa é deduzida de quote_out, então o usuário recebe menos do que os rendimentos integrados brutos. Pré-condições
  • user_base_ata.balance ≥ base_in.
  • Vender não pode empurrar base_sold abaixo de 0 (redundante com o acima dado que a contabilidade é consistente).
  • Lançamento é Active.
Efeito — simétrico a Buy. base_sold diminui, quote_reserve_real diminui. Taxas ainda acumulam.

Taxas de transferência do lado da quote

Quando o mint de quote carrega um TransferFeeConfig, o valor que o vault move e o valor que o pagador é debitado ou creditado diferem, e o limite de slippage é verificado contra o lado do pagador. Em um mint de quote sem a extensão cada caso abaixo é idêntico a um mint legado simples. Duas consequências para cotação:
  • Um limite computado como se o mint fosse sem taxa é rejeitado. Passar o custo sem taxa como maximum_amount_in, ou os rendimentos sem taxa como minimum_amount_out, reverte com ExceededSlippage.
  • real_quote avança apenas pelo que chegou ao vault. Um BuyExactIn de amount_in em um mint de quote de 5% move real_quote por amount_in × 0.95.
Um mint de quote com taxa de 100% (10000 pontos base) não pode ser invertido e reverte com CalculateOverflow nos caminhos exatos de saída. Ambos os mints do lado de negociação também são restritos ao programa passado em seu slot correspondente, então um base_token_program incompatível agora falha em vez de ser ignorado. Veja algorithms/token-2022-transfer-fees para a matemática de taxa subjacente.

MigrateToAmm / MigrateToCpswap

Graduar um lançamento em um pool negociável uma vez que a curva tenha atingido total_quote_fund_raising. Novos lançamentos são apenas CPMM. MigrateToAmm é retido para pools existentes cujo migrate_type armazenado é 0. Quem assina
  • MigrateToAmm — a migrate_to_amm_wallet registrada na vinculação GlobalConfig.
  • MigrateToCpswap — a migrate_to_cpswap_wallet registrada na vinculação GlobalConfig.
Essas carteiras são tipicamente mantidas pela crank de graduação operada por Raydium; na prática a graduação ocorre segundos após o limite ser cruzado, independentemente de quem acionou a compra final. Argumentos MigrateToAmm leva três (principalmente parâmetros de mercado OpenBook que o programa encaminha para AMM v4):
MigrateToCpswap não leva nenhum. Efeito (comum a ambos)
  1. Verificar pool_state.status == Migrate (ou seja, quote_reserve_target foi atingido). Caso contrário reverter com PoolMigrated (status já era Migrated) ou PoolFunding (ainda em financiamento).
  2. Verificar pool_state.migrate_type corresponde à instrução (0 para AMM, 1 para CPMM). Caso contrário reverter com MigrateTypeNotMatch.
  3. Computar as reservas pós-graduação:
    • base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount
    • quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
  4. CPI no programa de destino (AMM v4 Initialize2 ou CPMM InitializeWithPermission) com essas reservas para criar o pool pós-graduação.
  5. Para migrações CPMM executadas após a atualização de 2026-08-17, combinar platform_scale + creator_scale em uma participação de LP bloqueada de propriedade da plataforma e cunhar no máximo um NFT de Chave de Taxa para platform_nft_wallet. Queimar o restante burn_scale. Antes da atualização, creator_scale era bloqueado separadamente e sua Chave de Taxa ia para o criador do token. Migrações históricas concluídas não são modificadas. Para graduação legada AMM v4, a disposição de LP segue o fluxo existente dessa instrução.
  6. Revogar base_mint.mint_authority (definir para None).
  7. Virar pool_state.status = Migrated, definir vesting_schedule.start_time = block_time + cliff_period.
Transferência de autoridade de extensão Token-2022 — quando o mint base é um mint Token-2022 carregando TransferFeeConfig e PlatformConfig.transfer_fee_extension_auth é não-padrão, a migração também reatribui as autoridades dessa extensão para a chave da plataforma:
  • transfer_fee_config_authority é sempre reatribuída. O PDA de lançamento authority a mantém por toda a fase pré-graduação, então sempre há algo para mover.
  • WithheldWithdraw é reatribuída apenas quando o PDA authority ainda a mantém. Lançamentos criados a partir de 2026-08-27 em diante já carregam transfer_fee_extension_auth nessa autoridade a partir da criação de mint, então o passo é pulado. A guarda é o que impede a migração de reverter nesses mints — o PDA não pode assinar uma autoridade que não mantém mais.
Se transfer_fee_extension_auth é Pubkey::default() no momento da migração, nenhuma autoridade se move e ambas permanecem com o PDA authority permanentemente. Veja platform-config. Pós-condiçõesBuyExactIn, BuyExactOut, SellExactIn, SellExactOut rejeitarão a partir deste ponto com PoolMigrated. O pool AMM resultante é canônico e negocia como qualquer outro pool AMM v4 / CPMM. Erros comunsPoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.

Contas restantes de migração CPMM

Clientes construindo MigrateToCpswap devem usar estes índices de remaining_accounts fixos: A instrução requer pelo menos dez contas restantes no caminho atualizado. As contas de mint de suporte são entradas CPI somente leitura. Derive ambos os endereços mesmo quando o mint não tem registro de suporte inicializado. Construtores mais antigos que ainda anexam contas de bloqueio de criador ou omitem índices 8–9 devem ser atualizados.

Programas de token de migração CPMM

MigrateToCpswap leva ambos os programas de token incondicionalmente e descobre qual programa possui cada mint. Suas duas contas de programa de token foram renomeadas correspondentemente: Elas substituem o antigo base_token_program (qualquer programa que possuía o mint base) e quote_token_program (sempre legado). As posições não mudaram, então esta é uma mudança de valor em vez de uma mudança de layout — mas os dois valores estão próximos de invertidos, e um construtor que continua passando seu par antigo fornecerá Token-2022 onde o programa legado é necessário assim que qualquer mint for um mint Token-2022. O programa legado é necessário mesmo quando nenhum mint o usa, porque o mint de LP CPMM e o NFT de Chave de Taxa de liquidez bloqueada sempre vivem nele.

Lista de permissões GlobalConfig da plataforma

PlatformConfig.restrict_global_config controla a verificação:
  • 0: a plataforma aceita qualquer GlobalConfig válido; nenhuma conta de permissão é necessária.
  • 1: Initialize, InitializeV2 e InitializeWithToken2022 devem incluir o PlatformAllowConfig correspondente em qualquer lugar em remaining_accounts.
O admin da plataforma cria ou fecha o PDA com CreatePlatformAllowConfig e ClosePlatformAllowConfig. Suas sementes são [b"platform_allow_config", platform_config, global_config]. As antigas instruções PlatformGlobalAccess gerenciadas por admin e PDA são aposentadas.

Regras de parâmetro de lançamento da plataforma

Quatro instruções gerenciam uma conta PlatformCurveRule. Todas as quatro são assinadas por PlatformConfig.curve_rule_manager ou pelo admin da plataforma — o programa aceita o admin re-derivando o PDA PlatformConfig do signatário, então nenhuma conta separada o prova. Um signatário que é nenhum dos dois retorna InvalidCurveRuleAuthority. platform_curve_rule é o PDA em [b"platform_curve_rule", platform_config, global_config].
  • Create aloca a conta sem grupo. Esse estado não restringe nada.
  • Update faz upsert do grupo com esse group_id, substituindo-o completamente se existir. Redimensiona a conta para caber, então o signatário complementa o aluguel que cresce e recebe de volta o aluguel que encolhe. Um novo grupo além do décimo retorna CurveRuleGroupsExceeded; mais de 25 restrições, um campo desconhecido ou operador, ou o mesmo par (field, op) duas vezes em um grupo retorna InvalidCurveRuleConstraint; os quatro campos derivados de TotalSellA em uma config não-produto-constante retorna CurveRuleFieldNotSupportedByCurve.
  • Remove descarta um grupo por id, encolhendo a conta e reembolsando a diferença. Um id desconhecido retorna CurveRuleGroupNotExist.
  • Close retorna todo o aluguel ao signatário. A config fica irrestrita novamente mesmo enquanto restrict_curve_param permanece 1.
Nenhum dos quatro muda se as regras são impostas. Isso é UpdatePlatformConfig::RestrictCurveParam(0 | 1), que apenas o admin da plataforma pode chamar. No caminho de lançamento. Enquanto restrict_curve_param é 1, InitializeV2 e InitializeWithToken2022 requerem o PDA de regra em remaining_accounts — incluindo quando não existe, para que omiti-lo não possa pular a verificação. Uma conta ausente é NotEnoughRemainingAccounts; um lançamento que satisfaz nenhum grupo é CurveParamNotMatchPlatformRule. A verificação é executada antes dos próprios limites de GlobalConfig e pode apenas estreitá-los. Modelo e playbooks: products/launchlab/curve-rules. Ambos os erros são evitáveis do lado do cliente — o SDK espelha essa verificação como uma função pura, veja Check before you send.

CollectFee

Varredura de admin das taxas de negociação acumuladas do protocolo em um único lançamento. Argumentos — nenhum. Contas Efeito — transferir pool_state.quote_protocol_fee de quote_vault para recipient_token_account, então zerar o contador. Chamável qualquer momento após a primeira compra.

CollectMigrateFee

Varredura de admin da taxa de migração acumulada na graduação. Mesma forma de conta que CollectFee com migrate_fee_owner como o signatário (em vez de protocol_fee_owner) e pool_state.migrate_fee como o contador drenado.

ClaimCreatorFee

Varredura por criador de taxas de criador acumuladas em cada lançamento que o criador possui que usa o mesmo mint de quote. Drena o vault de taxa por criador, não o por pool. Argumentos — nenhum. Contas Efeito — transferir o saldo inteiro de creator_fee_vault para recipient_token_account. Reverte com uma verificação require-maior-que-zero se o vault está vazio.

ClaimPlatformFee

Varredura por plataforma que drena um vault de quote de lançamento diretamente. Use isso quando uma plataforma quer reivindicar sua fatia para um lançamento específico sem passar pelo vault de plataforma agregado. Argumentos — nenhum. Contas Efeito — transferir pool_state.platform_fee de quote_vault para recipient_token_account, zerar o contador.

ClaimPlatformFeeFromVault

Varredura agregada por plataforma. Drena o vault de taxa por mint de quote da plataforma que acumula taxas de cada lançamento roteado através da plataforma. Argumentos — nenhum. Contas Efeito — transferir o saldo completo de platform_fee_vault para recipient_token_account. Reverte se o vault está vazio.

Instruções de vesting e configuração de plataforma

Estas são documentadas em páginas dedicadas porque cada uma tem seu próprio modelo de estado:

Matriz de mudança de estado

Para onde ir a seguir

Fontes: