Workspace IndexKnowledge Notes › An app key is a budget, not a login — what Alchemy's create-app flow is really asking

#57PoCdone 2026-09-16

An app key is a budget, not a login — what Alchemy's create-app flow is really asking

Alchemy's three-step Create app flow — create, choose chains, activate services — looks like account setup, but it is a budget decision. Every service you switch on (Node, Bundler, Gas Manager, userOp simulation, Webhooks, Transfers…) meters against the same compute-unit quota shown at the bottom of the page, keyed to that one app key. So an app is a unit of quota, rate limit, and revocation — and you create one per environment and role, not one per developer.

For Jayverse: one app for the devnet's upstream Sepolia fork (Node API only, read-heavy, its own key in Secret Manager), one for the Sepolia account-abstraction path (Bundler + Gas Manager + userOp simulation), and a separate one later for anything production. Name apps by environment-and-role, keep every key out of git, and read the dashboard per app so a runaway fork or a bundler test cannot starve the others.

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

StepWhat it looks likeWhat it actually sets
1. Create new appa namethe key, and therefore the quota, rate limit, and dashboard everything below shares
2. Choose chainsa network listwhich 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 servicestoggles: Webhooks, Transfers, Node, NFT, Token, Prices, Bundler, Debug, Gas Manager, Trace, Receipts, userOp Simulation, Websocketswhich 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".

ServiceWhat it isJayverse use
Node APIthe core JSON-RPC to nodes (eth_*)the devnet's fork upstream; every plain Sepolia read. The one service the devnet app needs
Websocketsa persistent bidirectional connection — subscriptions to new heads, logs, pending txswallet activity feed on Sepolia; not needed for the devnet, which has its own /ws
Webhookspush 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 APIhistorical transfers for any address across Ethereum and L2s, without an indexerNumber's portfolio history; Auditor's "who moved funds" evidence
Transaction Receipts APIevery receipt for a block in one callreconciliation crons (bridge locked = minted), indexers
Block Timestamp APIfetch a block by its timestamp"which block was market close at 09:00 KST" for Verex and the clock keeper
Token APItoken metadata and balances per addressthe wallet's balance widget and the exchange's balance shell
NFT APIlaunch, verify, analyze, trade and display NFTs across chainsPersonas listings and rental views, instead of hand-rolled indexing
Prices APIreal-time and historical token pricesNumber; not for JYVE — it has no external market, the pool ratio is its price
Bundler APIERC-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 Managersponsor 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 APIsimulate a user operation and return the asset changesthe wallet's simulate-before-sign for 4337 (phase 3), so the preview matches what the bundler will do
Debug API / Trace APItransaction internals and call tracesthe 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
  1. Name by environment-and-role, never by person. A key named after a developer outlives the developer.
  2. Activate only what the role needs. Fewer services on a key means a leak can do less.
  3. Put each key in Secret Manager under the service that uses it; never in .env files that get committed or in a Dockerfile layer.
  4. 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

Words and phrases from this page worth keeping, with the Korean meaning and the sentence they come from.

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"

← All Knowledge Notes · Workspace Index · Top ↑

앱 키는 로그인이 아니라 예산이다 — Alchemy의 create-app 흐름이 실제로 묻는 것

Alchemy의 3단계 Create app 흐름 — 생성, 체인 선택, 서비스 활성화 — 은 계정 설정처럼 보이지만 사실은 예산 결정입니다. 켜는 서비스마다(Node, Bundler, Gas Manager, userOp simulation, Webhooks, Transfers…) 페이지 하단에 보이는 같은 compute-unit 쿼터에서 차감되고, 그 쿼터는 앱 키 하나에 묶여 있습니다. 즉 앱은 쿼터·속도 제한·폐기의 단위이며, 개발자별이 아니라 환경과 역할별로 하나씩 만듭니다.

Jayverse에서는: devnet의 업스트림 Sepolia 포크용 앱 하나(Node API만, 읽기 위주, Secret Manager에 자체 키), Sepolia 계정 추상화 경로용 앱 하나(Bundler + Gas Manager + userOp simulation), 그리고 나중에 프로덕션용은 별도로. 앱 이름은 환경-역할로 짓고, 모든 키는 git 밖에 두며, 대시보드는 앱별로 읽어서 폭주하는 포크나 번들러 테스트가 다른 앱을 굶기지 못하게 합니다.

