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 →
Todo programa da Raydium possui ao menos um papel privilegiado — uma chave capaz de atualizar o programa, criar novas configs ou sacar taxas de protocolo. Minimizar o que esses papéis podem fazer (e protegê-los com multisigs e delays) é a principal defesa contra um admin comprometido. Esta página cataloga os papéis e como eles são protegidos na prática.

Papéis por programa

AMM v4

PapelEndereço da autoridadeO que pode fazer
Atualização do programaSquads multisig (3/4)Publicar novo bytecode do programa
Admin de poolTreasury multisig (3/5)Alternar status de pool, atualizar taxas em pools existentes

CPMM

PapelEndereço da autoridadeO que pode fazer
Atualização do programaSquads multisig (3/4)Publicar novo bytecode do programa
Admin de AmmConfigTreasury multisig (3/5)Criar novos AmmConfigs (níveis de taxa); alternar os existentes
Destinatário da taxa de criação de poolTreasury multisig (3/5)Receber a taxa única de criação de pool

CLMM

PapelEndereço da autoridadeO que pode fazer
Atualização do programaSquads multisig (3/4)Publicar novo bytecode do programa
Admin de AmmConfigTreasury multisig (3/5)Criar/modificar AmmConfigs
Admin de DynamicFeeConfigTreasury multisig (3/5)CreateDynamicFeeConfig / UpdateDynamicFeeConfig — calibrar os níveis de taxa dinâmica que uma chamada CreateCustomizablePool pode adotar
limit_order_admin (em nível de programa)Hot wallet operacional off-chain, não um multisigLiquidar e fechar limit orders em nome de seus donos. A chave do keeper é uma constante única em todo o programa (valor diferente em mainnet vs devnet), verificada via signer == limit_order.owner || signer == limit_order_admin::ID em SettleLimitOrder / CloseLimitOrder. O resultado sempre vai para a ATA do dono original; o keeper não pode redirecionar fundos, modificar ordens nem abrir novas.
O limit_order_admin é um papel operacional deliberadamente limitado. Ele existe para que um keeper off-chain possa processar ordens preenchidas sem que o dono da ordem precise estar online. A chave do keeper é hot (reside na VM do keeper) e é rotacionada independentemente dos multisigs acima. Em termos concretos, a autoridade do keeper se restringe a:
  • SettleLimitOrder — enviar o resultado preenchido de uma ordem para a ATA do dono pelo preço limite da ordem.
  • CloseLimitOrder — fechar a conta de uma ordem totalmente liquidada para recuperar o rent (o rent vai para o dono da ordem).
Ele não pode chamar OpenLimitOrder, IncreaseLimitOrder, DecreaseLimitOrder, alterar nenhum campo de pool nem assinar qualquer outra instrução — essas verificações são aplicadas on-chain pelas restrições de seed e has_one na struct Accounts da instrução. Um keeper comprometido pode, no pior caso, ficar indisponível (as ordens permanecem pausadas até que o dono as liquide manualmente) ou liquidar/fechar ordens legitimamente preenchidas fora de ordem; ele não pode mover os fundos do usuário para outro lugar que não seja o destino já autorizado pelo dono.

Farm v6

PapelEndereço da autoridadeO que pode fazer
Atualização do programaSquads multisig (3/4)Publicar novo bytecode do programa
Criador do farm (por farm)A carteira criadora do farmFinanciar vaults de recompensa, estender cronogramas, recuperar recompensas não utilizadas
Farms individuais não têm admin de protocolo — o criador de cada farm controla apenas o seu próprio farm, e seus poderes são limitados (não pode confiscar stakes de usuários, não pode alterar o mint de staking).

LaunchLab

PapelEndereço da autoridadeO que pode fazer
Atualização do programaSquads multisig (3/4)Publicar novo bytecode do programa
Criador do launch (por launch)A carteira criadora do launchColetar taxas do criador após a graduação; sacar o saldo remanescente da curva não graduada
Launches não possuem um admin de protocolo que possa alterar curvas ou confiscar os fundos captados.

Autoridade de atualização do programa

