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 →
PlatformConfiglớp cấu hình cấp nền tảng nằm trên GlobalConfig. Trong khi GlobalConfig định nghĩa các quy tắc toàn giao thức (“phí giao dịch là 1%, cung cấp phải ít nhất 10M, chỉ ví này có thể tốt nghiệp”), PlatformConfig là những gì mỗi nền tảng phát hành — pump.fun, giao diện Raydium riêng, launchpad của bên thứ ba — sử dụng để thêm phí của họ, yêu cầu phần của LP sau tốt nghiệp, hạn chế hình dạng đường cong nào mà các lần phát hành của họ có thể chọn, và hiển thị branding của họ (tên, trang web, hình ảnh) trên chuỗi.

Nó là gì

Một tài khoản PlatformConfig quản lý năm mối quan tâm xuyên suốt cho một nền tảng:
  1. Branding — tên, trang web, liên kết hình ảnh, tất cả được lưu trữ nội tuyến để bất kỳ trình khám phá hay tổng hợp nào cũng có thể hiển thị nền tảng đã phát hành token.
  2. Phí nền tảng — một phí giao dịch bổ sung (fee_rate) trên top 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. Phân chia LP migration — ba số nguyên được lưu trữ (platform_scale, creator_scale, burn_scale) cộng lại bằng 1_000_000. Trước bản nâng cấp 2026-08-17, creator scale tạo ra một Fee Key riêng của creator. Các migration được thực hiện sau bản nâng cấp kết hợp hai cái đầu tiên thành một chia sẻ locked-LP do nền tảng sở hữu; phần còn lại bị đốt.
  4. Danh sách trắng tham số đường cong — 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ả các mục không hợp lệ, bất kỳ kết hợp nào được phép; nếu không, các lần phát hành phải khớp chính xác với một trong các mục.
  5. Danh sách cho phép global-config — một hạn chế tùy chọn yêu cầu một PlatformAllowConfig do nền tảng tạo cho GlobalConfig được chọn.
Dẫn xuất PDA:
(Xem create_platform_config trong mã nguồn để có danh sách seed chính thức.)

Bố cục

platform_scale + creator_scale + burn_scale phải bằng 1_000_000. Trước bản nâng cấp 2026-08-17, creator_scale bị khóa riêng và Fee Key của nó đi đến creator token. Đối với các migration được thực hiện sau bản nâng cấp, nó được thêm vào platform_scale và quyền locked-LP của nó đi đến nền tảng thay thế. Ví dụ kết quả theo logic cập nhật:
  • (0, 100_000, 900_000) — 90% LP bị đốt, 10% khóa cho nền tảng.
  • (50_000, 100_000, 850_000) — 85% bị đốt, 15% khóa cho nền tảng.
  • (0, 0, 1_000_000) — đốt toàn bộ, không mint NFT. Các lần phát hành “không có insider” nghiêm ngặt.

Các trường branding

name, web, và img là các mảng byte nội tuyến được đệm bằng các số không 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 cố ý rộng rãi (name: 64, web: 256, img: 256) để các nền tảng có thể bao gồm đủ siêu dữ liệu cho các trình khám phá và tổng hợp mà không cần chạm vào lưu trữ ngoài chuỗi. Bất cứ điều gì vượt quá các kích thước này sẽ hoàn nguyên tại CreatePlatformConfig với InvalidInput.

Cơ chế phí

Một swap trên một đường cong được ràng buộc với PlatformConfig tính ba phí lớp:
  • trade_fee tích lũy vào protocol_fee_owner của giao thức (được yêu cầu qua CollectFee).
  • platform_fee tích lũy vào một kho lưu trữ trên mỗi nền tảng (được yêu cầu qua ClaimPlatformFee hoặc ClaimPlatformFeeFromVault; xem instructions).
  • creator_fee tích lũy vào một kho lưu trữ trên mỗi creator được khóa bằng pubkey của creator + quote mint (được 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.

Phân chia NFT migration (chỉ CPMM)

Khi một lần phát hành tốt nghiệp thành CPMM, lệnh migration chia các token LP được mint bởi CPMM::InitializeWithPermission theo hai cách:
Nếu lp_to_platform khác không, chương trình LP-Lock bao nó thành một Fee Key NFT do platform_nft_wallet sở hữu. Điều này thay thế hành vi trước bản nâng cấp tạo ra các Fee Key riêng của nền tảng và creator. Các Fee Key được tạo bởi các migration hoàn thành trước bản nâng cấp vẫn không thay đổi. Quyền phí LP này tách biệt với phí creator CPMM được kiểm soát bởi platform_cp_creator. Phần burn được đốt trực tiếp, vì vậy không có tài khoản nào có thể rút nó hoặc yêu cầu phí LP được đại diện bởi phần chia đó. Các lần phát hành hiện có với migrate_type = 0 được lưu trữ vẫn có thể sử dụng đường dẫn AMM v4 kế thừa. Khởi tạo mới từ chối loại migrate đó.

Danh sách trắng tham số đường cong

curve_params: Vec<PlatformCurveParam> là cơ chế của nền tảng để hạn chế hình dạng đường cong nào mà các lần phát hành của nó có thể chọn. Nếu vector không trống và ít nhất một mục hợp lệ, chương trình thực thi tại Initialize rằng các tham số của lần phát hành khớp chính xác với ít nhất một mục.
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 cứ điều gì” — tương đương với hành vi danh sách trắng trống. Thuật toán khớp tại Initialize:
  1. Lọc curve_params để các mục có global_config khớp với GlobalConfig được chọn của lần phát hành.
  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 danh sách trắng bất cứ điều gì cho GlobalConfig này).
  3. Nếu mọi mục 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. Nếu không, lặp lại các mục; cho mỗi mục, kiểm tra các tham số của lần phát hành so 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 nào khớp, hoàn nguyên 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 tiêu chuẩn 1B-supply / 800M-sold / 30k-USDC-raise / no-vesting” bằng cách viết một mục duy nhất với cá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 rời rạc, một cho mỗi tầng phát hành được hỗ trợ. MAX_CURVE_PARAMS = 10 giới hạn kích thước danh sách trắng.

