合约与集成
集成须识别链、池核心、ABI 与模块修订。旧报告中的路由器地址可被替换;新本地 ABI 可能与仍在部署中的池不兼容。
下列多买墙视图描述准备中的 API,不代表历史 Sepolia 已可用。连接客户端前,导出已验证发布版 ABI 并核查 runtime。
池标识
PoolKey 包含 currency0、currency1、fee、tickSpacing 和 hooks。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 };
}
该片段本身不检查全部连接,也不授权签名。仓库前端通过 resolveRelease、readRelease 和 assertCurrentDeployment 检查。
每次签名前,将模块和修订与用户已审阅的上下文比较。不要静默改变授权目标。
读取多个买墙
| 预期 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。
历史字段 floorPrice、netFloorPrice 不再概括所有价位。当前目标下降时,最近注资买墙参考值可降低,旧墙 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 和版本模拟。
事件与错误
历史事件包括 BuyTaxed、SellTaxed、FloorRaised、SweepExecuted、TokensBurned 和 BountyPaid。ModuleUpdated 追踪模块替换,ReferralBound 描述推荐绑定。
新库添加含相关 ID 的 WallFunded、WallAbsorbed。在 hook 上下文执行的库日志,须按 hook 发出地址和对应 ABI 签名索引。
FloorRaised 沿用旧名,不能凭名称推断所有价位上升。中继须结合标识买墙的注资和发布策略解释。
路由器尤其应处理 Expired、WrongPool、TooLittleReceived、TooMuchRequested、InsufficientOutput 和 IncompleteInput。维护资格错误与 RPC 错误不同。多买墙验证后重读错误码和 ABI。
来源: interfaces/ICubitHook.sol, interfaces/ICubitLens.sol, WallLib.sol, CubitRouter.sol 以及 dapp/src/chain。买墙 API 于 2026 年 9 月 10 日实现期间撰写。