Skip to content

feat: jsonrpc architecture for non-EVM (HAProxy) upstreams - #21

Open
snowkide wants to merge 3 commits into
feat/forwarded-client-id-metricsfrom
feat/jsonrpc-architecture
Open

feat: jsonrpc architecture for non-EVM (HAProxy) upstreams#21
snowkide wants to merge 3 commits into
feat/forwarded-client-id-metricsfrom
feat/jsonrpc-architecture

Conversation

@snowkide

Copy link
Copy Markdown

Summary

Stacked on #20 (forwardedClientId + WS metrics) — does not modify #20.

Adds architecture: jsonrpc / type: jsonrpc so non-EVM chains can sit on erpc with upstreams pointed at HAProxy (or direct node Services), getting:

Example (Solana via HAProxy)

networks:
  - architecture: jsonrpc
    alias: solana-mainnet
    hostname: solana-mainnet.cll.linkpool.com
    jsonRpc:
      id: solana-mainnet   # -> network id jsonrpc:solana-mainnet
upstreams:
  - id: solana-mainnet-proxy
    type: jsonrpc
    endpoint: http://solana-mainnet-proxy.solana-mainnet-proxy.svc.cluster.local:80
    jsonRpc:
      networkId: solana-mainnet
  - id: solana-mainnet-proxy-ws
    type: jsonrpc
    endpoint: ws://solana-mainnet-proxy.solana-mainnet-proxy.svc.cluster.local:81
    jsonRpc:
      networkId: solana-mainnet

Same pattern for starknet/tron/aptos/ton/sui/btc/polkadot (direct ports as needed).

Out of scope

Test plan

Made with Cursor

Passthrough JSON-RPC networks (jsonrpc:<slug>) skip EVM chainId/state
poller/hooks while keeping HTTP/WS forwarding and metrics — including
forwardedClientId from #20. Point upstreams at HAProxy/direct endpoints.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

github-actions Bot commented Aug 25, 2026

Copy link
Copy Markdown
File Lines Key changes Risk
🟠 registry.go +7/-1 ⚠ = fmt.Errorf
🟠 networks.go +11/-0 ⚠ ErrJsonRpcExceptionInternal
🟢 architecture_jsonrpc.go +12/-0 JsonRpcNetworkConfig, JsonRpcNetworkConfig
🔵 ids.go +8/-0 JsonRpcNetworkId
🔵 defaults.go +21/-4
1 test files +63

xray — see through AI slop with deterministic architecture PR diff reviews

@snowkide

Copy link
Copy Markdown
Author

Supersedes the separate edge path (now closed):

  • docker-images#412
  • charts#342
  • infra#13481

After #20 + this + image: add architecture: jsonrpc networks/upstreams on chainlink-erpc in services-argocd-deployments (HAProxy/direct endpoints). Envoy *.cll.linkpool.com already routes via erpc HTTPRoutes.

snowkide and others added 2 commits August 26, 2026 13:20
Chart emits failsafe as a single object, so UnmarshalYAML uses
oldNetworkConfig. That struct lacked JsonRpc, so architecture: jsonrpc
networks crashed config load (chainlink-erpc CrashLoopBackOff).

Co-authored-by: Cursor <cursoragent@cursor.com>
clients/registry only accepted type=evm, so every non-EVM upstream
failed with "unsupported upstream type: jsonrpc" and networks never
left ErrNetworkInitializing.

Co-authored-by: Cursor <cursoragent@cursor.com>
@snowkide

Copy link
Copy Markdown
Author

Prod finding: running jsonrpc-passthrough-2 fails every non-EVM upstream with:

unsupported upstream type: jsonrpc for upstream: …

Root cause: clients/registry.go only accepted UpstreamTypeEvm. Fix pushed on this branch (8dfeb1a0) — HTTP/WS clients now created for type: jsonrpc. Publishing jsonrpc-passthrough-3 for a services image bump.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant