Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
GlobalConfig는 프로토콜 수준의 설정 계정입니다. (curve_type, index)를 키로 하는 여러 개가 존재할 수 있으며, 모든 런칭은 Initialize 시점에 정확히 하나를 선택합니다. 선택된 GlobalConfig의 값들은 해당 런칭의 파라미터에 대한 하드 리미트가 됩니다. 플랫폼 수준의 커스터마이제이션(플랫폼별 수수료율, 허용된 곡선 형태, 졸업 시 NFT 분할)은 products/launchlab/platform-config를 참고하세요.

개요

GlobalConfig는 (curve_type, index) 당 하나씩 존재하는 PDA로, 모든 런칭이 따라야 할 프로토콜 규칙을 정합니다:
  • 허용되는 본딩 곡선의 종류(curve_type).
  • 곡선이 모든 매수와 매도에 부과하는 거래 수수료율.
  • 졸업 시 부과되는 마이그레이션 수수료.
  • 공급량, 락 비율, 판매 비율, 마이그레이션 비율의 하한.
  • 인용 민트(일반적으로 래핑된 SOL 또는 USDC) — 사용자가 구매하는 자산.
  • 네 개의 프로토콜 지갑: 프로토콜 수수료 소유자, 마이그레이션 수수료 소유자, CPMM 및 레거시 AMM v4 졸업을 위해 보유된 두 개의 마이그레이션 제어 지갑.
GlobalConfig 계정은 LaunchLab 프로그램 관리자 또는 위임된 설정 생성 권한자 중 어느 쪽이든 생성 및 업데이트할 수 있습니다; 그 외의 서명자는 InvalidOwner (6001)를 받습니다. 정식 권한자는 reference/program-addresses를 참고하세요.

레이아웃

PDA 유도:
(서명하기 전에 온체인 계정에서 정확한 시드 순서를 확인하세요 — 프로그램의 create_config 명령어가 정보의 출처입니다.)

필드 의미

curve_type과 index

이 둘이 함께 GlobalConfig를 고유하게 식별합니다. (curve_type, index) 쌍마다 하나의 GlobalConfig가 존재합니다:
  • curve_type = 0 — 상수곱 가상 리저브 곡선. 기본값이며 가장 많이 사용됩니다.
  • curve_type = 1 — 고정 가격 곡선.
  • curve_type = 2 — 선형 가격 곡선.
index는 u16으로, 관리자가 곡선 타입당 여러 설정을 발행할 수 있게 합니다(예: 더 낮은 수수료 설정, 더 높은 최소 인용 모금 설정). Initialize에서 런칭이 (curve_type, index) 쌍을 제공하면 프로그램이 일치하는 GlobalConfig를 로드합니다.

수수료

  • trade_fee_rate — 거래량의 1/1_000_000 단위로 표시됩니다. 곡선의 모든 매수와 매도에 적용됩니다. protocol_fee_owner가 CollectFee를 통해 자신의 몫을 청구합니다.
  • migrate_fee — 졸업 시 한 번 부과되는 고정 수수료(라멜 또는 인용 단위, 설정에 따라 다름). migrate_fee_owner가 CollectMigrateFee를 통해 청구합니다.
  • max_share_fee_rate — 10_000(100 bps)으로 초기화됩니다. BuyExactIn, BuyExactOut, SellExactIn, SellExactOut이 수용하는 share_fee_rate 인자를 제한합니다 — 거래 중 공유 수신자에게 직접 지불되는 추천 수수료입니다. PlatformConfig.fee_rate를 제한하지는 않습니다; 그 비율은 자체 상한이 있으며, platform-config에 설명되어 있습니다. CreateConfig는 초기화 시 trade_fee_rate + max_share_fee_rate < RATE_DENOMINATOR_VALUE를 강제합니다. 업데이트 경로에서는 param = 6(max_share_fee_rate)만 그 합계를 다시 확인하고, param = 0(trade_fee_rate)은 trade_fee_rate < RATE_DENOMINATOR_VALUE만 확인하므로, 거래 수수료만 올리면 두 값의 합이 결합 상한을 넘을 수 있습니다. 불변식을 유지하는 순서로 설정하세요.

공급량 및 비율 하한

이 하한들은 런칭이 Initialize에서 선택할 수 있는 곡선 형태 파라미터를 제한합니다. 생성자의 CurveParams가 이들 중 하나라도 위반하면 Initialize는 InvalidInput으로 되돌립니다.
  • min_base_supply — 곡선이 선언할 수 있는 최소 supply(소수점 없음). 기본값은 10_000_000입니다.
  • max_lock_rate — 1/1_000_000 단위로 표시; 기본값 300_000(30%). total_locked_amount <= supply * max_lock_rate / 1_000_000을 통해 베스팅을 제한합니다.
  • min_base_sell_rate — 1/1_000_000 단위로 표시; 기본값 200_000(20%). base_supply_graduation / supply를 아래에서 제한합니다.
  • min_base_migrate_rate — 1/1_000_000 단위로 표시; 기본값 200_000(20%). 졸업 후 풀을 시드하기 위해 남겨진 토큰 수를 제한합니다.
  • min_quote_fund_raising — 런칭이 선언할 수 있는 최소 quote_reserve_target(소수점 포함). 기본값은 인용 민트의 30_000_000_000 단위입니다.

인용 민트 및 프로토콜 지갑

  • quote_mint — 사용자가 구매하는 자산. 대부분의 런칭은 래핑된 SOL(So111…112) 또는 USDC(EPjF…Dt1v)를 사용합니다. 하나의 GlobalConfig는 하나의 인용 민트에 바인딩됩니다; 다른 인용 대상이 필요한 런칭은 다른 (curve_type, index)를 대상으로 합니다. 민트는 SPL Token 프로그램 또는 Token-2022 중 하나가 소유할 수 있습니다 — 아래를 참고하세요.
  • protocol_fee_owner — CollectFee에 서명하고 이 설정에 바인딩된 모든 런칭에서 누적된 프로토콜 수수료를 청구하는 공개키입니다. 온체인에 저장되며, 관리자는 UpdateConfig를 통해 회전할 수 있습니다.
  • migrate_fee_owner — CollectMigrateFee에 서명하는 공개키입니다.

Token-2022 인용 민트

CreateConfig는 Token-2022 quote_mint를 수용하며, 그러한 설정에 바인딩된 풀은 끝에서 끝까지 이를 수행합니다: 인용 금고, 두 수수료 금고, 공유 수수료 수신자의 토큰 계정 모두 Token-2022에서 생성되며, 스왑 명령어는 인용 측의 TransferFeeConfig를 고려합니다. PoolState.token_program_flag bit1은 런칭별로 선택을 기록합니다. 하나에 의존하기 전에 알아야 할 두 가지 제약이 있습니다:
  • 더 이상 사용되지 않는 Initialize는 이에 대해 런칭할 수 없습니다. InitializeV2와 InitializeWithToken2022만 Token-2022 인용 프로그램을 수용합니다. instructions를 참고하세요.
  • 확장 허용 목록이 적용되지 않습니다. CPMM 및 CLMM과 달리, LaunchLab은 인용 민트의 확장을 검사하지 않습니다 — CreateConfig는 민트를 그대로 받으므로, 유일한 게이트는 어떤 민트가 설정에 바인딩되는지에 대한 관리자 재량입니다. 프로그램의 NoSupportExtension 검사는 LaunchLab이 자체적으로 생성하는 Token-2022 기본 민트만 포함합니다. 하나를 바인딩하는 것을 높은 신뢰 작업으로 취급하세요; reference/token-2022-support를 참고하세요.

마이그레이션 지갑

두 개의 저장된 졸업 지갑은 다른 서명자가 필요합니다:
  • migrate_to_amm_wallet — 저장된 migrate_type = 0을 가진 기존 레거시 런칭에 대해 MigrateToAmm에 서명합니다.
  • migrate_to_cpswap_wallet — MigrateToCpswap에 서명합니다. 새로 초기화된 모든 런칭은 이 경로를 사용합니다.
이들은 일반적으로 Raydium 운영 졸업 크랭크에 의해 보유되므로, 곡선이 임계값에 도달한 직후 졸업이 이루어지며 생성자가 이를 호출할 때까지 기다리지 않습니다.

플랫폼 측 허용 목록

GlobalConfig는 더 이상 requires_platform_auth를 가지지 않습니다. 이전 바이트는 패딩이므로 계정 크기는 변하지 않습니다. 접근은 이제 PlatformConfig.restrict_global_config와 해당 플랫폼의 관리자가 생성한 PlatformAllowConfig 계정으로 제어됩니다. platform-config를 참고하세요.

초기화 시 기본값

CreateConfig가 호출되면, 프로그램은 많은 필드를 하드코딩된 기본값으로 시드합니다:
관리자는 생성 시점에 curve_type, index, migrate_fee, trade_fee_rate, quote_mint, 네 개의 지갑 공개키를 명시적으로 설정합니다; 이후 값들은 UpdateConfig를 통해 조정할 수 있습니다.

런칭이 GlobalConfig를 선택하는 방법

Initialize에서 생성자는 다음을 전달합니다:
  • (curve_type, index) — 로드할 GlobalConfig PDA를 선택합니다.
  • CurveParams — 곡선 형태를 설명합니다(supply, total_base_sell, total_quote_fund_raising, migrate_type).
  • VestingParams — 락된 공급량을 설명합니다.
  • MintParams — 기본 민트용입니다.
프로그램은 다음을 강제합니다:
  • curve_type이 global_config.curve_type과 일치합니다.
  • supply >= global_config.min_base_supply.
  • total_locked_amount <= supply * max_lock_rate / 1_000_000.
  • total_base_sell >= supply * min_base_sell_rate / 1_000_000.
  • (supply − total_base_sell − total_locked_amount) >= supply * min_base_migrate_rate / 1_000_000 — 즉, 졸업 후 풀을 시드하기에 충분한 토큰이 남아있습니다.
  • total_quote_fund_raising >= min_quote_fund_raising.
  • migrate_type == 1(CPSWAP).
  • 선택된 플랫폼이 restrict_global_config == 1을 가지면, 일치하는 PlatformAllowConfig가 포함됩니다.
Initialize 후, 런칭의 PoolState는 global_config 공개키를 직접 저장하므로 바인딩은 영구적입니다.

업데이트 경로

UpdateConfig는 (param: u8, value: u64) 쌍을 받으며, 서명자로 LaunchLab 프로그램 관리자 또는 위임된 설정 생성 권한자를 허용합니다 — 그 외의 서명자는 InvalidOwner (6001)를 받습니다. 각 param 값은 변경할 필드를 선택합니다:
네 개의 지갑 회전은 동일한 디스패치 안의 일반적인 param 값이며 별도의 인자 형태가 아닙니다. 이들은 value를 완전히 무시하고 첫 번째 remaining_account에서 새 키를 읽습니다. 그 계정을 생략하면 unwrap()에서 패닉이 발생합니다. 11보다 큰 param은 InvalidInput (6002)을 반환합니다.
플랫폼 인증을 위한 이전 UpdateConfig 선택자 12는 제거되었습니다. 플랫폼 관리자는 이제 자신의 허용 목록을 관리합니다.

클라이언트에서 GlobalConfig 읽기

레이아웃의 필드 이름은 온체인 Rust 이름과 다릅니다: 자금 조달 하한은 minFundRaisingB로, 공급 하한은 minSupplyA로, 판매/마이그레이션 비율 하한은 minSellRateA / minMigrateRateA로 디코딩됩니다. 사용 가능한 모든 설정을 나열하는 UI의 경우, 이들을 미러링하는 LaunchLab API 엔드포인트(raydium.api.fetchLaunchConfigs())를 쿼리하세요. 온체인 계정 수는 적습니다(실제로는 한 자리 수).

참고 자료

소스:
  • raydium-launch/programs/launchpad/src/states/config.rs — GlobalConfig 구조체 및 initialize.
  • raydium-launch/programs/launchpad/src/lib.rs — create_config, update_config.