VPS & VDS free for 3 days - $0 today. CLAIM TRIAL>

OpenInfra.shopeninfra.sh

Datastream

Subscribe to an OpenInfra data topic over an authenticated TLS gRPC stream.

  1. Set your key

    export OPENINFRA_API_KEY=sk_live_xxxxxxxxxxxx
  2. Test with grpcurl

    curl -fsS https://openinfra.sh/protos/stream_service.proto -o stream_service.proto grpcurl \  -proto stream_service.proto \  -H "x-api-key: $OPENINFRA_API_KEY" \  -d '{"topic":"prod.rpc.solana.system.blocks-confirmed","format":"JSON"}' \  stream.sol.openinfra.sh:443 nln.stream.v1.StreamService/Subscribe
  3. Build a Node.js consumer

    npm install @grpc/grpc-js @grpc/proto-loader
    import grpc from "@grpc/grpc-js";import protoLoader from "@grpc/proto-loader"; const definition = protoLoader.loadSync("stream_service.proto", {  longs: String,  enums: String,  defaults: true,  oneofs: true,});const service = grpc.loadPackageDefinition(definition).nln.stream.v1;const client = new service.StreamService(  "stream.sol.openinfra.sh:443",  grpc.credentials.createSsl(),); const metadata = new grpc.Metadata();metadata.set("x-api-key", process.env.OPENINFRA_API_KEY!); const stream = client.Subscribe({  topic: "prod.rpc.solana.system.blocks-confirmed",  format: "JSON",}, metadata); stream.on("data", (message) => {  const payload = Buffer.isBuffer(message.payload)    ? message.payload    : Buffer.from(message.payload, "base64");  console.log({    topic: message.topic,    offset: message.offset,    data: JSON.parse(payload.toString("utf8")),  });});stream.on("error", console.error);

Payload

The verified prod.rpc.solana.system.blocks-confirmed topic emits JSON payloads containing block summary fields such as slot and tx_count. Other topics have different payload schemas.