[Datasets]

On-chain / alternate series dataset plugins — fetchDataset contract, DefiLlama TVL, GeckoTerminal DEX OHLCV.

Datasets

Abstract

A dataset plugin loads non-OHLCV (or alternate OHLCV) series for the chart host (protocol TVL, DEX pool candles, funding, events). Kind is dataset on the unified registry. Phase 1 surfaces DefiLlama protocol TVL; Phase 2 adds GeckoTerminal pool OHLCV and derived TVL events. UI: On-Chain panel. Contract: src/plugins/types.ts (DatasetPlugin) and src/onchain/types.ts.

Conceptual model

Interface surface

interface DatasetPlugin {
  id: string;
  name: string;
  kind: 'dataset';
  fetchDataset(opts: DatasetFetchOpts): Promise<OnchainDataset>;
  searchInstruments?(query: string, config?: Record<string, unknown>): Promise<OnchainInstrument[]>;
  capabilities?: { needsNetwork?: boolean; needsProxy?: boolean; /* … */ };
}

DatasetFetchOpts

FieldNotes
instrumentchainId, optional protocolId / address, metric, optional facet, symbol label
resolutione.g. 1d, 1h
startTime / endTimeunix seconds (optional window)
limitoptional max points
signalAbortSignal
configplugin config bag (baseUrl, …)

OnchainDataset

FieldNotes
kindohlcv | scalar_series | multi_series | events | table
points / series / bars / eventspayload shape depends on kind
provenance{ provider, queryId?, url? } — required for UI honesty
finalitypending | safe | finalized | unknown
synthetictrue when OHLC was synthesized from marks

Providers

idNameNetworkNotes
defillama-tvlDefiLlama TVLyesProtocol TVL history; browser uses Worker llama proxy by default
geckoterminalGeckoTerminalyesDEX pool OHLCV + pool search; browser uses Worker gecko proxy by default

Helpers (not only plugins):

ModuleRole
src/onchain/defillama.tsProtocol TVL fetch + history parse
src/onchain/geckoterminal.tsPool OHLCV parse/map, search, interval/network maps
src/onchain/events.tsbuildTvlSpikeEvents from scalar TVL points
src/onchain/proxy.tsresolveDefiLlamaBaseUrl / resolveGeckoTerminalBaseUrl

Worker proxy (CORS)

Default bases (when plugin config.baseUrl is empty):

{store.endpoint}/api/onchain/llama
{store.endpoint}/api/onchain/gecko

DefiLlama

Client pathWorkerUpstream
/protocolsGET /api/onchain/llama/protocolshttps://api.llama.fi/protocols
/protocol/:slugGET /api/onchain/llama/protocol/:slughttps://api.llama.fi/protocol/:slug

GeckoTerminal

Client pathWorkerUpstream
/networks/:net/pools/:addr/ohlcv/:tfGET /api/onchain/gecko/networks/.../ohlcv/...https://api.geckoterminal.com/api/v2/networks/.../ohlcv/...
/search/poolsGET /api/onchain/gecko/search/poolshttps://api.geckoterminal.com/api/v2/search/pools

Allowlisted query keys:

  • OHLCV: aggregate, limit, currency, before_timestamp
  • Search: query, network, page, include

Address validation on the Worker: EVM 0x[a-fA-F0-9]{40} or Solana-style base58 ^[1-9A-HJ-NP-Za-km-z]{32,48}$. Network ids: ^[a-z0-9_]+$.

Resolver: src/onchain/proxy.ts. Handler: worker/src/onchain.ts.

Cache keys (IDB dataset cache):
provider|chainId|protocol|address|metric|facet|resolution via instrumentCacheKey.

Related