Boost

goldsky-io/goldsky-agent/skills/boost

作者 goldsky-ioaa52f88312de无许可证12 个星标收录于 2026年10月9日更新于 2026年10月9日仓库今天更新

Configure and troubleshoot Goldsky Boost, the free RPC caching CDN in front of a provider the user already pays for. Use for cutting RPC bills without migrating, connecting Alchemy/QuickNode/Infura upstreams, goldsky boost, edge.goldsky.com/boost, verification, cache hit rates, eth_getLogs forwarding, and x-cache / x-edge-billable / x-edge-source headers. Boost keeps the existing provider and forwards uncached requests. To replace a provider with Goldsky's managed RPC, use /edge. Pipeline, Subgraph, and Compose tasks have separate skills.

仅含说明DevOps & Cloud
AI 生成的概览

配置并排查 Goldsky Boost,这是一个置于现有区块链 RPC 提供商之前的免费 RPC 缓存 CDN。

功能
说明如何启用和操作 Goldsky Boost,这是一个免费的缓存 CDN,位于用户已付费的 RPC 提供商之前,可缓存可缓存的 JSON-RPC 调用并转发其余请求。文档涵盖端点格式、支持的链、CLI 命令面、上游提供商管理、响应头、批处理行为以及故障排查表。产出的是配置步骤、验证命令和诊断指导,而非文件或代码产物。
适用场景
当用户希望在不迁移的情况下降低现有 RPC 提供商账单,或需要将 Alchemy、QuickNode 或 Infura 上游连接到 Boost 时使用。也适用于诊断 Boost 问题,例如缓存命中率低、401 或 404 密钥错误、批处理行为或验证门槛导致的拒绝。
运行要求
需要 Goldsky CLI 和 Goldsky API 密钥,以及现有的 RPC 提供商端点或提供商账户凭据。部分操作需要已验证的组织。需要访问 Goldsky 端点的网络连接。不附带脚本,仅为说明文档。

Goldsky Boost

Boost is a CDN in front of the RPC endpoint the user already pays for. Every request is checked against Goldsky's indexed data first: if Boost has the answer it serves it, and the provider never sees the call (so never bills for it). If it doesn't, the request forwards to the user's endpoint unchanged and the response comes back verbatim.

Boost is free. CDN hits and forwarded requests both cost nothing from Goldsky. That shapes how to talk about it: there is no upsell here, and the only number that matters to the user is how much of their existing provider bill disappears.

The mental model that prevents most mistakes

Three facts explain nearly every question users have:

  1. An API key is a Boost endpoint. Configuration lives on the key, not in the request. The key in the URL is how Boost knows which upstream to forward to. The user's own provider URL never travels with a request.
  2. A project has exactly one Boost. There are no named Boost endpoints to create or list. If you find yourself reaching for goldsky boost create or goldsky boost list, those commands do not exist — see Command surface.
  3. Boost never guesses about the head of the chain. Block tags always forward. This is the single most common "why didn't it cache?" question and the answer is deliberate design, not a bug.

Endpoint format

https://edge.goldsky.com/boost/{chain}?key={GOLDSKY_API_KEY}

{chain} is a chain name or a chain ID, case-insensitive — /boost/ethereum and /boost/1 are the same endpoint.

?key= is required on every request, and the two ways it can fail look different. Both verified against production:

RequestResponseMeans
no ?key=, ?key= empty, or ?KEY= (the name is case-sensitive)401, empty bodythe edge never resolved a key at all
?key=<something unrecognised>404 + {"error":{"code":-32000,"message":"no Boost configuration for this key"}}a key was read, but it carries no Boost config

That split is the fastest diagnostic you have: an empty-body 401 is a malformed URL (missing, blank, or misnamed param — check for an unset env var interpolating to nothing), while a JSON 404 is a real key pointed at the wrong project or a Boost that was never enabled.

The docs page says a keyless caller gets an x402 payment challenge. That is Edge's behaviour on /standard/evm/..., which does return 402 with a large JSON body. /boost/... never does. A real x402 challenge is loud, so an empty body is itself proof this isn't one — and telling a user to expect a payment challenge sends them hunting for a billing problem that cannot exist on a free product.

The key also disambiguates auth headers — see Sending the provider's own auth.

