The programSubscribe method in Solana allows developers to receive real-time notifications about changes to all accounts owned by a specific program. This subscription-based method provides updates whenever any account owned by the monitored program is modified.
Parameters
publicKey- The program ID (public key) to monitor, as a base-58 encoded string<config>- (optional) Configuration object:encoding- Data encoding for the account data:"base58"- Base-58 encoding (default)"base64"- Base-64 encoding"base64+zstd"- Compressed Base-64 encoding"jsonParsed"- JSON format (if program supports it)
filters- (optional) Array of filter objects:memcmp- Filter for memory comparison:offset- Number of bytes into program account to start comparisonbytes- Data to match, as base-58 encoded string
dataSize- Filter for program account data size
commitment- (optional) The level of commitment desired when querying state. Default is "finalized".
Response
result- An integer subscription id (needed to unsubscribe)subscription- An object containing account information:pubkey- The public key of the account that changedaccount- Account information:lamports- Number of lamports assigned to the accountowner- Base-58 encoded public key of the program this account is assigned todata- Account data, encoded according to specified encoding parameterexecutable- Boolean indicating if the account contains a programrentEpoch- The epoch at which this account will next owe rent
programSubscribe code examples
programSubscribe code examplesThis example subscribes to all accounts owned by the pump.fun program.
Note that subscriptions require a WebSocket connection and WebSocket cat for you to use this method in the console.
Install WebSocket cat with:
npm install -g wscat
$ wscat -c YOUR_CHAINSTACK_WEBSOCKET_ENDPOINT
# Wait for the connection to be established
Connected (press CTRL+C to quit)
> {"jsonrpc":"2.0","id":1,"method":"programSubscribe","params":["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",{"encoding":"jsonParsed","commitment":"finalized"}]}
Use case
The programSubscribe method is particularly useful for applications that need to monitor all accounts associated with a specific program. Common use cases include:
- DEX monitoring: Track changes to orderbooks, market states, and other trading-related accounts
- Token tracking: Monitor token program accounts for transfers and balance changes
- Gaming: Track game state changes across all player accounts
- DeFi applications: Monitor lending pools, staking positions, and other DeFi-related accounts
- Analytics platforms: Gather real-time data about program usage and account state changes
By subscribing to program account changes, applications can provide real-time updates and analytics without constantly polling the blockchain for changes to individual accounts.