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. Todos os exemplos visam
@raydium-io/raydium-sdk-v2@0.2.64-alpha contra Solana mainnet-beta, verificado em 2026-09-09 — cada nome de builder, nome de parâmetro e tipo de parâmetro abaixo foi verificado contra o src/raydium/farm/ dessa versão e contra raydium-sdk-V2-demo/src/farm. O SDK despacha v3 / v5 / v6 internamente com base no proprietário do programa do farm; os exemplos abaixo assumem um farm v6. Veja reference/program-addresses para os três IDs de programa.Os nomes dos métodos do módulo farm não são o que você esperaria: não há getFarmById e não há setRewards. A busca passa por raydium.api.fetchFarmInfoById, e os builders de edição de recompensas são addNewRewardToken / addNewRewardsToken e restartReward / restartRewards.Configuração
Os exemplos aqui espelham arquivos emraydium-sdk-V2-demo/src/farm. O bootstrap segue o config.ts.template do repositório de demonstração:
Buscar um farm por id
Não háraydium.farm.getFarmById. Todo exemplo de farm começa a partir do módulo API, que retorna a forma normalizada FormatFarmInfoOut que deposit / withdraw / harvestAllRewards usam:
fetchFarmInfoById recebe uma string separada por vírgulas de ids e retorna um array, então uma chamada pode hidratar um portfólio inteiro. Se você precisar das chaves de conta bruta em vez das informações de exibição, raydium.api.fetchFarmKeysById({ ids }) retorna os vaults e PDAs de autoridade; o SDK a chama internamente para você dentro de cada builder abaixo.
Fazer stake de tokens LP
Fonte:src/farm/stake.ts
Apenas coleta (harvest)
Fonte:src/farm/harvest.ts
farmInfoList é um Record indexado por id do farm, não um array, e o builder retorna múltiplas transações — então execute deve receber sequentially: true:
txIds em vez de um único txId.
Para um único farm, faça harvest com o idioma amount: 0 — isso é o que src/farm/harvest.ts faz, em todas as versões incluindo v6:
Remover stake
Fonte:src/farm/unstake.ts
Criar um farm v6
Fonte:src/farm/createAmmFarm.ts e editAmmFarm.ts
create recebe o objeto de informações do pool para o pool cujo mint LP está sendo feito stake (não um mint simples), e cada entrada de rewardInfos é um FarmRewardInfo: { mint: PublicKey, perSecond: string, openTime: number, endTime: number, rewardType: "Standard SPL" | "Option tokens" }. Os tempos são segundos simples, e perSecond é uma string, não um BN. programId padrão é o programa v6, então você raramente o passa.
perSecondé a taxa de emissão por segundo nas unidades brutas do mint de recompensa, passada como uma string decimal. O SDK a empacota na representação de ponto fixo on-chain antes de enviar.- O orçamento completo (
perSecond × (endTime − openTime)) deve estar presente no seu ATA de recompensa —createo move para o vault de recompensa atomicamente. - Mints de recompensa Token-2022 não são suportados pelos builders de farm do SDK nesta versão do SDK; use um mint SPL simples para recompensas.
- Você pode semear até 5 recompensas em uma chamada
create. A lista de contas cresce por(reward_mint, reward_vault, sender_ata, token_program)por stream extra; fique atento ao limite de tamanho de transação de 1232 bytes. Para 4+ recompensas, crie com 1–2 e useaddNewRewardsTokenem transações subsequentes.
Adicionar um novo stream de recompensa
Não háraydium.farm.setRewards. Os dois builders que alteram as recompensas de um farm são addNewRewardToken / addNewRewardsToken (ocupam um slot livre com um mint novo) e restartReward / restartRewards (re-armam um slot cujo stream terminou). Ambos recebem objetos FarmRewardInfo exatamente na forma que create usa.
perSecond × duration) é puxado do ATA do pagador como parte da transação. A instrução subjacente não pode encurtar um stream, não pode reduzir per_second em um stream ativo e não pode alterar o mint de recompensa de um slot — para trocar mints, aguarde end_time e use addNewRewardsToken em um slot liberado, ou crie um novo farm.
Reiniciar um stream finalizado
Fonte:src/farm/editAmmFarm.ts
restartRewards recebe newRewardInfos (plural, um array); restartReward é a forma de item único e recebe newRewardInfo. O campo mint é mint, não rewardMint, e deve corresponder a um slot que já existe no farm — o builder procura o slot por mint e gera erro se estiver ausente.
restartRewards é apenas v6 — o builder lê o id do programa do farm e gera erro para farms v3 / v5. Válido apenas quando o reward_state == 2 do slot alvo (finalizado); o chamador deve ser o reward_sender do slot. Note que openTime >= endTime é rejeitado no lado do cliente antes de qualquer RPC ser feito.
Rust CPI
Farm v6 foi implantado pela última vez em 2024-05-13 e não é um programa Anchor do ponto de vista de um integrador. Se você precisar compor com ele a partir do seu próprio programa on-chain, construa aInstruction manualmente — derive a lista de contas e discriminadores de instrução independentemente (dos layouts TypeScript do SDK em raydium-sdk-V2/src/raydium/farm/, ou decodificando transações reais), e invoke_signed isso. Veja sdk-api/rust-cpi para esse procedimento.
Qualquer que seja a rota que você tome, a cauda remaining_accounts deve corresponder aos slots de recompensa ativos do farm 1-para-1 (pares de reward_vault_i, user_reward_ata_i em ordem de índice). Omitir ou desordenar esses produz uma contabilidade silenciosa incorreta — o programa transferirá o valor errado.
Armadilhas
- Esquecer de coletar antes de remover stake. Inofensivo —
Withdrawliquida recompensas pendentes primeiro. Mas se sua UI mostrar “coletar” separadamente de “remover stake”, o usuário pode pensar que ainda há algo para coletar após umWithdraw. Não há; tudo acumulado até esse ponto foi pago. total_staked = 0durante emissões. Emissões acumuladas enquanto nada estava em stake são perdidas (a fórmula de atualizaçãoreward_per_sharedivide por 0 e o programa pula a atualização). Para programas comopen_timeagendado, execute um “seed stake” em open_time para evitar isso.- Taxas de transferência Token-2022. Em farms v6 com mints de recompensa Token-2022, a taxa de transferência se aplica na emissão (vault → usuário). Fatore isso em cotações de APR.
- Pequeno
per_secondem v5. A taxau64do v5 significa que qualquerper_second < 1unidade de token por segundo (em mints com ≥9 decimais isso é frequentemente a taxa desejada) não pode ser expressa — a taxa do stream arredonda para 0 e o farm não emite nada. Use v6.
Próximos passos
products/farm-staking/instructions— referência de instrução subjacente.products/clmm/fees— compare com os streams de recompensa nativos do CLMM.user-flows/migrate-amm-v4-to-cpmm— frequentemente emparelhado com a criação de um novo farm CPMM.
- Raydium SDK v2
- Farm v6 IDL agrupado em
raydium-io/raydium-sdk-V2emsrc/raydium/farm/.

