Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
PlatformConfigGlobalConfig 위에 놓인 플랫폼 레벨 오버레이입니다. GlobalConfig가 프로토콜 전체 규칙(“거래 수수료는 1%, 공급량은 최소 10M, 이 지갑만 졸업 가능”)을 정의한다면, PlatformConfig는 각 런칭 플랫폼(pump.fun, Raydium의 자체 UI, 써드파티 런칭패드)이 자신의 수수료를 추가하고, 졸업 후 LP의 자신의 몫을 청구하고, 런칭이 선택할 수 있는 런칭 파라미터를 제한하고, 온체인에 자신의 브랜딩(이름, 웹사이트, 이미지)을 표시하는 데 사용합니다.

개요

PlatformConfig 계정은 플랫폼을 위한 다섯 가지 핵심 관심사를 소유합니다:
  1. 브랜딩 — 이름, 웹사이트, 이미지 링크로, 모두 인라인으로 저장되어 모든 익스플로러나 애그리게이터가 토큰을 런칭한 플랫폼을 표시할 수 있습니다.
  2. 플랫폼 수수료 — 프로토콜의 trade_fee_rate 위에 추가되는 거래 수수료(fee_rate)입니다. 플랫폼의 platform_fee_wallet에 누적됩니다. 생성 및 업데이트 경로 모두에서 500 bps(50000)로 제한되며, 2026-08-26에 100 bps(10000)에서 인상되었습니다 — 수수료 상한 참조.
  3. LP 마이그레이션 분배 — 세 개의 저장된 정수(platform_scale, creator_scale, burn_scale)로 1_000_000으로 합산됩니다. 2026-08-17 업그레이드 전에는 크리에이터 스케일이 별도의 크리에이터 Fee Key를 생성했습니다. 업그레이드 후 실행된 마이그레이션은 처음 두 개를 플랫폼 소유의 잠금 LP 지분으로 결합하고, 나머지는 소각됩니다.
  4. 런칭 파라미터 규칙 — 선택적 제한(restrict_curve_param)으로, 런칭이 선택한 GlobalConfigPlatformCurveRule 계정을 만족하도록 요구합니다. 규칙은 값 범위, 대체 계층, 토큰 타입 게이팅을 지원하며, PlatformConfig가 아닌 자신의 계정에 있습니다.
  5. 글로벌 설정 허용 목록 — 선택적 제한으로, 선택한 GlobalConfig에 대해 플랫폼이 생성한 PlatformAllowConfig를 요구합니다.
PDA 유도:
(소스의 create_platform_config에서 정규 시드 목록을 참조하세요.)

레이아웃

계정은 고정 944바이트입니다. 2026-08-31 릴리스가 런칭 파라미터를 PlatformCurveRule 계정으로 이동할 때까지 후행 Vec<PlatformCurveParam>을 보유했습니다. restrict_curve_param, curve_rule_manager, 그리고 vec의 길이 접두사가 차지했던 4바이트는 모두 패딩에서 나오므로, 바이트 수와 모든 이전 필드 오프셋은 변경되지 않습니다. 디코더가 변경해야 할 사항은 변경 로그 항목을 참조하세요. platform_scale + creator_scale + burn_scale1_000_000과 같아야 합니다. 2026-08-17 업그레이드 전에는 creator_scale이 별도로 잠금되었고 그 Fee Key는 토큰 크리에이터에게 갔습니다. 업그레이드 후 실행된 마이그레이션의 경우, 이는 platform_scale에 추가되고 그 잠금 LP 권리는 플랫폼으로 갑니다. 업데이트된 로직의 예상 결과:
  • (0, 100_000, 900_000) — 90% LP 소각, 10% 플랫폼에 잠금.
  • (50_000, 100_000, 850_000) — 85% 소각, 15% 플랫폼에 잠금.
  • (0, 0, 1_000_000) — 완전 소각, NFT 민트 없음. 엄격한 “내부자 없음” 런칭.

브랜딩 필드

name, web, img는 크기 상수까지 0으로 패딩된 인라인 바이트 배열입니다. 이들을 문자열로 읽으려면 첫 \0까지 슬라이스하세요:
상수는 의도적으로 넉넉합니다(name: 64, web: 256, img: 256). 플랫폼이 익스플로러와 애그리게이터를 위해 충분한 메타데이터를 포함할 수 있으면서도 오프체인 스토리지를 건드리지 않습니다. 이 크기를 초과하는 것은 CreatePlatformConfig에서 InvalidInput으로 되돌립니다.

