Solana Geyser gRPC - Filters

De Solana Stream SDK wordt aangeboden als open-source software. Bezoek voor meer informatie de onderstaande GitHub-repository.
Overzicht van gRPC-filters
Solana Geyser gRPC gebruikt filters om efficiënt alleen de gegevens op te halen waarin u geïnteresseerd bent, zoals specifieke accounts, programma's, transacties, slots en blokken.
Hieronder geven we TypeScript-voorbeelden met de Solana Stream SDK, met duidelijke uitleg over de specifieke rollen van elk filter. De structuur en betekenis van de filters zijn identiek bij gebruik van Rust.
Huidige Shared-filterregels
In het huidige Shared-plan is elke niet-lege
blocks-map alleen voor Dedicated, ook een verzoek dat met accountInclude is beperkt of transacties uitsluit. Gebruik een transactie-abonnement of blocksMeta wanneer dat aan de behoefte voldoet; geen van beide is gelijk aan een volledig blok. Voor volledige blokken is een Dedicated Geyser gRPC-stream nodig.Elk accountfilteritem moet
account, owner of een ondersteund cuckoo-filter bevatten. Een memcmp- of dataSize-voorwaarde alleen selecteert geen ondersteunde accountvorm. Beperk het verzoek tot een van deze selectoren of gebruik Dedicated Geyser gRPC wanneer een volledige accountstream nodig is.Rollen en voorbeelden van elk filter
Abonneren op een account
Abonneer u op realtime updates voor een specifiek account. Het volgende voorbeeld abonneert zich op het SOL-USDC OpenBook-account op het Confirmed commitment-niveau:
typescript
"wsol/usdc"is een door de client gedefinieerd label.- Meerdere filters voor accounts, programma's, blokken en slots kunnen worden gecombineerd in één JSON-verzoek.
Abonneren op een account met account_data_slice
Dit voorbeeld demonstreert het ophalen van slechts een specifiek deel van accountgegevens. In plaats van de volledige gegevens (165 bytes) van een USDC-tokenaccount op te halen, worden 40 bytes opgehaald vanaf offset 32. Dit bereik bevat informatie zoals de eigenaar en het lamports-saldo.
typescript
Abonneren op een programma
Dit voorbeeld demonstreert het abonneren op accountupdates die zijn gekoppeld aan een specifiek programma.
Hieronder abonneren we ons op accountupdates voor accounts die eigendom zijn van het Solend-programma op het
Processed commitment-niveau.typescript
"solend"is een aangepast label dat vrij kan worden ingesteld door de client.- Wilt u zich op meerdere programma's abonneren, raadpleeg dan het volgende gedeelte "Abonneren op meerdere programma's".
Abonneren op meerdere programma's
Dit voorbeeld demonstreert hoe u zich tegelijkertijd kunt abonneren op accountupdates die gekoppeld zijn aan meerdere programma's.
Het onderstaande voorbeeld abonneert zich op updates voor accounts die eigendom zijn van zowel het Solend- als het Serum-programma.
typescript
Als u de voorkeur geeft aan individuele labels voor elk programma, gebruik dan de volgende aanpak:
typescript
Abonneren op alle gefinaliseerde niet-vote en niet-mislukte transacties
Dit voorbeeld demonstreert het abonneren op alle transacties op het
Finalized commitment-niveau, met uitzondering van vote-transacties en mislukte transacties.typescript
vote: falsesluit vote-transacties uit.failed: falsesluit mislukte transacties uit.- Als velden leeg worden gelaten, worden alle transacties opgehaald.
- Wanneer meerdere velden worden opgegeven, werken ze met een AND-conditie.
Abonneren op niet-vote transacties die een account vermelden
Dit voorbeeld demonstreert het abonneren op transacties die betrekking hebben op een specifiek account, maar met uitsluiting van vote-transacties.
Het onderstaande voorbeeld abonneert zich op niet-vote transacties die accounts vermelden die gekoppeld zijn aan het Serum-programma.
typescript
Abonneren op transacties met uitsluiting van accounts
Dit voorbeeld demonstreert het abonneren op transacties met uitsluiting van transacties die betrekking hebben op specifieke accounts.
Het onderstaande voorbeeld haalt transacties op met uitsluiting van accounts die eigendom zijn van de Serum- en Tokenkeg-programma's.
typescript
Abonneren op transacties die accounts vermelden en bepaalde accounts uitsluiten
Dit voorbeeld demonstreert het abonneren op transacties die betrekking hebben op bepaalde accounts, terwijl andere opgegeven accounts expliciet worden uitgesloten.
Het onderstaande voorbeeld abonneert zich op transacties die het account van Serum vermelden, maar sluit een opgegeven account uit:
typescript
Abonneren op een transactiehandtekening
Dit voorbeeld demonstreert het abonneren op realtime updates voor een specifieke transactiehandtekening, totdat deze de status
Confirmed of Finalized bereikt.typescript
Abonneren op slots
Dit voorbeeld demonstreert het abonneren op meldingen van binnenkomende slots. Naast het toewijzen van een aangepaste tagnaam zijn geen aanvullende details nodig:
typescript
Abonneren op blokken (alleen Dedicated in het huidige Shared-plan)
Abonneer u op realtime updates van alle gegenereerde blokken. Standaard worden alle transacties binnen een blok opgehaald:
typescript
Om transacties uit te sluiten en alleen bijgewerkte accountinformatie op te halen (alleen Dedicated in het huidige Shared-plan):
typescript
Om alleen transacties/accounts op te halen die betrekking hebben op specifieke accounts (alleen Dedicated in het huidige Shared-plan):
typescript
Abonneren op blokmetadata
Abonneer u alleen op blokmetadata-meldingen wanneer blokken worden verwerkt. Gedetailleerde transactiegegevens zijn niet inbegrepen.
typescript
Commitment-niveaus beheren
De Solana Geyser gRPC-stream gebruikt standaard het
Processed commitment-niveau.U kunt hogere commitment-niveaus opgeven zoals
Confirmed of Finalized. In deze gevallen buffert Geyser de gegevens en stuurt meldingen zodra het opgegeven commitment-niveau is bereikt.Voor maximale prestaties wordt aanbevolen om het beheer van commitment-niveaus aan de clientzijde af te handelen.
Zo specificeert u commitment-niveaus:
typescript
PROCESSED: Directe gegevens na verwerking. Snel ophalen, maar nog niet bevestigd.CONFIRMED: Gegevens bevestigd door het cluster, wat meer zekerheid biedt.FINALIZED: Volledig gefinaliseerde gegevens zonder risico op reorganisatie.
Voordelen van werken op Processed
Het belangrijkste voordeel van het
Processed commitment-niveau is het direct ophalen van transacties, wat snelle verwerking aan de clientzijde mogelijk maakt. Clients kunnen vervolgens overgangen naar Confirmed of Finalized detecteren, wat snelle responsiviteit biedt.Confirmed en Finalized beheren
Bij gebruik van de niveaus
Confirmed of Finalized moeten events (transacties of accountupdates) per slot worden gebufferd.Buffer events slot voor slot, abonneer u op slotmeldingen en geef events vrij uit de buffer zodra een specifiek slot het gewenste commitment (
Confirmed of Finalized) bereikt.Events worden aanvankelijk ontvangen voordat een slot
Confirmed of Finalized bereikt.Het bijzondere aan Finalized
Vanwege de specificaties van Solana Geyser ontvangen niet alle slots expliciete gefinaliseerde meldingen. Daarom moet u, wanneer u een gefinaliseerde melding voor een slot ontvangt, alle voorouderslots als gefinaliseerd behandelen, zelfs als er geen expliciete meldingen zijn ontvangen.
Concreet: behandel bij ontvangst van een gefinaliseerde melding alle voorouderslots met terugwerkende kracht als gefinaliseerd.






