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 →
PlatformConfigoverlay cấp nền tảng nằm trên GlobalConfig. Nếu GlobalConfig định nghĩa các quy tắc toàn giao thức (“phí giao dịch là 1%, cấp cung phải ít nhất 10M, chỉ ví này mới có thể graduation”), thì PlatformConfig là cái mà mỗi nền tảng launch — pump.fun, UI của Raydium, các launchpad bên thứ ba — sử dụng để thêm phí của họ, yêu cầu phần LP sau graduation, hạn chế hình dạng curve nào mà các launch của họ có thể chọn, và hiển thị branding của họ (tên, website, hình ảnh) on-chain.

Nó là cái gì

Một tài khoản PlatformConfig quản lý bốn khía cạnh quan trọng cho một nền tảng:
  1. Branding — tên, website, liên kết hình ảnh, tất cả được lưu trữ inline để bất kỳ explorer hay aggregator nào cũng có thể hiển thị nền tảng đã launch token.
  2. Platform fee — một phí giao dịch bổ sung (fee_rate) trên đỉnh của trade_fee_rate của giao thức. Tích lũy vào platform_fee_wallet của nền tảng. Bị giới hạn ở 100 bps bởi GlobalConfig.max_share_fee_rate.
  3. NFT migration split — ba số nguyên (platform_scale, creator_scale, burn_scale) cộng lại bằng RATE_DENOMINATOR_VALUE = 1_000_000 và chia LP sau graduation thành một phần được mint cho ví NFT nền tảng, một phần cho ví NFT creator, và một phần bị burn (Burn & Earn). Chỉ có ý nghĩa khi graduation hướng đến CPMM (migrate_type = 1).
  4. Curve-parameter whitelist — một Vec<PlatformCurveParam> liệt kê chính xác những kết hợp (supply, total_base_sell, total_quote_fund_raising, migrate_type, migrate_cpmm_fee_on, vesting_params...) nào được phép trên nền tảng này. Nếu vector trống hoặc tất cả mục nhập đều không hợp lệ, bất kỳ kết hợp nào cũng được phép; ngược lại, các launch phải khớp chính xác với một trong các mục nhập.
Đạo hàm PDA:
(Xem create_platform_config trong source để có danh sách seed chính thức.)

Layout

platform_scale + creator_scale + burn_scale phải bằng 1_000_000 (xác thực bởi MigrateNftInfo::check). Các chia sẻ thường thấy trong production:
  • (0, 100_000, 900_000) — 90% LP bị burn, 10% cho creator. Tiêu chuẩn fair launch kiểu pump.
  • (50_000, 100_000, 850_000) — chia sẻ nền tảng nhỏ (5%), 10% creator, 85% burn.
  • (0, 0, 1_000_000) — toàn bộ burn, không mint NFT. Launch “no insiders” nghiêm ngặt.

Trường branding

name, web, và img là các byte array inline được padding bằng zero lên đến hằng số kích thước của chúng. Để đọc chúng dưới dạng chuỗi, cắt lên đến \0 đầu tiên:
Các hằng số có ý định được đặt rộng rãi (name: 64, web: 256, img: 256) để các nền tảng có thể bao gồm đủ metadata cho explorer và aggregator mà không cần chạm vào lưu trữ off-chain. Bất cứ điều gì vượt quá các kích thước này sẽ revert tại CreatePlatformConfig với InvalidInput.

Cơ chế phí

Một swap trên một curve được ràng buộc với một PlatformConfig tính ba khoản phí xếp chồng:
  • trade_fee tích lũy vào protocol_fee_owner của giao thức (yêu cầu qua CollectFee).
  • platform_fee tích lũy vào một vault riêng theo nền tảng (yêu cầu qua ClaimPlatformFee hoặc ClaimPlatformFeeFromVault; xem instructions).
  • creator_fee tích lũy vào một vault riêng theo creator được khóa bởi pubkey của creator + quote mint (yêu cầu qua ClaimCreatorFee).
creator_fee_rate bị giới hạn bởi MAX_CREATOR_FEE_RATE = 5000 (50 bps). fee_rate (phí nền tảng) bị giới hạn ở 10000 (100 bps) bởi GlobalConfig.max_share_fee_rate.

NFT migration split (chỉ CPMM)

Khi một launch graduation đến CPMM (migrate_type = 1, ký bởi migrate_to_cpswap_wallet), lệnh migration chia các LP token được mint bởi CPMM::InitializeWithPermission thành ba phần:
Các chia sẻ nền tảng và creator được gói như NFT bởi chương trình LP-Lock (LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE) — chủ sở hữu NFT có quyền yêu cầu phí CPMM tích lũy vô thời hạn mà không thể rút thanh khoản cơ bản. Xem products/launchlab/creator-fees cho luồng Fee Key sau graduation. Chia sẻ burn được gửi đến chương trình Lock với is_burn = true để các LP token không thể truy cập được — chúng bảo vệ mức sàn giá của pool mà không bao giờ hoàn lại phí cho ai. Khi migrate_type = 0 (graduation đến AMM v4), các trường chia sẻ NFT bị bỏ qua và toàn bộ LP được khóa / burn theo một luồng riêng phía AMM v4.

Curve-parameter whitelist

