04 / XÂY DỰNGĐỌC TRONG 8 PHÚT

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, tickSpacinghooks. 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, readReleaseassertCurrentDeployment.

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ử floorPricenetFloorPrice 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, TokensBurnedBountyPaid. 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 WallFundedWallAbsorbed 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, InsufficientOutputIncompleteInput. 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.soldapp/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.

CUBIT / Ngày 10 tháng 9 năm 2026 Nguồn và phương pháp