04 / 构建阅读需 8 分钟

合约与集成

集成须识别链、池核心、ABI 与模块修订。旧报告中的路由器地址可被替换;新本地 ABI 可能与仍在部署中的池不兼容。

下列多买墙视图描述准备中的 API,不代表历史 Sepolia 已可用。连接客户端前,导出已验证发布版 ABI 并核查 runtime。

池标识

PoolKey 包含 currency0currency1feetickSpacinghooks。CUBIT 中原生 ETH 为 currency0,CUBIT 代币为 currency1

字段 预期读取
currency0 零地址,表示原生 ETH
currency1 已识别部署的代币
fee 目标新版本为 100,历史 Sepolia 为 3000
tickSpacing 所读源码为 10
hooks 已识别部署的 hook

PoolId 取决于完整 key。仅改前端 fee 不会把旧池变成新部署。

在同一区块解析模块

先读 hook.v2() 中锚定的注册表,再在同一区块解析可用模块地址和 moduleRevision,检查其与核心连接。

以下为只读片段,需已配置的 viem 客户端及已核实注册表地址:

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 };
}

该片段本身不检查全部连接,也不授权签名。仓库前端通过 resolveReleasereadReleaseassertCurrentDeployment 检查。

每次签名前,将模块和修订与用户已审阅的上下文比较。不要静默改变授权目标。

读取多个买墙

预期 hook 视图 结果 / 用途
wallCount() 历史标识符数量,不同于有效仓位数量
activeWallCount() 所读状态的有效买墙数
activeWallId(index) 当前有效列表某索引的永久 ID
latestWallId() 最近注资买墙 ID;先检查是否存在买墙
walls(id) (int24 lower, uint128 liquidity, uint256 idleEth, uint256 fundedEth)
wallIdleEth() 归属买墙的 ETH 余款总和

吸收后有效列表索引可能改变。用买墙 ID 作为身份,不要用遍历索引。在同一区块读取数量与元素。

fundedEth 是该 tick 实际配置的新资金累计值,不应显示为剩余深度。idleEth 是附着买墙的余款,与已部署流动性不同。

区间上界为 lower + tickSpacing。现有资产根据几何和现价计算,或使用适配版本的 Lens 视图。仍可自由配置的新费用单独记入 pendingFloorEth

历史字段 floorPricenetFloorPrice 不再概括所有价位。当前目标下降时,最近注资买墙参考值可降低,旧墙 tick 仍固定。

单位与方向

CUBIT 与 ETH 数量使用 18 位小数。Lens 衍生价格以 1e18 缩放的 ETH/CUBIT 表示。V4 tick 方向为 CUBIT/ETH,因此每 CUBIT 的 ETH 价格上涨时 tick 下降。

格式化前用 bigint 整数存金额和计算。过早转成 Number 可能损失精度。“7k”按 2100 万 CUBIT 的 7 000 USD FDV 理解;ETH 换算需部署前记录,此后初始价固定。不要混用 USD、wei 与代币单位。

路由器方法

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 用 ETH 买 CUBIT。固定输入以 value 提供 amountIn;固定输出买入提供 amountInMax,退还余款。卖出设 zeroForOne = false、value 为零,并向路由器授权 CUBIT。

返回金额依路由器净/毛界限:固定输入返回净输出,固定输出返回毛输入。合约检查未完全成交。报价须使用正确池 key 和版本模拟。

事件与错误

历史事件包括 BuyTaxedSellTaxedFloorRaisedSweepExecutedTokensBurnedBountyPaidModuleUpdated 追踪模块替换,ReferralBound 描述推荐绑定。

新库添加含相关 ID 的 WallFundedWallAbsorbed。在 hook 上下文执行的库日志,须按 hook 发出地址和对应 ABI 签名索引。

FloorRaised 沿用旧名,不能凭名称推断所有价位上升。中继须结合标识买墙的注资和发布策略解释。

路由器尤其应处理 ExpiredWrongPoolTooLittleReceivedTooMuchRequestedInsufficientOutputIncompleteInput。维护资格错误与 RPC 错误不同。多买墙验证后重读错误码和 ABI。

来源: interfaces/ICubitHook.sol, interfaces/ICubitLens.sol, WallLib.sol, CubitRouter.sol 以及 dapp/src/chain。买墙 API 于 2026 年 9 月 10 日实现期间撰写。

CUBIT / 2026 年 9 月 10 日 来源与方法