Skip to main content
glnc

REFERENCE

Troubleshooting

Short answers for the failure modes you will actually hit. Most of these come down to upstream rate limits or a single chain's RPC being briefly unhappy; glnc is designed to keep going and surface the issue in meta rather than crash.

Partial result warning

You will see a partial-result note when any one of the upstreams degraded: an RPC chain failed, CoinGecko rate-limited the price call, or the token list fell back to the in-repo hardcoded list. The data you see is still valid for the parts that worked; the missing parts are flagged in meta.sources.

glnc balance 0x... --json | jq '.meta.partial, .meta.sources'
true
{ "rpc": { "ok": false, "chainsFailed": ["linea"] }, ... }

If you are scripting, gate any mutating action on meta.partial == false, or use --strict to exit with code 3 on a partial result.

CoinGecko rate limit

Free-tier CoinGecko allows ~30 requests per minute. glnc caches prices in memory for 60 seconds, so during normal interactive use you should never hit the limit. If you do (a tight watch loop with very small intervals), the envelope will set meta.sources.prices.rateLimited: true and individual tokens will have priceUsd: null. Either raise the watch interval, or accept partial pricing for those polls.

priceUsd: null alone does not mean "rate-limited"; it can also mean "CoinGecko doesn't know this token." Tokens CoinGecko didn't recognise land in meta.sources.prices.unpriced. The two cases are distinct on purpose.

A chain returned no price

On Linea and zkSync, ERC-20 token prices are fail-closed by design until canonical addresses are independently verified. This prevents a spoofed token with the same symbol from inheriting a real price. Native ETH on those chains is priced normally. Pass --show-unpriced to see all balances regardless of pricing.

Solana RPC errors

The default Solana RPC (publicnode.com) sometimes briefly fails. glnc automatically falls through to mainnet-beta and then to the BlastAPI public endpoint. If all three fail, the envelope will have data.wallets[].chains[].error set on the Solana row and meta.partial: true. Re-run is the right action; this is almost always transient.

ENS resolution returned nothing

ENS is resolved on Ethereum mainnet via the standard ENS contracts. A name that doesn't resolve typically means it isn't registered, isn't pointing at an address (no resolver record), or you are looking at a sub-domain whose resolver doesn't implement the standard interface. Try the raw address.

Token I expect to see is missing

EVM token discovery uses the Uniswap default token list (~1,400 tokens per chain). Tokens not on the list are not shown. Some workarounds: pass --show-unpriced to include unpriced tokens that are on the list; use history for a transaction-driven view that catches movements for tokens you have held; or run the token-list refresh by deleting ~/.glnc/token-cache.json and re-running.

watch mode exited unexpectedly

Watch mode runs in the terminal's alternate screen buffer. On Ctrl+C, it explicitly switches back to the main buffer so your scrollback is restored. If a watch session crashed without that cleanup (terminal killed mid-process, SSH disconnect), restore with printf '\x1b[?1049l'. Snapshots persist in ~/.glnc/snapshots.json across runs.

Etherscan key for history

glnc history works without an Etherscan key, at a lower rate limit (sufficient for a few hundred transactions). For larger exports, set GLNC_ETHERSCAN_KEY in your shell once. Free Etherscan tier is enough for personal use.