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/shared[Add your license here]