O lançamento em duas posições

Desde a emenda de 2026-09-12, não há bonding curve. Todo o supply vai para liquidez travada no Uniswap v4, já na própria transação de criação. No código desde 2026-09-28: LiquidityLock.launchMarket faz tudo isso dentro da transação de criação do mercado, e os testes fixam o preço de abertura que a Lens lê, 3.401.582.525 wei por token.

Por que a curva saiu de cena

A curva antiga era um produto constante sobre reservas virtuais:

x = VIRTUAL_ETH   + netReserve     (3.75 ETH + o que entrou)
y = TOKEN_RESERVE - tokensSold     (1.1 B − o que saiu)

Isso é exatamente o que uma posição de liquidez concentrada é: as reservas virtuais do v3/v4 são esse offset. A correspondência não é uma aproximação, é a mesma equação escrita de outra forma.

O que a remoção traz: nenhuma migração — o momento mais arriscado do protocolo —, nenhuma taxa de graduação a extrair, um único caminho de taxas em vez de dois, e mercados roteáveis por agregadores desde o primeiro bloco.

As duas faixas

graph LR A["FDV 3,409 ETH

tick 195000

abertura"] -->|faixa 1 · 700M tokens · 7,535 ETH| B["FDV 34,091 ETH

tick 171960

10x"] B -->|faixa 2 · 300M tokens · ilimitada| C["tick −887220

teto de preço"]
Faixa 1 Faixa 2
Tokens 700.000.000 300.000.000
Ticks [171960, 195000] [−887220, 171960]
Profundidade 7,535 ETH para atravessar 14,5 ETH a 2× · 45,7 ETH a 20× · 144,6 ETH a 200×

tickSpacing 60, e nenhuma taxa de LP.

Estes são os parâmetros de lançamento padrão. Desde 2026-10-05, o supply, os tokens da faixa 1 (a faixa 2 fica com o resto), o tick de lançamento, os ticks inferiores das duas faixas, o tick spacing e a taxa de LP formam um único parâmetro do owner do StockFun, setLaunchConfig na factory, que vale para os mercados criados depois. Ele recusa um formato que nenhum pool conseguiria comportar: uma faixa vazia, ticks fora do spacing ou fora de ordem, um tick spacing ou uma taxa de LP fora do intervalo, faixas cuja liquidez um único tick não consegue suportar. Cada pool mantém o formato, a taxa de LP e o tick spacing com que foi criado: o lock registra os seus ticks, e a Lens informa a taxa de LP e o tick spacing de cada mercado.

A parte delicada: o preço de abertura

As duas posições contêm apenas tokens no lançamento. É isso que permite ao protocolo não adiantar nenhum ETH: todo o ETH que o pool vier a ter vem dos compradores.

Para que uma posição contenha só tokens, o preço atual precisa estar no topo do seu intervalo ou acima dele. Daí:

sqrtStartX96 = TickMath.getSqrtPriceAtTick(BAND1_UPPER);  // not sqrt(raw FDV)

O tick exato do FDV de lançamento é 194.977,95, e o tick utilizável mais próximo acima dele é 195.000. Derivar sqrtStart do FDV bruto colocaria o preço dentro da faixa 1, e a verificação NotSingleSided do LiquidityLock rejeitaria o depósito.

A quantização deixa um FDV efetivo de 3,4016 ETH em vez de 3,409, um desvio de −0,22 %.

Como fica na prática

Compras sucessivas de 2 ETH a partir do lançamento, com os parâmetros padrão:

Gasto FDV Supply detido
2 ETH ~US$ 27.600 36,1 %
4 ETH ~US$ 50.400 53,3 %
10 ETH ~US$ 164.000 74,8 %
50 ETH ~US$ 2,78 M 93,9 %

O primeiro ticket leva 36,1 % do supply — contra 36,99 % na curva antiga. O lançamento se comporta como antes, com diferença de menos de um ponto, que era o critério com base no qual os parâmetros foram escolhidos.

O teto estrutural de uma faixa

O ETH que uma faixa pode absorver, se 100 % do supply estivesse nela, é exatamente a média geométrica dos seus dois FDVs:

$$ E{\max} = \sqrt{\text{FDV}{\text{início}} \times \text{FDV}_{\text{fim}}}

$$

É isso que restringe os parâmetros: não é possível escolher livremente o preço de lançamento, o topo da faixa e a profundidade — a quantidade de tokens fecha o sistema.

O modo de encerramento

Como os tokens, o lock não é upgradável: o seu código é o que mantém a liquidez nos pools. Desde 2026-10-02, ele tem uma saída, o modo de encerramento, para o caso de o projeto encerrar as suas atividades.

  1. O anúncio. O owner do StockFun chama end(), e o lock registra, publicamente, a data correspondente a 30 dias depois. A partir daí, nenhum novo mercado pode ser lançado, nem a posição do $STOCKFUN pode ser criada, então nenhum mercado recebe menos do que o aviso prévio completo. A negociação e a coleta de taxas continuam
  2. O aviso prévio. Durante 30 dias, todo pool continua em negociação. O owner pode cancelar a qualquer momento com cancelEnd(), e os lançamentos são retomados
  3. A recuperação. Depois de transcorridos os 30 dias, o owner pode retirar todas as posições de um pool — as duas faixas de um mercado, a posição única do $STOCKFUN — e enviar o seu ETH e os seus tokens, inclusive as doações não coletadas, para qualquer endereço (recoverLiquidity). Um pool recuperado não coleta mais nada e deixa de contar como travado; um cancelamento posterior o deixa vazio

Os 30 dias são o aviso prévio dos holders. Eles são uma constante do lock, END_DELAY, não um parâmetro: o único prazo fixo do protocolo.

Fora do modo de encerramento, nada alcança as posições. Desde 2026-10-05, o lock guarda a parte de uma coleta de taxas que o seu destinatário recusou, para esse destinatário, até que qualquer pessoa a pague (payOwed); e o owner do StockFun pode retirar o que foi enviado ao lock por engano (rescue, rescueClaims, rescueNft): qualquer token, o ETH além das partes que ele guarda, claims da v4, um NFT. O lock não tem nenhuma chamada genérica: através do PoolManager, seria possível chegar à recuperação do modo de encerramento sem os seus 30 dias.