수수료 메커니즘

PlatformConfig에 바인딩된 곡선의 스왑은 세 개의 계층화된 수수료를 부과합니다:
  • trade_fee는 프로토콜의 protocol_fee_owner에 누적됩니다(CollectFee를 통해 청구).
  • platform_fee는 플랫폼별 금고에 누적됩니다(ClaimPlatformFee 또는 ClaimPlatformFeeFromVault를 통해 청구; instructions 참조).
  • creator_fee는 크리에이터의 공개키 + 인용 민트로 키된 크리에이터별 금고에 누적됩니다(ClaimCreatorFee를 통해 청구).

수수료 상한

두 비율 모두 1/1_000_000으로 표시되므로, 5000은 50 bps이고 50000은 500 bps입니다. fee_rate에 대한 두 적용 지점은 다른 파일의 별도 require! 호출이므로 다른 오류 코드를 전달하지만, 동일한 상한을 적용합니다. 허용된 비율로 생성된 플랫폼은 나중에 편집할 수 있으며, 모든 필드를 한 번에 다시 쓰는 AllInfo 대량 변형을 포함합니다. fee_rate 상한은 원래 100 bps(10000)였습니다. 업데이트 상한은 2026-01-27에 25000(250 bps)으로 이동했고, 2026-08-26에 둘 다 50000(500 bps)으로 이동했습니다 — 변경 로그 항목 참조. GlobalConfig.max_share_fee_rate는 두 비율 중 어느 것도 제한하지 않습니다. 네 개의 스왑 명령어가 취하는 거래별 share_fee_rate 인수(추천 수수료)를 제한하고 다른 것은 없습니다. global-config 참조.

Token-2022 전송 수수료 권한

transfer_fee_extension_authInitializeWithToken2022를 통해 전송 수수료가 첨부된 런칭이 생성될 때 기본 민트의 TransferFeeConfig 권한을 보유하게 되는 플랫폼 키를 지정합니다. 확장은 두 개의 권한을 전달하며, 이들은 런칭 라이프사이클의 다른 지점에서 전달됩니다: 2026-08-27 이전에는 민트가 두 권한 모두에서 authority PDA로 생성되었고, 둘 다 졸업 시 플랫폼으로 이동했습니다. 프로그램은 인출 보유 또는 수확 명령어를 노출하지 않으므로, 본딩 곡선 단계 중에 보유된 수수료는 런칭이 졸업할 때까지 도달할 수 없었습니다. 민트 생성 시 인출 측을 작성하면 첫 거래부터 청구 가능하게 됩니다 — 변경 로그 항목 참조. 계획할 가치가 있는 두 가지 결과:
  • 런칭 후가 아니라 런칭 전에 필드를 설정하세요. transfer_fee_extension_authPubkey::default()인 동안 생성된 런칭은 인출 측에 authority PDA를 놓습니다. 나중에 필드를 설정하면 여전히 작동합니다 — 졸업이 제자리에 있는 PDA를 찾고 권한을 전달합니다 — 하지만 그 사이에 보유된 잔액을 인출할 수 없습니다.
  • 런칭 중간에 필드를 회전하면 두 권한이 분할됩니다. 런칭의 생성과 졸업 사이에 transfer_fee_extension_auth를 변경하면 민트의 인출 보유 권한은 생성 시 구성된 키에 남아 있고(PDA는 더 이상 보유하지 않으므로 마이그레이션이 해당 인수를 건너뜀) 수수료 설정 권한은 새 키로 갑니다. 런칭 간에 회전하거나 Token-2022를 통해 직접 두 키를 조정할 계획을 세우세요.
필드를 런칭의 전체 수명 동안 Pubkey::default()로 두는 플랫폼은 두 권한을 authority PDA에 영구적으로 유지합니다: 수수료 비율을 변경할 수 없고 보유된 잔액을 인출할 수 없습니다. 런칭에 전송 수수료를 첨부하는 경우에만 플랫폼이 이 키를 보유할 의도가 있을 때입니다.

NFT 마이그레이션 분배 (CPMM 전용)

