Saltar para o conteúdo principal

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →

Resumo em um parágrafo

O programa AMM Routing agrupa swaps multi-hop em uma única transação on-chain que encadeia liquidez entre pools. Você fornece uma rota (uma lista de pools e mints intermediários) e uma instrução com parâmetros de slippage; o router executa todos os N hops em ordem, movendo a saída de um pool para a entrada do próximo. Nenhuma lógica de router separada on-chain é necessária para o cálculo de preço — a taxa e a curva de cada hop são tratadas pelo próprio programa do pool via CPI — mas o router orquestra a passagem de contas e o movimento de tokens.

Por que um programa router separado?

Clientes e agregadores Raydium sempre podem stitchar swaps multi-hop juntos no cliente sem usar o router: construir N instruções de swap (uma por pool) e enviá-las em uma única transação. Por que, então, ter um programa router dedicado?

Razões para usar o router

  1. CPI de outros programas. Se seu próprio programa precisa invocar uma rota como parte de uma transação maior (por exemplo, um gerenciador de liquidez que troca taxas por um token alvo), fazer CPI no router é mais limpo do que agrupar N CPIs filhos e gerenciar todas as suas contas em seu contrato.
  2. Estado de conta atômico. A lista de contas de cada hop é validada em um contexto de instrução. Se o estado de um pool intermediário estiver corrompido ou uma asserção de limite de preço falhar, toda a rota falha atomicamente sem liquidação parcial.
  3. Composição de instrução única. SDKs e frontends podem representar uma rota multi-hop como uma operação lógica única, não como N instruções separadas que acontecem estar consecutivas.

Stitching no cliente ainda é o padrão

Para a maioria das aplicações, construir instruções Swap separadas para cada pool e enviá-las em ordem é mais simples, mais composável e igualmente válido. Os fluxos como Trade.makeSwapTransaction do SDK Raydium fazem exatamente isso para a maioria das rotas. O router é uma alternativa, não um substituto. Use-o quando:
  • Você está implementando um programa que precisa de roteamento como parte de uma operação atômica maior.
  • Você está construindo um agregador que quer uma operação única de “envie esta rota”.

Como funciona

Uma instrução router carrega:
  • Argumentos de swap: entrada exata (amount_in, minimum_amount_out) ou saída exata (maximum_amount_in, amount_out).
  • Especificação de rota: uma lista de program_id + contas de programa-filho para cada hop, em ordem. O router lê a primeira conta em cada grupo de hop para determinar qual programa invocar.
  • Limites de preço (para CLMM): um VecDeque<u128> de limites sqrt_price_x64. Usado apenas para hops em pools CLMM; uma deque vazia é um erro para variantes de instrução mais antigas.
O router então:
  1. Executa o primeiro hop: transfere amount_in (ou calcula a entrada necessária para saída exata) para o vault de entrada do primeiro pool, invoca o swap desse pool e coleta a saída.
  2. Encadeia hops subsequentes: para cada hop N, usa a saída do hop N−1 como entrada para o hop N.
  3. Aplica slippage: em cada hop CLMM, verifica sqrt_price contra o limit_price correspondente; no hop final, verifica a saída total contra o minimum_amount_out global.
Tokens intermediários podem fluir através de ATAs controlados pelo usuário (um por hop, mais lento mas transparente) ou através de uma conta derivada de PDA compartilhada (um endereço para todos os hops, mais rápido, opaco).

Delegação de preços e taxas

O router não calcula preços em si. Cada hop delega para a curva do programa filho:
  • AMM v4: usa a fórmula de produto constante com preços híbridos OpenBook.
  • CPMM: usa a fórmula de produto constante com a taxa configurada.
  • CLMM: usa a matemática de liquidez concentrada com preços baseados em ticks.
  • Stable: usa a curva stable-swap para tokens semelhantes.
Taxas são cobradas por cada pool de acordo com sua própria configuração. O router não cobra taxa própria.

Quando evitar o router

  • Contagem baixa de hops (1–2 hops). A sobrecarga de passagem de contas é mínima; apenas use duas instruções de swap separadas.
  • Pools não-Raydium. O router só conhece os quatro tipos de pool Raydium. Para rotas que cruzam programas externos, faça stitching de instruções no seu cliente.
  • Roteamento condicional. Se você precisar ramificar baseado em preços ou estados de pool no meio da rota, o roteamento on-chain é menos flexível que a composição no cliente.

Modelo mental

Pense no router como um utilitário de empacotamento de transações. Ele pega sua especificação de rota e a empacota em uma instrução, uma transação, um orçamento de computação. Cada hop internamente faz CPI em seu programa de pool e trata a matemática da curva lá. O trabalho do router é passar contas corretamente, mover tokens entre hops e verificar slippage.

Para onde ir a seguir