SLV - AI Agent Kit for Solana Devs

Solana Geyser gRPC - Filtreler

Solana Stream SDK
The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The Solana Stream SDK açık kaynak yazılım olarak sağlanır. Daha fazla ayrıntı için lütfen ziyaret edin GitHub Aşağıdaki depolar.

Genel bakış of Genel bakış gRPC Filtreler

Solana Geyser gRPC Sadece ilgi duyduğunuz verileri verimli bir şekilde getirmek için filtreler kullanır, örneğin belirli hesaplar, programlar, işlemler, slotlar ve bloklar.
Aşağıda, biz sunuyoruz TypeScript Örnekler kullanarak örnekler Solana Stream SDK, her filtrenin özel rollerini açıkça açıklayın. Filtrelerin yapısı ve anlamı, kullanırken aynıdır Rust.

Her Filtrelemenin Rolü ve Örnekleri

Bir hesapa abone olun

Belirli bir hesap için gerçek zamanlı güncellemelere abone olun. Aşağıdaki örnek, Onaylı taahhüt seviyesindeki SOL-USDC OpenBook hesabına abone olur:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: { slots: {} },
  accounts: {
    'wsol/usdc': {
      account: ['8BnEgHoWFysVcuFFX7QztDmzuH8r5ZFvyP3sYwn1XTh6'],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.CONFIRMED,
}
  • "wsol/usdc" Bir müşteri tanımlanmış etiket.
  • Hesaplar, programlar, bloklar ve slotlar tek bir JSON isteğinde birleştirilebilir.

Bir hesapa abone olun account_data_slice

Bu örnek, yalnızca belirli bir hesap verilerinin geri alınmasını göstermektedir. Bir USDC token hesabının tüm verilerini (165 bytes) almak yerine, 32. dengelemeden başlayan 40 tane alır. Bu aralığın sahibi ve lambaortları dengesi gibi bilgiler içerir.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {
    usdc: {
      owner: ['TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'],
      filters: [
        {
          tokenAccountState: true,
        },
        {
          memcmp: {
            offset: 0,
            data: {
              base58: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
            },
          },
        },
      ],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  entry: {},
  commitment: CommitmentLevel.CONFIRMED,
  accountsDataSlice: [{ offset: 32, length: 40 }],
}

Bir programa abone olun

Bu örnek belirli bir programla ilişkili hesap güncelleştirmelerini alt tanımlamaktadır.
Aşağıda, Solend programına ait hesapların güncelleştirilmesine aboneyiz. Processed bağlılık seviyesi.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {
    solend: {
      owner: ['So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo'],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}
  • "solend" Müşteri tarafından özgürce ayarlanabilir özel bir etiketdir.
  • Birden fazla programa abone olmak için lütfen "Subscript to multiple programs" başlıklı bir sonraki bölüme bakınız.

Birden fazla programa abone olun

Bu örnek, birden fazla programla ilişkili olarak hesap güncelleştirmeleri nasıl abone olacağını gösteriyor.
Aşağıdaki örnek, hem Solend hem de Serum programları tarafından sahip olan hesapların güncellenmesine abonedir.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {
    programs: {
      owner: [
        'So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo',
        '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin',
      ],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}
Bireysel etiketleri her programa atamayı tercih ederseniz aşağıdaki yaklaşımı kullanın:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {
    solend: {
      owner: ['So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo'],
    },
    serum: {
      owner: ['9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin'],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

Tüm sonlanmamış olmayan işlemlere ve gereksiz olmayan işlemlere abone olun

Bu örnek, tüm işlemlere alt tarif gösterir Finalized taahhüt seviyesi, oy işlemleri hariç ve başarısız işlemler.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {},
  transactions: {
    alltxs: {
      vote: false,
      failed: false,
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.FINALIZED,
}
  • vote: false Oy işlemleri hariç.
  • failed: false Dışlamalar başarısız işlemler.
  • Eğer alanlar boş bırakılırsa, tüm işlemler alınır.
  • Birden çok alanda belirtildiği zaman, bir AND koşulu ile çalışırlar.

Bir hesaptan söz etmemiş olmayan işlemlere abone olun

Bu örnek belirli bir hesabı içeren işlemler için alt tarif eder, ancak oy işlemleri hariç.
Aşağıdaki örnek, Serum programı ile ilişkili hesaplardan söz etmeyen işlemlere abone olur.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {},
  transactions: {
    serum: {
      vote: false,
      accountInclude: ['9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin'],
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

Hesaplar hariç işlemlerine abone olun

Bu örnek, belirli hesaplar içeren işlemleri alt olarak göstermektedir.
Aşağıdaki örnek, Serum ve Tokenkeg programları tarafından sahip olan herhangi bir hesap hariç işlemleri alır.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {},
  transactions: {
    serum: {
      accountExclude: [
        '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin',
        'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
      ],
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

Belirli hesaplar haricindeki işlemlere abone olun ve hariç

Bu örnek belirli hesaplar içeren işlemler için alt tarif gösterir, ancak açıkça diğer belirtilmiş hesaplar hariç.
Aşağıdaki örnekler Serum'un hesabından bahseden işlemlere aboneler, ancak belirtilen bir hesabı dışlar:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {},
  transactions: {
    serum: {
      accountInclude: ['9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin'],
      accountExclude: ['9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT'],
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

Bir işlem imzasına abone olun

Bu örnek, belirli bir işlem imzası için gerçek zamanlı güncellemelere alt tarif eder, ulaşıncaya kadar Confirmed or Finalized Devlet.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {
    sign: {
      signature:
        '5rp2hL9b6kexex11Mugfs3vfU9GhieKruj4CkFFSnu52WLxiGn4VcLLwsB62XURhMmT1j4CZiXT6FFtYbXsLq2Zs',
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

slotlara abone olun

Bu örnek, gelen yuvaların bildirimlerine alt tarif gösterir. Özel bir etiket adı atamanın ötesinde başka bir ayrıntı gerekmez:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    incoming_slots: {},
  },
  accounts: {},
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

Bloklara abone olun

Tüm üretilen blokların gerçek zamanlı güncellemelere abone olun. varsayılan olarak, bir blok içindeki tüm işlemler alınır:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {},
  blocks: {
    blocks: {},
  },
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

İşlemleri dışlamak ve yalnızca güncel hesap bilgilerini almak:

typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {},
  blocks: {
    blocks: {
      includeTransactions: false,
      includeAccounts: true,
    },
  },
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

Sadece belirli hesaplar içeren işlemleri / hesapları almak için:

typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {},
  blocks: {
    blocks: {
      accountInclude: ['So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo'],
    },
  },
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

Metadata'yı bloklamaya abone olun

Bloklar işlandığında metadata bildirimleri yalnızca bloklara abone olun. ayrıntılı işlem verileri dahil edilmez.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {},
  blocks: {},
  blocksMeta: {
    blockmetadata: {},
  },
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

bağlılık seviyelerinin yönetimi

The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The Solana Geyser gRPC akış varsayılanları doğruya doğru Processed bağlılık seviyesi.
Daha yüksek taahhüt seviyelerini belirtebilirsiniz gibi Confirmed or FinalizedBu durumlarda, Geyser verileri toplar ve belirtilen taahhüt seviyesine ulaştığında bildirimleri gönderir.
Maksimum performans için, müşteri tarafında taahhüt düzeyinde yönetim işlemek önerilir.
İşte bağlılık seviyelerini nasıl belirteceğim:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

enum CommitmentLevel {
  PROCESSED = 0,
  CONFIRMED = 1,
  FINALIZED = 2,
}
  • PROCESSED: İşlemden sonra veri Immediate data. Hızlı retrieval, ancak henüz doğrulanmadı.
  • CONFIRMED: Veriler küme tarafından doğrulandı, artan kesinlik sağlar.
  • FINALIZED: Yeniden düzenleme riski olmayan tam sonlanmış veriler.

Çalışmanın Faydaları Processed

Ana avantajı, Processed taahhüt seviyesi anında işlem geri dönüş, hızlı müşteri odaklı işleme olanak sağlar. Müşteriler daha sonra geçişleri tespit edebilir Confirmed or FinalizedHızlı bir yanıt vermek.

Nasıl yönetileceğini nasıl yönetin Confirmed ve Finalized

Ne zaman kullanılır Confirmed or Finalized Seviyeler, olaylar (dönüşümler veya hesap güncelleştirmeleri) slot başına tamponlanmalıdır.
Buffer olayları slotla, slot bildirimlerine abone olun ve belirli bir slot istenen taahhüte ulaşır (veya buffer’in)Confirmed or Finalized).
Olaylar başlangıçta bir slot gelmeden önce alınacak Confirmed or Finalized.

Özel şey hakkında Finalized

Çünkü Solana Geyser özellikleri, tüm slotlar açık sonlaştırılmış bildirimleri almaz. Bu nedenle, bir yuva için sonlaştırılmış bir bildirim aldığında, tüm ata yuvalarını sonlandırdınız, hatta bildirimin açıklanmadıysa bile.
Özellikle sonlaştırılmış bir bildirim almak için, retroaktif olarak tüm ata yuvalarını son olarak tedavi edin.