컨트랙트와 통합
통합은 체인, 풀 핵심, 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 0, 라우터 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일 작성되었습니다.