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 →
Trang này ghi chép đồ thị tài khoản trên mỗi lần phát hành: PoolState (tài khoản trạng thái gốc cho một lần phát hành), hai kho của nó, PDA quyền hạn, và các tham chiếu sau khi phát hành mà nó nhận được khi lần phát hành kết thúc.Để xem cấu hình cấp giao thức ràng buộc mọi lần phát hành, xem products/launchlab/global-config. Để xem lớp phủ trên mỗi nền tảng, xem products/launchlab/platform-config. Để xem các tài khoản vesting (VestingSchedule trên PoolState, VestingRecord trên mỗi người thụ hưởng), xem products/launchlab/vesting.

Danh sách tài khoản

SDK đọc dữ liệu này bằng raydium.launchpad.getRpcPoolInfo({ poolId }), hàm này trả về PoolState đã giải mã cùng với GlobalConfig được liên kết đính kèm dưới dạng configInfo (getRpcPoolsInfo({ poolIdList }) cho dạng theo lô). Không có getLaunchById. Bản thân id pool là một PDA của (programId, mintA, mintB) — getPdaLaunchpadPoolId.

PoolState

Trạng thái gốc trên mỗi lần phát hành. Tên trường dưới đây khớp với struct Rust trên chuỗi (states/pool.rs); một số giá trị được đơn giản hóa để dễ đọc — tham khảo nguồn để biết bố cục bộ nhớ chính xác.
Các giá trị PoolStatus (tên biến thể trong IDL là Fund / Migrate / Trade):
Các trường hướng đến người tích hợp:
  • status — ba giá trị, đơn điệu (Fund → Migrate → Trade). Đọc luôn an toàn; ghi bị gated. ClaimVestedToken yêu cầu Trade.
  • real_base, real_quote — trạng thái đường cong hiện tại. Kết hợp với virtual_base / virtual_quote chúng đủ để tính giá spot mà không cần chạm vào các kho. Xem bonding-curve.
  • total_base_sell so với real_base — tỷ lệ “tiến độ hướng tới kết thúc” cho UI.
  • migrate_type — khởi tạo mới yêu cầu 1 (CPSWAP). Một 0 được lưu trữ vẫn có ý nghĩa chỉ cho một lần phát hành hiện có được tạo trước khi thực thi chỉ CPMM.
  • amm_creator_fee_on — chọn creator_fee_on = OnlyQuoteToken (0) hoặc BothToken (1) trên pool CPMM sau khi kết thúc. Nó không chọn mục tiêu di chuyển. Xem creator-fees.
  • token_program_flag — một trường bit, không phải boolean. Bit0 là mint base và bit1 là mint quote, mỗi 0 cho SPL Token và 1 cho Token-2022, vì vậy byte nhận bốn giá trị: 0 (cả hai cũ), 1 (Token-2022 base), 2 (Token-2022 quote), 3 (cả hai Token-2022). Đọc một mint với (token_program_flag >> bit) & 1. So sánh toàn bộ byte với 0 để phân loại mint base sẽ giải quyết 2 thành chương trình sai. Bit1 là hằng số 0 cho đến khi các mint quote Token-2022 được hỗ trợ.
  • quote_protocol_fee / platform_fee / migrate_fee — ba bộ đếm phí độc lập. Mỗi cái có hướng dẫn yêu cầu riêng của nó; xem instructions.
  • vesting_schedule — có trên mỗi PoolState nhưng không hoạt động khi total_locked_amount == 0. Xem vesting để biết vòng đời đầy đủ.

PDA quyền hạn

LaunchLab sử dụng một PDA quyền hạn duy nhất trên tất cả các lần phát hành, được lấy mà không có seed trên mỗi lần phát hành:
PDA duy nhất đó là:
  • Quyền hạn trên base_vault và quote_vault của mỗi lần phát hành.
  • Không có gì trên base_mint — quyền hạn mint được thu hồi trước khi InitializeV2 trả về (xem dưới đây).
  • Người ký trên CPI kết thúc CPMM, và trên kết thúc AMM v4 cũ cho trạng thái hiện có.
  • Người ký trên các chuyển ClaimVestedToken ra khỏi kho base.
  • transfer_fee_config_authority trên TransferFeeConfig của mint base Token-2022, cho toàn bộ giai đoạn trước kết thúc — và withdraw_withheld_authority của nó cũng vậy, nhưng chỉ khi nền tảng để PlatformConfig.transfer_fee_extension_auth không được đặt.
mint_authority được thu hồi trong hướng dẫn khởi tạo, không phải khi kết thúc: InitializeV2 và InitializeWithToken2022 mint toàn bộ cung cấp vào base_vault rồi đặt MintTokens thành None trong cùng một hướng dẫn. Cung cấp do đó được cố định từ thời điểm lần phát hành tồn tại, và di chuyển không có bước quyền hạn mint. Một tác dụng phụ: không ai có thể ký cho mint base, vì vậy tiền thuê của nó không thể được lấy lại bởi CollectExcessLamports. Hai PDA bổ sung gated các kho phí:
Những cái này ký chuyển ra khỏi kho phí tương ứng trong ClaimCreatorFee và ClaimPlatformFeeFromVault.

Mint base

Được tạo nội tuyến bởi Initialize với:
  • mint_authority = authority (được thu hồi khi kết thúc).
  • freeze_authority = None.
  • supply = supply, hoàn toàn được mint vào base_vault.
  • decimals được chọn bởi người tạo tại Initialize (thường là 6).
