Contratos e integração
Uma integração deve identificar a cadeia, o núcleo do pool, a ABI e a revisão dos módulos. Um endereço de roteador copiado de um relatório antigo pode ser substituído; uma nova ABI local pode ser incompatível com o pool ainda implantado.
As visualizações de múltiplos muros abaixo descrevem a API em preparação. Elas não são anunciadas como disponíveis na Sepolia histórica. Exporte a ABI do lançamento validado e verifique os runtimes antes de conectar um cliente.
Identidade do pool
A PoolKey contém currency0, currency1, fee, tickSpacing e hooks. Para CUBIT, ETH nativo é currency0 e o token CUBIT é currency1.
| Campo | Leitura esperada |
|---|---|
currency0 |
Endereço zero, representando ETH nativo |
currency1 |
Token da implantação identificada |
fee |
100 na nova versão prevista; 3000 na Sepolia histórica |
tickSpacing |
10 nas fontes lidas |
hooks |
Hook da implantação identificada |
O poolId depende de toda essa chave. Alterar apenas fee em um frontend não transforma um pool antigo em uma nova implantação.
Resolver os módulos no mesmo bloco
Leia primeiro o registro ancorado em hook.v2(). Depois resolva os endereços dos módulos disponíveis e moduleRevision no mesmo bloco. Verifique sua conexão com o núcleo.
Este é um trecho de somente leitura, para uso com um cliente viem já configurado e um endereço de registro verificado:
import { parseAbi, type Address, type PublicClient } from "viem";
const registryAbi = parseAbi([
"function router() view returns (address)",
"function moduleRevision() view returns (uint256)",
]);
export async function readRelease(
client: PublicClient,
registry: Address,
) {
const blockNumber = await client.getBlockNumber();
const [router, revision] = await Promise.all([
client.readContract({ address: registry, abi: registryAbi,
functionName: "router", blockNumber }),
client.readContract({ address: registry, abi: registryAbi,
functionName: "moduleRevision", blockNumber }),
]);
return { blockNumber, router, revision };
}
Esse trecho não verifica sozinho todas as conexões e não autoriza nenhuma assinatura. O frontend do repositório as verifica em resolveRelease, readRelease e assertCurrentDeployment.
Antes de cada assinatura, compare os módulos e a revisão com o contexto já revisado pelo usuário. Não redirecione silenciosamente uma aprovação.
Ler múltiplos muros
| Visualização prevista do hook | Resultado / uso |
|---|---|
wallCount() |
Número de identificadores históricos, distinto do número de posições ativas |
activeWallCount() |
Número de muros ativos no estado lido |
activeWallId(index) |
ID permanente em um índice da lista ativa atual |
latestWallId() |
ID do último muro financiado; primeiro verifique se existe um muro |
walls(id) |
(int24 lower, uint128 liquidity, uint256 idleEth, uint256 fundedEth) |
wallIdleEth() |
Total dos resíduos de ETH atribuídos aos muros |
Os índices da lista ativa podem mudar após uma absorção. Mantenha o ID do muro como identidade, não seu índice de percurso. Leia a contagem e os elementos no mesmo bloco.
fundedEth representa o acumulado de novos fundos efetivamente alocados nesse tick. Não deve ser exibido como profundidade restante. idleEth representa um resíduo vinculado ao muro, distinto de sua liquidez alocada.
O limite superior de uma faixa é lower + tickSpacing. Os ativos presentes são calculados com a geometria e o preço atual ou pelas visualizações do Lens adaptadas à versão. As novas taxas ainda livres para alocação permanecem separadas em pendingFloorEth.
Os campos históricos floorPrice e netFloorPrice não resumem mais todos os níveis. A referência do último muro financiado pode cair quando o alvo atual cai; os ticks dos muros já criados permanecem fixos.
Unidades e orientação
As quantidades de CUBIT e ETH usam 18 casas decimais. Os preços derivados do Lens são expressos em ETH por CUBIT na escala 1e18. O tick v4 segue a orientação CUBIT por ETH; ele diminui quando o preço em ETH por CUBIT aumenta.
Use inteiros bigint para valores e cálculos antes da formatação. Uma conversão prematura para Number pode perder precisão. A base “7k” é interpretada como 7 000 USD de FDV sobre 21 milhões de CUBIT: sua conversão em ETH deve ser registrada antes da implantação e o preço inicial permanece fixo depois. Não misture USD, wei e unidades de token.
Os métodos do roteador
swapExactIn(
PoolKey key, bool zeroForOne,
uint256 amountIn, uint256 amountOutMin,
address recipient, uint256 deadline
)
swapExactOut(
PoolKey key, bool zeroForOne,
uint256 amountOut, uint256 amountInMax,
address recipient, uint256 deadline
)
zeroForOne = true compra CUBIT com ETH. Para exact-input, forneça amountIn como value; para compra exact-output, forneça amountInMax, com reembolso do excedente. Uma venda usa zeroForOne = false, value zero e uma aprovação CUBIT ao roteador.
Os valores retornados seguem os limites líquidos/brutos do roteador: saída líquida para exact-input, entrada bruta para exact-output. O contrato verifica preenchimentos incompletos. A cotação deve ser simulada com a chave correta do pool e sua versão.
Eventos e erros
Os eventos históricos incluem BuyTaxed, SellTaxed, FloorRaised, SweepExecuted, TokensBurned e BountyPaid. ModuleUpdated permite acompanhar substituições de módulos; ReferralBound descreve um vínculo de indicação.
A nova biblioteca acrescenta WallFunded e WallAbsorbed com o ID correspondente. Os logs de uma biblioteca executada no contexto do hook devem ser indexados no endereço emissor do hook e com as assinaturas ABI correspondentes.
FloorRaised mantém um nome histórico; o nome não basta para concluir que todos os níveis sobem. Um retransmissor deve interpretar o financiamento do muro identificado e a política do lançamento.
No roteador, trate especialmente Expired, WrongPool, TooLittleReceived, TooMuchRequested, InsufficientOutput e IncompleteInput. Para manutenção, erros de elegibilidade e erros RPC são distintos. Releia os códigos e a ABI após a validação dos múltiplos muros.
Fontes: interfaces/ICubitHook.sol, interfaces/ICubitLens.sol, WallLib.sol, CubitRouter.sol e dapp/src/chain. API dos muros documentada durante sua implementação, em 10 de setembro de 2026.