Hợp đồng và tích hợp
Tích hợp phải xác định chain, lõi pool, ABI và bản sửa đổi mô-đun. Router từ báo cáo cũ có thể đã bị thay; ABI cục bộ mới có thể không tương thích pool còn triển khai.
Các view nhiều tường dưới đây mô tả API đang chuẩn bị, không tuyên bố có trên Sepolia lịch sử. Xuất ABI của bản đã xác thực và kiểm tra runtime trước nối client.
Định danh pool
PoolKey gồm currency0, currency1, fee, tickSpacing và hooks. Với CUBIT, ETH gốc là currency0, token CUBIT là currency1.
| Trường | Giá trị mong đợi |
|---|---|
currency0 |
Địa chỉ không, đại diện ETH gốc |
currency1 |
Token của bản triển khai được xác định |
fee |
100 ở bản mới mục tiêu; 3000 trên Sepolia lịch sử |
tickSpacing |
10 trong mã đã đọc |
hooks |
Hook của bản triển khai được xác định |
PoolId phụ thuộc toàn bộ key. Chỉ thay fee ở frontend không biến pool cũ thành bản triển khai mới.
Phân giải mô-đun tại cùng block
Đọc sổ đăng ký neo trong hook.v2() trước. Sau đó phân giải địa chỉ mô-đun khả dụng và moduleRevision tại cùng block. Kiểm tra kết nối với lõi.
Đoạn sau chỉ đọc, dùng với client viem đã cấu hình và địa chỉ sổ đăng ký đã xác minh:
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 };
}
Đoạn này không tự kiểm tra mọi kết nối và không cho phép ký. Frontend kho mã kiểm tra chúng trong resolveRelease, readRelease và assertCurrentDeployment.
Trước mỗi chữ ký, so mô-đun và bản sửa đổi với ngữ cảnh người dùng đã xem. Không âm thầm chuyển hướng phê duyệt.
Đọc nhiều tường
| View hook dự kiến | Kết quả / cách dùng |
|---|---|
wallCount() |
Số định danh lịch sử, khác số vị thế hoạt động |
activeWallCount() |
Số tường hoạt động trong trạng thái đọc |
activeWallId(index) |
ID vĩnh viễn tại chỉ số trong danh sách hoạt động hiện tại |
latestWallId() |
ID tường cấp vốn gần nhất; kiểm tra có tường trước |
walls(id) |
(int24 lower, uint128 liquidity, uint256 idleEth, uint256 fundedEth) |
wallIdleEth() |
Tổng ETH dư thuộc các tường |
Chỉ số danh sách hoạt động có thể đổi sau hấp thụ. Giữ ID tường làm định danh, không dùng chỉ số duyệt. Đọc count và phần tử tại cùng block.
fundedEth là tổng vốn mới thực sự đặt tại tick đó, không hiển thị như độ sâu còn lại. idleEth là phần dư gắn tường, khác thanh khoản đã đặt.
Biên trên khoảng là lower + tickSpacing. Tính tài sản hiện có từ hình học và giá hiện tại, hoặc view Lens đúng phiên bản. Phí mới còn tự do phân bổ giữ riêng trong pendingFloorEth.
Trường lịch sử floorPrice và netFloorPrice không còn tóm tắt mọi mức. Tham chiếu tường cấp vốn gần nhất có thể giảm khi mục tiêu giảm; tick tường đã tạo giữ cố định.
Đơn vị và chiều
Lượng CUBIT và ETH dùng 18 chữ số thập phân. Giá suy ra từ Lens là ETH mỗi CUBIT theo thang 1e18. Tick v4 theo chiều CUBIT mỗi ETH, giảm khi giá ETH mỗi CUBIT tăng.
Dùng số nguyên bigint cho lượng và tính toán trước định dạng. Chuyển quá sớm sang Number có thể mất độ chính xác. “7k” là FDV 7 000 USD trên 21 triệu CUBIT: tỷ đổi ETH phải ghi trước triển khai, rồi giá ban đầu giữ cố định. Không trộn USD, wei và đơn vị token.
Phương thức router
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 mua CUBIT bằng ETH. Exact-input gửi amountIn qua value; mua exact-output gửi amountInMax, được hoàn dư. Bán dùng zeroForOne = false, value bằng không và phê duyệt CUBIT cho router.
Số trả về theo ranh giới ròng/gộp router: đầu ra ròng với exact-input, đầu vào gộp với exact-output. Hợp đồng kiểm soát khớp không đủ. Báo giá phải mô phỏng với đúng key pool và phiên bản.
Sự kiện và lỗi
Sự kiện lịch sử gồm BuyTaxed, SellTaxed, FloorRaised, SweepExecuted, TokensBurned và BountyPaid. ModuleUpdated theo dõi thay mô-đun; ReferralBound mô tả liên kết giới thiệu.
Thư viện mới thêm WallFunded và WallAbsorbed có ID liên quan. Log thư viện chạy trong ngữ cảnh hook phải lập chỉ mục theo địa chỉ phát hook và chữ ký ABI tương ứng.
FloorRaised giữ tên cũ; tên không đủ kết luận mọi mức tăng. Relayer phải diễn giải cấp vốn tường được định danh và chính sách của bản phát hành.
Ở router, xử lý nhất là Expired, WrongPool, TooLittleReceived, TooMuchRequested, InsufficientOutput và IncompleteInput. Với bảo trì, lỗi đủ điều kiện khác lỗi RPC. Đọc lại mã lỗi và ABI sau xác thực nhiều tường.
Nguồn: interfaces/ICubitHook.sol, interfaces/ICubitLens.sol, WallLib.sol, CubitRouter.sol và dapp/src/chain. API tường được viết trong quá trình hiện thực hóa ngày 10 tháng 9 năm 2026.