Overview
Solana Kit (formerly Solana Web3.js 2.0) introduces a modernized JavaScript library for interacting with the Solana blockchain. A key upgrade is its revamped WebSocket subscription system, offering enhanced type safety and error handling. This guide demonstrates how to monitor Solana account balances in real-time using Solana Kit's WebSocket API.
What You Will Do
- Establish a WebSocket connection via
@solana/kit - Subscribe to balance changes for a Solana account (e.g., Pump.fun Fee Account)
- Implement clean subscription handling with
AbortController - Format balance updates for user-friendly display
What You Will Need
- Node.js v20+
- npm/yarn
- TypeScript & ts-node
Key Improvements in Solana Kit
- Type Safety: Strict TypeScript integration.
- Async Iterators: Uses
for await...ofinstead of callbacks. - AbortController Support: Simplified subscription cleanup.
- Error Handling: Dedicated error types and recovery flows.
Environment Setup
1. Initialize Project
mkdir solana-subscriptions-v2 && cd solana-subscriptions-v2
npm init -y
npm install @solana/kit typescript ts-node @types/node --save-dev 2. Configure TypeScript (tsconfig.json)
{
"compilerOptions": {
"module": "NodeNext",
"moduleResolution": "NodeNext",
"target": "ESNext"
}
}Building the Account Monitor
1. Imports & Constants
import {
createSolanaRpcSubscriptions,
RpcSubscriptions,
address,
Address
} from '@solana/kit';
const WSS_PROVIDER_URL = 'wss://your-quicknode-endpoint.example';
const PUMP_FUN_FEE_ACCOUNT = address("CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM");2. Helper Function
const lamportsToSolString = (lamports: number): string => {
return (lamports / 1_000_000_000).toLocaleString('en-US', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
}) + ' SOL';
};3. Subscription Logic
async function trackAccount(rpcSubscriptions: RpcSubscriptions, account: Address) {
const abortController = new AbortController();
try {
const subscription = await rpcSubscriptions
.accountNotifications(account, { commitment: 'confirmed' })
.subscribe({ signal: abortController.signal });
for await (const notification of subscription) {
const currentLamports = Number(notification.value.lamports);
console.log(`New balance: ${lamportsToSolString(currentLamports)}`);
}
} finally {
abortController.abort();
}
}4. Execute Monitor
(async () => {
const rpcSubscriptions = createSolanaRpcSubscriptions(WSS_PROVIDER_URL);
await trackAccount(rpcSubscriptions, PUMP_FUN_FEE_ACCOUNT);
})();Best Practices
👉 Optimize WebSocket credit usage by unsubscribing idle connections.
- Billing: 20 credits per notification (see QuickNode API credits).
- Alternatives: Consider gRPC streams for high-throughput applications.
FAQ
Q: How do I filter specific account changes?
A: Use client-side logic to compare notification.value.lamports with previous values.
Q: Can I monitor multiple accounts simultaneously?
A: Yes! Create separate subscriptions for each account.
Q: What’s the latency of WebSocket updates?
A: Typically <1 second under normal network conditions.
Conclusion
Solana Kit’s WebSocket API provides a robust solution for real-time account monitoring. Key features like type safety and AbortController integration simplify error-resistant development.
For advanced use cases, explore QuickNode’s Streams or gRPC plugins.
Need help? Reach out to our team!