edofox19/MetaLayerPublic

AI summary: A chain-agnostic protocol for indexing and normalizing cross-chain on-chain data into a unified schema.

Stars
29
Forks
0
Watchers
1
Open issues
0
Open PRs
0
Contributors
~1
Commits
178
Branches
1

No licenseCreated Jan 16, 2024Last push 1mo ago

Star history

since Jun 21, 2026
01020Jun 2026Jul 2026Jul 2026Aug 2026
29 stars as of Aug 7, 2026, tracked back to Jun 21, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 1 commit2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
1 commits in the last yearLessMore

What MetaLayer does

MetaLayer operates as a middleware protocol between blockchain networks and decentralized applications. It ingests raw data from multiple chain RPCs, including token metadata, NFT attributes, and contract events, and normalizes it into a single, consistent format. It provides a unified GraphQL and REST API, alongside WebSocket event streaming, eliminating the need for developers to build and maintain separate indexers for every supported blockchain. The system includes pluggable adapters for EVM chains and a configurable caching layer via PostgreSQL.

MetaLayer is built for Web3 development teams creating multi-chain decentralized applications, wallets, explorers, and analytics tools. It requires proficiency in Node.js, PostgreSQL, and blockchain infrastructure management.

  • Unified data schema: normalizes disparate metadata formats from various chains into one standard.
  • Multi-chain indexing: supports pluggable adapters to index data across multiple EVM networks.
  • Real-time event streaming: allows applications to subscribe to normalized on-chain events via WebSockets.
  • GraphQL and REST API: provides flexible querying interfaces for fetching indexed blockchain data.
  • Self-hosted infrastructure: can be run independently using Node.js and PostgreSQL to avoid third-party dependencies.

Where teams use it

Building cross-chain dApps

Querying token and NFT metadata across multiple chains without writing custom RPC logic.

Wallet development

Displaying consistent asset information and transaction history for users across different networks.

Analytics dashboards

Aggregating and normalizing contract events from various chains for unified reporting.

Real-time event monitoring

Listening to standardized WebSocket streams to trigger actions based on multi-chain events.

Getting started: npm install && npm run migrate

README

main branch

MetaLayer

A chain-agnostic metadata and indexing layer for cross-chain dApps.

License Build

Overview

MetaLayer is an open-source protocol and toolkit that sits between blockchains and applications, normalizing on-chain data — token metadata, NFT attributes, contract events, and transaction context — into a single, queryable format. Instead of writing separate indexers for every chain you support, MetaLayer gives you one consistent API and data schema across all of them.

It's built for teams shipping multi-chain dApps, wallets, explorers, and analytics tools who are tired of reconciling inconsistent RPC responses, mismatched decimals, and chain-specific event formats by hand.

Features

  • Unified data schema — token, NFT, and contract metadata normalized into one format regardless of source chain
  • Multi-chain indexing — pluggable adapters for EVM chains, with a common interface for adding non-EVM chains
  • Real-time event streaming — subscribe to normalized on-chain events via WebSocket
  • GraphQL & REST API — query indexed data without running your own node infrastructure
  • Caching layer — configurable TTLs to reduce redundant RPC calls
  • Self-hostable — run your own instance, or point at a hosted endpoint

Architecture

 Blockchain RPCs ──► Chain Adapters ──► Normalizer ──► Index Store ──► API Layer ──► Your App
                       (EVM, etc.)      (schema map)    (Postgres)    (GraphQL/REST)

Getting Started

Prerequisites

  • Node.js >= 18
  • PostgreSQL >= 14
  • An RPC endpoint for each chain you want to index (e.g. via Alchemy, Infura, or your own node)

Installation

git clone https://github.com/<org>/MetaLayer.git
cd MetaLayer
npm install
cp .env.example .env   # add your RPC URLs and DB connection string
npm run migrate
npm run dev

Usage

Query normalized token metadata across chains:

curl -X POST http://localhost:4000/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ token(address: \"0x...\", chain: \"ethereum\") { name symbol decimals totalSupply } }"}'

Subscribe to live contract events:

const socket = new MetaLayerClient({ endpoint: "ws://localhost:4000" });
socket.subscribe({ chain: "polygon", contract: "0x..." }, (event) => {
  console.log(event);
});

Project Structure

MetaLayer/
├── src/
│   ├── adapters/     # per-chain RPC adapters
│   ├── normalizer/   # raw data -> unified schema
│   ├── api/           # GraphQL + REST resolvers
│   └── stream/         # WebSocket event pipeline
├── tests/
└── docs/

Configuration

Variable Description Default
DATABASE_URL Postgres connection string
RPC_ETHEREUM RPC endpoint for Ethereum
RPC_POLYGON RPC endpoint for Polygon
CACHE_TTL Cache lifetime for indexed records (sec) 300
PORT API server port 4000

Contributing

Contributions are welcome. Please open an issue or submit a pull request.

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/your-feature)
  3. Commit your changes
  4. Push and open a PR

License

This project is licensed under the MIT License.

View on GitHub

Recent activity

commits and pull requests

Commits per week

