From quicknode-pack
Sets up QuickNode Streams for real-time on-chain event processing with custom filters and webhook delivery to Node.js/Express apps.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin quicknode-packThis skill is limited to using the following tools:
Set up QuickNode Streams for real-time on-chain event processing with custom filters and webhook delivery.
Implements Alchemy Notify webhooks for real-time blockchain events: address activity, mined txs, smart contracts. Covers curl API setup and TypeScript Express handler with signature verification.
Guides QuickNode setup for blockchain RPC (80+ chains), Streams/Webhooks, IPFS, Solana DAS/gRPC streaming, KV store, SQL queries on indexed data, and add-ons.
Builds EVM transaction workflows using QuickNode and ethers.js: send ETH, call smart contracts, listen for events via WebSocket, estimate gas.
Share bugs, ideas, or general feedback.
Set up QuickNode Streams for real-time on-chain event processing with custom filters and webhook delivery.
1. Dashboard > Streams > Create Stream
2. Select chain: Ethereum Mainnet
3. Filter: Contract events for specific address
4. Destination: Webhook URL
5. Set payload format: JSON
import express from 'express';
const app = express();
app.post('/webhooks/quicknode', express.json(), async (req, res) => {
const events = req.body;
for (const event of events) {
console.log(`Block: ${event.blockNumber}`);
console.log(`TX: ${event.transactionHash}`);
console.log(`Topics: ${event.topics}`);
// Process on-chain event
await processBlockchainEvent(event);
}
res.status(200).json({ received: true });
});
// Stream filter function (runs on QuickNode infrastructure)
function main(data) {
const targetContract = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'; // USDC
const transferTopic = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
return data.streamData.filter(tx => {
return tx.logs?.some(log =>
log.address.toLowerCase() === targetContract.toLowerCase() &&
log.topics[0] === transferTopic
);
});
}
| Issue | Cause | Solution |
|---|---|---|
| No events received | Filter too restrictive | Test with broader filter first |
| Duplicate events | Block reorganization | Implement idempotency by tx hash |
| Webhook timeout | Slow processing | Return 200 immediately, process async |
Optimize performance: quicknode-performance-tuning