페이지는 "서비스는 나중에 언제든 추가할 수 있다"고 말하고, 그건 사실이지만 진짜 질문을 가립니다. 무엇이 무엇과 예산을 공유하는가. Compute unit은 호출마다 메서드별 단가로 앱 쿼터에서 차감되고, 처리량 제한도 앱 키 단위입니다. devnet의 포크 업스트림, AA 번들러, 웹훅 스트림을 키 하나 뒤에 두면 첫 번째 무거운 포크 동기화가 지갑의 simulate 호출을 속도 제한에 걸리게 합니다. 나누면 각각 자기 대시보드, 자기 스로틀, 키가 새면 자기 폐기 버튼을 갖습니다. "리필 속도가 진짜 상한"과 같은 교훈입니다. 헤드라인 쿼터보다 누가 함께 마시는지가 중요합니다.

동작 방식

세 단계가 결정하는 것

단계겉모습실제로 정하는 것
1. Create new app이름 하나키, 따라서 아래 모든 것이 공유하는 쿼터·속도 제한·대시보드
2. Choose chains네트워크 목록이 키가 서비스할 수 있는 네트워크 — 키 하나가 메인넷과 테스트넷을 함께 다룰 수 있고, 그래서 prod와 test가 키를 공유하면 안 된다
3. Activate services토글: Webhooks, Transfers, Node, NFT, Token, Prices, Bundler, Debug, Gas Manager, Trace, Receipts, userOp Simulation, Websockets이 키가 호출할 수 있는 과금 API — 각각 같은 풀에서 호출당 단가로 차감

Alchemy가 제공하는 것 — 서비스 카탈로그와 Jayverse에서의 용도

페이지의 토글 하나하나가 과금되는 API 계열입니다. 가운데 열은 Alchemy의 설명을 줄인 것이고, 오른쪽 열은 "필요 없음"까지 포함한 Jayverse의 솔직한 답입니다.

서비스무엇인가Jayverse 용도
Node API노드와 통신하는 핵심 JSON-RPC (eth_*)devnet의 포크 업스트림; 모든 일반 Sepolia 읽기. devnet 앱에 필요한 유일한 서비스
Websockets지속적인 양방향 연결 — 새 블록·로그·대기 tx 구독Sepolia에서의 지갑 활동 피드; devnet에는 자체 /ws가 있어 불필요
Webhooks온체인 데이터 변화 시 푸시 알림 (주소 활동, 채굴·드롭된 tx, 커스텀 필터)watchtower의 알림 소스와 Sepolia의 Verex 정산 감시자; devnet에서는 대신 폴링
Transfers API인덱서 없이 Ethereum과 L2 전반의 주소별 과거 전송 조회Number의 포트폴리오 이력; Auditor의 "누가 자금을 옮겼나" 증거
Transaction Receipts API블록의 모든 영수증을 한 번에대사 크론(브리지 locked = minted), 인덱서
Block Timestamp API타임스탬프로 블록 조회Verex와 clock 키퍼의 "KST 09:00 마감이 어느 블록이었나"
Token API토큰 메타데이터와 주소별 잔액지갑의 잔액 위젯과 거래소의 잔액 셸
NFT API체인 전반의 NFT 발행·검증·분석·거래·표시직접 인덱싱하는 대신 Personas 목록과 대여 화면
Prices API실시간·과거 토큰 가격Number; JYVE에는 아님 — 외부 시장이 없고 풀 비율이 곧 가격
Bundler APIuser operation용 ERC-4337 JSON-RPC (eth_sendUserOperation, 추정, 영수증)Sepolia의 Rabbit AA — 가스리스 베팅 경로. Anvil로 대체할 수 없는 실제 인프라
Gas Manager가스 전액 스폰서 또는 ERC-20으로 결제 (정책이 있는 호스팅 paymaster)가스리스 베팅과 세션 키 흐름; "스폰서 가스"를 매출원가 숫자로 바꾸는 항목
userOp Simulation APIuser operation을 시뮬레이션해 자산 변화를 반환4337용 지갑의 simulate-before-sign(3단계), 미리보기가 번들러의 실제 결과와 일치하도록
Debug API / Trace API트랜잭션 내부와 호출 추적simulate 디코더, Auditor 증거, 사고 포렌식

