gRPC stream

INVALID_ARGUMENT — bad subscribe filter

`Status { code: InvalidArgument }` is the server rejecting your SubscribeRequest before streaming starts. Almost always a malformed filter: base58-encoded where base64 expected, commitment level spelled wrong, or an empty filter group.

Root causes

Ranked by frequency. First cause is the one to check first.

  1. 01Account addresses passed as raw bytes instead of base58 strings (or vice versa — check the proto definition).
  2. 02Commitment spelled as `CONFIRMED` when the proto enum expects lowercase `confirmed`.
  3. 03Empty `accounts` map and empty `transactions` map — an empty SubscribeRequest is rejected as invalid.
  4. 04Owner filter with more than the per-provider cap (Subglow: 25, Triton: 50, Chainstack: 100).
  5. 05Mismatched proto versions between client and server — provider bumped the SubscribeRequest schema and your client is on an old proto.

Fix steps

  1. 1

    Regenerate client from the latest proto

    `git pull` the yellowstone-grpc-proto repo and regenerate your language bindings. Old clients that don't know about newer optional fields can pass invalid defaults.

  2. 2

    Pass base58, not raw bytes

    In Solana tooling the convention is base58 strings for on-chain addresses. The Geyser proto accepts string fields, not bytes — your library wrapper is doing the base58 decode internally.

  3. 3

    Validate the filter locally

    Print the generated SubscribeRequest as JSON before sending. Any `undefined` or empty-string field where the proto expects a valid address will yield INVALID_ARGUMENT.

Code example

correct-filter.tsts
const subscribeRequest = {
  accounts: {},
  slots: {},
  transactions: {
    pumpfun: {
      vote: false,
      failed: false,
      signature: undefined,
      accountInclude: [],
      accountExclude: [],
      accountRequired: ["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
    },
  },
  transactionsStatus: {},
  blocks: {},
  blocksMeta: {},
  entry: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED, // not "PROCESSED" as a string
};

Related errors

Want an endpoint that just works?

Subglow is flat-priced Solana gRPC + JSON-RPC on a single API key. Pre-parsed JSON, dedicated sendTransaction bucket, 99.9% latency SLA on Dedicated. No credit juggling, no surprise bills.