Chip Router

chiprouter is a small CTF component that owns the fixed ChIP ingress port and fans incoming telemetry out to registered downstream subscribers.

It exists to keep the local CRE topology simple:

  • Chainlink nodes always publish to a single ingress owner on 50051
  • lightweight test sinks subscribe behind the router
  • real ChIP / Beholder subscribes behind the same router

That removes the old split where some tests bound ingress directly while others started real ChIP.

Ports

The component exposes:

  • admin HTTP: 50050
  • ingress gRPC: 50051

In the local CRE topology, real ChIP / Beholder typically subscribes downstream on 50053.

Image Contract

The component runs whatever image is provided in chip_router.image.

The expected local CRE convention is:

  • env TOMLs use a local alias such as chip-router:<commit-sha>
  • setup/pull logic is responsible for making that alias exist locally
  • remote ECR image names stay in setup/pull config and are retagged locally to the alias

Runtime Behavior

The router:

  • exposes a health endpoint on /health
  • accepts subscriber registration over its admin API
  • forwards published ChIP ingress requests to all registered subscribers
  • is best-effort per subscriber, so one failing downstream does not block others

Host-based downstream subscribers should register host-reachable endpoints. In local CRE, host-local sink endpoints are normalized to the Docker host gateway before registration.