04 / CONSTRUIR8 MIN DE LEITURA

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.

CUBIT / 10 de setembro de 2026 Fontes e método