런칭이 CPMM으로 졸업할 때, 마이그레이션 명령어는 CPMM::InitializeWithPermission에 의해 민트된 LP 토큰을 두 가지 방식으로 분배합니다:
lp_to_platform이 0이 아니면, LP-Lock 프로그램은 이를 platform_nft_wallet이 소유한 하나의 Fee Key NFT로 래핑합니다. 이는 별도의 플랫폼 및 크리에이터 Fee Key를 생성한 업그레이드 전 동작을 대체합니다. 업그레이드 전에 완료된 마이그레이션으로 생성된 Fee Key는 변경되지 않습니다. 이 LP 수수료 권리는 platform_cp_creator로 제어되는 CPMM 크리에이터 수수료와 별개입니다. 소각 슬라이스는 직접 소각되므로 어떤 계정도 이를 인출하거나 해당 지분이 나타내는 LP 수수료를 청구할 수 없습니다. 저장된 migrate_type = 0이 있는 기존 런칭은 여전히 레거시 AMM v4 경로를 사용할 수 있습니다. 새 초기화는 해당 마이그레이션 타입을 거부합니다.

런칭 파라미터 규칙

restrict_curve_param은 스위치입니다. 0에서 프로그램은 규칙을 전혀 읽지 않습니다. 1에서 이 플랫폼을 통해 라우팅되는 모든 런칭은 선택한 GlobalConfigPlatformCurveRule 계정을 만족해야 하며, 런칭 빌더는 해당 계정을 remaining_accounts에 추가해야 합니다.
규칙은 허용된 런칭 형태의 메뉴입니다: 하나의 체크 그룹 내의 제약은 AND되고, 그룹은 OR되며, 각 제약은 Eq, Gte, Lte, Neq를 지원하는 (field, op, value) 트리플입니다. 이는 값 범위, 대체 계층, 졸업 평가 상한, 마이그레이션 하한, 토큰 타입 게이팅, 시간 제한 그룹을 다룹니다 — 전체 모델, 필드 테이블, 9개의 작동 플레이북은 products/launchlab/curve-rules에 있습니다. 이 페이지가 아닌 여기에 속하는 두 가지:
  • curve_rule_manager는 위임이지, 전송이 아닙니다. UpdatePlatformConfig::CurveRuleManager를 통해 설정하면 해당 지갑은 관리자 키 없이 이 플랫폼의 규칙 계정을 생성, 업데이트, 제거, 종료할 수 있습니다. 플랫폼 관리자는 병렬로 동일한 권한을 유지하므로, 필드를 회전하거나 지우면 제어를 복구합니다. Pubkey::default()는 관리자만 규칙을 관리할 수 있음을 의미합니다. restrict_curve_param을 뒤집을 수 없으며, 이는 관리자 전용 호출로 유지됩니다.
  • 규칙은 GlobalConfig 위에 적용되며, 대신이 아닙니다. 규칙 체크는 설정의 자체 제한 전에 실행되고 이들을 좁힐 수만 있습니다.
이는 정확한 동등성만 테스트할 수 있고, 모든 설정에서 최대 10개 항목을 보유하고, PlatformConfig 계정 자체를 증가시킨 이전 curve_params: Vec<PlatformCurveParam> 화이트리스트를 대체합니다. 이를 사용한 플랫폼은 프로토콜에 의해 일회성 통과로 마이그레이션되었습니다. 레거시 필드, 그 두 명령어, MAX_CURVE_PARAMS는 사라졌습니다.

PlatformAllowConfig — 플랫폼 제한

각 플랫폼은 런칭이 사용할 수 있는 GlobalConfig 계정을 제한할지 여부를 결정합니다. UpdatePlatformConfig::RestrictGlobalConfig(0 | 1)restrict_global_config를 설정하세요.
PDA 시드: [b"platform_allow_config", platform_config, global_config]. 플랫폼 관리자는 CreatePlatformAllowConfigClosePlatformAllowConfig를 통해 허용된 각 쌍당 하나의 계정을 생성하거나 종료합니다. 제한이 1일 때, 초기화는 remaining_accounts에서 예상 PDA를 검색하고 누락된 계정을 NotEnoughRemainingAccounts로 거부합니다. 제한이 0일 때, 허용 계정이 필요하지 않습니다. 이전 프로토콜 관리자 관리 PlatformGlobalAccess 계정 및 그 생성/종료 명령어는 폐기됩니다. 기존 PlatformConfigGlobalConfig 크기는 변경되지 않지만, 디코더는 이전 글로벌 플래그를 새 플랫폼 플래그로 대체해야 합니다. 이전 액세스 PDA는 새 체크에서 소비되지 않습니다.

읽기 경로

