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 →
Os programas de produtos do Raydium são bases de código independentes, mas foram projetados contra um conjunto compartilhado de convenções. Esta página é a referência canônica para essas convenções. Os capítulos por produto descrevem como as convenções são instanciadas em suas contas; esta página descreve as convenções em si.

O que “compartilhado” significa aqui

Três tipos de compartilhamento percorrem a base de código:
  • Compartilhamento de convenção. Todo programa usa o mesmo padrão de derivação de PDA, a mesma forma de divisão de taxas e a mesma ideia de conta de observação — mas cada um os implementa em seu próprio programa com suas próprias sementes.
  • Compartilhamento de conta. Um punhado de contas são literalmente o mesmo registro em muitos pools (o PDA de autoridade global em CPMM, as contas AmmConfig).
  • Compartilhamento off-chain. Uma API REST e um SDK TypeScript fronteiam todos os quatro programas. Os integradores interagem com um host HTTP e um pacote NPM independentemente de qual programa acabam chamando.
Os cinco primitivos abaixo cobrem tudo que cruza limites de programa.

1. PDAs de autoridade

Todo programa Raydium tem exatamente um PDA que possui seus cofres de token. Os usuários nunca mantêm autoridade de cofre diretamente — o PDA de autoridade é o único signatário que pode mover fundos para fora, e só assina quando uma instrução de programa válida o diz. O padrão é idêntico entre produtos; as sementes diferem: Algumas coisas decorrem disso:
  • Para CPMM e CLMM, o PDA de autoridade é uma conta global — cada pool desse tipo a usa. Se você está fazendo CPI em CPMM, você precisa dela uma vez, não por pool.
  • Para autoridades por pool / por farm, você deriva o PDA do ID do pool/farm. O SDK faz isso em getPoolKeys / getFarmKeys; se você está integrando diretamente, você deriva com findProgramAddressSync.
  • A propriedade do cofre não pode ser alterada. Uma vez que uma conta de token é criada com o PDA de autoridade como proprietário, apenas esse PDA — invocado pelo programa — pode transferir para fora. Não há substituição de administrador.
Para as sementes exatas e layouts de ATA por programa, veja products/cpmm/accounts, products/clmm/accounts, products/amm-v4/accounts, products/farm-staking/accounts, products/launchlab/accounts.

2. Contas de administrador e configuração

CPMM e CLMM compartilham um padrão de conta de configuração chamado AmmConfig: uma pequena conta global, indexada por um u16, mantendo as taxas de taxa e destinos de administrador que se aplicam a um nível de taxa inteiro. Os pools se vinculam a uma configuração na criação e nunca se re-vinculam.
Regras da estrada:
  • Os níveis de taxa são globais. Quando um pool diz “este é um pool de 0,25%”, significa que se vincula ao AmmConfig cuja trade_fee_rate era 0,25% no momento da criação. Não há substituição de taxa por pool.
  • Uma configuração pode ser alterada, mas os pools não a seguem. Se a autoridade de configuração editar um AmmConfig, cada pool existente vinculado a essa configuração pega a nova taxa imediatamente. Isso é um recurso, não um bug; é assim que as mudanças econômicas no nível do protocolo se propagam sem migrações por pool.
  • disable_create_pool é a alavanca de descontinuação. Quando um nível de taxa é descontinuado, o multisig do protocolo define esse sinalizador — os pools existentes continuam funcionando, mas nenhum novo pool pode escolher o nível.
  • protocol_owner / fund_owner são os signatários para chamadas de coleta de taxas. Defini-los como um multisig é o que controla a retirada de taxas. Eles NÃO são os endereços de destino das taxas em si; isso é protocol_fee_destination / fund_fee_destination na mesma conta.
AMM v4 não tem AmmConfig — seus parâmetros de taxa são por pool, codificados na criação. Farm e LaunchLab têm seus próprios equivalentes (FarmConfig, LaunchConfig) cobertos em seus respectivos capítulos. Uma tabela completa de quem pode alterar o quê está em security/admin-and-multisig. As divisões de taxas atuais voltadas para o usuário estão em ray/protocol-fees.

3. A divisão de taxa de protocolo / fundo / criador

Cada taxa de swap CPMM e CLMM é dividida em até quatro destinos no caminho:
Mecanicamente:
  1. A taxa de negociação se acumula no pool. A taxa é removida do lado de entrada do swap e a quantidade pós-taxa é o que a matemática de produto constante vê. Isso é o que “o LP ganha a taxa” significa — k sobe e assim também o valor de token por LP implícito.
  2. As porções de protocolo/fundo/criador são deduzidas dessa acumulação do lado LP em contas de contador por pool. Elas ficam no estado do pool (protocol_fees_token{0,1}, fund_fees_token{0,1}, etc.) até que alguém chame a instrução de coleta correspondente. Elas não saem dos cofres do pool até então; da perspectiva de um swap, elas ainda estão “no pool”.
  3. A coleta as move para fora. Os caminhos de protocolo e fundo exigem o signatário protocol_owner / fund_owner respectivo do AmmConfig. As taxas de criador CPMM usam o caminho CollectCreatorFee assinado pelo criador ou CollectCreatorFeePermissionless, que qualquer pagador pode disparar, mas que fixa os destinos aos ATAs canônicos do criador.
