Skip to content

gRPC

Native gRPC access, TLS end-to-end on the standard gateway host — two entry ports:

rpc.au.ro:8443   # full gRPC — reflection, all streaming shapes
rpc.au.ro:443    # unary + server-streaming (shared with HTTPS)

Unlike JSON-RPC there is no per-chain path — in gRPC the request path is the protocol (/cosmos.bank.v1beta1.Query/Balance), so both entries route by proto package prefix straight to the right chain's gRPC port:

ChainProto packages routedDescriptors
Cosmos Hubcosmos.*, ibc.*, cometbft.*, tendermint.*reflection on :8443, or the ready-made cosmos.protoset
TRONprotocol.*bring the java-tron protos

Which port to use

Call type:8443:443
Unary (single request → single response)
Server-streaming (single request → response stream)
Client-streaming / bidirectional✗ — times out
Interactive server reflection (grpcurl list, grpcui, evans)✗ — times out

:8443 is a dedicated gRPC proxy that streams every call shape end-to-end — plain grpcurl works out of the box. :443 is the shared API gateway; it buffers the request stream, so only calls that half-close immediately (unary, server-streaming — i.e. every real Cosmos Query/Tx and TRON Wallet method) complete there, and descriptors must be passed explicitly (-protoset/-proto or compiled SDK stubs). Deployments may run without the :8443 entry — if it doesn't answer, everything still works on :443 with explicit descriptors.

Authentication

The same API key as HTTPS on both ports, sent as gRPC metadata with the key name apikey (no -plaintext — both endpoints are TLS). Unauthenticated calls are rejected at the gateway; rate limits count unary calls and stream opens.

Cosmos Hub

The node's Cosmos SDK gRPC (:9090 upstream) — module queries, IBC, and tx broadcast. On :8443 reflection just works:

bash
grpcurl -H "apikey: $YOUR_API_KEY" rpc.au.ro:8443 list
grpcurl -H "apikey: $YOUR_API_KEY" rpc.au.ro:8443 list cosmos.bank.v1beta1.Query

# query a balance
grpcurl -H "apikey: $YOUR_API_KEY" \
  -d '{"address":"cosmos1..."}' \
  rpc.au.ro:8443 cosmos.bank.v1beta1.Query/AllBalances

For :443 (or to skip the reflection round-trip entirely) download the ready-made descriptor set once (cosmos.protoset, ~210 KB) — list/describe then read straight from the file, offline:

bash
curl -sO https://docs.au.ro/cosmos.protoset

grpcurl -protoset cosmos.protoset rpc.au.ro:443 list
grpcurl -protoset cosmos.protoset -H "apikey: $YOUR_API_KEY" \
  -d '{"denom":"uatom"}' \
  rpc.au.ro:443 cosmos.bank.v1beta1.Query/SupplyOf

SDKs that speak Cosmos gRPC (cosmjs-types + @grpc/grpc-js, cosmpy, grpc-go with generated stubs) use compiled stubs, so they work on either port — point them at rpc.au.ro:443 with TLS credentials and the apikey metadata on every call.

Regenerating the protoset

cosmos.protoset is dumped from the node's own reflection API and tracks its chain version; any descriptor set built from the matching cosmos-sdk/gaia protos works the same way.

TRON

java-tron's wallet gRPC (protocol.* package). Reflection covers the Cosmos services only, so for TRON supply the java-tron protos (or a protoset compiled from them) on either port:

bash
# with the protos checked out (github.com/tronprotocol/protocol):
grpcurl -H "apikey: $YOUR_API_KEY" \
  -import-path ./protocol -proto api/api.proto \
  rpc.au.ro:443 protocol.Wallet/GetNowBlock

(Note: bytes fields — addresses, hashes — are base64 in grpcurl's JSON, not base58/hex. For address-parameterized calls the HTTP API's hex-string form is usually less fiddly.)

The REST-style HTTP API (POST /tron/wallet/<method>) remains available for everything that doesn't need gRPC semantics.

Everything else

Only the chains in the table above expose gRPC — for other chains the package prefix simply doesn't route, and their protocols are HTTP-native anyway (Endpoints). Streaming/subscription workloads on non-gRPC chains are covered by WebSockets.