last 52 weeks
10Week of 2025-08-03: 0 commitsWeek of 2025-08-10: 0 commitsWeek of 2025-08-17: 0 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 0 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 1 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsAug 3, 2025Jul 26, 2026
1 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 1 commitsSun 2:00 — 3 commitsSun 3:00 — 0 commitsSun 4:00 — 3 commitsSun 5:00 — 1 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 1 commitsSun 9:00 — 1 commitsSun 10:00 — 1 commitsSun 11:00 — 1 commitsSun 12:00 — 4 commitsSun 13:00 — 2 commitsSun 14:00 — 1 commitsSun 15:00 — 1 commitsSun 16:00 — 1 commitsSun 17:00 — 2 commitsSun 18:00 — 0 commitsSun 19:00 — 1 commitsSun 20:00 — 1 commitsSun 21:00 — 1 commitsSun 22:00 — 0 commitsSun 23:00 — 0 commitsMon 0:00 — 0 commitsMon 1:00 — 2 commitsMon 2:00 — 1 commitsMon 3:00 — 1 commitsMon 4:00 — 0 commitsMon 5:00 — 1 commitsMon 6:00 — 0 commitsMon 7:00 — 1 commitsMon 8:00 — 0 commitsMon 9:00 — 1 commitsMon 10:00 — 1 commitsMon 11:00 — 2 commitsMon 12:00 — 3 commitsMon 13:00 — 2 commitsMon 14:00 — 0 commitsMon 15:00 — 2 commitsMon 16:00 — 1 commitsMon 17:00 — 1 commitsMon 18:00 — 1 commitsMon 19:00 — 1 commitsMon 20:00 — 3 commitsMon 21:00 — 0 commitsMon 22:00 — 0 commitsMon 23:00 — 0 commitsTue 0:00 — 1 commitsTue 1:00 — 0 commitsTue 2:00 — 1 commitsTue 3:00 — 0 commitsTue 4:00 — 1 commitsTue 5:00 — 2 commitsTue 6:00 — 2 commitsTue 7:00 — 1 commitsTue 8:00 — 0 commitsTue 9:00 — 1 commitsTue 10:00 — 1 commitsTue 11:00 — 2 commitsTue 12:00 — 2 commitsTue 13:00 — 0 commitsTue 14:00 — 1 commitsTue 15:00 — 0 commitsTue 16:00 — 1 commitsTue 17:00 — 1 commitsTue 18:00 — 0 commitsTue 19:00 — 1 commitsTue 20:00 — 3 commitsTue 21:00 — 0 commitsTue 22:00 — 6 commitsTue 23:00 — 1 commitsWed 0:00 — 4 commitsWed 1:00 — 1 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 2 commitsWed 5:00 — 1 commitsWed 6:00 — 2 commitsWed 7:00 — 2 commitsWed 8:00 — 1 commitsWed 9:00 — 1 commitsWed 10:00 — 0 commitsWed 11:00 — 2 commitsWed 12:00 — 0 commitsWed 13:00 — 0 commitsWed 14:00 — 0 commitsWed 15:00 — 0 commitsWed 16:00 — 2 commitsWed 17:00 — 1 commitsWed 18:00 — 2 commitsWed 19:00 — 0 commitsWed 20:00 — 3 commitsWed 21:00 — 1 commitsWed 22:00 — 2 commitsWed 23:00 — 1 commitsThu 0:00 — 1 commitsThu 1:00 — 2 commitsThu 2:00 — 2 commitsThu 3:00 — 0 commitsThu 4:00 — 1 commitsThu 5:00 — 1 commitsThu 6:00 — 2 commitsThu 7:00 — 1 commitsThu 8:00 — 0 commitsThu 9:00 — 1 commitsThu 10:00 — 0 commitsThu 11:00 — 3 commitsThu 12:00 — 2 commitsThu 13:00 — 0 commitsThu 14:00 — 2 commitsThu 15:00 — 1 commitsThu 16:00 — 2 commitsThu 17:00 — 3 commitsThu 18:00 — 0 commitsThu 19:00 — 1 commitsThu 20:00 — 2 commitsThu 21:00 — 0 commitsThu 22:00 — 1 commitsThu 23:00 — 2 commitsFri 0:00 — 0 commitsFri 1:00 — 0 commitsFri 2:00 — 2 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 1 commitsFri 6:00 — 0 commitsFri 7:00 — 1 commitsFri 8:00 — 1 commitsFri 9:00 — 1 commitsFri 10:00 — 0 commitsFri 11:00 — 1 commitsFri 12:00 — 1 commitsFri 13:00 — 0 commitsFri 14:00 — 0 commitsFri 15:00 — 2 commitsFri 16:00 — 0 commitsFri 17:00 — 1 commitsFri 18:00 — 1 commitsFri 19:00 — 1 commitsFri 20:00 — 2 commitsFri 21:00 — 0 commitsFri 22:00 — 2 commitsFri 23:00 — 1 commitsSat 0:00 — 0 commitsSat 1:00 — 3 commitsSat 2:00 — 2 commitsSat 3:00 — 1 commitsSat 4:00 — 0 commitsSat 5:00 — 2 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 2 commitsSat 12:00 — 0 commitsSat 13:00 — 1 commitsSat 14:00 — 1 commitsSat 15:00 — 1 commitsSat 16:00 — 2 commitsSat 17:00 — 2 commitsSat 18:00 — 2 commitsSat 19:00 — 0 commitsSat 20:00 — 0 commitsSat 21:00 — 3 commitsSat 22:00 — 2 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits1 (100%)
Community commits0 (0%)

1 commits in total over the last year.

DateListRankStars gained
Jun 23, 2026daily#23+7