# Pump Fun

### Common Properties

All decoded events include the following base properties from `BaseTransactionRecord`:

| Property          | Type             | JSON Type        | Description                                     |
| ----------------- | ---------------- | ---------------- | ----------------------------------------------- |
| `uuid`            | `bigint`         | `string`         | Unique identifier for the transaction record    |
| `instructionPath` | `string`         | `string`         | Path to the instruction within the transaction  |
| `parentProgramId` | `string \| null` | `string \| null` | ID of the parent program if applicable          |
| `txSignature`     | `string`         | `string`         | Transaction signature                           |
| `blockTime`       | `number`         | `number`         | Block timestamp                                 |
| `programId`       | `string`         | `string`         | Pump Fun program ID                             |
| `eventType`       | `string`         | `string`         | Type of event (SWAP, COMPLETE, CREATE, MIGRATE) |
| `decoderType`     | `DecoderType`    | `string`         | Decoder type identifier                         |
| `blockHeight`     | `number`         | `number`         | Block height                                    |
| `slot`            | `number`         | `number`         | Blockchain slot number                          |
| `txFee`           | `number`         | `number`         | Transaction fee in lamports                     |
| `txFeeUiAmount`   | `PreciseDecimal` | `string`         | UI-formatted transaction fee                    |

### SWAP Event

Token swap event on Pump Fun bonding curve.

| Property                       | Type             | JSON Type | Description                                   |
| ------------------------------ | ---------------- | --------- | --------------------------------------------- |
| `maxSolCost`                   | `bigint`         | `string`  | Maximum SOL cost for buy orders (optional)    |
| `maxSolCostUiAmount`           | `PreciseDecimal` | `string`  | UI-formatted max SOL cost (optional)          |
| `minSolOutput`                 | `bigint`         | `string`  | Minimum SOL output for sell orders (optional) |
| `minSolOutputUiAmount`         | `PreciseDecimal` | `string`  | UI-formatted min SOL output (optional)        |
| `mint`                         | `string`         | `string`  | Token mint address                            |
| `isBuy`                        | `boolean`        | `boolean` | True for buy orders, false for sell orders    |
| `account`                      | `string`         | `string`  | User's token account                          |
| `owner`                        | `string`         | `string`  | Account owner address                         |
| `bondingCurve`                 | `string`         | `string`  | Bonding curve account address                 |
| `solAmount`                    | `bigint`         | `string`  | SOL amount involved in swap                   |
| `solAmountUiAmount`            | `PreciseDecimal` | `string`  | UI-formatted SOL amount                       |
| `price`                        | `PreciseDecimal` | `string`  | Actual swap price                             |
| `pricePost`                    | `PreciseDecimal` | `string`  | Price after swap                              |
| `marketCapSol`                 | `bigint`         | `string`  | Market cap in SOL                             |
| `marketCapSolAmount`           | `bigint`         | `string`  | Market cap SOL amount                         |
| `marketCapSolAmountUi`         | `PreciseDecimal` | `string`  | UI-formatted market cap SOL                   |
| `marketCapPumpSol`             | `PreciseDecimal` | `string`  | Pump Fun market cap in SOL                    |
| `marketCapPumpSolAmount`       | `bigint`         | `string`  | Pump Fun market cap SOL amount                |
| `marketCapPumpSolUiAmount`     | `PreciseDecimal` | `string`  | UI-formatted Pump Fun market cap SOL          |
| `tokenAmount`                  | `bigint`         | `string`  | Token amount involved in swap                 |
| `tokenUiAmount`                | `PreciseDecimal` | `string`  | UI-formatted token amount                     |
| `virtualSolReserves`           | `bigint`         | `string`  | Virtual SOL reserves                          |
| `virtualSolReservesAmount`     | `bigint`         | `string`  | Virtual SOL reserves amount                   |
| `virtualSolReservesUiAmount`   | `PreciseDecimal` | `string`  | UI-formatted virtual SOL reserves             |
| `virtualTokenReserves`         | `bigint`         | `string`  | Virtual token reserves                        |
| `virtualTokenReservesAmount`   | `bigint`         | `string`  | Virtual token reserves amount                 |
| `virtualTokenReservesUiAmount` | `PreciseDecimal` | `string`  | UI-formatted virtual token reserves           |
| `bondingCurvePrePercentage`    | `number`         | `number`  | Bonding curve completion before swap (%)      |
| `bondingCurvePostPercentage`   | `number`         | `number`  | Bonding curve completion after swap (%)       |
| `bondingPreBalance`            | `bigint`         | `string`  | Bonding curve balance before swap             |
| `bondingPreBalanceUiAmount`    | `PreciseDecimal` | `string`  | UI-formatted bonding pre-balance              |
| `bondingPreBalanceAmount`      | `bigint`         | `string`  | Bonding pre-balance amount                    |
| `bondingPostBalance`           | `bigint`         | `string`  | Bonding curve balance after swap              |
| `bondingPostBalanceUiAmount`   | `PreciseDecimal` | `string`  | UI-formatted bonding post-balance             |
| `bondingPostBalanceAmount`     | `bigint`         | `string`  | Bonding post-balance amount                   |
| `userTokenPreBalance`          | `bigint`         | `string`  | User token balance before swap                |
| `userTokenPreBalanceUiAmount`  | `PreciseDecimal` | `string`  | UI-formatted user token pre-balance           |
| `userTokenPreBalanceAmount`    | `bigint`         | `string`  | User token pre-balance amount                 |
| `userTokenPostBalance`         | `bigint`         | `string`  | User token balance after swap                 |
| `userTokenPostBalanceUiAmount` | `PreciseDecimal` | `string`  | UI-formatted user token post-balance          |
| `userTokenPostBalanceAmount`   | `bigint`         | `string`  | User token post-balance amount                |
| `realSolReserves`              | `bigint`         | `string`  | Real SOL reserves                             |
| `realSolReservesUiAmount`      | `PreciseDecimal` | `string`  | UI-formatted real SOL reserves                |
| `realTokenReserves`            | `bigint`         | `string`  | Real token reserves                           |
| `realTokenReservesUiAmount`    | `PreciseDecimal` | `string`  | UI-formatted real token reserves              |
| `feeRecipient`                 | `string`         | `string`  | Fee recipient address                         |
| `feeBasisPoints`               | `bigint`         | `string`  | Fee in basis points                           |
| `fee`                          | `bigint`         | `string`  | Fee amount                                    |
| `creator`                      | `string`         | `string`  | Token creator address                         |
| `creatorFeeBasisPoints`        | `bigint`         | `string`  | Creator fee in basis points                   |
| `creatorFee`                   | `bigint`         | `string`  | Creator fee amount                            |

