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 →
A curva da tabela de consulta
O Stable AMM substitui a fórmula x·y=k por uma tabela de consulta esparsa de tuplas (x, y, price). Ao precificar um swap, o programa:- Calcula a razão atual do pool a partir das reservas.
- Faz busca binária na tabela para encontrar as duas entradas que envolvem essa razão.
- Interpola linearmente entre elas para obter um preço intermediário.
- Aplica taxas e retorna a cotação.
Layout da tabela e busca binária
OModelDataInfo armazena até 50.000 entradas DataElement, indexadas pelo admin. Apenas as primeiras valid_data_count estão ativas. Cada entrada:
- Calcule a razão:
target_ratio = (x_real * multiplier) / y_real. - Faça busca binária por entradas onde
(element.x * multiplier) / element.yenvolvetarget_ratio. - Quando um intervalo
[min_idx, max_idx]é encontrado, interpole.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real. O invariante-chave: as entradas devem estar ordenadas (x ascendente, y descendente, price ascendente) para a busca funcionar.
Interpolação linear
Quando dois pontos da tabela envolvem a razão, a interpolação calcula um preço intermediário e um par de reservas:Escalonamento: o multiplicador
As reservas do pool e os preços são armazenados em escalas diferentes. O campomultiplier em ModelDataInfo leva isto em conta. Um padrão comum:
- A moeda tem 6 casas decimais, a PC tem 18 casas decimais.
- Multiplicador = 10^6 (ou similar).
- As entradas da tabela são armazenadas em uma escala reduzida para caber nos limites de u64.
Precificação de swap: SwapBaseIn e SwapBaseOut
SwapBaseIn (entrada exata)
Dado um valor de entradaamount_in:
- Obtenha a razão atual de
(coin_vault, pc_vault). - Encontre as entradas da tabela que envolvem e interpole para obter a razão no espaço da tabela.
- Converta a entrada para o espaço da tabela:
dx_table = amount_in * multiplier / ratio. - Consulte a tabela na nova coordenada X para encontrar o novo Y.
dy_table = y_old - y_new.- Converta de volta:
dy_real = dy_table * ratio / multiplier. - Aplique taxa de negociação:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). - Retorne
dy_output.
SwapBaseOut (saída exata)
Simétrico: dado oamount_out desejado, resolva para o amount_in necessário.
Ambos os caminhos liquidam pedidos OpenBook preenchidos primeiro (via lógica interna semelhante a MonitorStep), de modo que as reservas efetivas refletem qualquer preenchimento do bloco anterior.
Aplicação de taxa
Idêntica ao AMM v4: consulteproducts/amm-v4/math para a derivação completa.
pnl_portion vai para need_take_pnl_* e é recolhida pelo admin via WithdrawPnl. A lp_portion permanece no vault, inflacionando k e beneficiando os detentores de tokens LP.
MonitorStep e OpenBook
Como no AMM v4,MonitorStep é uma instrução crank que:
- Liquida preenchimentos de pedidos OpenBook pendentes (move tokens dos vaults para o pool).
- Atualiza
AmmInfo.target_orderscom uma nova grade de slots de pedidos limitados. - Publica a nova grade no OpenBook.
MonitorStep: ~150k–180k CU (similar ao AMM v4).
Resumo: por que isto funciona
O design de tabela de consulta + interpolação é eficiente e flexível:- Eficiência: a busca binária é O(log 50.000) ≈ 16 iterações, cada uma ~300–500 CU. A interpolação é algumas multiplicações/divisões. O custo total de cotação é ~5k–15k CU, muito mais barato do que recomputar uma fórmula a cada swap.
- Flexibilidade: o admin pode codificar qualquer curva linear por partes. Pares de stablecoin ficam com alta densidade ao redor de 1:1; pares colateralizados ficam com curvas personalizadas.
- Composabilidade OpenBook: a mesma lógica de
MonitorStep/TargetOrdersdo AMM v4 se aplica. A descoberta de preço via tabela alimenta a geração da grade de pedidos.
raydium-stable/program/src/state.rs, métodos get_data_by_x, get_data_by_y, get_dy_by_dx_base_in, etc.
Próximos passos
- Contas — referência de campos de
ModelDataInfoeDataElement. - Instruções —
InitModelData,UpdateModelDatapara preencher a tabela. - Taxas — aplicação de taxa e
WithdrawPnl. products/amm-v4/math— para a lógica de precificação de pedidos inclusiva de taxa do OpenBook.
raydium-stable/program/src/state.rs(implementações de interpolação e busca binária)raydium-stable/program/src/math.rs(utilitários de calculadora)


