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 →
Mục này bao gồm một bản cập nhật chương trình AMM v4 sắp tới. Nó đã được xác minh với nhánh phát hành cục bộ trước khi triển khai. Hãy xác nhận chương trình được triển khai trước khi dựa vào hướng dẫn mới.
Hai điều không liên quan đến nhau được phát hành cùng một lần trong một bản dựng lại. Điều đầu tiên là công việc bảo trì: AMM v4 đã được ghim vào solana-program =2.1.0 kể từ bản nâng cấp 2.1, và ghim đó đang gây cản trở. Các trợ giúp của chương trình hệ thống đã được chuyển vào crate solana-system-interface riêng của chúng trong Solana 3.0, spl-token đạt 9.0, và spl-associated-token-account đạt 8.0. Bản phát hành này lấy cả ba. Điều thứ hai là tiền mà giao thức được nợ. SIMD-0437 đang cắt giảm mức tối thiểu miễn phí thuê bao 90% trong năm bước, và bước 1 đã được triển khai trên mainnet vào ngày 3 tháng 9 năm 2026. Mọi tài khoản mà AMM v4 tạo trước đó — hàng trăm vault pool, LP mint, tài khoản AmmInfoTargetOrders — hiện đang được tài trợ quá mức, và lamport trong tài khoản do chương trình sở hữu chỉ có thể được di chuyển bởi chương trình đó. Do đó, một hướng dẫn mới.

TL;DR cho các nhà tích hợp

  • Không có gì mà trader hoặc LP gọi đã thay đổi. Initialize2, Deposit, Withdraw, SwapBaseIn, SwapBaseOut, SwapBaseInV2, SwapBaseOutV2, WithdrawPnlSetParams giữ nguyên danh sách tài khoản, bố cục đối số và toán học. Không có bố cục tài khoản nào thay đổi. Không có mã lỗi hiện có nào di chuyển.
  • Một hướng dẫn được thêm: WithdrawExcessLamports, tag 18. Chỉ dành cho quản trị viên, không có đối số, danh sách tài khoản có độ dài thay đổi. Nó trả lại lamport vượt quá mức tối thiểu miễn phí thuê bao từ các tài khoản được kiểm soát bởi AMM v4 và không chạm vào bất cứ điều gì khác. Xem products/amm-v4/instructions.
  • Một mã lỗi được thêm vào: 60 LamportsCalculateError. AmmError không được đánh số Anchor — nó bắt đầu từ 0 — vì vậy đây là custom program error: 0x3c. Các mã 059 không thay đổi.
  • CreateConfigAccount (tag 14) đã ngừng đọc sysvar rent và hiện được ghi chép là hướng dẫn 4 tài khoản. Không có gì trong bản phát hành này là phá vỡ, điều này bao gồm: tài khoản là tài khoản cuối cùng trong danh sách và trình xử lý đọc theo vị trí mà không có kiểm tra độ dài, vì vậy công cụ quản trị viên vẫn chuyển nó tiếp tục hoạt động.
  • Cần làm mới IDL nếu bạn tạo máy khách từ một. Một hướng dẫn mới, một biến thể lỗi mới, một danh sách tài khoản đã thay đổi.

WithdrawExcessLamports

Hướng dẫn lấy ví collect-lamports làm người ký duy nhất và đích đến, PDA quyền hạn AMM v4, chương trình SPL Token, và sau đó là bất kỳ số lượng tài khoản nguồn nào. Nó phân phối dựa trên chủ sở hữu của mỗi tài khoản nguồn: Nhánh wSOL là nhánh thú vị. Số dư lamport của tài khoản wrapped-SOL số dư token của nó, vì vậy chương trình token từ chối WithdrawExcessLamports trên nó hoàn toàn. Vòng lặp qua SyncNativeUnwrapLamports có kích thước delta trích xuất chỉ phần dư được tặng và để lại số dư được bao bọc chính xác nơi nó bắt đầu — được khẳng định sau đó, với LamportsCalculateError nếu số học không đồng ý. Do đó, vault pool phía SOL giữ lại toàn bộ thanidity của nó thông qua một lần quét, và không có LP nào thấy thay đổi giá trên một. Người ký là một khóa chuyên dụng cho mỗi cụm, được mã hóa cứng dưới cùng mô-đun config_feature với các địa chỉ chủ sở hữu AMM hiện có và địa chỉ phí tạo pool. Không giống như CPMM và LaunchLab, AMM v4 chỉ chấp nhận ví đó — không có dự phòng quản trị viên. Các địa chỉ nằm trong reference/program-addresses.

