Skip to main content
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 →
Kể từ bản nâng cấp 2026-07, phụ thuộc OpenBook / Serum của AMM v4 đã bị xóa — không có lệnh nào đọc hoặc ghi trạng thái OpenBook nữa. Các tài khoản thị trường dưới đây chỉ được giữ lại như những placeholder vị trí trên bố cục lệnh v1 cũ (được chấp nhận nhưng bỏ qua) và như các trường tham chiếu trên AmmInfo. Hãy sử dụng các điểm vào swap V2, những điểm này hoàn toàn bỏ qua chúng. Trang này vẫn nhóm các tài khoản thành các phần “pool-owned” và “OpenBook (legacy)” để đọc các giao dịch cũ hơn.

Danh sách khoá

Một pool AMM v4 ghi lại một thị trường được liên kết trên AmmInfo tại thời điểm tạo. Bức tranh đầy đủ: Lưu ý: “serum” được giữ lại như tiền tố trong IDL và tên trường của AMM v4 để tương thích ngược. Các tài khoản này không còn hoạt động sau khi xóa OpenBook.

AmmInfo

Tài khoản trạng thái gốc của pool. Lớn (≈ 752 byte) vì nó mang cả tham chiếu pool và OpenBook nội tuyến.
Bố cục struct không thay đổi (tương thích byte) nên các deserializer hiện tại tiếp tục hoạt động, nhưng sau khi xóa OpenBook, các trường được đánh dấu DEPRECATED ở trên không còn được ghi — các bộ đếm khối lượng swap_* bị đóng băng ở giá trị cuối cùng của chúng. Để phân tích khối lượng, hãy sử dụng nhật ký giao dịch thay vì các trường này. Chỉ need_take_pnl_* và pool_open_time được duy trì tích cực.
Các trường hướng đến người tích hợp:
  • coin_vault, pc_vault — các vault SPL Token của pool. coin là token_0 theo quy ước Serum/OpenBook (base), pc là token_1 (quote).
  • coin_decimals, pc_decimals — khớp với các mint.
  • open_orders, target_orders, market — các trường tham chiếu cũ. Vẫn có trên AmmInfo và vẫn được truyền theo vị trí trên bố cục lệnh v1, nhưng chương trình không còn đọc hoặc xác thực chúng. Các điểm vào swap V2 bỏ qua chúng.
  • fees.swap_fee_numerator / swap_fee_denominator — phí giao dịch kết hợp. Mặc định 25 / 10_000 = 0.25%.
  • status — một trạng thái u64 dạng liệt kê duy nhất gating các hoạt động, không phải bitmask. Có thể đặt bởi admin thông qua SetParams với param = 0 (Status). Xem Trạng thái bên dưới.
  • lp_amount — tổng LP nội bộ của pool. Nó không bằng lp_mint.supply: nó cao hơn đúng một token LP trọn vẹn (10^coin_decimals đơn vị cơ sở), vì lượng đó được tính tại thời điểm khởi tạo nhưng chưa bao giờ được mint. Mọi phép tính theo tỷ lệ trong chương trình đều dùng lp_amount, vậy bạn cũng nên dùng nó.
  • amm_owner — được ghi tại thời điểm tạo từ khóa admin hardcode của chương trình, không phải từ người tạo pool.
  • state_data.need_take_pnl_* — delta giữa phí tích lũy brutto và những gì đã được quét. TakePnl đặt lại những cái này thành không.

Dây dẫn OpenBook

Đã xóa. Phụ thuộc OpenBook / Serum đã bị xóa khỏi chương trình (bản nâng cấp 2026-07). Các tài khoản được mô tả trong phần này không còn được xác thực hoặc sử dụng. Chúng vẫn tồn tại như các trường tham chiếu trên AmmInfo và như các placeholder vị trí trên bố cục lệnh v1 cũ. Sử dụng các điểm vào swap V2 (SwapBaseInV2 / SwapBaseOutV2) bỏ qua hoàn toàn các tài khoản này.
Khi bạn gọi lệnh v1 cũ SwapBaseIn / SwapBaseOut, Deposit, hoặc Withdraw, số lượng tài khoản phải vẫn khớp với bố cục cũ (các tài khoản thị trường chiếm các vị trí lịch sử của chúng), nhưng nội dung của chúng không còn được kiểm tra — không có CPI nào được phát hành đối với chúng. Mã mới nên sử dụng các biến thể swap V2, không lấy các tài khoản này.
amm_open_orders của AMM là một tài khoản do OpenBook sở hữu chứa trạng thái lệnh giới hạn của pool trên thị trường này: các lệnh hoạt động, số dư đã giải quyết, người giới thiệu, v.v. amm_target_orders là phía AMM: nó chứa lưới dự định của AMM (giá/kích thước cho mỗi khe lệnh) để chương trình có thể so sánh rẻ tiền với những gì hiện đang được đăng và đặt / hủy sự khác biệt.

