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 →

O que é uma curva de bonificação

Uma curva de bonificação é uma função de preço determinística p(s) que relaciona o preço de um token à quantidade atualmente em circulação (s de “supply sold”). Compradores adquirem enviando colateral para o contrato; o contrato emite novas unidades de token ao preço marginal ditado pela curva. Vendedores devolvem unidades de token e recebem o reembolso integrado. Duas propriedades-chave em comparação com um pool CPMM:
  • Sem contraparte necessária. O contrato emissor é o criador de mercado; liquidez existe por direito.
  • Preço monotônico. O preço sobe a cada compra líquida e cai a cada venda líquida.
Curvas de bonificação são o mecanismo de lançamento padrão quando a entidade emissora não quer pré-semear um pool AMM com colateral.

Fórmulas de preço genéricas

Para qualquer função de preço contínua p(s): Preço spot na oferta s:
p(s) = the curve formula
Custo para comprar oferta de s_0 para s_1 (com s_1 > s_0):
cost(s_0, s_1) = ∫_{s_0}^{s_1} p(s) ds = P(s_1) − P(s_0)
onde P(s) = ∫ p(s) ds é a antiderivada da curva. Geometricamente, cost é a área sob p entre s_0 e s_1. Receita de venda da oferta de volta de s_1 para s_0:
proceeds(s_1, s_0) = cost(s_0, s_1)
(Simetria: comprar e vender no mesmo intervalo troca o mesmo colateral — módulo taxas.) Preço médio para a compra:
avg = cost(s_0, s_1) / (s_1 − s_0)

Famílias de curvas comuns

Linear

p(s) = a + b · s
P(s)            = a·s + (b/2)·s²
cost(s_0, s_1)  = a·(s_1 − s_0) + (b/2)·(s_1² − s_0²)
O preço sobe proporcionalmente com a oferta. Usado para lançamentos “estáveis” onde o emissor quer um markup previsível e moderado ao longo do tempo de vida.

Quadrática

p(s) = k · s²                      // ou  k · (s / S_max)² para uma forma normalizada
P(s)            = (k / 3) · s³
cost(s_0, s_1)  = (k / 3) · (s_1³ − s_0³)
O preço sobe quadraticamente. Compradores iniciais recebem um preço próximo a zero (região inicial plana); compradores tardios pagam um prêmio mais acentuado. Este é o tipo de curva que LaunchLab usa por padrão (curve_type = 0).

CPMM com reservas virtuais (estilo Pump)

A curva é um CPMM padrão com uma pretensa reserva de cotação inicial V_q:
effective_y = V_q + collateral_received
effective_x = S_max − s
(effective_x) · (effective_y) = V_q · S_max      // invariant
Preço spot:
p(s) = effective_y / effective_x
     = V_q · S_max / (S_max − s)² · ... (derivável via diferenciação implícita)
Custo para se mover de s_0 para s_1:
cost(s_0, s_1) = V_q · S_max / (S_max − s_1) − V_q · S_max / (S_max − s_0)
              = V_q · (s_1 − s_0) · S_max / ((S_max − s_0) · (S_max − s_1))
Esta variante tem a propriedade elegante de que na graduação (onde s = S_graduate), o preço marginal é igual ao preço de abertura do pool CPMM a jusante semeado com reservas (S_max − S_graduate, V_q + cost(0, S_graduate)). A transição é perfeita. LaunchLab expõe isto como curve_type = 1.

Implementação discreta

On-chain, s e cost são ambos inteiros (unidades da menor denominação). O integral contínuo cost(s_0, s_1) é calculado diretamente a partir da forma fechada sempre que existe (linear, quadrática). Para curvas sem inversa de forma fechada (quadrática, dado cost, encontre s_1), iteração de Newton é usada:
# Resolver quadrática: (k/3)·s_1³ = (k/3)·s_0³ + cost
# Inicializar com s_guess ≈ cbrt(3·cost/k + s_0³)
for i in 0..MAX_ITER:
    f    = (k/3)·s_guess³ − (k/3)·s_0³ − cost
    f'   = k·s_guess²
    step = f / f'
    s_guess -= step
    if |step| < precision_floor: break
