Community-driven operator opportunities for blockchain protocols. We use minimal validation and flexible schemas to enable discovery of new operator patterns.
Three steps to contribute:
- Copy any file from
protocols/
- Edit with your protocol details + add your logo to
logos/
- Submit a pull request
Automated validation: Every PR is automatically validated for data structure, required fields, logo presence, and security checks. You'll get immediate feedback if something needs fixing.
Bonus points if you surprise us with operator angles we hadn't considered.
Only three fields are mandatory:
id
- unique identifier (lowercase-recommended)name
- protocol display namedescription
- what the protocol does + operator opportunities
Logo is also required:
- Add your protocol logo as
logos/{id}.svg
(must match your protocolid
) - SVG format only (keeps file sizes small and scalable)
- Recommended size: 24x24px or similar square dimensions
- Keep file size under 100KB (validation will warn if larger)
For your protocol to display properly in the operator dashboard, we recommend including these fields:
Operator Opportunities (opportunities
array):
Each protocol can have multiple operator roles. Each opportunity should include:
id
- unique identifier for this opportunity (e.g., "aztec-sequencer")type
- operator role type (see supported types below)status
- network status:mainnet
,testnet
, orbeta
requirements
- array of requirement tiers (minimum, recommended, institutional)
Supported Operator Types:
validator
- Network validators / consensus operatorsminipool_operator
- Minipool operators (e.g., Rocket Pool)dvt_operator
- Distributed Validator Technology operatorsvault_operator
- Vault operators (e.g., EtherFi)sequencer
- Transaction sequencers / block buildersprover
- Proof generatorszk_prover
- Zero-knowledge proof generatorsfull_node
- Full node operatorslight_client
- Light client operatorslight_node
- Light node operatorsrelayer
- Cross-chain relayers / bridgesinfrastructure_tool
- Infrastructure tools and services
Hardware Requirements (per tier):
tier
-minimum
,recommended
,institutional
(ordatacenter
/optimal
for compatibility)entry
-permissionless
orpermissioned
hardware
object:cpuCores
- Number of CPU coresramGb
- RAM in gigabytesstorageGb
- Storage in gigabytesstorageMedia
-SSD
,NVME
, orHDD
upMbps
/downMbps
- Network bandwidthiopsRead
/iopsWrite
- I/O operations per second (optional)staticIpPreferred
- Boolean (optional)upsRequired
- Boolean (optional)notes
- Additional requirements or context (optional)
Example Structure:
{
"id": "your-protocol",
"name": "Your Protocol",
"opportunities": [
{
"id": "your-protocol-validator",
"type": "validator",
"status": "mainnet",
"requirements": [
{
"tier": "recommended",
"entry": "permissionless",
"hardware": {
"cpuCores": 8,
"ramGb": 32,
"storageGb": 2000,
"storageMedia": "NVME",
"upMbps": 100,
"downMbps": 100,
"notes": "Additional info here"
}
}
]
}
]
}
Everything else is optional. Add whatever helps operators understand your protocol.
Our flexible schema means you can include custom categories, unique operator types, reward structures, governance details, or community links in any format you prefer.
We want to learn from your submissions. Creative contributions help us discover new operator categories and requirements patterns.
# Validate all protocol files (comprehensive validation)
node scripts/validate.js
# Compile individual files into protocols.json
node scripts/compile.js
Validation philosophy: Comprehensive automated validation ensures data integrity while maintaining flexibility for creative contributions.
When updating protocol data as a maintainer with direct repository access:
# Edit individual protocol files
# Example: protocols/avail.json, protocols/celestia.json, etc.
# Validate your changes
node scripts/validate.js
# Compile individual files into protocols.json
node scripts/compile.js
# Commit and push
git add protocols/*.json protocols.json
git commit -m "update protocol descriptions"
git push
If you encounter conflicts during push:
# Pull with rebase
git pull --rebase
# If there are conflicts in protocols.json, recompile to resolve
node scripts/compile.js
# Mark as resolved and continue
git add protocols.json
git rebase --continue
# Push changes
git push
After pushing changes to the operators repo:
# Navigate to frontend repo
cd ../operators-frontend
# Update submodule to latest
git submodule update --remote data/operators
# Commit the submodule update
git add data/operators
git commit -m "chore: update operators submodule"
git push
The frontend will automatically:
- Pull the latest protocol data via the submodule
- Sync logos during build (via
npm run sync-logos
) - Deploy changes (if auto-deploy is configured)
Important: Always edit individual protocol files in protocols/
directory, then run the compile script. Never edit protocols.json
directly as it's auto-generated.
Every PR automatically runs:
- Comprehensive validation: JSON structure, required fields, data types, URL validation
- Logo validation: SVG format, file size checks, required logo presence
- Security checks: XSS prevention, malicious content detection
- Compilation testing: Ensures all data compiles correctly
Contributors get immediate feedback with specific error messages and helpful suggestions.
This repository works seamlessly with the operators-frontend dashboard:
operators repo (this repo) → operators-frontend repo
───────────────────────── ─────────────────────────
Individual files in protocols/ Git submodule: data/operators/
↓ ↓
Validation (CI) Reads from submodule
↓ ↓
Compilation API route /api/protocols
↓ ↓
protocols.json Dashboard components
- Contributors add protocols - Submit individual JSON files to
protocols/
directory - Automated validation - CI validates structure, types, and logos on every PR
- Compilation - Individual files are compiled into
protocols.json
- Frontend consumption - Frontend uses this repo as a git submodule
- Automatic sync - Frontend reads from submodule server-side with caching
The frontend repo includes this repository as a git submodule at data/operators/
:
# Initialize submodule (first time)
git submodule update --init --recursive
# Update submodule to latest
cd data/operators
git pull origin main
cd ../..
git add data/operators
git commit -m "chore: update operators data"
# Or use the sync script
npm run sync-logos # Downloads logos from GitHub
You only need to work with this repository:
- Fork this repo
- Add your protocol JSON file to
protocols/
- Add your logo SVG to
logos/
- Submit a pull request
- Automated CI validates your submission
- Once merged, frontend automatically picks up changes via submodule
No manual frontend updates needed - the git submodule system handles synchronization.
Questions? Open an issue or check CONTRIBUTING.md for detailed examples.
Want to add your protocol? We're excited to see what operator opportunities you'll show us.