← all adapters
chainlink-style
simulates Chainlink Data Feeds + Functions + Automation 1.0
restadapter v0.2.021 routes
verification
use it
# add to stunt.yaml
services:
chainlink:
adapter: embedded:chainlink-style
# then
$ stunt upThe embedded: source extracts this adapter from the binary — no git clone, fully offline.
how to mock the Chainlink Data Feeds + Functions + Automation API locally
Install stunt, paste the service block above into stunt.yaml, run stunt up — then point your client at localhost instead of Chainlink Data Feeds + Functions + Automation. It works offline, keeps state across requests and restarts, and every response is synthetic: the route shapes, status codes, pagination, and webhook delivery follow the real Chainlink Data Feeds + Functions + Automation 1.0 surface — the data is fake, the behavior is real.
backing stores
feedssecretsupkeeps
api surface (21)
generated from the adapter manifest — exactly what boots, nothing more
21 routes
GET/feeds
GET/feeds/{feedID}
GET/feeds/{feedID}/latestRoundData
GET/feeds/{feedID}/rounds
GET/feeds/{feedID}/rounds/{roundId}
POST/v2/functions/createSecrets
POST/v2/functions/encryptSecrets
POST/v2/functions/createRequest
GET/v2/functions/request/{requestID}
GET/v2/functions/secrets/{secretID}
POST/v2/automation/registerUpkeep
GET/v2/automation/upkeeps
GET/v2/automation/{id}
POST/v2/automation/{id}/fund
POST/v2/automation/{id}/cancel
POST/v2/automation/{id}/withdraw
GET/v2/automation/{id}/check
POST/v2/automation/{id}/perform
GET/v2/automation/{id}/performs
GET/v2/ccip/messages
GET/v2/ccip/lane/{src}/{dst}
VM-verified behaviors (20)
- ✓the five default feeds seed on first read and narrow by network
- ✓the feed summary and latestRoundData agree at the same instant
- ✓rounds roll one per virtual minute with phase-1 string roundIds
- ✓round history pages newest-first and getRoundData resolves ids
- ✓unknown feeds and rounds answer the documented 404 envelopes
- ✓v2 endpoints reject missing and wrong bearers
- ✓encryptSecrets is a deterministic version-0 canonical envelope
- ✓createSecrets bumps the slot version and never leaks plaintext
- ✓a request walks queued -> running -> fulfilled on the virtual clock
- ✓the fulfill event packs chainId << 64 | gasUsed
- ✓simulate_fail lands the real fulfillment-code vocabulary
- ✓registration validates the registry shape and funds in juels
- ✓the keepers network performs on cadence until the LINK runs out
- ✓check gates eligibility and a manual perform charges the premium
- ✓cadence performs interleave chronologically with manual ones
- ✓cancel freezes the upkeep and withdraw pays out exactly once
- ✓the upkeep list derives state for every entry and 404s unknown ids
- ✓ccip messages require the bearer token
- ✓lane status echoes the requested pair with its ramp addresses
- ✓the seeded test token dies after its ten-year virtual window
Not implemented (6)
- No Functions subscription management: create, fund, update, cancel subscription
- No Functions requests listing or DON listing endpoints
- No Automation update, pause, or resume endpoints for upkeeps
- No CCIP message detail, executions, token-pool, or send endpoints
- No Data Streams product: stream auth, WebSocket report feeds, report upload
- No feed timeseries/chart history endpoint beyond /rounds paging
Differs from the real API (7)
- feed rounds aggregate per 60s heartbeat vs real deviation/3600s; answers drift ±0.25%
- DON secrets use a deterministic HMAC envelope, not real randomized ECIES encryption
- Functions requests: queued 0-1s, running 1-3s, fulfilled at +3s (derive-on-read)
- createRequest accepts simulate_fail to inject failures; real sandbox has no trigger
- keeper performs are derived on read per elapsed cadence tick; real network performs on-chain
- invalid_cursor error code is lowercase while every other code is SCREAMING_SNAKE
- CCIP lane status is active with ramp addresses for any src/dst pair, including nonexistent chains
want more of the Chainlink Data Feeds + Functions + Automation surface? adapters are YAML + Starlark — the authoring guide covers adding routes, fixtures, and state machines. Open an issue for anything big first, or just file a PR — merged routes ship in the next release.