Algumas observações que carregam carga:
  • Os percentuais de divisão são da taxa de negociação, não da negociação. Uma taxa de negociação de 0,25% com uma participação de protocolo de 12% significa que o protocolo obtém 0,25% × 12% = 0,03% da negociação — não 12% da negociação.
  • As taxas de criador existem apenas em pools graduados do LaunchLab. Os pools CPMM/CLMM padrão têm uma divisão de 3 vias (LP / protocolo / fundo). LaunchLab adiciona um quarto slot roteado para quem lançou o token, configurado em Initialize e imutável.
  • AMM v4 divide apenas de duas maneiras, codificado por pool: LP e protocolo. Sem slot de fundo, sem slot de criador.
  • Fundo vs protocolo — ambos são destinos de tesouro do protocolo, mas têm signatários diferentes e usos pretendidos diferentes. protocol historicamente financia operações; fund é o tesouro de longo prazo. A divisão entre os dois é em si ajustável.
As taxas específicas estão em reference/fee-comparison e ray/protocol-fees.

4. Contas de observação (buffer de anel TWAP)

Tanto CPMM quanto CLMM mantêm uma conta de observação por pool — um buffer de anel de tamanho fixo de amostras (timestamp, cumulative_price) que outros contratos podem usar para derivar um TWAP resistente a manipulação.
Como funciona:
  • Cada swap chama update_observation. O programa lê o preço atual, multiplica pelos segundos decorridos desde a observação anterior e o adiciona ao contador cumulativo. A nova entrada sobrescreve o slot mais antigo (estilo buffer de anel).
  • TWAP sobre uma janela = (cumul[end] − cumul[start]) / (timestamp[end] − timestamp[start]). Os consumidores escolhem duas observações entre a janela desejada e dividem.
  • O próprio Raydium não usa o TWAP para precificação. A matemática AMM lê as reservas de spot diretamente. As observações são uma externalidade — Raydium paga o custo de escrevê-las para que outros contratos possam ler.
  • AMM v4 não tem conta de observação. É mais antigo que o design ObservationState; os integradores que desejam um TWAP v4 têm que computar um off-chain do histórico de logs.
Detalhes de layout e matemática de indexação estão em products/cpmm/accounts e products/clmm/accounts.

5. API REST + SDK + IDL

A superfície off-chain é um único trio usado por cada produto:
  • API RESThttps://api-v3.raydium.io. Uma visão indexada principalmente de leitura de todo o estado on-chain mais um mecanismo de cotação. Um host, um esquema.
  • SDK TypeScript@raydium-io/raydium-sdk-v2 no NPM. Constrói e assina transações para cada programa. Fala com a API para cotações/metadados, fala com um RPC Solana para atualizações de estado pré-assinatura.
  • Registro IDL — IDLs Anchor para cada programa publicado vivem no repositório raydium-idl (um JSON por programa: CPMM, CLMM, LaunchLab). O SDK TypeScript consome esses IDLs internamente; clientes Rust / Python downstream regeneram dos mesmos arquivos.
O limite entre eles é nítido: Um erro comum é alimentar a saída da API REST diretamente em uma transação. Não faça isso — re-busque o estado relevante do pool/posição de um RPC Solana no slot que você está assinando. O SDK faz isso automaticamente para fluxos de primeira parte; se você contornar o SDK, você tem que fazer isso você mesmo. A referência completa está em sdk-api/, com a superfície IDL especificamente em sdk-api/anchor-idl.

6. Indexadores e feeds de preço

A API REST é alimentada pelo próprio indexador do Raydium, que se inscreve em logs de programa de uma frota de RPCs Solana e escreve registros desnormalizados em um armazenamento SQL. Duas consequências para integradores:
  • O indexador é a única coisa que “sabe sobre” estado entre programas. Mapear um pool CPMM para seu equivalente CLMM, computar um número de volume de 24h entre versões de programa, pegar um farm associado a um mint LP — tudo isso é trabalho de indexador. Os próprios programas não fazem isso.
  • O tempo de inatividade do indexador é o tempo de inatividade da API. Se a API retorna dados desatualizados ou vazios, o indexador é o suspeito. O estado on-chain não é afetado; integradores com seu próprio RPC e SDK podem continuar transacionando.
Os feeds de preço são uma preocupação separada. A API publica um campo priceUsd na maioria das respostas de pool; isso é computado off-chain a partir de um snapshot da visão do indexador das reservas do pool e um preço de referência citado (pools USDC como o pivô comum). É bom o suficiente para UI; não é seguro usar como um oráculo on-chain. Use o TWAP de observação para isso.

O que não é compartilhado

Vale a pena listar explicitamente, porque novos leitores frequentemente assumem mais compartilhamento do que existe:
  • Os programas não chamam uns aos outros. Um swap CPMM nunca faz CPI em CLMM ou AMM v4. O único programa que compõe múltiplos AMMs é o programa AMM Routing — e esse é em si fino, apenas emitindo CPIs em cada AMM em sequência.
  • Nenhuma autoridade de atualização compartilhada entre programas. Cada programa on-chain tem sua própria chave de atualização de programa (um multisig 3/4 mais um timelock de 24h). Elas não estão vinculadas.
  • Nenhum estado compartilhado entre farms e AMMs. Um farm não sabe qual LP que ele estaca é de um pool CPMM, um mint NFT de posição CLMM ou um token SPL não relacionado. O programa farm trata o mint de staking como opaco.
  • Nenhuma dependência de oráculo. A precificação é reservas on-chain. Não há fallback Pyth/Switchboard; o AMM não verifica um oráculo antes de limpar.

Ponteiros

Fontes:
  • Raydium SDK v2 — a fonte da verdade para sementes de PDA, layouts de conta e definições de IDL.
  • Registro IDL Raydium — IDLs Anchor.
  • Páginas de contas por produto citadas inline acima.