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

# Hesap İzleme

> Yellowstone gRPC kullanarak hassas filtrelemeyle gerçek zamanlı Solana hesap güncellemelerini akış olarak alın

## Genel Bakış

Hesap abonelikleri, bir hesabın lamport bakiyesi, verileri veya sahibi değiştiğinde gerçek zamanlı güncellemeler sunar. Belirli adresleri, bir program tarafından sahip olunan tüm hesapları izleyebilir veya bayt düzeyinde veri filtreleri uygulayabilirsiniz.

## Filtre Parametreleri

| Parametre              | Tür        | Açıklama                                                                                       |
| ---------------------- | ---------- | ---------------------------------------------------------------------------------------------- |
| `account`              | `string[]` | İzlenecek belirli hesap açık anahtarları. Listedeki herhangi biriyle eşleşir (mantıksal VEYA). |
| `owner`                | `string[]` | Bu program kimliklerine ait tüm hesapları izle (mantıksal VEYA).                               |
| `filters`              | `object[]` | Ek veri filtreleri — `dataSize` ve/veya `memcmp` (mantıksal VE).                               |
| `nonemptyTxnSignature` | `boolean`  | Yalnızca bir işlemin parçası olan güncellemeleri yayınla.                                      |

### dataSize Filtresi

Yalnızca veri uzunluğu tam olarak eşleşen hesaplar için güncellemeler alın:

```typescript theme={null}
filters: [{ dataSize: 165 }]
```

### memcmp Filtresi

Belirli bir ofset konumundaki belirli bir bayt dizisiyle hesapları eşleştirin (discriminator'lar için kullanışlı):

```typescript theme={null}
filters: [
  {
    memcmp: {
      offset: 0,
      bytes: "base58EncodedBytes",
    },
  },
]
```

<Note>
  Birden fazla filtre türü birleştirildiğinde mantıksal VE olarak çalışırlar. `account` veya `owner` dizilerinde değerler mantıksal VEYA olarak çalışır.
</Note>

## Örnek: Belirli Bir Cüzdanı İzleme

```typescript theme={null}
import Client, { CommitmentLevel, SubscribeRequest } from "@triton-one/yellowstone-grpc";

const GRPC_URL = "https://your-endpoint.grpc.orbitflare.com";
const X_TOKEN = "YOUR_GRPC_TOKEN";
const PING_INTERVAL_MS = 30_000;

const client = new Client(GRPC_URL, X_TOKEN, {
  "grpc.max_receive_message_length": 64 * 1024 * 1024,
});

async function main() {
  const stream = await client.subscribe();

  const streamClosed = new Promise<void>((resolve, reject) => {
    stream.on("error", (error) => { reject(error); stream.end(); });
    stream.on("end", () => resolve());
    stream.on("close", () => resolve());
  });

  stream.on("data", (data) => {
    if (data.account) {
      const { account, slot } = data.account;
      console.log(`Account update at slot ${slot}:`);
      console.log(`  Pubkey:  ${account.pubkey}`);
      console.log(`  Lamports: ${account.lamports}`);
      console.log(`  Owner:   ${account.owner}`);
      console.log(`  Data length: ${account.data.length} bytes`);
    } else if (data.pong) {
      console.log("Pong received");
    }
  });

  const request: SubscribeRequest = {
    accounts: {
      walletMonitor: {
        account: ["YourWalletPublicKeyHere"],
        owner: [],
        filters: [],
      },
    },
    commitment: CommitmentLevel.CONFIRMED,
    accountsDataSlice: [],
    transactions: {},
    transactionsStatus: {},
    slots: {},
    blocks: {},
    blocksMeta: {},
    entry: {},
    ping: { id: 1 },
  };

  await new Promise<void>((resolve, reject) => {
    stream.write(request, (err) => {
      if (err == null) resolve(); else reject(err);
    });
  });

  // Ping to keep alive
  setInterval(() => {
    stream.write({ ping: { id: 1 }, accounts: {}, accountsDataSlice: [], transactions: {}, transactionsStatus: {}, slots: {}, blocks: {}, blocksMeta: {}, entry: {} }, () => {});
  }, PING_INTERVAL_MS);

  await streamClosed;
}

main();
```

## Örnek: Sahip Programa Göre Tüm Token Hesaplarını İzleme

```typescript theme={null}
const request: SubscribeRequest = {
  accounts: {
    tokenAccounts: {
      account: [],
      owner: [
        "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", // SPL Token program
      ],
      filters: [
        { dataSize: 165 }, // Standard token account size
      ],
    },
  },
  commitment: CommitmentLevel.CONFIRMED,
  accountsDataSlice: [],
  transactions: {},
  transactionsStatus: {},
  slots: {},
  blocks: {},
  blocksMeta: {},
  entry: {},
};
```

## accountsDataSlice ile Optimizasyon

Hesap verisinin yalnızca bir bölümüne ihtiyacınız varsa (örn. bir discriminator için ilk 64 bayt), bant genişliğini azaltmak için `accountsDataSlice` kullanın:

```typescript theme={null}
const request: SubscribeRequest = {
  accounts: {
    myFilter: {
      account: ["AccountPubkeyHere"],
      owner: [],
      filters: [],
    },
  },
  accountsDataSlice: [
    { offset: 0, length: 64 }, // Only receive the first 64 bytes
  ],
  commitment: CommitmentLevel.CONFIRMED,
  transactions: {},
  transactionsStatus: {},
  slots: {},
  blocks: {},
  blocksMeta: {},
  entry: {},
};
```

## Yaygın Kullanım Senaryoları

| Kullanım Senaryosu                          | Yaklaşım                                                                           |
| ------------------------------------------- | ---------------------------------------------------------------------------------- |
| Cüzdan bakiyesini takip etme                | Belirli açık anahtarlarla `account` filtresi                                       |
| Tüm token mint'lerini izleme                | `owner: ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]` + `dataSize: 82` filtresi |
| Belirli bir programın durumunu izleme       | `owner: ["YourProgramId"]` filtresi                                                |
| Yeni AMM havuzu oluşturulmasını tespit etme | Sahip + havuz hesap boyutuyla eşleşen `dataSize` filtresi                          |