Os programas da Raydium utilizam o mecanismo padrão de atualização do BPF Loader v3 do Solana. A autoridade de atualização de todos os programas é o Squads multisig 3/4. Por que 3/4: signatários suficientes para que um único comprometimento não seja suficiente; poucos o bastante para que uma atualização legítima seja viável. As quatro autoridades são signatários independentes em dispositivos cold air-gapped, mantidos por membros do time central. A assinatura sequencial impede aprovações paralelas na mesma transação; as transações carregam uma janela de expiração fixa. As operações do multisig são revisadas periodicamente em parceria com o Programa STRIDE da Solana (Asymmetric Research).

Removendo a autoridade de atualização

A Raydium não definiu a autoridade de atualização de nenhum programa como nula. O protocolo opera sob o princípio de que os programas precisam ser atualizáveis (para corrigir bugs, adicionar extensões como Token-2022, resolver drifts de integração). A contrapartida: os usuários confiam que o multisig 3/4 publicará apenas atualizações bem revisadas. Para usuários que preferem uma alternativa imutável, o programa AMM v4 mais antigo está estável desde sua última auditoria; sem atualizações em 18 meses. Esse caminho de código está efetivamente congelado, mesmo que a autoridade ainda exista.

Autoridade de AmmConfig

A criação de cada novo AmmConfig é permissionada — o treasury multisig 3/5 autoriza novos níveis de taxa e tick spacings. Pools existentes referenciam seu AmmConfig pelo PDA; o nível de taxa do pool é o que o AmmConfig define. Os admins podem alterar um AmmConfig existente? Sim, tecnicamente. updateAmmConfig pode ser chamado pelo admin. Na prática, modificações em AmmConfigs já publicados são evitadas porque alteram silenciosamente a economia de todos os pools que utilizam aquela config. A política do protocolo é criar um novo AmmConfig para qualquer mudança e migrar. Os admins podem roubar taxas de protocolo via config? Não — o AmmConfig contém parâmetros de taxa, mas não o destinatário da taxa de protocolo; esse é um endereço imutável separado por pool.

Coleta de taxas de protocolo

Uma parte das taxas de swap (tipicamente 3–12 bps de 25 bps de taxa de swap, dependendo da config) acumula em um vault de taxa de protocolo. O multisig pode sacar essas taxas acumuladas. Os usuários nunca veem seu saldo de LP mudar com isso — é a cota pré-alocada do protocolo, não dinheiro do LP.

Autoridade do criador de farm

Os Farms v6 concedem ao criador o poder de:
  • Financiar o vault de recompensa (adicionar mais tokens).
  • Estender o cronograma (adiar o tempo de término).
  • Chamar withdrawReward após o término para recuperar o saldo não utilizado do vault.
Criadores de farm não podem:
  • Sacar o LP de usuários em stake.
  • Alterar o mint de staking.
  • Alterar taxas de emissão retroativamente (apenas prospectivamente via setRewards).
  • Congelar os harvests dos usuários.
Um criador de farm malicioso pode, no pior caso, subfinanciar o vault para que o farm se esgote; o principal em stake dos usuários está sempre seguro.

Configuração do Squads multisig

A Raydium opera dois Squads multisigs separados para superfícies de risco distintas. Ambos podem ser inspecionados on-chain pela interface do Squads Protocol.
MultisigThresholdTimelockEscopo
Atualização de programa3/424 horasAutoridade exclusiva para publicar novo bytecode para AMM v4, CPMM, CLMM, LaunchLab, Lock, AMM Routing, Stable Swap e os programas legados de Farm/Staking. Visualize em app.squads.so/.../FytDr…ceZQK.
Treasury3/5nenhumAtivos do tesouro, receita do protocolo, despesas operacionais. Também detém a autoridade limitada de admin de programa da Raydium (criação de AmmConfigs, coleta de taxas de protocolo, configuração de parâmetros de pool) por ora. Visualize em v3.squads.so/dashboard/RVha…dHdtYz09.
Propriedades operacionais do multisig de atualização:
  • Timelock de 24 horas em qualquer transação. Uma atualização aprovada hoje só será executada após 24 horas, dando tempo aos usuários para reagir.
  • Assinatura em dispositivos cold air-gapped. Os dispositivos cold têm placas de rede fisicamente removidas; eles se conectam apenas a uma hardware wallet e leem dados de transação via QR code de um dispositivo hot separado.
  • Assinatura sequencial. Somente após um dispositivo cold gerar e assinar uma transação o próximo dispositivo cold pode iniciar seu processo de assinatura — evitando assinaturas conflitantes ou paralelas na mesma transação.
  • Expiração de transação. Toda transação carrega uma janela de expiração fixa, fazendo com que transações obsoletas sejam invalidadas automaticamente.
  • Aplicação de TOTP + chave física nos dispositivos hot usados para iniciar transações e transmiti-las on-chain.
  • Fila de transações pública. Qualquer pessoa pode monitorar atualizações pendentes pela interface do Squads.