LaunchLab limita iterações a ~10 e reverte com NotConverged se o resíduo ainda estiver acima da tolerância. Na prática, isto só dispara perto das extremidades do domínio; swaps de produção convergem em 2–3 iterações.

Integração de taxas

As taxas são aplicadas no topo do custo da curva, não dentro dela. Na compra:
cost_curve  = cost(base_sold, base_sold + base_out)
fee         = ceil(cost_curve · buy_numerator / buy_denominator)
quote_in    = cost_curve + fee
Na venda:
proceeds_curve = cost(base_sold − base_in, base_sold)
fee            = ceil(proceeds_curve · sell_numerator / sell_denominator)
quote_out      = proceeds_curve − fee
A porção LP da taxa é retida em quote_vault e efetivamente torna a curva mais rígida para compradores posteriores — a reserva cresce sem emitir mais oferta. As porções do protocolo e do criador são rastreadas em contadores separados para varredura posterior.

Limite de graduação

Uma curva “gradua” quando recebeu colateral suficiente para semear um pool AMM externo a um preço que corresponde ao preço atual da curva. Para uma curva quadrática com parâmetros (k, S_max, S_graduate):
quote_to_graduate = cost(0, S_graduate) · (1 + buy_fee_rate)
                  = (k / 3) · S_graduate³ · (1 + f_buy)
Uma vez que quote_vault ≥ quote_to_graduate, a instrução Graduate cria um pool CPMM com:
cpmm_base_reserve  = S_max − S_graduate        // unsold curve supply
cpmm_quote_reserve = quote_vault − accrued_fee_counters
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
Para a curva de reservas virtuais, por construção:
cpmm_initial_price == p(S_graduate)           // igualdade exata
Para a quadrática, a igualdade é aproximada; o “erro” é absorvido no arredondamento de S_graduate (tipicamente 0.8 · S_max) e no colateral excedente da compra final que ultrapassa o limite.

Impermanência versus um pool CPMM

Um lançamento de curva de bonificação pura tem nenhuma impermanência no sentido Uniswap: não há “outro lado” do mercado para rebalancear. A curva emite oferta sob demanda, e o único “LP” é o próprio contrato. Após graduação, o pool CPMM resultante se comporta como qualquer outro pool CPMM — se o LP não foi queimado, está sujeito à dinâmica usual de perda impermanente. É por isso que a política de queimar pós-graduação é dominante em lançamentos públicos: mantém o pool permanente e remove qualquer choque de preço causado por retirada de LP.

Exemplo trabalhado

Curva: quadrática, k = 40, S_max = 1e9, S_graduate = 0.8 · S_max = 8e8. Taxa de compra 1%.

Preço em s = 5e8

p(5e8) = 40 · (5e8 / 1e9)² = 40 · 0.25 = 10
10 unidades de cotação por unidade de base.

Custo da primeira compra de 1e6 base

cost(0, 1e6) = (40/3) · (1e6)³
             = (40/3) · 1e18
             ≈ 1.333e19     (unidades menores de cotação)
Com taxa de 1%:
quote_in = 1.333e19 · 1.01 ≈ 1.347e19

Limite de graduação

cost(0, 8e8) = (40/3) · (8e8)³
             = (40/3) · 5.12e26
             ≈ 6.827e27
quote_to_graduate ≈ 6.827e27 · 1.01 ≈ 6.895e27

Preço na graduação

p(8e8) = 40 · 0.64 = 25.6

Reservas CPMM pós-graduação

cpmm_base  = 1e9 − 8e8 = 2e8
cpmm_quote ≈ 6.827e27  (menos deduções de contador de taxas)
cpmm_price ≈ 3.41e19 por base — o que corresponde a p(8e8) após contabilizar unidades
(Unidades: decimais precisam ser rastreados cuidadosamente; o exemplo é ilustrativo.)

Referências

Fontes:
  • Código-fonte do programa Raydium LaunchLab (implementações de curva quadrática + reservas virtuais).
  • Banco Branco (curvas de bonificação lineares, históricas).
  • Posts post-mortem públicos do Pump.fun (variante de reservas virtuais).