An open-source off-chain oracle system that provides real-world stock price data to the Stellar network in a secure, modular, SEP-compliant way.
This project fetches stock prices from multiple external financial APIs, normalizes and aggregates them, cryptographically signs the results, exposes them via a backend API, and supports on-chain submission to a Stellar oracle contract, so smart contracts can depend on real stock prices.
The goal is to make this reliable, testable, and extensible, with each part implemented as a separate app or package in this monorepo.
The system consists of the following stages:
- Ingestor - Connects to external stock price APIs
- Aggregator - Normalizes, filters, and aggregates data
- Signer - Produces signed proofs of aggregated prices
- API Publisher - Exposes a REST/WebSocket endpoint
- Transactor - Submits signed data on-chain
- Smart Contracts - SEP-compliant Oracle on Stellar
- Frontend Demo - UI for visualizing feeds
Data flows from raw external sources β ingestor β aggregator β signer β API β on-chain oracle.
/oracle-stocks-monorepo
βββ apps/
β βββ ingestor/ # Connects to external stock price APIs
β βββ aggregator/ # Normalizes, filters, and aggregates data
β βββ api/ # REST/WebSocket API endpoint
β βββ transactor/ # Submits signed data on-chain
β βββ frontend/ # UI for visualizing feeds
β βββ smart-contracts/ # SEP-compliant Oracle on Stellar
βββ packages/
β βββ shared/ # Shared utilities, types, and constants
β βββ signer/ # Cryptographic signing of price data
βββ tests/ # Integration and E2E tests
βββ docs/ # Documentation
βββ infra/ # Infrastructure as code
βββ .github/ # GitHub workflows and templates
βββ turbo.json # Turborepo configuration
βββ README.md
Each app will be developed one by one using issue prompts that include:
- Context and goals
- Expected inputs and outputs
- Tech stack and conventions
- Acceptance criteria
- Minimal scaffolding (just enough to get started)
We will not build everything at once β each issue will introduce the next piece.
Contributors should:
- Read the contextual issue
- Understand how their module fits into the architecture
- Implement the minimum viable feature first
- Add tests and documentation
- Submit PRs with clear description
- Node.js >= 18
- npm >= 9
npm install# Run all apps in development mode
npm run dev
# Run a specific app
npm run dev --filter=@oracle-stocks/ingestor
# Build all apps and packages
npm run build
# Lint all code
npm run lint
# Type check
npm run check-typesSee the docs/ directory for detailed documentation.
Integration and end-to-end tests are located in the tests/ directory.
# Run all tests
npm test
# Run tests for a specific package
npm test --filter=@oracle-stocks/sharedBefore pushing, verify that the full CI pipeline passes locally:
npm ci && npm run lint && npm run check-types && npm run build && npm test| Command | What it does |
|---|---|
npm run lint |
Runs ESLint across all workspaces via Turborepo |
npm run check-types |
Runs tsc --noEmit in all TypeScript workspaces |
npm run build |
Builds all apps and packages via Turborepo |
npm test |
Runs Jest tests in all workspaces |
CI runs these same steps automatically on every push and PR to main and develop.
We welcome contributions and encourage responsible collaboration.
MIT License