O treasury multisig não tem timelock — seu escopo é mais restrito e operações rotineiras (criar AmmConfigs, coletar taxas) precisam ser finalizadas no mesmo dia. O treasury multisig também detém a autoridade limitada de admin de programa listada nas tabelas por programa acima; esse é um arranjo temporário e é revisado periodicamente com os parceiros de segurança do projeto.

Verificando a autoridade on-chain

A forma mais simples de verificar a autoridade de atualização atual de um programa:
solana program show <PROGRAM_ID>
A saída inclui:
Program Id:          CPMMoo8L3F4NbTegBCKVNunggL7H1Zpdmwpwh8KMoZ0F
Owner:               BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: <ProgramDataPDA>
Authority:           <EXPECTED_MULTISIG_ADDRESS>
Last Deployed In Slot: <slot>
Data Length: <n> bytes
Se Authority não for o endereço do Squads multisig esperado, algo está errado. A Raydium publica os endereços de autoridade esperados em reference/program-addresses. Para papéis de AmmConfig / admin de pool, busque a conta on-chain e decodifique:
const config = await raydium.cpmm.getAmmConfig(configPda);
console.log("AmmConfig admin:", config.admin.toBase58());
// Esperado: treasury multisig 3/5.

Histórico de mudanças de autoridade

DataProgramaMudança
2022-12AMM v4Autoridade de atualização migrada de single-sig para multisig 3/4 após incidente
2023-02Todos os programasTodos os papéis operacionais unificados sob o treasury multisig 3/5
2023-11CLMMAdicionado segundo multisig para operações exclusivas de recompensa, reduzindo a exposição
2024-05CPMMDeploy inicial com autoridade multisig desde o primeiro dia

Considerações para o usuário

O que você deve fazer como usuário/LP/integrador?
  1. Verifique a autoridade de atualização antes de grandes alocações. Confirme que ela corresponde ao multisig documentado.
  2. Monitore a atividade do multisig. A interface do Squads exibe transações pendentes; uma atualização agendada lhe dá 24 horas para desfazer posições caso discorde da mudança.
  3. Estratégias de resgate cientes do timelock. Se você opera um auto-compounder, certifique-se de que seu caminho de saída não depende de uma instrução que está sendo alterada.
  4. Não presuma imutabilidade do programa. Todo programa da Raydium pode ser atualizado; planeje para isso.

Armadilhas para integradores

1. Cache de endereços de autoridade

Se você fixar no código o endereço da autoridade de atualização ou do multisig admin e ele for rotacionado posteriormente, sua verificação falhará. Busque em reference/program-addresses em tempo de execução ou atualize periodicamente.

2. Supor que AmmConfigs são estáveis

Um novo AmmConfig pode ser criado a qualquer momento. Seu aggregator/router deve rebuscar a lista completa de configs periodicamente (de hora em hora é suficiente).

3. Vetores de ataque do criador de farm

Se você estiver depositando em um farm de baixa reputação, o criador pode encerrar o farm antecipadamente e recuperar o vault de recompensa (assumindo que nenhum usuário ainda tenha feito stake). Uma vez que usuários tenham feito stake, os direitos proporcionais são aplicados pelo programa; a recuperação pega apenas o saldo restante após o término racional.

Referências

Fontes: