> ## Documentation Index
> Fetch the complete documentation index at: https://docs.solanatracker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Decodificar curvas Pump.fun con Yellowstone gRPC

> Transmite cuentas de bonding curves, decodifica con el IDL de Anchor y conserva los importes de reservas sin redondear.

Suscríbete a escrituras de curvas Pump.fun y decodifica reservas y estado de finalización.

Guarda el [helper del inicio rápido](/es/yellowstone-grpc/quickstart) como `stream.mts` en el mismo directorio. Los ejemplos usan las mismas variables y dependencias.

## Instala el decoder y el IDL

```bash theme={null}
npm install @coral-xyz/anchor @solana/web3.js
curl -L https://docs.solanatracker.io/idl/pump.json -o pump.json
```

Usa el [IDL Pump.fun incluido](/idl/pump.json). Proporciona dirección, discriminadores y nombres de campos; comprueba compatibilidad al actualizarlo.

## Decodifica actualizaciones

```typescript pump-accounts.mts theme={null}
import { readFileSync } from "node:fs";
import { BorshAccountsCoder, type Idl } from "@coral-xyz/anchor";
import bs58 from "bs58";
import { subscribe } from "./stream.mts";

const idl = JSON.parse(readFileSync("pump.json", "utf8")) as Idl;
const coder = new BorshAccountsCoder(idl);
const definition = idl.accounts?.find(account => account.name === "BondingCurve");
if (!definition) throw new Error("BondingCurve is missing from the IDL");
const discriminator = Buffer.from(definition.discriminator);

for await (const update of subscribe({
  accounts: {
    curves: {
      account: [], owner: [idl.address],
      filters: [{ memcmp: { offset: "0", bytes: discriminator } }],
    },
  },
})) {
  const account = update.account?.account;
  if (!account) continue;
  try {
    const curve = coder.decode("BondingCurve", Buffer.from(account.data));
    console.log({
      address: bs58.encode(account.pubkey),
      slot: update.account!.slot,
      complete: curve.complete,
      quoteMint: curve.quote_mint.toString(),
      virtualTokenReserves: curve.virtual_token_reserves.toString(),
      virtualQuoteReserves: curve.virtual_quote_reserves.toString(),
    });
  } catch (error) {
    console.error("Bonding curve decode failed; check IDL compatibility", error);
  }
}
```

```bash theme={null}
npx tsx pump-accounts.mts
```

## Conserva la precisión de las reservas

El ejemplo muestra enteros originales como cadenas. Aplica los decimales del token y del mint de cotización al formatear. El cociente bruto no es un precio SOL/token y `quote_mint` no siempre es SOL.

## Gestiona cambios de layout

El filtro por discriminador identifica el tipo sin fijar el tamaño total. Los errores de decoding se registran. Una curva completa no describe todo el pool migrado; consulta PumpSwap o Data API para ese pool.

## Guías relacionadas

<CardGroup cols={2}>
  <Card title="Trades Pump.fun" href="/es/yellowstone-grpc/examples/pumpfun-transactions" />

  <Card title="Fiabilidad y rendimiento" href="/es/yellowstone-grpc/best-practices" />
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.