Skip to content

sablier-labs/price-data

Repository files navigation

Sablier Price Data

Centralized repository for cryptocurrency and forex exchange rate data used across Sablier projects.

Overview

This repository serves as a single source of truth for price data shared between multiple Sablier repositories:

By centralizing the data here, we avoid duplication and ensure consistency across projects.

Data Sources

All price data is sourced from industry-standard APIs:

Data Structure

Price data is organized in data/crypto/ (cryptocurrency prices in USD) and data/forex/ (foreign exchange rates).

TSV Format

All files use tab-separated values (TSV) format with the following structure:

id	output
"2025-02-01"	3296.390634843652
"2025-02-02"	3125.0386801320924

We 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 quotes
  • output: 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)

Installation

Install the package via npm:

npm install @sablier/price-data

Or using Bun:

bun add @sablier/price-data

Usage

Package Import

Once 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),
  };
});

Direct File Access

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 10

Example (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),
  };
});

Git Submodule

For projects that need version-locked data, add this repository as a Git submodule:

git submodule add https://github.com/sablier-labs/price-data.git

Updating Data

TODO

About

Centralized price data repository for Sablier projects

Resources

License

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •