Monitoring on-chain activity in real time is essential for developers building dynamic applications on Solana. With the release of Solana Kit—the modernized successor to Solana Web3.js 2.0—handling WebSocket subscriptions has become more intuitive, type-safe, and developer-friendly. This guide walks you through setting up a robust account monitoring system using Solana Kit’s improved subscription API, enabling you to track balance changes with precision and efficiency.
Whether you're building a DeFi dashboard, NFT marketplace, or real-time analytics tool, understanding how to monitor Solana accounts via WebSockets is a foundational skill. Let’s dive into the implementation step by step.
Key Improvements in Solana Kit
Solana Kit introduces significant enhancements over the legacy Web3.js library, particularly in how WebSocket subscriptions are managed:
- Type Safety: Built with TypeScript generics for predictable, error-resistant code.
- Async Iteration: Uses
for await...ofloops instead of callback-based patterns, aligning with modern JavaScript standards. - AbortController Integration: Enables clean, programmatic subscription cancellation.
- Enhanced Error Handling: Clearer error types and structured exception handling.
These updates make Solana Kit ideal for production-grade applications that require reliable, real-time blockchain monitoring.
Setting Up Your Development Environment
Before writing any code, ensure your environment supports the latest tooling.
Step 1: Initialize the Project
Create a new directory and initialize an npm project:
mkdir solana-subscriptions-v2 && cd solana-subscriptions-v2
npm init -yStep 2: Install Dependencies
Install both runtime and development dependencies:
npm install @solana/kit
npm install --save-dev typescript ts-node @types/nodeStep 3: Configure TypeScript
Create a tsconfig.json file with modern module resolution settings:
{
"compilerOptions": {
"module": "NodeNext",
"moduleResolution": "NodeNext",
"noEmit": true,
"target": "ESNext"
}
}This configuration ensures compatibility with the latest ECMAScript features and Node.js module system.
👉 Discover powerful tools to streamline your Solana development workflow.
Building the Account Monitor
Now that your environment is ready, let's implement a real-time account monitor.
Step 1: Import Required Modules
In a new file named app.ts, import the necessary components from Solana Kit:
import {
createSolanaRpcSubscriptions,
RpcSubscriptions,
address,
Address
} from '@solana/kit';Step 2: Define Constants
Set up key values including your WebSocket endpoint and the target account:
const WSS_PROVIDER_URL = 'wss://your-quicknode-endpoint.example';
const LAMPORTS_PER_SOL = 1_000_000_000;
const PUMP_FUN_FEE_ACCOUNT = address("CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM");Replace WSS_PROVIDER_URL with a valid Solana Mainnet WebSocket endpoint from your provider.
Note: Theaddress()function ensures type safety by converting a string into a validatedAddressobject—a requirement in Solana Kit.
Step 3: Format Balance Output
Create a helper function to convert lamports to human-readable SOL amounts:
const lamportsToSolString = (lamports: number, includeUnit = true): string => {
const solAmount = lamports / LAMPORTS_PER_SOL;
return `${solAmount.toLocaleString('en-US', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
})}${includeUnit ? ' SOL' : ''}`;
};Step 4: Define Tracking Interface
Structure the input parameters for clarity:
interface TrackAccountArgs {
rpcSubscriptions: RpcSubscriptions;
accountAddress: Address;
abortSignal: AbortSignal;
}Step 5: Implement Account Tracking Logic
Write the core function that subscribes to account changes:
async function trackAccount({ rpcSubscriptions, accountAddress, abortSignal }: TrackAccountArgs) {
let lastLamports: number | null = null;
try {
const accountNotifications = await rpcSubscriptions
.accountNotifications(accountAddress, { commitment: 'confirmed' })
.subscribe({ abortSignal });
try {
for await (const notification of accountNotifications) {
const { slot } = notification.context;
const currentLamports = Number(notification.value.lamports);
const delta = lastLamports !== null ? currentLamports - lastLamports : 0;
const sign = delta > 0 ? '+' : delta < 0 ? '-' : ' ';
console.log(`Account change detected at slot ${slot.toLocaleString()}. New Balance: ${lamportsToSolString(currentLamports)} (${sign}${lamportsToSolString(Math.abs(delta))})`);
lastLamports = currentLamports;
}
} catch (error) {
console.error("Notification processing error:", error);
}
} catch (error) {
console.error("Subscription setup failed:", error);
}
}This function uses async iteration to listen for updates and calculates balance deltas for clear logging.
Step 6: Set Up Entry Point
Add the main execution block:
async function main() {
console.log(`💊 Tracking Pump.fun Fee Account: ${PUMP_FUN_FEE_ACCOUNT} 💊`);
const rpcSubscriptions = createSolanaRpcSubscriptions(WSS_PROVIDER_URL);
const abortController = new AbortController();
try {
await trackAccount({
rpcSubscriptions,
accountAddress: PUMP_FUN_FEE_ACCOUNT,
abortSignal: abortController.signal
});
} catch (e) {
console.log('Subscription error', e);
} finally {
abortController.abort();
}
}
main();The AbortController ensures proper cleanup when the process ends or errors occur.
👉 Explore advanced blockchain monitoring features for real-time data access.
Running the Monitor
Execute your script using:
npx ts-node app.tsYou’ll see output like:
Account change detected at slot 301,428,932. New Balance: 265,598.16 SOL (+0.14 SOL)Each line reflects a confirmed balance change on the monitored account—ideal for dashboards or alert systems.
Optimizing Costs and Performance
WebSocket usage impacts API costs. Key considerations:
- Billing is based on number of responses, not subscriptions.
- Each
accountNotificationsresponse typically costs 20 API credits. - Use filters where possible to reduce noise.
- Always clean up subscriptions using
AbortController.
Efficient resource management ensures scalability without unexpected charges.
Alternative Real-Time Data Solutions
While WebSockets are great for simple use cases, consider these alternatives for complex needs:
- Yellowstone Geyser gRPC: High-performance streaming with filtering and historical replay.
- Streams: Managed data pipelines that route events to databases, queues, or APIs.
Choose based on latency, filtering needs, and infrastructure complexity.
👉 Access scalable infrastructure for high-frequency blockchain monitoring.
Frequently Asked Questions
Q: What is Solana Kit?
A: Solana Kit is the updated JavaScript/TypeScript SDK for interacting with the Solana blockchain, replacing Web3.js with better typing, modularity, and developer experience.
Q: Why use WebSockets instead of polling?
A: WebSockets provide real-time updates with lower latency and reduced network load compared to repeated HTTP polling.
Q: Can I monitor multiple accounts simultaneously?
A: Yes—create separate subscriptions for each account or use program-level subscriptions to track all accounts tied to a specific program.
Q: How do I handle connection failures?
A: Implement reconnection logic using retry loops and ensure AbortController is used to prevent memory leaks.
Q: Is there a rate limit on WebSocket connections?
A: While there's no fixed limit on connections, providers may throttle based on usage patterns or credit availability.
Q: Can I filter notifications by balance change size?
A: Not natively—filtering must be done in your application logic after receiving the event.
Conclusion
Solana Kit elevates real-time blockchain monitoring with improved type safety, cleaner syntax, and better resource control. By leveraging its WebSocket subscription model, developers can build responsive, efficient applications that react instantly to on-chain activity.
From DeFi trackers to trading bots, the ability to monitor accounts in real time is a game-changer. With proper setup and optimization, you can maintain high performance while minimizing cost and complexity.
Core keywords naturally integrated: Solana Kit, WebSockets, account monitoring, real-time blockchain data, TypeScript, RPC subscriptions, balance tracking, Solana development.