Overzicht
Streams is een krachtige oplossing voor gegevensverzameling en -streaming, speciaal ontworpen voor Web3-toepassingen. Hiermee kun je zowel onbewerkte als gefilterde blockchain-gegevens efficiënt verzamelen, verwerken en opslaan, zowel in realtime als historisch. Of je nu indexers, analyseplatforms of realtime dashboards bouwt: Streams biedt de infrastructuur om robuuste gegevenspijplijnen te creëren met functies zoals batchverwerking, backfill en continue streaming.
Waarom Streams?
Streams zorgt voor een revolutie in de toegang tot blockchain-gegevens door een op push gebaseerde architectuur te implementeren die gegevens rechtstreeks naar uw opslag- of indexeringssystemen stuurt. Dit gebeurtenisgestuurde model biedt een aantal belangrijke voordelen:
- Efficiënte gegevenslevering: zorg voor een ‘exactly-once’-levering van blockchaingegevens in de volgorde van definitieve vaststelling (tijdens blockchain-reorganisaties kunnen de betrokken blokken opnieuw worden gestreamd met gecorrigeerde gegevens — zie ‘Reorg Handling’)
- Realtime verwerking: krijg direct toegang tot blockchain-gegevens, ideaal voor het bouwen van live dashboards en realtime analyses
- Toegang tot historische gegevens: vul historische gegevens eenvoudig aan met configureerbare batchgroottes
- Filtering aan de serverzijde: verwerk en bewerk gegevens op de infrastructuur van Quicknode met behulp van JavaScript-filters voordat deze uw systeem bereiken
- Naadloze integratie: maak rechtstreeks verbinding met je favoriete gegevensopslag of webhook-backend
Hoewel traditionele JSON-RPC-pollingmethoden ingewikkeld kunnen zijn om te implementeren en te onderhouden, biedt Streams een elegantere oplossing die de complexiteit van de toegang tot blockchaingegevens voor u uit handen neemt.
Functies van Streams
- Filtering op basis van JavaScript – Definieer aangepaste filters in JavaScript om blockchain-gegevens op de infrastructuur van Quicknode te verwerken en om te zetten voordat deze uw bestemming bereiken. Deze filtering aan de serverzijde vermindert de overhead voor gegevensoverdracht en -verwerking.
- Flexibele gegevensopname – Streams ondersteunt zowel onbewerkte blockchaingegevens als gefilterde datasets. Gebruik JavaScript-filters om precies die gegevens te extraheren die u nodig hebt voor uw indexering of analyse, verwerkt op onze infrastructuur.
- Verwerking van historische en realtime gegevens – Bouw uitgebreide datapijplijnen die zowel historische gegevensaanvullingen als realtime streaming verwerken, ideaal voor indexerings- en analyseplatforms.
- Gegarandeerde gegevensoverdracht – Streams zorgt ervoor dat blokken, ontvangstbevestigingen en traces precies één keer worden verzonden in de volgorde van definitieve vastlegging, waardoor de gegevensintegriteit voor uw indexerings- en analysesystemen gewaarborgd blijft.
- Efficiënte batchverwerking - Stel gegevensbatches van meerdere blokken samen voor een optimale opname van historische gegevens.
- Ondersteuning voor realtime analyses – Stuur consistente, realtime gegevens door om live dashboards en analyseplatforms te voeden.
- Operationele transparantie – Houd uw datapijplijnen in de gaten via gedetailleerde logbestanden en prestatiestatistieken, met gebruiksstatistieken voor kostenoptimalisatie.
Levenscyclus van streams
Streams zijn datapijplijnen die blockchain-gegevens ophalen, verwerken en doorsturen naar uw opslag- of indexeringssystemen. Elke stream kan worden geconfigureerd voor specifieke gegevenstypen (blokken, ontvangstbewijzen, traces, enz.) en kan met filters worden aangepast aan uw indexerings- of analysebehoeften. De levenscyclus van een stream bestaat uit de volgende fasen:
- Actief: Streams neemt continu gegevens op en verwerkt deze volgens uw configuratie, waarna ze naar uw opslag- of backendsysteem worden doorgestuurd.
- Gepauzeerd: Je kunt de gegevensinvoer en -verwerking tijdelijk onderbreken, terwijl je streamconfiguratie behouden blijft.
- Beëindigd: De gegevensinvoer is gestopt vanwege fouten bij de overdracht.
- Automatisch herstel: Wanneer een stream wordt beëindigd, probeert het systeem deze automatisch opnieuw te starten met steeds langere tussenpozen binnen een periode van 24 uur: 1 minuut, 2 minuten, 3 minuten, 5 minuten, 15 minuten, 30 minuten, 1 uur, 6 uur, 12 uur, 18 uur en ~24 uur.
- Als het probleem met de bestemming tijdens een van de herhalingspogingen wordt opgelost, wordt de stream hervat vanaf het punt waar deze was onderbroken.
- Als alle pogingen binnen 24 uur mislukken, blijft de stream onderbroken en wordt er een e-mailbericht verstuurd.
- Voltooid: De stream heeft alle gegevens binnen het gedefinieerde bereik (voor historische aanvullingen) met succes verwerkt.
JavaScript-filtering
Met Streams kun je aangepaste JavaScript-filters definiëren die blockchain-gegevens op de infrastructuur van Quicknode verwerken voordat deze je bestemming bereiken. Deze filterfunctie aan de serverzijde biedt verschillende voordelen:
- Stream de gegevens die u wilt: alleen de gefilterde gegevens die aan uw criteria voldoen, worden naar uw bestemming verzonden, waardoor er minder bandbreedte, opslagruimte en rekenkracht nodig is.
- Aangepaste transformaties: Verwerk en verrijk de gegevens met behulp van JavaScript voordat ze je systeem bereiken, onder meer door:
- Bepaalde transactietypen of gebeurtenissen filteren
- Specifieke velden extraheren en transformeren
- Het berekenen van afgeleide waarden
- Gegevenspunten samenvoegen
- Prestatieoptimalisatie: Door gegevens te verwerken op de infrastructuur van Quicknode wordt de rekenbelasting op uw systemen verminderd.
- Flexibele filterfunctie: Maak complexe filterlogica met behulp van alle functies van JavaScript, waaronder:
- Reguliere expressies voor patroonherkenning
- Wiskundige bewerkingen voor het berekenen van waarden
- Bewerking van arrays en objecten voor gegevenstransformatie
- Voorwaardelijke logica voor complexe filterregels
Streams verzenden de payload-gegevens in stream.data en de metagegevens in stream.metadata.
Opmerking: De parameternaam in je filterfunctie (bijv.,
stream,nuttige lading,gegevens) is willekeurig — het gaat om de vorm van het doorgegeven object, dat altijd.dataen.metadataeigenschappen.
Voorbeeldfilters
Filter voor het Solana-stakeprogramma
Dit filter zoekt in elk blok alle geslaagde transacties die ten minste één opdracht bevatten die naar het Solana Stake-programma is verzonden — zoals staken, unstaking of het verplaatsen van een inzet:
function main(stream) {
const STAKE_PROGRAM = "Stake11111111111111111111111111111111111111";
const matches = [];
for (const block of stream.data) {
for (const tx of block.transactions) {
if (!tx.meta || tx.meta.err) continue;
const stakeInstructions = (tx.transaction.message.instructions || []).filter(
ix => ix.programId === STAKE_PROGRAM
);
if (stakeInstructions.length) {
matches.push({
signature: tx.transaction.signatures[0],
blockTime: block.blockTime,
instructionCount: stakeInstructions.length,
programId: STAKE_PROGRAM
});
}
}
}
return matches.length ? matches : null;
}
Ethereum ERC-20-overdrachtsfilter
Dit filter verwerkt ERC-20-overdrachtsgebeurtenissen aan de hand van de dataset met blokken en ontvangstbewijzen, waarbij de logbestanden worden gedecodeerd met behulp van de ERC-20 ABI:
function main(stream) {
const ERC20_ABI = [{
name: "Transfer",
type: "event",
anonymous: false,
inputs: [
{ name: "from", type: "address", indexed: true },
{ name: "to", type: "address", indexed: true },
{ name: "value", type: "uint256", indexed: false }
]
}];
const receipts = stream.data.flatMap(block => block.receipts || []);
const decoded = decodeEVMReceipts(receipts, [ERC20_ABI]);
const erc20Transfers = decoded.filter(r =>
r.decodedLogs?.some(log => log.name === "Transfer")
);
return erc20Transfers.length ? { receipts: erc20Transfers } : null;
}
Dit filter laat zien hoe je:
- Gebruik de dataset ‘blok met bonnen’
- Een ABI definiëren en gebruiken voor het decoderen van gebeurtenissen
- Verwerk gedecodeerde logbestanden om ERC-20-overdrachtsgebeurtenissen te extraheren
- Geef alleen bonnen weer die relevante gebeurtenissen bevatten
Beschikbaarheid van functies
Streams is beschikbaar voor alle gebruikers met een Quicknode-abonnement. Voor teams met specifieke behoeften bieden we op maat gemaakte datasets, speciale ondersteuning en integraties op maat. Neem contact op met ons team voor meer informatie. Ga naar de prijspagina voor een volledig overzicht van de functies van Streams per abonnement. \
Met gratis proefaccounts kunnen alleen Solana Streams worden aangemaakt die de tip van de blockchain in realtime volgen (d.w.z. een abonnement op nieuwe blokken zodra deze worden geproduceerd). Historische aanvullingen op Solana Streams zijn alleen beschikbaar bij betaalde abonnementen.
Deze beperking geldt alleen voor Solana Streams. Alle andere blockchains zijn beschikbaar in de gratis proefabonnementen, inclusief volledige historische gegevens.
Toegang
Je hebt toegang tot Streams via het Quicknode Developer Portal en via de Streams REST API.
Ondersteunde blockchains
Streams kunnen snel worden ingesteld voor elk van de hieronder genoemde ondersteunde blockchains en netwerken. Teams met specifieke vereisten kunnen contact opnemen met ons team voor meer informatie. Voor alle andere gevallen kunt u gebruikmaken van onze zelfbedieningsoptie voor de volgende blockchains:
| Ketting | Mainnet | Testnetten |
|---|---|---|
| 0g | ✅ | Galileo-testnet |
| Samenvatting | ✅ | Testnet |
| Arbitrum | ✅ | Sepolia |
| Arbitrum Nova | ✅ | |
| Boog | Testnet | |
| Ault | ✅ | Testnet |
| Avalanche C-Chain | ✅ | Fuji |
| B3 | ✅ | Sepolia |
| Basis | ✅ | Sepolia |
| Bera | ✅ | Bepolia |
| Bitcoin | ✅ | Testnet4 |
| Bitcoin Cash | ✅ | Testnet |
| Explosie | ✅ | Sepolia |
| BNB Smart Chain | ✅ | Testnet |
| Celo | ✅ | |
| Cyber | ✅ | Sepolia |
| Dogecoin | ✅ | |
| Ethereum | ✅ | Hoodi, Sepolia |
| Fantom | ✅ | |
| Flare | ✅ | Testnet |
| Stroom | ✅ | Testnet |
| Vloeiend | Testnet | |
| Fraxtal | ✅ | |
| Gnosis | ✅ | |
| Zwaartekracht | ✅ | |
| Hedera | ✅ | Testnet |
| Hemi | ✅ | Testnet |
| Hyperliquid EVM | ✅ | Testnet |
| Hyperliquid Hypercore | ✅ | |
| Onveranderlijke zkEVM | ✅ | Testnet |
| Injectief | ✅ | Testnet |
| Inkt | ✅ | Sepolia |
| Japan Open Chain | ✅ | |
| Kaia | ✅ | Testnet |
| Katana | ✅ | |
| Lens | ✅ | Testnet |
| Linea | ✅ | |
| Lisk | ✅ | |
| Litecoin | ✅ | Testnet |
| Mantel | ✅ | Sepolia |
| MegaETH | ✅ | |
| Moca | Testnet | |
| Modus | ✅ | |
| Monade | ✅ | Testnet |
| Morph | ✅ | Hoodi |
| Optimisme | ✅ | Sepolia |
| Peaq | ✅ | |
| Plasma | ✅ | Testnet |
| Polygon | ✅ | Amoy |
| Polygon zkEVM | ✅ | Cardona-testnet |
| Robinhood | ✅ | Testnet |
| Sahara | Testnet | |
| Scrollen | ✅ | Testnet |
| Sei | ✅ | Testnet |
| Solana | ✅ | Devnet, Testnet |
| Soneium | ✅ | |
| Sonic | ✅ | |
| Sophon | ✅ | |
| Stellar | ✅ | Testnet |
| GEGEVENS | ✅ | Aeneid Testnet |
| Tempo | ✅ | Testnet |
| Tron | ✅ | |
| Unichain | ✅ | Sepolia |
| Vana | ✅ | Moksha-testnet |
| Worldchain | ✅ | Sepolia |
| Laag X | ✅ | Testnet |
| Xai | ✅ | Sepolia |
| XRP-ledger | ✅ | Testnet |
| XRPL EVM | ✅ | Testnet |
| zkSync | ✅ | Sepolia |
| Zora | ✅ |
Je datapijplijn optimaliseren
- Bestemmingsoptimalisatie: Zorg ervoor dat uw opslag- of indexeringssysteem correct is geconfigureerd om de binnenkomende gegevensstroom aan te kunnen. Dit omvat:
- Database-indexen en schrijfpatronen optimaliseren
- De juiste buffergroottes instellen
- Het opzetten van efficiënte strategieën voor gegevenspartitionering
- Belangrijk: Streams verwerkt blokken achtereenvolgens en gaat pas door naar het volgende blok of de volgende batch nadat het de bevestiging heeft ontvangen dat het huidige blok of de huidige batch met succes bij uw bestemming is afgeleverd. Dit waarborgt de consistentie van de gegevens, maar betekent wel dat uw bestemming in staat moet zijn om elk blok of elke batch binnen een redelijke termijn te verwerken en de ontvangst ervan te bevestigen.
- Prestatiebewaking: Controleer regelmatig uw Streams-dashboard om uw verbruik bij te houden en uw streams indien nodig aan te passen.
- Uw pijplijn opschalen: Als u merkt dat uw gegevensbehoeften toenemen en verder gaan dan wat uw huidige abonnement dekt, kunt u overwegen om over te stappen naar een hoger abonnement.
Inzicht in de facturering van Streams
Streams verbruikt API-credits op basis van het aantal blokken dat door je Stream wordt verwerkt, afhankelijk van de vermenigvuldigingsfactor voor het netwerk en de dataset. Streams verbruikt API-credits uit dezelfde gedeelde creditpool als RPC.
Het aantal verbruikte studiepunten hangt af van:
- Netwerk — Verschillende blockchains hebben verschillende blokproductiesnelheden
- Type dataset — Complexere datasets (zoals traces) verbruiken meer credits dan eenvoudige datasets (zoals blokken)
Maak een schatting van uw kosten
Gebruik de API-kostencalculator om je maandelijkse kosten te schatten op basis van je specifieke configuratie. De calculator helpt je bij het volgende:
- Vergelijk de kosten van verschillende netwerken en soorten datasets
- Bereken zowel de kosten voor tipstreaming (in realtime) als voor backfill (historisch)
De juiste configuratie kiezen
- Selecteer de juiste dataset: Kies de kleinste dataset die aan je behoeften voldoet (bijvoorbeeld: gebruik
blokin plaats vanblokkeren_met_bonnen(als je geen transactiegegevens nodig hebt). De keuze van de dataset heeft direct invloed op het kredietverbruik. - Gebruik filters om je gegevens te structureren: pas JavaScript-filters toe om alleen de gegevens door te sturen die je applicatie nodig heeft, waardoor je je gegevenspijplijn en de verdere verwerking optimaliseert.
- Houd je verbruik in de gaten: bekijk regelmatig je dataverbruik om inzicht te krijgen in je verbruikspatronen en pas je streaminggebruik indien nodig aan.
Veelgestelde vragen
We ❤️ feedback!
Mocht je opmerkingen of vragen hebben over deze documentatie, laat het ons dan weten. We horen graag van je!