Monitor Solana Accounts Using WebSockets and Solana Kit

·

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

What You Will Need


Key Improvements in Solana Kit

  1. Type Safety: Strict TypeScript integration.
  2. Async Iterators: Uses for await...of instead of callbacks.
  3. AbortController Support: Simplified subscription cleanup.
  4. 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.


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!