PlatformAllowConfig — hạn chế một nền tảng

Mỗi nền tảng quyết định có hạn chế GlobalConfig nào mà các lần phát hành của nó có thể sử dụng hay không. Đặt restrict_global_config với UpdatePlatformConfig::RestrictGlobalConfig(0 | 1).
Seed PDA: [b"platform_allow_config", platform_config, global_config]. Admin nền tảng tạo hoặc đóng một tài khoản cho mỗi cặp được phép qua CreatePlatformAllowConfigClosePlatformAllowConfig. Khi hạn chế là 1, khởi tạo tìm kiếm remaining_accounts cho PDA dự kiến và từ chối một tài khoản bị thiếu với NotEnoughRemainingAccounts. Khi hạn chế là 0, không cần tài khoản cho phép. Tài khoản PlatformGlobalAccess được quản lý bởi admin giao thức trước đây và các lệnh tạo/đóng của nó đã bị loại bỏ. Kích thước PlatformConfigGlobalConfig hiện có không thay đổi, nhưng bộ giải mã phải thay thế cờ toàn cầu cũ bằng cờ nền tảng mới. Các PDA truy cập cũ không được tiêu thụ bởi kiểm tra mới.

Đường dẫn đọc

Đối với giao diện người dùng hiển thị “token này được phát hành từ đâu”, PoolState.platform_config trỏ trực tiếp đến PlatformConfig gốc — tìm nạp một lần và lưu vào bộ nhớ cache branding.

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

Các xoay vòng 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 gửi update_platform_config của mã nguồn để có các mã param chính xác.

Những cạm bẫy phổ biến

  • Sentinel danh sách trắng được đặt sai. Một BondingCurveParam với total_locked_amount = 0 không phải là wildcard — nó khớp với các lần phát hành rõ ràng từ chối 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 hiển thị) để đặt sentinel một cách chính xác.
  • Làm tròn phân chia NFT. Ba scale phải cộng lại chính xác 1_000_000. Lỗi off-by-one tại CreatePlatformConfig hoàn nguyên; off-by-one tại thời gian chạy sẽ mint hoặc đốt một đơn vị LP bổ sung, đó là lý do kiểm tra bằng nhau nghiêm ngặt ở đó.
  • Phân bổ kép vesting nền tảng. Nếu platform_vesting_scale > 0, nền tảng phải gọi CreatePlatformVestingAccount một lần sau khi giai đoạn gây quỹ của lần phát hành kết thúc; nếu nó quên, phần chia đó vẫn chưa được phân bổ và không hoạt động mãi mãi (ngân sách total_locked_amount của lần phát hành được tiêu thụ nhưng nền tảng không bao giờ yêu cầu).
  • Sự mơ hồ platform_cp_creator. Khi được đặt thành Pubkey::default(), creator lần phát hành được ghi lại là pool_creator của pool CPMM sau tốt nghiệp; khi được đặt thành một khóa thực, khóa đó được ghi lại thay thế. Điều này xác định người thụ hưởng của phí creator CPMM sau tốt nghiệp và ai có thể ký đường dẫn CPMM::CollectCreatorFee gốc. Đường dẫn bộ sưu tập không cần phép vẫn trả cho ATA chính tắc của khóa được ghi lại này. Quyết định tại thời điểm tạo cấu hình nền tảng mô hình nào bạn muốn.
  • Hạn chế mà không có tài khoản cho phép. Bật restrict_global_config trước khi tạo PlatformAllowConfig cần thiết sẽ chặn các lần phát hành mới chọn cấu hình đó.

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_allow_config.rsPlatformAllowConfig.
  • raydium-launch/programs/launchpad/src/lib.rs — các điểm vào cấu hình nền tảng và cho phép cấu hình.