curve_params: Vec<PlatformCurveParam> là cơ chế của nền tảng để hạn chế hình dạng curve nào mà các launch của nó có thể chọn. Nếu vector không trống và ít nhất một mục nhập hợp lệ, chương trình bắt buộc tại Initialize rằng tham số của launch khớp chính xác với ít nhất một mục nhập.
Mỗi trường có một giá trị sentinel có nghĩa là wildcard (bất kỳ giá trị nào khớp): u64::MAX cho các trường u64, u8::MAX cho các trường u8, 0 cho các trường supply / sell / fund-raising. Một BondingCurveParam với tất cả sentinel là “cho phép bất kỳ cái gì” — tương đương với hành vi whitelist trống. Thuật toán khớp tại Initialize:
  1. Lọc curve_params để các mục nhập có global_config khớp với GlobalConfig được chọn của launch.
  2. Nếu danh sách được lọc trống, cho phép bất kỳ tham số nào (nền tảng đã không whitelist bất cứ cái gì cho GlobalConfig này).
  3. Nếu mỗi mục nhập trong danh sách được lọc có all_is_invalid() (mỗi trường là wildcard), cho phép bất kỳ tham số nào.
  4. Ngược lại, lặp qua các mục nhập; cho mỗi mục nhập, kiểm tra tham số của launch với mỗi trường không phải wildcard. Nếu tất cả các trường không phải wildcard khớp, chấp nhận và trả về.
  5. Nếu không có mục nhập nào khớp, revert với InvalidInput.
Điều này cho phép một nền tảng nói “chúng tôi chỉ cho phép hình dạng 1B-supply / 800M-sold / 30k-USDC-raise / no-vesting tiêu chuẩn” bằng cách viết một mục nhập duy nhất có giá trị cụ thể cho bốn trường đó và wildcard ở mọi nơi khác. Hoặc một nền tảng nghiêm ngặt hơn có thể liệt kê ba hoặc bốn hình dạng riêng biệt, mỗi một cho một tầng launch được hỗ trợ. MAX_CURVE_PARAMS = 10 giới hạn kích thước whitelist.

PlatformGlobalAccess — cấp quyền cho nền tảng

Khi một GlobalConfigrequires_platform_auth = 1, mỗi Initialize đối với nó phải bao gồm một PlatformGlobalAccess PDA chứng minh rằng nền tảng đã được pre-authorized:
Seed PDA: [b"platform_global_access", global_config, platform_config]. Admin giao thức tạo một trong số này cho mỗi cặp (GlobalConfig, PlatformConfig) thông qua CreatePlatformGlobalAccess và thu hồi nó thông qua ClosePlatformGlobalAccess. Mà không có tài khoản này, một launch không thể ràng buộc với GlobalConfig đó từ nền tảng được gated.

Đường dẫn đọc

Cho một UI hiển thị “token này được launch từ đâu”, PoolState.platform_config chỉ trực tiếp vào PlatformConfig gốc — tìm nạp một lần và cache branding.

Đường dẫn cập nhật

Các quay số ví (platform_fee_wallet, platform_nft_wallet, platform_vesting_wallet, platform_cp_creator, transfer_fee_extension_auth, cpswap_config) đều đi qua UpdatePlatformConfig. Đọc bảng dispatch update_platform_config trong source để các mã param chính xác.

Những lỗi thường gặp

  • Whitelist sentinel bị đặt sai. Một BondingCurveParam với total_locked_amount = 0 không phải wildcard — nó khớp với các launch rõ ràng không opt vào vesting. Wildcard cho trường đó là u64::MAX. Cùng một cạm bẫy tồn tại cho cliff_periodunlock_period. Sử dụng clear() (mà chương trình để lộ) để đặt sentinel một cách chính xác.
  • NFT-split rounding. Ba scale phải cộng lại bằng chính xác 1_000_000. Lỗi off-by-one tại CreatePlatformConfig revert; off-by-one tại runtime sẽ mint hoặc burn một đơn vị LP thêm, đó là những gì kiểm tra strict-equality được đặt ở đó để ngăn chặn.
  • Platform vesting double-allocation. Nếu platform_vesting_scale > 0, nền tảng phải gọi CreatePlatformVestingAccount một lần sau khi fundraising của launch kết thúc; nếu nó quên, chia sẻ đó vẫn chưa được phân bổ và ngủ yên mãi mãi (ngân sách total_locked_amount của launch được tiêu thụ nhưng nền tảng không bao giờ yêu cầu).
  • platform_cp_creator ambiguity. Khi đặt thành Pubkey::default(), creator launch được ghi lại là pool_creator của pool CPMM sau graduation; khi đặt thành một khóa thực, khóa đó được ghi lại thay thế. Điều này ảnh hưởng đến ai có thể gọi CPMM::CollectCreatorFee sau này. Quyết định tại thời gian tạo platform-config mô hình nào bạn muốn.

Con trỏ

Nguồn:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, PlatformCurveParam, BondingCurveParam, is_valid_curve_param.
  • raydium-launch/programs/launchpad/src/states/platform_global_access.rsPlatformGlobalAccess.
  • raydium-launch/programs/launchpad/src/lib.rscreate_platform_config, update_platform_config, update_platform_curve_param, remove_platform_curve_param, create_platform_global_access, close_platform_global_access, claim_platform_fee, claim_platform_fee_from_vault.