The drop-in swap

The whole value proposition is that nothing else changes. Show the user this, not a migration guide:

typescript
import { createPublicClient, http } from 'viem'import { mainnet } from 'viem/chains'
const client = createPublicClient({  chain: mainnet,  transport: http('https://edge.goldsky.com/boost/ethereum?key=YOUR_KEY'),})

Same methods, same params, same response shapes.

Verifying it works

bash
curl -i "https://edge.goldsky.com/boost/ethereum?key=YOUR_KEY" \  -X POST -H "Content-Type: application/json" \  -d '{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["0x1b4",false]}'

Run it twice. The first call for a block Boost hasn't served recently can come back MISS while the reader warms that range from storage. A user who tests once and sees MISS will conclude Boost is broken — tell them to repeat before they draw that conclusion.

What the CDN serves

MethodServed from the CDN when
eth_getBlockByNumberthe block is a concrete hex height
eth_getBlockByHashalways eligible
eth_getTransactionByHashalways eligible
eth_getTransactionReceiptalways eligible
eth_getLogsfromBlock and toBlock are concrete hex heights, or blockHash is set
eth_getBlockReceiptsthe block is a concrete hex height

eth_chainId and net_version are answered at the edge without touching either backend.

Everything else forwards, free. Writes, traces, eth_call, eth_getBalance — all passthrough. Eligible is not guaranteed: a method in this table still forwards if Boost doesn't hold that specific data yet.

Block tags always forward

A request for latest, pending, safe, finalized, or earliest is never served from the CDN. Goldsky's view of the head can trail the user's provider by a block or two, so serving latest would occasionally hand back a stale or soon-reorged block. The user's endpoint is the authority on the head.

The same applies to eth_getLogs with a tag as a range bound — which is why a user who ranges fromBlock: "0x..." to toBlock: "latest" sees a 0% hit rate. Pin toBlock to a concrete height and the CDN engages.

This is the highest-leverage thing to check when someone reports a low hit rate.

Reading the response headers

HeaderValuesMeaning
x-cacheHIT, MISSwhether Boost served it or forwarded it
x-edge-sourcecache, static, endpointwho actually answered
x-edge-billableintegerhow many items Boost served. The name predates Boost being free — it is a count, not a charge
x-edge-duration-msintegerwall-clock time Boost spent serving it
x-edge-regionAWS regionwhich edge region served it
x-edge-versionbuild stringthe Boost build that served it

x-cache is the one to graph — it's the standard CDN header, so existing tooling already understands it. Counting HITs gives the exact number of calls the provider didn't bill for.

Every response header is readable from browser JavaScript (Access-Control-Expose-Headers: *).

Batching

Boost serves a JSON-RPC batch per item: cacheable items come from the CDN, the rest forward to the provider in a single onward batch. Nothing to enable — post an array to the same address.

Two things that bite people:

  • x-cache is HIT only when every item was served. A batch where 44 of 45 items came from the CDN still reports MISS. For batches, read x-edge-billable (the count of items served), not x-cache.
  • Arrays over 100 items forward whole, as one free passthrough with no CDN lookups. Split larger batches into 100-item chunks to keep the hits.

Give every item a unique id — JSON-RPC doesn't guarantee response order, so match by id, not position.

Supported networks

Boost offers only chains the CDN covers from genesis. A chain whose coverage starts at a later block is not offered at all, because the CDN would answer recent history and silently miss everything below the floor — the opposite of what Boost is for.

NetworkPath nameChain ID
Ethereumethereum1
Basebase8453
Polygonpolygon137
Optimismoptimism10
Avalancheavalanche43114
HyperEVMhyperevm999
Arcarc5042
Robinhood Chainrobinhood4663
Ethereum Sepoliasepolia11155111
Base Sepoliabase-sepolia84532

Chains Goldsky indexes but does not offer for Boost today include Arbitrum, BNB Chain, Celo, Gnosis, Sei, Tron, Abstract and Monad — each is covered from a block well above genesis. If a user asks for one of those, that is the reason, and Edge (/edge) is the alternative.

goldsky boost chains is the live list and beats this table the day a backfill lands. Run it rather than asserting from memory.

Command surface

