Eventstream
Consume decoded program-event topics through the OpenInfra server-streaming gRPC service.
Download the proto
curl -fsS https://openinfra.sh/protos/stream_service.proto -o stream_service.protoTest a topic
grpcurl \ -proto stream_service.proto \ -H "x-api-key: $OPENINFRA_API_KEY" \ -d '{"topic":"solana.pump_swaps.buy_event","format":"JSON"}' \ events.sol.openinfra.sh:443 nln.stream.v1.StreamService/SubscribeBuild a Node.js consumer
npm install @grpc/grpc-js @grpc/proto-loaderimport 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( "events.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: "solana.pump_swaps.buy_event", format: "JSON",}, metadata); stream.on("data", (message) => { const payload = Buffer.isBuffer(message.payload) ? message.payload : Buffer.from(message.payload, "base64"); console.log(JSON.parse(payload.toString("utf8")));});stream.on("error", console.error);
Payload
The verified solana.pump_swaps.buy_event topic emits decoded JSON with accounts and args. Treat each topic as its own schema.