Real-time Block Updates
Subscribe to new blocks using WebSocket and receive updates in real-time.
GraphQL Subscription
subscription {
newBlock(chainId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq") {
height
hash
time
txCount
difficulty
}
}JavaScript with graphql-ws
import { createClient } from 'graphql-ws';
const client = createClient({
url: 'wss://api.chainvue.io/graphql',
connectionParams: {
authorization: 'Bearer YOUR_API_KEY',
},
});
const subscription = client.subscribe(
{
query: `
subscription {
newBlock(chainId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq") {
height
hash
time
txCount
}
}
`,
},
{
next: (data) => {
const block = data.data.newBlock;
console.log(`New block #${block.height}`);
console.log(` Hash: ${block.hash}`);
console.log(` Transactions: ${block.txCount}`);
},
error: (err) => {
console.error('Subscription error:', err);
},
complete: () => {
console.log('Subscription complete');
},
}
);
// To unsubscribe later:
// subscription.unsubscribe();React Hook Example
import { useEffect, useState } from 'react';
import { createClient } from 'graphql-ws';
const client = createClient({
url: 'wss://api.chainvue.io/graphql',
connectionParams: {
authorization: `Bearer ${process.env.CHAINVUE_API_KEY}`,
},
});
function useNewBlocks(chainId: string) {
const [latestBlock, setLatestBlock] = useState(null);
useEffect(() => {
const subscription = client.subscribe(
{
query: `
subscription NewBlock($chainId: String!) {
newBlock(chainId: $chainId) {
height
hash
time
txCount
}
}
`,
variables: { chainId },
},
{
next: (data) => setLatestBlock(data.data.newBlock),
error: console.error,
complete: () => console.log('done'),
}
);
return () => subscription.unsubscribe();
}, [chainId]);
return latestBlock;
}
// Usage:
function BlockMonitor() {
const block = useNewBlocks('iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq');
if (!block) return <div>Waiting for blocks...</div>;
return (
<div>
<h2>Latest Block: #{block.height}</h2>
<p>Hash: {block.hash}</p>
<p>Transactions: {block.txCount}</p>
</div>
);
}Node.js Example
const WebSocket = require('ws');
const ws = new WebSocket('wss://api.chainvue.io/graphql', 'graphql-ws');
ws.on('open', () => {
// Initialize connection
ws.send(JSON.stringify({
type: 'connection_init',
payload: {
authorization: 'Bearer YOUR_API_KEY',
},
}));
});
ws.on('message', (data) => {
const message = JSON.parse(data);
if (message.type === 'connection_ack') {
// Subscribe to new blocks
ws.send(JSON.stringify({
id: '1',
type: 'subscribe',
payload: {
query: `
subscription {
newBlock(chainId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq") {
height
hash
txCount
}
}
`,
},
}));
}
if (message.type === 'next') {
const block = message.payload.data.newBlock;
console.log(`Block #${block.height}: ${block.txCount} txs`);
}
});
ws.on('error', console.error);Example Output
Block #689001: 3 txs Block #689002: 1 txs Block #689003: 7 txs Block #689004: 2 txs ...