A project has one Boost, so no command takes a name. Older docs describe boost create <name>, list, pause, resume, and delete; those were removed. If the user is following a page that shows them, that page is stale — the current shape is below, and goldsky boost --help settles any disagreement.

CommandWhat it does
goldsky boost enableenable the project's Boost; a first enable walks through provider setup
goldsky boost disablestop serving, keep configuration and key
goldsky boost getproviders, serving URLs, and status per chain
goldsky boost update--allowed-domains, --provider-rate
goldsky boost revealreveal the API key Boost serves under
goldsky boost metricsJSON: hits, latencies, miss reasons, per-provider stats, savings
goldsky boost requestsper-request history: method, chain, hit or forward, which provider, duration
goldsky boost chainschains Boost can cache, and how far back each is cached
goldsky boost validate <url>probe a provider URL: detect its chain, check it answers
goldsky boost set --chain <c>switch a chain on/off, set --forward-timeout / --cache-timeout
goldsky boost provider …manage upstreams — see below

Useful flags:

  • boost enable --chain <c> --provider-url <url> --header k:v — one-shot setup that configures the first provider right after enabling.
  • boost metrics --from <iso> --to <iso> --bucket-size 1m|5m|1h|6h|1d --chain <c>
  • boost requests --chain <c> --method eth_getLogs --errors --limit <n> (pages of 50)
  • boost validate <url> --chain <c> verifies the URL's chain matches what the user intends.

Providers (upstreams)

CommandRequired flags
boost provider connect--vendor quicknode|alchemy, --key, repeatable --chain
boost provider add--chain, --url, repeatable --header k:v, optional --id
boost provider replace--chain, --id, --url, --header, --clear-headers
boost provider activate--chain, --id
boost provider remove--chain, --id, --force
boost provider set--chain, --id, --timeout, --vendor
boost provider disconnect--vendor, --force

Omit --key on provider connect. The CLI prompts for it, which keeps the credential out of shell history. Never ask the user to paste a provider credential into the chat — the same rule as Goldsky tokens in /auth-setup.

Several upstreams can exist per chain, but only one is active. Failover is an explicit provider activate, not something Boost does silently — so if a user expects automatic failover, correct that expectation.

Setting it up

Two paths. Ask which the user wants rather than assuming:

Connect a provider account — Boost creates the endpoints per chain.

VendorCredentialWhat Boost creates
QuickNodean API key with Admin API access (Dashboard → API Keys). Paid plans onlyone endpoint per chain, in their account
Alchemyan access key with Admin API App Management read+write (Dashboard → Settings → Security). Not an app's API keyone app, allowlisted to the chosen chains

Boost only touches what it created: disconnecting deletes those endpoints and nothing else.

Or paste a URL — any https-reachable endpoint, including a self-run node or Goldsky's own Edge RPC. Private, loopback, and link-local addresses are rejected.

Validate before committing:

bash
goldsky boost validate https://my-provider.example/rpc --chain ethereum

Verification gate

Turning Boost on and changing it afterwards requires a verified organization. A team qualifies automatically as soon as one member above Viewer has a business email address — a personal mailbox (gmail.com, outlook.com, proton.me) doesn't count. There's no form and no review; the check runs at the moment of the action, and approval is permanent.

What matters when a user hits this: verification is a control-plane gate, not a runtime one.

ActionNeeds verification
Enable Boost; connect/disconnect a provider; add, replace, activate, remove an upstream; switch a chain or change timeouts; reveal the API keyYes
Read configuration, chains, and metricsNo
Disable or delete BoostNo
Serving traffic on an endpoint that already existsNo

An already-configured endpoint keeps answering regardless of verification state. Nothing here can interrupt traffic a user is already serving — say that plainly, because "verification required" reads like an outage risk and isn't one.

The fix is usually adding a teammate with a business email, effective immediately. If that doesn't fit (shared domain, pre-setup evaluation, misclassified domain), point them at [email protected] with their team ID from the dashboard URL. If verification can't be checked at all, the change is refused with a retry rather than a denial and no state is written.

Sending the provider's own auth

Because the Goldsky key rides in the query string, Authorization and X-API-Key headers on the request are unambiguously the provider's, and forward untouched. This only works with ?key= present — without it Boost can't tell whose credential an Authorization header is.

