Chuyển đến nội dung chính
Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →
Chức năng của đoạn mã này. Tạo pool CLMM mới tại mức phí bạn chọn, sau đó mở vị thế tập trung ban đầu. Hai transaction, một kịch bản. Mã được trích từ các demo chính thức trong raydium-sdk-V2-demo/src/clmm và điều chỉnh thành một tệp có thể chạy được trên Node.

Chuẩn bị

Hãy chắc chắn bạn đã đọc Điều kiện tiên quyết Bắt đầu nhanh và có RPC_URL, KEYPAIR, cũng như các thư viện phụ thuộc đã được cài đặt. Tạo pool CLMM yêu cầu phí một lần cộng với chi phí thuê cho mỗi mảng tick cho vị thế ban đầu. Bạn cũng cần cả hai mint hạt giống trong ví của mình — mở vị thế khi giá nằm trong phạm vi đã chọn yêu cầu thanthanh khoảy trên cả hai phía.

Bước 1 — config.ts

Lưu dưới dạng config.ts. Hình dạng này giống với tệp src/config.ts.template của kho demo — disableFeatureCheck được buộc phải là true (được khuyến nghị cho bất kỳ tích hợp phi tầm thường nào để SDK không bị chặn bởi lệnh gọi phát hiện tính năng khởi động của nó):

Bước 2 — createPool.ts

Lưu cùng với config.ts. Nguồn: src/clmm/createPool.ts.

Bước 3 — createPosition.ts

Nguồn: src/clmm/createPosition.ts.

Bước 4 — utils.ts

Nguồn: src/clmm/utils.ts.

Chạy thử

Vừa xảy ra điều gì

Transaction 1 — raydium.clmm.createPool đã khởi tạo:
  • trạng thái pool tại PDA chính tắc cho (mint1, mint2, ammConfig),
  • token_0_vaulttoken_1_vault (được sắp xếp theo thứ tự byte của mint),
  • vòng đệm observation,
  • bitmap mảng tick nội tuyến,
và đặt sqrt_price_x64 ban đầu từ initialPrice của bạn. Transaction 2 — raydium.clmm.openPositionFromBase đã mở vị thế tập trung:
  • đã mint NFT vị thế vào ví của bạn (NFT vị thế; chuyển nhượng nó có nghĩa là chuyển nhượng vị thế),
  • đã phân bổ mảng tick tại các cận dưới và trên (phí thuê một lần nếu là vị thế đầu tiên trong các phạm vi đó; các mảng tick không bao giờ được đóng bởi chương trình, vì vậy các vị thế tiếp theo trong các mảng giống nhau không có chi phí thuê thêm),
  • đã gửi inputAmount của mint1 và lượng cặp phù hợp của mint2 (được tính bằng PoolUtils.getLiquidityAmountOutFromAmountIn),
  • đã ghi công vị thế với thanhanh khoảy tỷ lệ với độ rộng của phạm vi.
Phạm vi càng hẹp, hiệu quả vốn trên mỗi đơn vị TVL càng cao — và tổn thất vô thường càng lớn khi giá trôi ra ngoài phạm vi. Phạm vi được sử dụng ở trên ([0.000001, 100000]) là toàn phạm vi hiệu quả; thu hẹp nó để tập trung phí gần giá spot hiện tại.

Chọn mức phí

clmmConfigs[0] là mức phí thấp nhất. Bộ đầy đủ được công bố tại GET https://api-v3.raydium.io/main/clmm-config: Xem user-flows/choosing-a-pool-type để có ma trận quyết định đầy đủ.

Lỗi phổ biến

  • Pool already exists for this config — Pool CLMM đã tồn tại cho bộ ba (mint1, mint2, ammConfig) này. Tra cứu ID pool hiện có và bỏ qua Bước 2.
  • Insufficient funds for amount B — Ví của bạn có lượng mintA được yêu cầu nhưng không có mintB tương ứng. Mở vị thế khi giá nằm trong phạm vi yêu cầu thanhanh khoảy trên cả hai phía.
  • Tick out of rangelowerPrice hoặc upperPrice của bạn nằm ngoài phạm vi giá có thể biểu diễn được. Sử dụng phạm vi hợp lý hơn so với giá hiện tại.
  • Giá bị lỗi thời — Báo giá từ API có thể bị lỗi thời 5–60 giây. Nếu executePosition không thành công do slippage, hãy bỏ comment khối getRpcClmmPoolInfo trong createPosition.ts để lấy lại giá trực tiếp ngay trước khi ký.

Cảnh báo

  • Position NFT là cách truy cập duy nhất của bạn. Mất NFT hoặc chuyển nhượng nó, mất quyền truy cập vào vị thế. Hãy coi nó như một chìa khóa.
  • Vị thế ngoài phạm vi không kiếm được phí. Nếu giá di chuyển ra ngoài [lowerPrice, upperPrice], vị thế của bạn được đỗ hoàn toàn ở một tài sản và không kiếm được gì cho đến khi bạn cân bằng lại.
  • Phí thuê mảng tick là một chiều. Vị thế đầu tiên chạm vào mảng tick chưa được khởi tạo sẽ trả phí thuê của nó; chương trình không cung cấp đường dẫn để đóng mảng tick, vì vậy phí thuê đó là vĩnh viễn. Các vị thế tiếp theo trong cùng mảng là miễn phí.

Tiếp theo

Nguồn: