programSubscribe – Solana

The programSubscribe JSON-RPC method allows clients to subscribe to notifications about accounts owned by a specified program ID.

The programSubscribe RPC Solana method listens for changes to lamports or data associated with program-owned accounts.

Notifications are sent whenever account information is updated.

Supported Networks

  • Mainnet

  • Devnet

Parameters

Required Parameters

  • string (required): Pubkey of the program ID (base-58 encoded).

Optional Parameters

  • object (optional): Configuration object containing:

    • commitment (string): Commitment level.

      • Default: finalized

    • filters (array): An array of filter objects for account data.

      • dataSize: Filter accounts with data size in bytes.

      • memcmp: Filter accounts by matching data at a specific offset.

    • encoding (string): Account data encoding format.

      • Supported values: base58, base64, base64+zstd, jsonParsed.

Result

The response returns a subscription ID.

Result Format

  • integer: The subscription ID.

Request Examples

API Endpoints

wss://go.getblock.io/<ACCESS-TOKEN>/

JSON-RPC Request – Subscribe to Program with Base64 Encoding

wscat -c "wss://go.getblock.io/<ACCESS-TOKEN>/" --exec '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "programSubscribe",
  "params": [
    "11111111111111111111111111111111",
    {
      "encoding": "base64",
      "commitment": "finalized"
    }
  ]
}'

JSON-RPC Request – Subscribe to Program with JSON-Parsed Encoding

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "programSubscribe",
  "params": [
    "11111111111111111111111111111111",
    {
      "encoding": "jsonParsed"
    }
  ]
}

JSON-RPC Request – Subscribe to Program with Data Size Filter

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "programSubscribe",
  "params": [
    "11111111111111111111111111111111",
    {
      "encoding": "base64",
      "filters": [
        {
          "dataSize": 80
        }
      ]
    }
  ]
}

Response

A successful request returns the subscription ID.

Example Response

{
  "jsonrpc": "2.0",
  "result": 24040,
  "id": 1
}

In this response:

  • result: The subscription ID.

Notification Format

Notifications are sent as JSON-RPC responses containing account data.

Base58 Encoding Example

{
  "jsonrpc": "2.0",
  "method": "programNotification",
  "params": {
    "result": {
      "context": {
        "slot": 5208469
      },
      "value": {
        "pubkey": "H4vnBqifaSACnKa7acsxstsY1iV1bvJNxsCY7enrd1hq",
        "account": {
          "data": [
            "11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHPXHRDEHrBesJhZyqnnq9qJeUuF7WHxiuLuL5twc38w2TXNLxnDbjmuR",
            "base58"
          ],
          "executable": false,
          "lamports": 33594,
          "owner": "11111111111111111111111111111111",
          "rentEpoch": 636,
          "space": 80
        }
      }
    },
    "subscription": 24040
  }
}

Parsed-JSON Encoding Example

{
  "jsonrpc": "2.0",
  "method": "programNotification",
  "params": {
    "result": {
      "context": {
        "slot": 5208469
      },
      "value": {
        "pubkey": "H4vnBqifaSACnKa7acsxstsY1iV1bvJNxsCY7enrd1hq",
        "account": {
          "data": {
            "program": "nonce",
            "parsed": {
              "type": "initialized",
              "info": {
                "authority": "Bbqg1M4YVVfbhEzwA9SpC9FhsaG83YMTYoR4a8oTDLX",
                "blockhash": "LUaQTmM7WbMRiATdMMHaRGakPtCkc2GHtH57STKXs6k",
                "feeCalculator": {
                  "lamportsPerSignature": 5000
                }
              }
            }
          },
          "executable": false,
          "lamports": 33594,
          "owner": "11111111111111111111111111111111",
          "rentEpoch": 636,
          "space": 80
        }
      }
    },
    "subscription": 24040
  }
}

Error Handling

Common programSubscribe error scenarios:

  • Invalid program ID: Incorrect Pubkey.

  • Unsupported encoding: Invalid encoding type.

  • Filter misconfiguration: Incorrect filter definitions.

Example Error Response

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32602,
    "message": "Invalid program ID"
  },
  "id": 1
}

Use Cases

The Solana programSubscribe method is essential for:

  • Monitoring accounts owned by programs.

  • Tracking data changes for real-time analytics.

  • Building dashboards for account state tracking.

Code programSubscribe Example – Web3 Integration

const WebSocket = require('ws');

const url = "wss://go.getblock.io/<ACCESS-TOKEN>/";
const payload = {
  jsonrpc: "2.0",
  id: 1,
  method: "programSubscribe",
  params: [
    "11111111111111111111111111111111",
    {
      encoding: "base64",
      commitment: "finalized"
    }
  ]
};

const ws = new WebSocket(url);

ws.on('open', () => {
  ws.send(JSON.stringify(payload));
});

ws.on('message', (data) => {
  console.log("Program Subscription Update:", JSON.parse(data));
});

ws.on('error', (error) => {
  console.error("WebSocket error:", error.message);
});

ws.on('close', () => {
  console.log("WebSocket connection closed");
});

Integration with Web3

Integrating Web3 programSubscribe into Solana's Core API allows developers to:

  • Receive real-time account updates.

  • Filter notifications based on custom criteria.

Optimize dApp performance through selective data streams.

Last updated