“이 토큰은 어디서 런칭되었나”를 보여주는 UI의 경우, PoolState.platform_config는 원래 PlatformConfig를 직접 가리킵니다 — 한 번 가져와서 브랜딩을 캐시하세요.

업데이트 경로

지갑 회전(platform_fee_wallet, platform_nft_wallet, platform_vesting_wallet, platform_cp_creator, transfer_fee_extension_auth, cpswap_config)은 모두 UpdatePlatformConfig를 통해 진행됩니다. 정확한 param 코드는 소스의 update_platform_config 디스패치 테이블을 읽으세요.

일반적인 함정

  • 빌더가 업데이트되기 전에 restrict_curve_param 활성화. 1인 동안 규칙 PDA는 규칙 계정이 없는 설정의 경우에도 모든 런칭에서 remaining_accounts에 있어야 합니다 — 누락된 계정은 통과가 아니라 NotEnoughRemainingAccounts입니다. 빌더 변경을 먼저 배포한 다음 플래그를 뒤집으세요.
  • 빈 규칙으로 restrict_curve_param 활성화. 0개 그룹을 보유하거나 0개 제약을 보유한 그룹은 모든 것을 허용합니다. 플래그를 활성화하는 것 자체는 제한이 아닙니다. 먼저 그룹을 작성하고, SDK 체크로 검증하고, devnet에서 전체 시퀀스를 리허설하세요.
  • NFT 분배 반올림. 세 스케일은 정확히 1_000_000으로 합산되어야 합니다. CreatePlatformConfig에서 1 오프 오류는 되돌아갑니다. 런타임에서 1 오프는 1개의 추가 LP 단위를 민트하거나 소각할 것이며, 이것이 엄격한 동등성 체크가 방지하는 것입니다.
  • 플랫폼 베스팅 이중 할당. platform_vesting_scale > 0이면, 플랫폼은 런칭의 펀드레이징이 끝난 후 한 번 CreatePlatformVestingAccount를 호출해야 합니다. 잊으면, 그 지분은 할당되지 않고 영구적으로 휴면 상태로 남습니다(런칭의 total_locked_amount 예산은 소비되지만 플랫폼은 절대 청구하지 않습니다).
  • platform_cp_creator 모호성. Pubkey::default()로 설정되면, 런칭 크리에이터가 졸업 후 CPMM 풀의 pool_creator로 기록됩니다. 실제 키로 설정되면, 그 키가 대신 기록됩니다. 이는 졸업 후 CPMM 크리에이터 수수료의 수혜자와 원래 CPMM::CollectCreatorFee 경로에 서명할 수 있는 사람을 결정합니다. 허가 없는 수집 경로는 여전히 이 기록된 키의 정규 ATA에 지불합니다. 플랫폼 설정 생성 시 어떤 모델을 원하는지 결정하세요.
  • transfer_fee_extension_auth 늦게 설정 또는 회전. 필드는 Token-2022 런칭당 두 번 읽힙니다 — 민트 생성 시 withdraw_withheld_authority에 대해 한 번, 졸업 시 transfer_fee_config_authority에 대해 한 번 — 따라서 이 두 순간 사이에 변경되는 값은 두 권한을 다른 키에 남깁니다. Token-2022 전송 수수료 권한 참조.
  • 허용 계정 없이 제한. restrict_global_config를 활성화하기 전에 필요한 PlatformAllowConfig를 생성하면 해당 설정을 선택하는 새 런칭이 차단됩니다.

포인터

소스:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, is_curve_rule_manager, is_platform_admin.
  • raydium-launch/programs/launchpad/src/states/platform_curve_rule.rsPlatformCurveRule, CurveRuleGroup, ParamConstraint.
  • raydium-launch/programs/launchpad/src/states/platform_allow_config.rsPlatformAllowConfig.
  • raydium-launch/programs/launchpad/src/instructions/platform/update_platform_config.rsPlatformConfigParam 디스패치 및 업데이트 시간 수수료 상한을 적용하는 필드별 설정자.
  • raydium-launch/programs/launchpad/src/lib.rs — 플랫폼 설정 및 허용 설정 진입점.
  • raydium-launch/programs/launchpad/src/instructions/initialize_with_token_2022.rstransfer_fee_extension_auth가 새 민트의 TransferFeeConfig에 기록되는 위치.
  • raydium-launch/programs/launchpad/src/instructions/admin/migrate_to_cpswap.rs — 졸업 시간 권한 인수 및 그 get_withdraw_withheld_authority 가드.