Vì toàn bộ cung cấp được pre-mint, base_mint.supply là hằng số cho vòng đời của lần phát hành. Các lần mua đường cong di chuyển token từ base_vault đến người mua, nhưng không gọi mint_to. Initialize / InitializeV2 tạo các mint base SPL Token. Hướng dẫn InitializeWithToken2022 chuyên dụng cho phép mint base là mint Token-2022 (với TransferFeeConfig tùy chọn). Cả ba đường dẫn khởi tạo đều yêu cầu kết thúc CPMM. Khi InitializeWithToken2022 đính kèm TransferFeeConfig, mint được tạo với transfer_fee_config_authority = authority và withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth, quay lại authority khi nền tảng chưa đặt trường đó. Cả hai quyền hạn được gán lại cho khóa nền tảng khi kết thúc, phía rút chỉ nếu PDA vẫn giữ nó. Xem platform-config. Mint quote độc lập với mint base và có thể tự nó là mint Token-2022 — InitializeV2 và InitializeWithToken2022 chấp nhận chương trình nào trong khe chương trình quote của chúng. Initialize không dùng nữa không: tài khoản chương trình quote của nó vẫn được gõ thành SPL Token, vì vậy một cấu hình có mint quote là Token-2022 chỉ có thể được phát hành thông qua hai cái kia. Mint quote không bao giờ được tạo bởi LaunchLab; nó là bất kỳ GlobalConfig.quote_mint nào. Xem global-config và reference/token-2022-support.

Kho

Cả base_vault và quote_vault đều là tài khoản token được sở hữu bởi PDA LaunchLab authority, mỗi cái được tạo trên chương trình sở hữu mint của nó — vì vậy một lần phát hành có thể có kho base cũ và kho quote Token-2022, hoặc bất kỳ kết hợp nào khác. token_program_flag ghi lại cái nào là cái nào. Địa chỉ được lưu trữ trên PoolState và cũng có thể được lấy:
(Xác minh các tiền tố seed chính xác từ struct tài khoản Initialize của nguồn trước khi dựa vào một lấy trong sản xuất.)

Kho phí

Hai PDA tổng hợp phí trên các lần phát hành:
  • Kho phí người tạo — PDA tại seed [creator, quote_mint]. Mỗi lần phát hành kiếm được phí người tạo giống nhau trên cùng một mint quote đổ vào cùng một kho. Người tạo quét nó qua ClaimCreatorFee.
  • Kho phí nền tảng — PDA tại seed [platform_config, quote_mint]. Mỗi lần phát hành được định tuyến qua cùng một nền tảng sử dụng cùng một mint quote đổ vào cùng một kho. platform_fee_wallet của nền tảng quét nó qua ClaimPlatformFeeFromVault. Cũng có một biến thể quét trên mỗi lần phát hành (ClaimPlatformFee) kéo từ quote_vault của lần phát hành trực tiếp mà không đi qua kho tổng hợp.
Cả hai được tạo lười biếng trên lần swap đầu tiên tích lũy phí, trên chương trình nào sở hữu mint quote. Một người tạo hoặc nền tảng chạy các lần phát hành chống lại cả mint quote cũ và Token-2022 kết thúc với một kho cho mỗi mint, như nó đã làm cho hai mint cũ khác nhau. Mô hình kho tổng hợp là cách cho phép một người tạo hoặc nền tảng khối lượng cao khấu hao chi phí tiền thuê của tích lũy phí trên nhiều lần phát hành.

Quote vault ↔ real_quote

quote_vault.balance và PoolState.real_quote nên ở trong đồng bộ. Chúng có thể trôi dạt tối đa tổng của ba bộ đếm phí đang chờ (quote_protocol_fee, platform_fee, migrate_fee), nằm trong kho nhưng thuộc về bộ đếm phí chứ không phải dự trữ đường cong. Toán học đường cong luôn sử dụng real_quote, không bao giờ số dư kho thô. Bất biến trước kết thúc:

PlatformCurveRule

Một tài khoản cho mỗi cặp (PlatformConfig, GlobalConfig), giữ các hình dạng phát hành mà nền tảng cho phép trên cấu hình đó. Seed PDA là [b"platform_curve_rule", platform_config, global_config].
Tài khoản được tạo không giữ nhóm và được thay đổi kích thước trên mỗi thay đổi nhóm, vì vậy độ dài của nó là 150 + Σ(14 + 18 × constraints) và bộ giải mã không được giả định kích thước cố định. Các nhóm được OR: một lần phát hành được phép ngay khi các ràng buộc của một nhóm đều giữ. Không có nhóm nào có nghĩa là không có hạn chế. Đọc nó chỉ khi PlatformConfig.restrict_curve_param sở hữu là 1 — tại 0 chương trình bỏ qua tài khoản, và một quy tắc cũ có thể đang nằm ở đó. ID trường, toán tử và sách hướng dẫn nằm trong products/launchlab/curve-rules.

Chuyển đổi tài khoản vòng đời

Tiếp theo đi đâu

Nguồn:
  • raydium-launch/programs/launchpad/src/states/pool.rs — PoolState, PoolStatus, VestingSchedule, AmmCreatorFeeOn.
  • raydium-launch/programs/launchpad/src/lib.rs — hằng số seed PDA (AUTH_SEED, CREATOR_FEE_VAULT_AUTH_SEED, PLATFORM_FEE_VAULT_AUTH_SEED).
  • Mô-đun launchpad Raydium SDK v2.