CreateConfigAccount đã ngừng đọc sysvar rent

Solana 3.0 là những gì làm cho Rent::get() trở thành cách tự nhiên để đọc các tham số rent, vì vậy bản phát hành đã thay thế tất cả bốn lệnh gọi Rent::from_account_info(...) trong chương trình. Trong ba trong số chúng — các trợ giúp tạo các tài khoản token, LP mint và tài khoản PDA của pool trong Initialize2 — tài khoản sysvar vẫn được chuyển và vẫn được chuyển tiếp vào các CPI của chương trình token, vì vậy không có gì về danh sách tài khoản đó thay đổi. Trong CreateConfigAccount, sysvar không có mục đích khác và là tài khoản cuối cùng trong danh sách, vì vậy nó đã được loại khỏi danh sách được ghi chép: Gửi danh sách năm tài khoản cũ vẫn hoạt động. Tài khoản bị xóa là tài khoản cuối cùng, và process_create_config đọc bốn tài khoản của nó theo vị trí thông qua next_account_info mà không có gì kiểm tra tổng số, vì vậy tài khoản rent ở cuối không bao giờ được nhìn vào. Công cụ quản trị viên nên được cập nhật để rõ ràng, không phải khẩn cấp. Không có công cụ xây dựng nào hướng tới người dùng xây dựng hướng dẫn này cả. Initialize2 là trường hợp không nên đọc quá mức: nó cũng đã ngừng gọi Rent::from_account_info, nhưng tài khoản rent của nó vẫn ở vị trí 3 và vẫn được sử dụng thực sự — chương trình chuyển tiếp nó vào các CPI spl_token::initialize_accountinitialize_mint tạo vault và LP mint của pool. Loại bỏ nó khỏi danh sách tài khoản đó sẽ phá vỡ việc tạo pool.

Thay đổi phụ thuộc

Các phần của chương trình hệ thống mà chương trình sử dụng — system_instruction::create_account, transfer, allocate, assign, và ID chương trình chính nó — hiện đến từ solana-system-interface thay vì solana_program::system_programsolana_program::system_instruction. ID chương trình là byte-identical, vì vậy đây là một di chuyển thời gian biên dịch mà không có hậu quả trên chuỗi, bao gồm các kiểm tra InvalidSysProgramAddress so sánh với nó. Hai mô-đun chết cũng bị xóa: srm_tokenmsrm_token, các khai báo mint Serum/MSRM còn sót lại từ loại bỏ OpenBook. Không có gì tham chiếu chúng.

Những gì không thay đổi

  • Mọi bố cục tài khoản. AmmInfo, StateData, TargetOrders, AmmConfig — cùng kích thước, cùng độ lệch trường. Không có thay đổi indexer hoặc decoder.
  • Mã lỗi 059. LamportsCalculateError được thêm vào tại 60, vì vậy không có gì dịch chuyển.
  • PDA quyền hạn AMM. Vẫn là một PDA cho toàn bộ chương trình, seed ["amm authority"], nonce 254.
  • Phí, kế toán PnL và đường cong. Không bị chạm vào. WithdrawExcessLamports di chuyển lamport không bao giờ là một phần của dự trữ của bất kỳ pool nào.
  • Token-2022. Vẫn không được hỗ trợ. Hướng dẫn mới chỉ nói chuyện với chương trình SPL Token kế thừa.
  • ID chương trình. Không thay đổi — xem reference/program-addresses.

Trang được cập nhật

  • products/amm-v4/instructionsWithdrawExcessLamports được thêm với danh sách tài khoản và bảng phân phối theo chủ sở hữu; phần CreateConfigAccount / UpdateConfigAccount mới bao gồm loại bỏ sysvar rent; hàng bảng kho và hàng ma trận thay đổi trạng thái được thêm.
  • products/amm-v4/overview — biểu ngữ phát hành.
  • reference/error-codes — phần “AMM v4: AmmError không được đánh số Anchor” mới ghi chép mã 60 và đánh số dựa trên 0.
  • reference/program-addresses — phần “Ví thu thập lamport dư thừa” mới.
  • solana-fundamentals/rent-and-reclaimable-rent — phần “Những gì các chương trình Raydium quét ở phía của chính họ” mới; ghi chú wrapped-SOL được sửa để nói cả hai chương trình token đều hiển thị UnwrapLamports.
  • solana-fundamentals/toolchain — Agave 3.1.10, release.anza.xyz, Rust 1.91.0.