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 →
Banner de versão.Fixe a versão do SDK no seu package.json. A interface da curva de ligação evoluiu entre versões menores.

Configuração

As demonstrações aqui espelham arquivos em raydium-sdk-V2-demo/src/launchpad. O bootstrap segue o config.ts.template do repositório de demonstração:

Criar um lançamento

Fonte: src/launchpad/createMint.ts (e createBonkMintApi.ts para a variante Bonk orientada por API) A maioria dos parâmetros econômicos do lançamento não são argumentos — eles vêm da GlobalConfig que você vincula via configId, e o SDK preenche o resto com os parâmetros padrão da API. Você passa a identidade do mint, a configuração a vincular e (opcionalmente) uma primeira compra:
Notas:
  • Não há argumentos curveType, graduationFractionBps, initialK, quoteMint, openTime, fees ou postGraduationLpPolicy. A forma da curva e o quote mint são propriedades da GlobalConfig que você vincula; as taxas vivem em GlobalConfig e PlatformConfig; a disposição de LP na graduação é uma configuração de PlatformConfig. Veja products/launchlab/instructions para exatamente o que InitializeV2 aceita.
  • symbol com mais de 10 caracteres e uri vazio são ambos rejeitados no lado do cliente antes de qualquer RPC.
  • Passar transferFeeExtensionParams muda o builder para InitializeWithToken2022 e força migrateType para "cpmm".
  • O builder retorna um array transactions; createOnly: false adiciona a transação de primeira compra. Sempre execute com execute({ sequentially: true }) — o mint deve existir antes da compra chegar.

Buscar estado do lançamento

Fonte: src/launchpad/poolInfo.ts Não há getLaunchById. O pool id é um PDA de (programId, mintA, mintB), e getRpcPoolInfo retorna o PoolState decodificado com seu configInfo vinculado anexado:
getRpcPoolsInfo({ poolIdList }) é a forma em lote e retorna um poolInfoMap indexado por pool id — use-o para visualizações de portfólio em vez de fazer loop. Se você quiser decodificar as contas brutas você mesmo, LaunchpadPool.decode e LaunchpadConfig.decode são exportados.

Comprar — quote exato de entrada

Fonte: src/launchpad/buy.ts O auxiliar de cotação off-chain é Curve.buyExactIn, um método estático na classe Curve exportada — não um método em raydium.launchpad. O builder de transação é buyToken. Ambos precisam das taxas de taxa da plataforma, que vivem em uma conta PlatformConfig separada:
Você pode passar minMintAAmount explicitamente em vez de slippage; omita ambos e o SDK calcula o limite a partir de dados RPC ao vivo. shareFeeRate não deve exceder poolInfo.configInfo.maxShareFeeRate, e só se aplica quando você também passa um shareFeeReceiver.

Comprar — base exata de saída

O builder é buyTokenExactOut, e os argumentos de quantidade são outAmount (base que você quer) e maxBuyAmount (quote que você gastará no máximo). Curve.buyExactOut({ poolInfo, amountA, ... }) é a visualização off-chain correspondente.
Útil para UIs “compre exatamente X tokens”. O builder rejeita um outAmount de zero no lado do cliente, e o programa reverte se a curva se moveu o suficiente para que o requisito de quote exceda maxBuyAmount.

Vender

Fonte: src/launchpad/sell.ts O builder é sellToken (sellTokenExactOut para a variante de quote exato de saída), com sellAmount e um minAmountB opcional. Curve.sellExactIn({ poolInfo, amountA, ... }) visualiza isso.
O caminho de venda da curva é simétrico ao caminho de compra: reduzir real_a por sellAmount retorna quote_out igual à área integrada sob a curva entre real_a − sellAmount e real_a, menos a taxa de venda. sellAmount deve ser maior que zero — o builder rejeita zero antes de qualquer RPC.

Graduação

Graduação não é algo que um integrador possa disparar. Não há raydium.launchpad.graduate, nenhuma flag autoGraduate nos builders de compra, e nenhum campo willGraduate no valor de retorno deles. On-chain, graduação é MigrateToCpswap (ou o legado MigrateToAmm), e ambas as instruções restringem seu signatário a uma carteira registrada na GlobalConfig de ligação — migrate_to_cpswap_wallet e migrate_to_amm_wallet respectivamente. Uma chamada de qualquer outro signatário falha com InvalidOwner. Não é sem permissão, e nenhum bot de MEV pode corrê-la.
Essas carteiras são operadas pelo crank de graduação do Raydium, então na prática a migração chega segundos após o limite ser cruzado, independentemente de quem fez a compra final. Do lado do integrador, a única coisa a fazer é tratar a transição de status como um evento rápido: pesquise getRpcPoolInfo (ou inscreva-se via gRPC, abaixo) e mude sua UI da curva para o pool CPMM resultante quando status mudar. Veja products/launchlab/instructions para as listas de contas, a taxa de migração e como o LP é dividido na graduação.

Coletar taxas do criador

Fonte: src/launchpad/claimCreatorFee.ts (mint único) e collectAllCreatorFees.ts (em lote) O método é claimCreatorFee (e claimMultipleCreatorFee para a forma em lote). É indexado pelo quote mint, não por um lançamento — uma chamada varre as taxas de criador acumuladas do signatário nesse mint em todos os seus lançamentos:
Transfere o contador de taxa de criador acumulado para o ATA do criador no quote mint. Pode ser chamado pré ou pós-graduação; use-o periodicamente em vez de esperar um saldo enorme se acumular. Operadores de plataforma têm os builders paralelos claimPlatformFee / claimAllPlatformFee / claimVaultPlatformFee.

Rastrear um lançamento através de seu ciclo de vida

Juntando tudo, um script de monitoramento pode parecer:
Pesquisar getRpcPoolInfo em um timer de 10 segundos é bom para um único lançamento. Para um indexador, use a inscrição gRPC abaixo — getRpcPoolsInfo({ poolIdList }) faz lote, mas pesquisar centenas de pools ainda queima créditos RPC sem benefício.

Assistir configs e pools via gRPC

Fonte: src/grpc/launchpadPoolInfo.ts Inscreve-se no programa LaunchLab via Yellowstone gRPC e registra cada atualização de GlobalConfig e PoolState com o programa de token de cada mint. Dois filtros datasize em uma inscrição accounts separam os dois tipos de conta, então um único stream cobre ambos. A demonstração é a referência mais curta e correta para classificar os mints de um lançamento, o que a versão de quote mint Token-2022 torna necessário:
  • Pools são classificados diretamente de PoolState.token_program_flag, decodificando bit0 para o mint base e bit1 para o quote mint sem qualquer busca de mint. Testar o byte inteiro contra 0 — que era suficiente enquanto os quote mints eram apenas legados — malinterpreta um mint base legado como Token-2022 sempre que o quote mint é Token-2022.
  • Configs não podem ser classificados dessa forma: um GlobalConfig armazena o endereço do seu quote mint e nenhuma flag de programa, então a demonstração lê o proprietário da conta de mint uma vez e o armazena em cache por mint.
Também faz verificação cruzada dos dois um contra o outro, o que é uma asserção útil para manter em seu próprio indexador. Note que create versus update é inferido dos próprios caches da demonstração, inicializados na inicialização a partir de getProgramAccounts; com essa inicialização desabilitada, leia “create” como “primeiro visto neste stream”. O acesso gRPC não faz parte da superfície RPC pública — veja o src/grpc/README.md do repositório de demonstração.

Rust CPI

Chamar LaunchLab a partir de seu próprio programa Anchor é raro (a maioria das integrações de lançamento são apenas do lado TS). Se você fizer:
  • O crate é raydium-launchpad (nome da lib raydium_launchpad), versão 0.2.0, e expõe um recurso cpi. Não há raydium_launchlab.
  • Não é publicado em crates.io — dependa dele por revisão git, da mesma forma que os outros crates do programa Raydium.
  • Os pontos de entrada CPI são nomeados após as instruções on-chain, não após os métodos TypeScript do SDK: buy_exact_in, buy_exact_out, sell_exact_in, sell_exact_out, claim_creator_fee, create_vesting_account, claim_vested_token. migrate_to_amm / migrate_to_cpswap são gated por signatário para as carteiras de migração GlobalConfig e não são chamáveis a partir de um programa integrador.
Veja sdk-api/rust-cpi para as regras de fixação de crate — em particular a divisão de versão do Anchor, que decide se um crate pode fazer CPI tanto em LaunchLab quanto em CLMM.

Armadilhas

  • Confundir nomes de instruções on-chain com nomes de métodos SDK. O programa tem buy_exact_in / sell_exact_in; o SDK tem buyToken / sellToken. buyExactIn e sellExactIn existem apenas como métodos estáticos em Curve, e computam uma cotação — eles não constroem uma transação.
  • Esquecer extraSigners. createLaunchpad cria o mint base a partir de um keypair que você gera, então esse keypair tem que assinar. Omita extraSigners: [pair] e a transação falha na verificação de assinatura.
  • Não escolher o quote mint. Você não passa um. O quote mint é uma propriedade da GlobalConfig que você vincula através de configIdgetPdaLaunchpadConfigId(programId, quoteMint, curveType, index). Para lançar contra um quote mint diferente, vincule uma configuração diferente; raydium.api.fetchLaunchConfigs() lista as disponíveis com seus parâmetros padrão.
  • Tamanho de metadados. Strings uri longas empurram o CPI do Metaplex sobre o orçamento. Mantenha uri sob ~200 caracteres — a maioria dos metadados JSON hospedados em CDN se encaixa facilmente. symbol é limitado a 10 caracteres.
  • Tratar graduação como uma corrida que você pode entrar. Não é — veja o aviso acima. Sua UI ainda deve tratar transições de status como eventos rápidos, porque o crank do Raydium chega a migração dentro de segundos após o limite ser cruzado.

Próximos passos

Fontes: