Skip to main content
Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.Ver versión en inglés →
PlatformConfig es la superposición a nivel de plataforma que se sitúa encima de GlobalConfig. Mientras que GlobalConfig define las reglas a nivel de protocolo («la comisión comercial es del 1%, el suministro debe ser al menos 10M, solo esta billetera puede graduarse»), PlatformConfig es lo que cada plataforma de lanzamiento — pump.fun, la propia interfaz de Raydium, launchpads de terceros — utiliza para agregar su comisión, reclamar su porción del LP post-graduación, restringir qué formas de curva pueden elegir sus lanzamientos y mostrar su marca (nombre, sitio web, imagen) en cadena.

Qué es

Una cuenta PlatformConfig gestiona cuatro aspectos transversales para una plataforma:
  1. Marca — nombre, sitio web, enlace de imagen, todo almacenado inline para que cualquier explorador o agregador pueda mostrar la plataforma que lanzó un token.
  2. Comisión de plataforma — una comisión comercial adicional (fee_rate) además de trade_fee_rate del protocolo. Se acumula en la platform_fee_wallet de la plataforma. Limitada a 100 bps por GlobalConfig.max_share_fee_rate.
  3. Reparto de migración de NFT — tres números enteros (platform_scale, creator_scale, burn_scale) que suman RATE_DENOMINATOR_VALUE = 1_000_000 y dividen el LP post-graduación en una parte acuñada en la billetera NFT de la plataforma, una parte en la billetera NFT del creador y una parte quemada (Burn & Earn). Solo tiene sentido cuando la graduación apunta a CPMM (migrate_type = 1).
  4. Lista blanca de parámetros de curva — un Vec<PlatformCurveParam> que lista exactamente qué combinaciones de (supply, total_base_sell, total_quote_fund_raising, migrate_type, migrate_cpmm_fee_on, vesting_params...) están permitidas en esta plataforma. Si el vector está vacío o todas las entradas son inválidas, cualquier combinación está permitida; de lo contrario, los lanzamientos deben coincidir exactamente con una de las entradas.
Derivación de PDA:
(Consulta create_platform_config en el código fuente para la lista de semillas canónica).

Estructura

platform_scale + creator_scale + burn_scale debe ser igual a 1_000_000 (validado por MigrateNftInfo::check). Repartos comunes vistos en producción:
  • (0, 100_000, 900_000) — 90% LP quemado, 10% al creador. Lanzamiento justo estilo pump estándar.
  • (50_000, 100_000, 850_000) — pequeña porción de plataforma (5%), 10% creador, 85% quemado.
  • (0, 0, 1_000_000) — quemado completo, sin acuñaciones de NFT. Lanzamientos «sin informados» estrictos.

Campos de marca

name, web e img son matrices de bytes inline rellenadas con ceros hasta sus constantes de tamaño. Para leerlas como cadenas, corta hasta el primer \0:
Las constantes son deliberadamente generosas (name: 64, web: 256, img: 256) para que las plataformas puedan incluir suficientes metadatos para exploradores y agregadores sin recurrir a almacenamiento fuera de cadena. Cualquier cosa que exceda estos tamaños revierte en CreatePlatformConfig con InvalidInput.

Mecánica de comisiones

Un swap en una curva vinculada a un PlatformConfig cobra tres comisiones en capas:
  • trade_fee se acumula en protocol_fee_owner del protocolo (se reclama a través de CollectFee).
  • platform_fee se acumula en una bóveda por plataforma (se reclama a través de ClaimPlatformFee o ClaimPlatformFeeFromVault; consulta instructions).
  • creator_fee se acumula en una bóveda por creador clave por la clave pública del creador + mint de quote (se reclama a través de ClaimCreatorFee).
creator_fee_rate está limitado por MAX_CREATOR_FEE_RATE = 5000 (50 bps). fee_rate (la comisión de plataforma) está limitado a 10000 (100 bps) por GlobalConfig.max_share_fee_rate.

Reparto de migración de NFT (solo CPMM)

Cuando un lanzamiento se gradúa a CPMM (migrate_type = 1, firmado por migrate_to_cpswap_wallet), la instrucción de migración divide los tokens LP acuñados por CPMM::InitializeWithPermission en tres partes:
Las porciones de plataforma y creador se envuelven como NFT por el programa LP-Lock (LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE) — el tenedor del NFT tiene derecho a reclamar comisiones CPMM acumuladas indefinidamente sin poder retirar la liquidez subyacente. Consulta products/launchlab/creator-fees para el flujo de Fee Key post-graduación. La porción quemada se envía al programa Lock con is_burn = true para que los tokens LP sean permanentemente inaccesibles — aseguran el piso de precio del pool sin jamás devolver comisiones a nadie. Cuando migrate_type = 0 (graduarse a AMM v4), los campos de reparto de NFT se ignoran y todo el LP se bloquea / quema según un flujo separado del lado de AMM v4.

Lista blanca de parámetros de curva

curve_params: Vec<PlatformCurveParam> es el mecanismo de la plataforma para restringir qué formas de curva pueden elegir sus lanzamientos. Si el vector es no vacío y al menos una entrada es válida, el programa requiere en Initialize que los parámetros del lanzamiento coincidan exactamente con al menos una entrada.
Cada campo tiene un valor centinela que significa comodín (cualquier valor coincide): u64::MAX para los campos u64, u8::MAX para los campos u8, 0 para los campos de suministro / venta / recaudación. Un BondingCurveParam con todos los centinelas es «permitir cualquier cosa» — equivalente al comportamiento de lista blanca vacía. El algoritmo de coincidencia en Initialize:
  1. Filtra curve_params a entradas cuya global_config coincida con la GlobalConfig elegida del lanzamiento.
  2. Si la lista filtrada está vacía, permite cualquier parámetro (la plataforma no incluyó nada en la lista blanca para esta GlobalConfig).
  3. Si toda entrada en la lista filtrada tiene all_is_invalid() (cada campo es el comodín), permite cualquier parámetro.
  4. De lo contrario, itera entradas; para cada entrada, verifica los parámetros del lanzamiento contra cada campo no comodín. Si todos los campos no comodín coinciden, acepta y retorna.
  5. Si ninguna entrada coincidió, revierte con InvalidInput.
Esto permite a una plataforma decir «solo permitimos la forma estándar de 1B-suministro / 800M-vendido / 30k-USDC-recaudado / sin-vesting» escribiendo una única entrada con valores concretos para esos cuatro campos y comodines en otros lugares. O una plataforma más estricta podría enumerar tres o cuatro formas discretas, una por nivel de lanzamiento soportado. MAX_CURVE_PARAMS = 10 limita el tamaño de la lista blanca.

PlatformGlobalAccess — autorizando una plataforma

Cuando un GlobalConfig tiene requires_platform_auth = 1, cada Initialize contra él debe incluir un PDA PlatformGlobalAccess probando que la plataforma ha sido pre-autorizada:
Semillas de PDA: [b"platform_global_access", global_config, platform_config]. El administrador del protocolo crea uno de estos por par (GlobalConfig, PlatformConfig) vía CreatePlatformGlobalAccess y lo revoca vía ClosePlatformGlobalAccess. Sin esta cuenta, un lanzamiento no puede vincularse a ese GlobalConfig desde la plataforma restringida.

Ruta de lectura

Para una interfaz mostrando «dónde se lanzó este token», PoolState.platform_config apunta directamente al PlatformConfig originador — descárgalo una vez y cachea la marca.

Ruta de actualización

Las rotaciones de cartera (platform_fee_wallet, platform_nft_wallet, platform_vesting_wallet, platform_cp_creator, transfer_fee_extension_auth, cpswap_config) todas van a través de UpdatePlatformConfig. Lee la tabla de dispatch de update_platform_config del código fuente para los códigos param exactos.

Trampas comunes

  • Centinelas de lista blanca mal configurados. Un BondingCurveParam con total_locked_amount = 0 no es un comodín — coincide con lanzamientos que explícitamente optan por no usar vesting. El comodín para ese campo es u64::MAX. La misma trampa existe para cliff_period y unlock_period. Usa clear() (que el programa expone) para establecer centinelas correctamente.
  • Redondeo de reparto de NFT. Las tres escalas deben sumar exactamente 1_000_000. Los errores de uno en CreatePlatformConfig revierten; los errores de uno en tiempo de ejecución acuñarían o quemarían una unidad de LP extra, que es para lo que existe la verificación de igualdad estricta.
  • Doble asignación de vesting de plataforma. Si platform_vesting_scale > 0, la plataforma debe llamar a CreatePlatformVestingAccount una sola vez después de que termine la recaudación del lanzamiento; si lo olvida, esa porción permanece sin asignar e inactiva para siempre (el presupuesto total_locked_amount del lanzamiento se consume pero la plataforma nunca lo reclama).
  • Ambigüedad de platform_cp_creator. Cuando se establece en Pubkey::default(), el creador del lanzamiento se registra como pool_creator del pool CPMM post-graduación; cuando se establece en una clave real, esa clave se registra en su lugar. Esto afecta quién puede llamar a CPMM::CollectCreatorFee después. Decide en el momento de la creación de config de plataforma qué modelo quieres.

Referencias

Fuentes:
  • 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.