Appearance
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:
| Chain | Proto packages routed | Descriptors |
|---|---|---|
| Cosmos Hub | cosmos.*, ibc.*, cometbft.*, tendermint.* | reflection on :8443, or the ready-made cosmos.protoset |
| TRON | protocol.* | 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/AllBalancesFor :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/SupplyOfSDKs 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.