> ## 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.

# Transmitir cambios de cuentas Solana con gRPC

> Filtra actualizaciones por dirección, programa, tamaño o memcmp y solicita solo los bytes necesarios.

Suscríbete a escrituras de cuentas para actualizar saldos o estado de programas. El filtro `owner` identifica el programa propietario, no la wallet que posee los tokens.

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.

## Observa una cuenta

```typescript accounts.mts theme={null}
import bs58 from "bs58";
import { subscribe } from "./stream.mts";

const address = process.env.ACCOUNT_ADDRESS;
if (!address) throw new Error("Set ACCOUNT_ADDRESS");

for await (const update of subscribe({
  accounts: { selected: { account: [address], owner: [], filters: [] } },
})) {
  const account = update.account?.account;
  if (!account) continue;
  console.log({
    address: bs58.encode(account.pubkey),
    owner: bs58.encode(account.owner),
    lamports: account.lamports,
    slot: update.account!.slot,
    writeVersion: account.writeVersion,
    dataBytes: account.data.length,
  });
}
```

```bash theme={null}
export ACCOUNT_ADDRESS="YOUR_ACCOUNT_ADDRESS"
npx tsx accounts.mts
```

## Filtra cuentas de programas

Esta petición selecciona cuentas SPL Token legacy de un mint y descarga solo su importe. Sustituye el filtro anterior por `subscribe(request)`.

```typescript theme={null}
import { makeRequest } from "./stream.mts";

const tokenProgram = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
const mint = process.env.TOKEN_MINT;
if (!mint) throw new Error("Set TOKEN_MINT");

const request = makeRequest({
  accounts: {
    tokenAccounts: {
      account: [],
      owner: [tokenProgram],
      filters: [
        { datasize: "165" },
        { memcmp: { offset: "0", base58: mint } },
      ],
    },
  },
  accountsDataSlice: [{ offset: "64", length: "8" }],
});
```

El campo se escribe `datasize` y los offsets son cadenas en este cliente. Combina condiciones dentro del mismo filtro; usa nombres distintos para selecciones separadas.

## Decodifica importes en slices

Dentro del handler de cuentas, decodifica los ocho bytes como entero sin signo little-endian:

```typescript theme={null}
// A slice of bytes 64–71 from a legacy SPL token account contains its amount.
const amount = Buffer.from(account.data).readBigUInt64LE(0);
console.log(amount.toString());
```

<Note>
  El tamaño de 165 bytes y estos offsets corresponden a SPL Token legacy. Las extensiones Token-2022 pueden cambiar el tamaño; comprueba el layout antes de aplicar el filtro.
</Note>

## Recupera el estado tras desconectar

Guarda dirección, slot y versión de escritura. Tras un hueco, actualiza el snapshot REST/RPC antes de usar la caché como estado actual. Suscribir una wallet no cubre sus cuentas de tokens separadas.

## Guías relacionadas

<CardGroup cols={2}>
  <Card title="Transacciones" href="/es/yellowstone-grpc/transaction-monitoring" />

  <Card title="Cuentas Pump.fun" href="/es/yellowstone-grpc/examples/pumpfun-accounts" />
</CardGroup>


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