### COMPLETE Event

Bonding curve completion event when token graduates to Raydium.

| Property       | Type     | JSON Type | Description                   |
| -------------- | -------- | --------- | ----------------------------- |
| `user`         | `string` | `string`  | User who completed the curve  |
| `mint`         | `string` | `string`  | Token mint address            |
| `bondingCurve` | `string` | `string`  | Bonding curve account address |
| `timestamp`    | `string` | `string`  | Event timestamp               |

### CREATE Event

Token creation event on Pump Fun.

| Property               | Type     | JSON Type | Description                               |
| ---------------------- | -------- | --------- | ----------------------------------------- |
| `name`                 | `string` | `string`  | Token name                                |
| `symbol`               | `string` | `string`  | Token symbol                              |
| `uri`                  | `string` | `string`  | Token metadata URI                        |
| `creator`              | `string` | `string`  | Token creator address                     |
| `mint`                 | `string` | `string`  | Token mint address                        |
| `bondingCurve`         | `string` | `string`  | Bonding curve account address             |
| `timestamp`            | `string` | `string`  | Creation timestamp                        |
| `virtualTokenReserves` | `string` | `string`  | Initial virtual token reserves (optional) |
| `virtualSolReserves`   | `string` | `string`  | Initial virtual SOL reserves (optional)   |
| `realTokenReserves`    | `string` | `string`  | Initial real token reserves (optional)    |
| `tokenTotalSupply`     | `string` | `string`  | Total token supply (optional)             |

### MIGRATE Event

Token migration event when moving from bonding curve to Raydium.

| Property                   | Type             | JSON Type | Description                      |
| -------------------------- | ---------------- | --------- | -------------------------------- |
| `user`                     | `string`         | `string`  | User who initiated migration     |
| `mint`                     | `string`         | `string`  | Token mint address               |
| `mintAmount`               | `bigint`         | `string`  | Amount of tokens minted          |
| `mintAmountUiAmount`       | `PreciseDecimal` | `string`  | UI-formatted mint amount         |
| `solAmount`                | `bigint`         | `string`  | SOL amount involved in migration |
| `solAmountUiAmount`        | `PreciseDecimal` | `string`  | UI-formatted SOL amount          |
| `poolMigrationFee`         | `bigint`         | `string`  | Pool migration fee               |
| `poolMigrationFeeUiAmount` | `PreciseDecimal` | `string`  | UI-formatted migration fee       |
| `bondingCurve`             | `string`         | `string`  | Bonding curve account address    |
| `timestamp`                | `string`         | `string`  | Migration timestamp              |
| `pool`                     | `string`         | `string`  | Destination pool address         |

### Data Types

* `bigint`: Large integer values for token amounts and prices
* `string`: Text values for addresses, names, symbols, and timestamps
* `number`: Numeric values for percentages and other integer values
* `boolean`: True/false values for buy/sell direction
* `PreciseDecimal`: High-precision decimal representation for UI display
* `DecoderType`: Enum indicating the decoder type (PUMP\_FUN)

### Usage

The decoder automatically determines the event type and returns the appropriate structure. All monetary values are provided in both raw (`bigint`) and UI-formatted (`PreciseDecimal`) versions for flexibility in different use cases. The Pump Fun decoder handles bonding curve mechanics with comprehensive price tracking, market cap calculations, and virtual/real reserve management.
