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
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.
- 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$STOCKFUNpode ser criada, então nenhum mercado recebe menos do que o aviso prévio completo. A negociação e a coleta de taxas continuam - 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 - 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.