# Cobro de comisiones

LaunchLab genera comisiones en dos etapas: durante el trading en la bonding curve y después de la migración a los pools de liquidez. Las plataformas y los creadores pueden reclamar sus comisiones ganadas en cualquier momento.

### Resumen de comisiones

| Etapa                           | Tipo de comisión            | Quién gana | Método de reclamación     |
| ------------------------------- | --------------------------- | ---------- | ------------------------- |
| Bonding curve                   | Comisiones de trading       | Plataforma | `claimVaultPlatformFee()` |
| Bonding curve (método anterior) | Comisiones de trading       | Plataforma | `claimAllPlatformFee()`   |
| Bonding curve                   | Comisiones de trading       | Creador    | `claimCreatorFee()`       |
| Post-migración                  | Comisiones de trading de LP | Plataforma | `harvestLockLiquidity()`  |
| Post-migración                  | Comisiones de trading de LP | Creador    | `harvestLockLiquidity()`  |
| Post-migración                  | Comisiones de creador CPMM  | Creador    | `collectCreatorFee()`     |

***

### Cobro de comisiones de la bonding curve

Las comisiones se acumulan durante el trading en la bonding curve. Tanto las plataformas como los creadores pueden reclamar su parte en cualquier momento.

#### Cobro de comisiones de la plataforma

### Reclamación desde la vault de la plataforma

Las plataformas ganan una parte de cada trade en las bonding curves que alojan. Las comisiones se acumulan en una vault y pueden reclamarse en cualquier momento.

```typescript
import { TxVersion } from '@raydium-io/raydium-sdk-v2'
import { initSdk } from './config'
import { PublicKey } from '@solana/web3.js'
import { NATIVE_MINT } from '@solana/spl-token'

const claimPlatformFees = async () => {
  const raydium = await initSdk()

  const { execute } = await raydium.launchpad.claimVaultPlatformFee({
    platformId: new PublicKey('your-platform-id'),
    mintB: NATIVE_MINT,
    claimFeeWallet: raydium.ownerPubKey, // optional, defaults to signer
    txVersion: TxVersion.V0,
  })

  const { txId } = await execute({ sendAndConfirm: true })
  console.log('Platform fees claimed:', txId)
}
```

### Reclamación desde múltiples tokens de cotización

Si tu plataforma aloja launches con diferentes quote tokens:

```typescript
const claimMultipleVaultFees = async () => {
  const raydium = await initSdk()
  const platformId = new PublicKey('your-platform-id')

  const { execute } = await raydium.launchpad.claimMultipleVaultPlatformFee({
    platformList: [
      { id: platformId, mintB: NATIVE_MINT },
      { id: platformId, mintB: new PublicKey('USDC-mint-address') },
    ],
    unwrapSol: true, // unwrap SOL to native balance
    txVersion: TxVersion.V0,
  })

  const { txIds } = await execute({ sendAndConfirm: true, sequentially: true })
  console.log('Fees claimed:', txIds)
}
```

### Reclamación desde todos los pools (método anterior)

Reclama comisiones de todos los pools de bonding curve en tu plataforma de una vez:

```typescript
const claimAllFees = async () => {
  const raydium = await initSdk()

  const { execute } = await raydium.launchpad.claimAllPlatformFee({
    platformId: new PublicKey('your-platform-id'),
    platformClaimFeeWallet: raydium.ownerPubKey,
    txVersion: TxVersion.V0,
  })

  const { txIds } = await execute({ sendAndConfirm: true, sequentially: true })
  console.log('All platform fees claimed:', txIds)
}
```

***

#### Cobro de comisiones del creador

### Reclamación de comisiones de la bonding curve

Los creadores ganan comisiones por los trades en la bonding curve de su token. Las comisiones se acumulan en una vault específica para el creador.

```typescript
import { TxVersion } from '@raydium-io/raydium-sdk-v2'
import { initSdk } from './config'
import { NATIVE_MINT } from '@solana/spl-token'

const claimCreatorFees = async () => {
  const raydium = await initSdk()

  const { execute } = await raydium.launchpad.claimCreatorFee({
    mintB: NATIVE_MINT,
    txVersion: TxVersion.V0,
  })

  const { txId } = await execute({ sendAndConfirm: true })
  console.log('Creator fees claimed:', txId)
}
```

### Reclamación desde múltiples tokens de cotización

Si has lanzado tokens con diferentes quote tokens:

```typescript
import { TOKEN_PROGRAM_ID } from '@solana/spl-token'

const claimMultipleCreatorFees = async () => {
  const raydium = await initSdk()

  const { execute } = await raydium.launchpad.claimMultipleCreatorFee({
    mintBList: [
      { pubKey: NATIVE_MINT, programId: TOKEN_PROGRAM_ID },
      { pubKey: new PublicKey('USDC-mint-address'), programId: TOKEN_PROGRAM_ID },
    ],
    txVersion: TxVersion.V0,
  })

  const { txIds } = await execute({ sendAndConfirm: true, sequentially: true })
  console.log('Creator fees claimed:', txIds)
}
```

### Cobro de comisiones de LP post-migración

Tras la migración a CPMM, tanto las plataformas como los creadores pueden reclamar su parte de las comisiones de trading de LP usando el Fee Key NFT que recibieron.

### Reclamación de comisiones de LP

```typescript
import {
  LOCK_CPMM_PROGRAM,
  LOCK_CPMM_AUTH,
} from '@raydium-io/raydium-sdk-v2'

const claimLpFees = async () => {
  const raydium = await initSdk()

  // Get lock position data (contains Fee Key NFT info)
  const lockPositions = await raydium.cpmm.getOwnerLockLpInfo({
    owner: raydium.ownerPubKey,
  })

  for (const position of lockPositions) {
    const { execute } = await raydium.cpmm.harvestLockLp({
      programId: LOCK_CPMM_PROGRAM,
      authProgram: LOCK_CPMM_AUTH,

      // Lock position data
      lockData: position,

      txVersion: TxVersion.V0,
    })

    await execute({ sendAndConfirm: true })
    console.log('LP fees harvested for:', position.poolId.toBase58())
  }
}
```

### Comprendiendo los Fee Key NFTs

| Propiedad         | Detalles                                                                   |
| ----------------- | -------------------------------------------------------------------------- |
| Qué es            | Un NFT acuñado en la wallet del creador/plataforma durante la migración    |
| Lo que representa | Derechos de reclamación sobre una parte de las comisiones de trading de LP |
| Transferible      | Sí, el nuevo propietario hereda los derechos de reclamación de comisiones  |

> **Advertencia:** No quemes tu Fee Key NFT. Si se quema, los derechos de reclamación de comisiones se pierden permanentemente.

#### Comisiones de creador CPMM

Si `creatorFeeOn` fue configurado durante el lanzamiento, los creadores también ganan comisiones adicionales por trades en CPMM. Estas son separadas de la parte de comisiones de LP.

```typescript
const claimCpmmCreatorFees = async () => {
  const raydium = await initSdk()

  // Get pools where you're the creator
  const pools = await raydium.cpmm.getCreatorPools({
    creator: raydium.ownerPubKey,
  })

  for (const pool of pools) {
    const { execute } = await raydium.cpmm.collectCreatorFee({
      poolInfo: pool,
      txVersion: TxVersion.V0,
    })

    await execute({ sendAndConfirm: true })
  }
}
```

#### Línea de tiempo de acumulación de comisiones

### Fase de bonding curve

* **Comisiones de la plataforma** — reclamar con `claimVaultPlatformFee()`
* **Comisiones del creador** — reclamar con `claimCreatorFee()`
* **Denominación** — token de cotización (por ejemplo, SOL)

### Fase post-migración

* **Comisiones de la plataforma** — reclamar con `harvestLockLp()`
* **Comisiones del creador** — reclamar con `harvestLockLp()` y opcionalmente `collectCreatorFee()` (CPMM)
* **Denominación** — ambos tokens del par

#### Buenas prácticas

1. **Reclama regularmente** — las comisiones no se auto-complican; reclama periódicamente para materializar ganancias
2. **Haz seguimiento de múltiples pools** — si gestionas múltiples launches, agrupa reclamaciones cuando sea posible
3. **Asegura los Fee Key NFTs** — trátalos como activos valiosos; perderlos significa perder los derechos sobre comisiones
4. **Monitorea ambas fuentes** — después de la migración, recuerda reclamar tanto desde las vaults de bonding curve como desde las posiciones de LP