PDA Authority

Có chính xác một PDA amm_authority cho toàn bộ chương trình AMM v4. Seed của nó là tầm thường (["amm authority"]) và bump của nó được lưu trữ trên mỗi AmmInfo. Authority này ký tất cả các lần di chuyển token cho tất cả các pool AMM v4.
Không có authority thứ hai nào theo phạm vi pool: chỉ một PDA này bao trùm mọi thứ mà chương trình ký. Bump của nó là 254 trên mainnet và được phản chiếu trên mọi AmmInfo dưới dạng nonce; WithdrawExcessLamports dẫn xuất lại nó với nonce đó được hardcode.

Vaults

Các vault SPL Token của pool là các tài khoản token tiêu chuẩn có owner là amm_authority. Không phải ATA — địa chỉ của chúng là các PDA được lấy tại Initialize2 từ [AMM_V4_PROGRAM_ID, market, "coin_vault_associated_seed"] và [AMM_V4_PROGRAM_ID, market, "pc_vault_associated_seed"]. Mint không phải là seed, và amm_id cũng không. Địa chỉ được lưu trữ trên AmmInfo; việc lấy địa chỉ chỉ là một điều tò mò một lần. Token-2022 không được hỗ trợ. Chương trình hardcode ID chương trình SPL Token cho tất cả các lần di chuyển vault. Cố gắng liên kết một pool AMM v4 với một mint Token-2022 sẽ thất bại tại Initialize2 với InvalidSplTokenProgram.

LP mint

Một mint SPL Token cổ điển có authority là amm_authority. Tổng cung theo dõi quyền sở hữu LP của pool; đốt LP trả lại token từ cả hai vault theo tỷ lệ. Có một bản phản chiếu trong trạng thái: AmmInfo.lp_amount. Nó không bằng tổng cung của mint — nó cao hơn đúng một token LP trọn vẹn (10^coin_decimals đơn vị cơ sở), vì lượng đó được tính tại thời điểm khởi tạo nhưng chưa bao giờ được mint. Mọi phép tính theo tỷ lệ trong chương trình đều chia cho lp_amount, vì vậy hãy dùng trường đó thay vì tổng cung on-chain của mint.

Trạng thái

AmmInfo.status là một trạng thái u64 dạng liệt kê duy nhất, không phải bitmask. Hãy kiểm tra nó bằng phép so sánh bằng — một client kiểm tra status & 1 sẽ phân loại sai mọi pool đang hoạt động, vì trạng thái giao dịch bình thường là 6, mà bit 0 của nó lại được đặt. Initialize2 ghi 7 khi open_time ở tương lai và 6 trong các trường hợp còn lại; một pool ở 7 tự chuyển sang 6 ở lần swap đầu tiên tại hoặc sau state_data.pool_open_time. Một giá trị nằm ngoài 0..=7 làm AmmStatus::from_u64 panic. Multisig Raydium đặt trạng thái thông qua SetParams với param = 0 (Status); chỉ các giá trị 1–7 được chấp nhận. (AdminCancelOrders đã bị xóa.)

Quan sát / oracle

AMM v4 không có tài khoản quan sát chuyên dụng, và kể từ khi OpenBook bị loại bỏ thì cũng không còn trạng thái order-book nào để lấy ra một cái. Nếu bạn cần TWAP Raydium với hỗ trợ chương trình, hãy sử dụng CPMM hoặc CLMM — cả hai đều duy trì một vòng đệm ObservationState. Nếu không, hãy index các log swap ngoài chuỗi.

Lấy các tài khoản của pool từ đầu

Các tài khoản pool của AMM v4 là các PDA thuần được khóa theo thị trường được liên kết — không phải seeded keypair, và cũng không phải PDA theo từng cặp. Mỗi tài khoản trong số đó đều dùng cùng một dạng ba seed [AMM_V4_PROGRAM_ID, market, <label>] dưới AMM_V4_PROGRAM_ID:
Thị trường được liên kết là seed biến thiên duy nhất, đó là lý do một thị trường tương ứng chính xác với một pool AMM v4. SDK và API tính toán trước những cái này cho bạn; xem Liquidity.getAssociatedPoolKeys của raydium-sdk-v2. Trong thực tế, các người tích hợp đọc bộ tài khoản đầy đủ của pool từ GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> hoặc từ SDK. Lệnh lấy bằng tay hiếm khi cần thiết.

Tham chiếu nhanh vòng đời

Các pool và tài khoản của chúng tồn tại vô thời hạn. Ngay cả khi thanh khoản được rút hoàn toàn, AmmInfo vẫn tồn tại.

Đọc ở đâu

Nguồn: