Why
The page says "you can always add more services later", which is true, and hides the real question: what shares a budget with what. Compute units are charged per call, priced by method, and drawn from the app's quota; throughput limits are per app key too. Put the devnet's fork upstream, the AA bundler, and a webhook stream behind one key and the first heavy fork sync will rate-limit the wallet's simulate calls. Split them and each has its own dashboard, its own throttle, and its own revoke button when a key leaks. That is the same lesson as "the refill rate is the real cap": the headline quota matters less than who else is drinking from it.
How it works
What the three steps decide
| Step | What it looks like | What it actually sets |
|---|---|---|
| 1. Create new app | a name | the key, and therefore the quota, rate limit, and dashboard everything below shares |
| 2. Choose chains | a network list | which networks this key may serve — one key can span mainnet and testnets, which is exactly why prod and test should not share one |
| 3. Activate services | toggles: Webhooks, Transfers, Node, NFT, Token, Prices, Bundler, Debug, Gas Manager, Trace, Receipts, userOp Simulation, Websockets | which metered APIs this key may call; each has its own per-call cost against the same pool |
What Alchemy provides — the service catalogue, and where Jayverse would use each
Each toggle on the page is a metered API family. The middle column is Alchemy's own description, shortened; the right column is the honest Jayverse answer, including "not needed".
| Service | What it is | Jayverse use |
|---|---|---|
| Node API | the core JSON-RPC to nodes (eth_*) | the devnet's fork upstream; every plain Sepolia read. The one service the devnet app needs |
| Websockets | a persistent bidirectional connection — subscriptions to new heads, logs, pending txs | wallet activity feed on Sepolia; not needed for the devnet, which has its own /ws |
| Webhooks | push notifications when on-chain data changes (address activity, mined/dropped txs, custom filters) | the watchtower's alert source and Verex's resolution watcher on Sepolia; on the devnet, poll instead |
| Transfers API | historical transfers for any address across Ethereum and L2s, without an indexer | Number's portfolio history; Auditor's "who moved funds" evidence |
| Transaction Receipts API | every receipt for a block in one call | reconciliation crons (bridge locked = minted), indexers |
| Block Timestamp API | fetch a block by its timestamp | "which block was market close at 09:00 KST" for Verex and the clock keeper |
| Token API | token metadata and balances per address | the wallet's balance widget and the exchange's balance shell |
| NFT API | launch, verify, analyze, trade and display NFTs across chains | Personas listings and rental views, instead of hand-rolled indexing |
| Prices API | real-time and historical token prices | Number; not for JYVE — it has no external market, the pool ratio is its price |
| Bundler API | ERC-4337 JSON-RPC for user operations (eth_sendUserOperation, estimates, receipts) | Rabbit AA on Sepolia — the gasless bet path. Real infra, not replaceable by Anvil |
| Gas Manager | sponsor gas entirely, or let users pay in an ERC-20 (a hosted paymaster with policies) | gasless bets and session-key flows; the line that turns "sponsored gas" into a cost-of-goods number |
| userOp Simulation API | simulate a user operation and return the asset changes | the wallet's simulate-before-sign for 4337 (phase 3), so the preview matches what the bundler will do |
| Debug API / Trace API | transaction internals and call traces | the simulate decoders, Auditor evidence, incident forensics |
Read the table by column. On the devnet, only Node API matters, and only as the fork's upstream — Anvil's own ots_* explorer API, the proxy, and the seed replace the rest locally. On Sepolia, the account-abstraction trio (Bundler, Gas Manager, userOp Simulation) is real infrastructure with no local substitute, which is why it gets its own app; the data APIs (Transfers, Receipts, Token, NFT, Prices, Block Timestamp) replace indexers Jayverse would otherwise have to run; Webhooks and Websockets are the two ways to be told instead of asking. Activate a family only when a named service reads it — an activated-but-unused API is quota exposure with no reader.
One app per environment and role
jayverse-devnet-upstream Sepolia · Node API only → the fork source for anvil (read-heavy, bursty on first sync)
jayverse-sepolia-aa Sepolia · Bundler + Gas Manager
+ userOp Simulation → Rabbit AA on the public testnet, MetaMask 7715 demos
jayverse-events Sepolia · Webhooks / Websockets → indexers and the watchtower, if and when
jayverse-prod-* mainnet/Base · as needed → never shares a key with anything above
- Name by environment-and-role, never by person. A key named after a developer outlives the developer.
- Activate only what the role needs. Fewer services on a key means a leak can do less.
- Put each key in Secret Manager under the service that uses it; never in .env files that get committed or in a Dockerfile layer.
- Watch usage per app. The dashboard's per-app view is the whole point of splitting.
Where it lands in Jayverse
The devnet forks Sepolia lazily: every untouched account or storage slot is fetched from the upstream on first use, so compute-unit spend is proportional to state touched, and the first seed on a fresh fork is the expensive moment (a framework deploy took 2 m 28 s on 2026-09-14 for that reason). That is one app. The wallet's simulate API, the AA bundler, and the gas sponsorship are a different traffic shape — many small calls, latency-sensitive — and get their own. When the devnet becomes the primary target, the upstream app's usage should fall to almost nothing, which is itself a useful signal that services really moved.
Verified and unverified
Verified from the dashboard itself: the three-step flow, the service list above, and the note that services can be added later. Not verified here: the exact compute-unit cost per method and the current throughput limits per tier — read them from Alchemy's reference pages before sizing the devnet's upstream app, and treat the number at the bottom of the page as the pool the selected services draw from.
Sources: Alchemy — compute unit costs · Alchemy — throughput · Alchemy — API overview
Key expressions
| Expression | 뜻 · 쓰이는 자리 |
|---|---|
| meter against | ~에 대해 사용량을 측정해 과금하다 · API 호출이 할당량을 깎아 먹을 때. "meters against the same compute-unit quota" |
| keyed to | ~에 연동된, ~에 묶인 · 여러 항목이 하나의 키/기준에 종속될 때. "keyed to that one app key" |
| drawn from (a quota) | (할당량 등에서) 끌어다 쓰이는 · 비용이 공동 자원에서 차감될 때. "throughput limits are per app key too" |
| starve | (자원을) 고갈시키다, 굶주리게 하다 · 한 작업이 다른 작업이 쓸 자원을 다 써버릴 때. "cannot starve the others" |
| throttle | 속도 제한(을 걸다) · 트래픽이나 호출량을 인위적으로 억제할 때. "its own throttle" |
| outlive | ~보다 오래 남다 · 사람은 떠나도 이름을 딴 자원은 남을 때. "outlives the developer" |
| lazily | 필요할 때만, 지연 방식으로 · 데이터를 미리 다 가져오지 않고 쓸 때마다 가져올 때. "forks Sepolia lazily" |
| proportional to | ~에 비례하는 · 비용이나 사용량이 다른 값에 정비례할 때. "proportional to state touched" |
| size (v.) | 규모를 산정하다, 맞추다 · 시스템 용량을 미리 계산해 맞출 때. "before sizing the devnet's upstream app" |
| quota exposure with no reader | 아무도 쓰지 않는데 할당량만 노출된 상태 · 켜뒀지만 안 쓰는 기능이 위험만 키울 때. "an activated-but-unused API is quota exposure with no reader" |
| ERC-4337 | 계정 추상화 표준(ERC-4337) · 번들러가 처리하는 유저오퍼레이션의 JSON-RPC 규격을 정의하는 이더리움 표준. "ERC-4337 JSON-RPC for user operations" |
| paymaster | 가스비 대납자(paymaster) · 사용자 대신 가스를 후원하거나 ERC-20으로 받게 해주는 주체, Gas Manager가 이를 호스팅. "a hosted paymaster with policies" |
| userOp | 유저오퍼레이션(User Operation) · ERC-4337에서 EOA 대신 번들러·페이마스터가 처리하는 트랜잭션 단위. "simulate a user operation and return" |