TriportRPC

Base operations

This page is an operator plan for a future approved release. It is not evidence that Base is mounted, deployed, provider-tested, or available. See the Base API contract, incident runbook, and known capability gaps.

Release invariants

  • Base mainnet is chain ID 8453 (0x2105). There is no Base Sepolia, Ethereum, or legacy QuickNode fallback.
  • Native Base is the only owner of /rpc/base. BASE_LEGACY_QN=false always; base must not occur in RPC_QN_CHAINS.
  • The checked-in/default state is BASE_NATIVE=false. Do not enable it before the hashed release dossier and card 33 approval.
  • upstream_base.yml contains only accepted public candidates and secret:// references. Never place a provider key in a URL, unit, YAML, command line, report, or example env.
  • Origin and edge have different duties. Caddy sends only non-upgrade GET/HEAD /rpc/base to the Next SEO page. POST and every WebSocket Upgrade stay on the portal. At the origin, exact /rpc/base always reaches the native router; a non-POST request returns 405 with Allow: POST before SPA fallback.

Configuration inventory

The source artifacts are the Base upstream inventory, systemd environment example, installable unit, and Caddy split.

The safe baseline is:

BASE_NATIVE=false
BASE_LEGACY_QN=false
BASE_MESH_CONFIG=configs/upstream_base.yml
BASE_CATALOG=../docs/api/json-rpc/base.openrpc.json
BASE_BLINK_SECRET_REF=
RPC_QN_CHAINS=polygon
RPC_QN_CHAINS_FILE=configs/qn-chains.yml
TLS_LISTEN=:443
TLS_CERT=configs/tls/cf-origin.pem
TLS_KEY=configs/tls/cf-origin.key
GOMEMLIMIT=3GiB

BASE_BLINK_SECRET_REF is a reference, never the key. A native release candidate must have an approved resolvable reference and the shared PostgreSQL provider-budget store. Paid Alchemy/dRPC fallback slots remain URL-free, disabled, and key_required until separately approved.

The unit sets MemoryHigh=4G, MemoryMax=5G, and MemorySwapMax=0 around the whole proxy. Together with the bounded two-worker decode pool and GOMEMLIMIT=3GiB, this is the accepted F09-01 baseline—not per-decoder process isolation or measured capacity. Card 32 may require re-sizing.

Planned deployment

  1. Start only from the immutable hashes approved by card 33. Build both bin/proxy and bin/preflight; stage files by copy. Do not rename files that may be Docker bind-mounted.
  2. Fill the target's protected EnvironmentFile with secret references and operator-supplied secret material outside source control. Keep native false.
  3. Run the installer in check-only mode and run bin/preflight -mode=production -root=<install-root> before changing supervision.
  4. Validate the Caddy configuration before reload. WebSocket upgrades must not match the Next handler.
  5. Follow the release dossier's canary order. EU/Dedic is the OVH target 164.132.192.209; US is the AWS target 13.216.5.243. Do not use parallel blind restarts or deploy.ps1/plink calls without bounded timeouts.
  6. Set BASE_NATIVE=true only on the approved canary after every preflight input is present. Keep BASE_LEGACY_QN=false and the non-Base QN CSV.
  7. Complete the read-only post-deploy checks below before advancing. This page does not authorize signed transactions, provider load, firewall changes, SSH, deployment, or control-plane mutation.

EU SSH policy remains ufw LIMIT 22; no new public monitoring port is needed. On US, proxy metrics are loopback :9090 and Prometheus is loopback :9091; use an approved tunnel rather than opening either port.

Read-only post-deploy checks

  • Confirm systemctl is-active proxy-agg, the candidate binary/config hashes, and GOMEMLIMIT/cgroup values from systemd.
  • Confirm /healthz and readiness, then one authenticated read-only eth_chainId request returns 0x2105. Never use a write method as a smoke.
  • Confirm edge GET/HEAD /rpc/base is the SEO page, edge POST reaches JSON-RPC, origin GET /rpc/base is 405 with Allow: POST, and upgrades for /ws/base, /ws/base-feed, and /ws/base-auction do not reach Next.
  • Confirm absent/revoked/wrong-scope keys fail before any upstream dial.
  • Confirm the Base sentinel definitions are loaded, the triport-base dashboard has data for the canary PoP, and all eight alert names listed in the runbook exist in the loaded rule inventory.
  • Treat auction key_required, decoder-validation blockers, and unavailable capabilities as explicit states, not successful availability.

Rollback

Run deploy/deploy_restart.sh --dry-run first. It stages BASE_NATIVE=false, BASE_LEGACY_QN=false, removes any Base QN selection, validates the previous-eight QN inventory and TLS, and changes nothing. Only an authorized operator may then use --apply; the script copies bytes over the EnvironmentFile, runs preflight before restart, and leaves all non-Base flags unchanged. Re-run the same edge/origin and eight-network regression checks.