Summary
/monitoring page renders a generic "Monitoring Error RPC 400" when /v1/query/validator-set returns code: 29 — there are no validators in the set. For chains with no staked committee validators (e.g. single-validator deployments) this is the normal/expected response, not an error worth surfacing as a fatal monitoring failure.
Repro
- Single-validator chain, healthy + producing blocks
- Open
/monitoring page in the canopy wallet UI
Observed
- Page renders a red box: "Monitoring Error — RPC 400"
- Network panel shows
/v1/query/validator-set returning HTTP 400 with:
{
"code": 29,
"module": "main",
"msg": "there are no validators in the set"
}
- Other RPC calls succeed (height, params, consensus-info, peer-info, resource-usage, log all 200)
Expected
The monitoring page should:
- Detect
code: 29 (ErrNoValidators) specifically
- Render gracefully (e.g. "No committee validators staked yet" or "Single-validator chain — committee empty")
- Continue showing the rest of the monitoring data that DID load
Root cause
- Server:
lib/error.go → ErrNoValidators() (HTTP 400, code 29) — this is the canonical response, expected when the committee has 0 staked validators
- Wallet:
cmd/rpc/web/wallet/public/plugin/canopy/chain.json defines validatorSet query but doesn't appear to special-case the empty/zero-validators response
Suggested fix
In the wallet's monitoring page renderer, treat code: 29 from /v1/query/validator-set as a non-fatal state and show an empty/zero-validators panel instead of the generic error box.
Reproduction details
- Chain: universal-databases-98799, chain_id 243
- Pod image:
canonical-v6 (rebuilt today from RichardJamesLopez/canopy@e1d9ee47)
- Wallet host:
data-wallet.val-a.grad.dev.app.canopynetwork.org
- Reproduced via curl with payloads
{}, {"height":0}, {"chainId":98799}, {"id":98799}, {"id":98799,"height":50000} — all return the same 400/code:29
Summary
/monitoringpage renders a generic "Monitoring Error RPC 400" when/v1/query/validator-setreturnscode: 29 — there are no validators in the set. For chains with no staked committee validators (e.g. single-validator deployments) this is the normal/expected response, not an error worth surfacing as a fatal monitoring failure.Repro
/monitoringpage in the canopy wallet UIObserved
/v1/query/validator-setreturning HTTP 400 with:{ "code": 29, "module": "main", "msg": "there are no validators in the set" }Expected
The monitoring page should:
code: 29(ErrNoValidators) specificallyRoot cause
lib/error.go→ErrNoValidators()(HTTP 400, code 29) — this is the canonical response, expected when the committee has 0 staked validatorscmd/rpc/web/wallet/public/plugin/canopy/chain.jsondefinesvalidatorSetquery but doesn't appear to special-case the empty/zero-validators responseSuggested fix
In the wallet's monitoring page renderer, treat
code: 29from/v1/query/validator-setas a non-fatal state and show an empty/zero-validators panel instead of the generic error box.Reproduction details
canonical-v6(rebuilt today from RichardJamesLopez/canopy@e1d9ee47)data-wallet.val-a.grad.dev.app.canopynetwork.org{},{"height":0},{"chainId":98799},{"id":98799},{"id":98799,"height":50000}— all return the same 400/code:29