Centralized repository for cryptocurrency and forex exchange rate data used across Sablier projects.
This repository serves as a single source of truth for price data shared between multiple Sablier repositories:
- Indexers (sablier-labs/indexers) - Real-time blockchain data indexing
- Accounting (sablier-labs/business) - Financial reporting and accounting
By centralizing the data here, we avoid duplication and ensure consistency across projects.
All price data is sourced from industry-standard APIs:
- Cryptocurrency Prices: CoinGecko API - Daily historical prices in USD
- Forex Exchange Rates: CurrencyFreaks API - Daily GBP/USD exchange rates
Price data is organized in data/crypto/ (cryptocurrency prices in USD) and data/forex/ (foreign exchange rates).
All files use tab-separated values (TSV) format with the following structure:
id output
"2025-02-01" 3296.390634843652
"2025-02-02" 3125.0386801320924We use this data structure to make it easier to use the files in our Envio indexers.
Columns:
id: Date in ISO 8601 format (YYYY-MM-DD), wrapped in double quotesoutput: USD price as a decimal number (high precision)
Notes:
- Dates are in UTC timezone
- Dates are sorted chronologically
- No duplicate dates within a file
- Prices are daily closing prices (00:00 UTC)
Install the package via npm:
npm install @sablier/price-dataOr using Bun:
bun add @sablier/price-dataOnce installed, you can access the TSV data files from node_modules/@sablier/price-data/data/:
import { readFileSync } from "node:fs";
import { join } from "node:path";
// Read ETH prices
const dataPath = join(process.cwd(), "node_modules", "@sablier/price-data", "data/crypto/ETH_USD.tsv");
const ethPrices = readFileSync(dataPath, "utf-8");
// Parse TSV (skip header)
const lines = ethPrices.split("\n").slice(1);
const prices = lines.map((line) => {
const [dateQuoted, price] = line.split("\t");
return {
date: dateQuoted.replace(/"/g, ""), // Remove quotes
price: parseFloat(price),
};
});Alternatively, you can read the TSV files directly from this repository without installing the package.
Example: curl:
curl -s https://raw.githubusercontent.com/sablier-labs/price-data/main/data/crypto/ETH_USD.tsv | head -n 10Example (fetch with Node.js):
const response = await fetch("https://raw.githubusercontent.com/sablier-labs/price-data/main/data/crypto/ETH_USD.tsv");
const ethPrices = await response.text();
// Parse TSV (skip header)
const lines = ethPrices.split("\n").slice(1);
const prices = lines.map((line) => {
const [dateQuoted, price] = line.split("\t");
return {
date: dateQuoted.replace(/"/g, ""), // Remove quotes
price: parseFloat(price),
};
});For projects that need version-locked data, add this repository as a Git submodule:
git submodule add https://github.com/sablier-labs/price-data.gitTODO