표는 열 단위로 읽으세요. devnet에서는 Node API만, 그것도 포크의 업스트림으로만 중요합니다. Anvil 자체의 ots_* 익스플로러 API, 프록시, 시드가 나머지를 로컬에서 대체합니다. Sepolia에서는 계정 추상화 3종(Bundler, Gas Manager, userOp Simulation)이 로컬 대체물이 없는 실제 인프라라서 자체 앱을 갖고, 데이터 API들(Transfers, Receipts, Token, NFT, Prices, Block Timestamp)은 Jayverse가 아니면 직접 돌려야 할 인덱서를 대체하며, Webhooks와 Websockets는 묻는 대신 알림을 받는 두 가지 방법입니다. 이름 있는 서비스가 읽을 때만 계열을 활성화하세요. 켜 두고 안 쓰는 API는 읽는 이 없는 쿼터 노출입니다.

환경과 역할별 앱 하나

jayverse-devnet-upstream   Sepolia · Node API만              → anvil의 포크 소스 (읽기 위주, 첫 동기화 때 폭증)
jayverse-sepolia-aa        Sepolia · Bundler + Gas Manager
                                     + userOp Simulation      → 공개 테스트넷의 Rabbit AA, MetaMask 7715 데모
jayverse-events            Sepolia · Webhooks / Websockets   → 인덱서와 watchtower, 필요해질 때
jayverse-prod-*            mainnet/Base · 필요에 따라          → 위의 어떤 것과도 키를 공유하지 않음
  1. 사람이 아니라 환경-역할로 이름을 짓습니다. 개발자 이름을 딴 키는 그 개발자보다 오래 남습니다.
  2. 역할에 필요한 것만 활성화합니다. 키에 걸린 서비스가 적을수록 유출 시 피해가 작습니다.
  3. 각 키는 그것을 쓰는 서비스 아래 Secret Manager에 둡니다. 커밋되는 .env 파일이나 Dockerfile 레이어에는 절대 넣지 않습니다.
  4. 사용량은 앱별로 봅니다. 대시보드의 앱별 화면이 나누는 이유의 전부입니다.

Jayverse에서의 위치

devnet은 Sepolia를 지연 방식으로 포크합니다. 건드리지 않은 계정이나 스토리지 슬롯은 처음 쓸 때 업스트림에서 가져오므로 compute-unit 소비는 건드린 상태의 양에 비례하고, 새 포크에서의 첫 시드가 가장 비싼 순간입니다(그래서 2026-09-14에 프레임워크 배포가 2분 28초 걸렸습니다). 그게 앱 하나입니다. 지갑의 simulate API, AA 번들러, 가스 스폰서십은 트래픽 모양이 다릅니다. 작은 호출이 많고 지연에 민감하므로 자기 앱을 갖습니다. devnet이 1차 대상이 되면 업스트림 앱의 사용량은 거의 0으로 떨어져야 하고, 그 자체가 서비스가 정말 옮겨갔다는 유용한 신호입니다.

확인된 것과 미확인

대시보드에서 직접 확인한 것: 3단계 흐름, 위의 서비스 목록, 서비스를 나중에 추가할 수 있다는 안내. 여기서 확인하지 않은 것: 메서드별 정확한 compute-unit 단가와 현재 등급별 처리량 제한 — devnet 업스트림 앱의 크기를 정하기 전에 Alchemy 레퍼런스 페이지에서 읽고, 페이지 하단의 숫자는 선택한 서비스들이 함께 쓰는 풀로 취급하세요.

출처: Alchemy — compute unit 비용 · Alchemy — 처리량 · Alchemy — API 개요

핵심 표현

이 페이지의 영어 본문에서 배울 만한 단어와 표현, 뜻과 나온 자리.

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"

← 전체 기술 노트 · 워크스페이스 인덱스 · 맨 위 ↑