コントラクトと連携
連携ではチェーン、プール中核、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() |
過去 ID 数。有効ポジション数とは異なる |
activeWallCount() |
読取り状態の有効買い壁数 |
activeWallId(index) |
現在の有効一覧 index にある永続 ID |
latestWallId() |
最新資金配置買い壁 ID。先に存在確認 |
walls(id) |
(int24 lower, uint128 liquidity, uint256 idleEth, uint256 fundedEth) |
wallIdleEth() |
買い壁に帰属する ETH 残余合計 |
吸収後は有効一覧の index が変わり得ます。走査 index でなく買い壁 ID を識別子にします。 count と要素は同ブロックで読みます。
fundedEth はその tick に実際に配置した新規資金の累計で、残りの厚みではありません。idleEth は配置流動性とは別の、その買い壁に紐付く残余です。
範囲上端は lower + tickSpacing です。現在資産は配置形状と現価格、または版対応 Lens で計算します。未配置の新手数料は pendingFloorEth に分離します。
従来の floorPrice と netFloorPrice は全水準を表しません。現在目標が下がれば最新買い壁の参照値も下がり得ますが、既存の tick は固定です。
単位と方向
CUBIT と ETH は小数 18 桁です。Lens 派生価格は 1e18 スケールの CUBIT 当たり ETHです。v4 tick は ETH 当たり CUBIT の向きなので、CUBIT の ETH 価格が上がると下がります。
整形前の金額・計算は整数 bigint を使います。早い Number 変換は精度を失います。「7k」は 2,100万 CUBIT 基準の FDV 7 000 USD で、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 を買います。exact-input は value に amountIn、exact-output 購入は amountInMax を渡して余剰返金を受けます。売却は zeroForOne = false、value ゼロ、ルーターへの CUBIT 承認を使います。
戻り額はルーターの手取り・総額区分に従い、exact-input は手取り出力、exact-output は総入力です。不完全約定を検査し、正しいプール 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 日に記述しました。