For a credential that never changes, prefer the endpoint's configured headers (provider add --header k:v): stored once, applied to every forward, and callers never hold them.

Credentials given as URL userinfo (https://user:pass@…) are converted to Authorization: Basic before the request leaves Goldsky. URLs and headers are stored encrypted at rest and never written to logs, errors, or metrics.

Troubleshooting

Work down this list — it's ordered by how often each is the real cause.

SymptomLikely cause and fix
401 with an empty bodyNo key resolved: ?key= missing, empty, or misnamed (?KEY= fails — it is case-sensitive). Usually an unset env var interpolating to nothing. Not a billing problem; Boost is free.
404 with -32000 no Boost configuration for this keyThe key was read but has no Boost config — wrong project, or Boost never enabled. goldsky boost get to confirm, goldsky boost reveal for the right key.
Hit rate near zeroBlock tags in the request. latest/pending/safe/finalized/earliest always forward, including as an eth_getLogs range bound. Pin to concrete hex heights.
First call is MISS, and the user stops thereThe reader warms that range from storage. Repeat the call.
A large batch reports MISS despite obvious hitsFor batches x-cache is HIT only if every item was served. Read x-edge-billable. Also check the array is ≤100 items — larger ones forward whole.
An eligible method still forwardsBoost doesn't hold that specific data yet. Eligible ≠ guaranteed; confirm with boost requests --method <m>, which shows the miss reason.
Requests on a chain are rejectedThe chain has no active upstream, or is switched off. goldsky boost get shows status per chain; boost set --chain <c> --enabled true re-enables.
Chain isn't available at allBoost only offers genesis-covered chains. Check goldsky boost chains; if absent, Edge (/edge) is the alternative.
A config change is refusedVerification gate. See above — and confirm existing traffic is unaffected.
Provider rejecting forwarded callsThere is no fixed egress IP list to allowlist; Boost forwards from Fargate tasks in us-east-1, us-west-2, eu-central-1 with addresses that rotate. Authenticate Boost with a credential (endpoint URL or configured header) instead of allowlisting it.
Subscriptions don't workBoost is HTTP-only, no WebSocket. Keep eth_subscribe / wss:// pointed at the provider.
Browser calls blocked by CORSAllowed domains are set on the endpoint (boost update --allowed-domains), not by the provider. Credentialed requests aren't permitted.
Rate limit questionsBoost's budget is Goldsky-managed and the API refuses a rate-limit budget sent for a Boost endpoint — unlike Edge. Unmetered within fair use.

Start a real diagnosis with:

bash
goldsky boost get                                  # per-chain status and active upstreamsgoldsky boost requests --limit 50                  # what actually happened, with miss reasonsgoldsky boost metrics --from <iso> --bucket-size 1h

Header forwarding

On a forward, the provider receives the caller's headers plus any configured on the endpoint (configured ones win on a name clash). Boost withholds only what it manages: X-ERPC-Secret-Token, Host, Content-Type/Accept (pinned to application/json), Content-Length, Accept-Encoding/Content-Encoding, Cookie, Proxy-Authorization, and hop-by-hop headers. Trace context (traceparent, tracestate, b3, baggage), User-Agent, and custom x-* pass through.

X-Forwarded-For reaches the provider as a whole unmodified chain. Read the last entry — that's the address Goldsky's load balancer observed; earlier entries are caller-supplied and untrusted.

Coming back, the provider's Cache-Control, Retry-After, ETag and custom x-* ride through. Dropped: Content-Encoding, Content-Type, Content-Length, Set-Cookie, Access-Control-*, x-cache/x-edge-*, x-goldsky-*.

Boost or Edge?

They share a host and are easy to confuse:

  • Boost fronts the provider the user already has. Free, bring-your-own upstream, only genesis-covered chains, HTTP only. Use it to make an existing bill smaller.
  • Edge (/edge) is Goldsky's own managed RPC, which they'd buy instead of a provider. Far more chains, configurable rate limits, hedging and failover.

"I want to spend less with Alchemy" → Boost. "I want to stop using Alchemy" → Edge. A user can also point Boost's upstream at Edge.

Related

来源与署名

来源:goldsky-io/goldsky-agent位于skills/boost提交aa52f88

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架