Hyperion Configuration¶
This guide walks you through configuring Hyperion after you have successfully installed the necessary dependencies and cloned/built the Hyperion codebase.
We will primarily use the hyp-config command-line tool provided with Hyperion. This tool helps initialize connection settings, manage configurations for different blockchain chains, and set up contract state indexing.
CLI Tool
Ensure you are in the root directory of your Hyperion installation (hyperion-history-api/) when running ./hyp-config commands. Run ./hyp-config --help for a full list of commands and options.
New failover option
Check Connections Reference to add the new failover option.
Step 1: Configure Infrastructure Connections¶
Hyperion needs to know how to connect to shared infrastructure components like Elasticsearch, RabbitMQ, Redis, and optionally MongoDB.
1.1 Initialize connections.json¶
Run the init command. It will prompt you for connection details and test connectivity to each service. If config/connections.json already exists, it will ask for confirmation before overwriting.
# Navigate to your Hyperion installation directory first
cd ~/hyperion-history-api # Or your specific path
./hyp-config connections init
Follow the interactive prompts to enter details for RabbitMQ, Elasticsearch, Redis, and MongoDB (if you plan to use state features).
The initialization command will create a connections.json file that follows the template in the Connections Reference Guide.
MongoDB setup
If you skip MongoDB setup here but later enable state features, you will need to manually edit config/connections.json to add the MongoDB connection details.
1.2 Test Connections¶
After initialization or manual editing, verify that Hyperion can connect to all configured services:
./hyp-config connections test
Address any connection errors reported by this command before proceeding.
1.3 (Optional) Reset Connections¶
If you need to start over with connection settings, you can reset the file (a backup will be created):
./hyp-config connections reset
Connections Reference
For detailed information on the structure and parameters within config/connections.json, see the Connections Reference Guide.
Step 2: Add and Configure Chains¶
Each blockchain you want Hyperion to index requires its own configuration file located in config/chains/.
2.1 Add a New Chain Configuration¶
Use the chains new command, providing a short alias for your chain (e.g., wax, eos, jungle4) and the required HTTP API and SHIP WebSocket endpoints for its node.
./hyp-config chains new <short-name> --http <node-http-url> --ship <node-ship-url>
# Example for WAX Mainnet:
./hyp-config chains new eos --http "http://127.0.0.1:8888" --ship "ws://127.0.0.1:8080
This command performs several actions:
- Tests connectivity to the provided HTTP and SHIP endpoints.
- Determines the Chain ID and default parser version.
- Creates the chain configuration file:
config/chains/<short-name>.config.jsonbased on a template. - Adds the chain's connection details (HTTP, SHIP, Chain ID, default ports) to
config/connections.json.
2.2 Customize Chain Configuration¶
Tailor Hyperion for your specific needs
The newly created config/chains/<short-name>.config.json file contains default settings. You MUST review and edit this file if you need to tailor Hyperion's behavior for your specific needs.
Key sections to review and potentially modify:
api: Server address/port, provider info, caching, rate limits, logos.indexer:start_on/stop_onblocks,rewrite,live_reader, filtering options.settings: Parser version, debug flags, index partitioning.scaling: Number of reader/indexer workers, queue sizes, batch sizes (critical for performance).features: Enable/disable functionalities like state table indexing (tables,contract_state), streaming, specific data indexing (index_transfer_memo).blacklists/whitelists: Define specific contracts/actions/tables to include or exclude.
Chain Config Reference
Consult the Chain Config Reference for a detailed explanation of all available parameters.
2.3 Verify Chain Configurations¶
After adding chains and editing their configurations, list them to ensure they are recognized:
./hyp-config chains list
Test the specific endpoints configured for a chain:
./hyp-config chains test <short-name>
# Example:
./hyp-config chains test wax
2.4 (Optional) Remove a Chain¶
To remove a chain's configuration file and its entry in connections.json (backups are created):
./hyp-config chains remove <short-name>
Step 3: Configure State Indexing (Optional)¶
Hyperion can index the current state of specific contract tables into MongoDB, enabling fast queries via the /v2/state/ API endpoints (especially get_table_rows). This is optional and complements the historical data stored in Elasticsearch.
Requirement: MongoDB
Enabling state indexing requires a correctly configured MongoDB connection in config/connections.json (See Step 1).
3.1 Enable State Features¶
Edit your config/chains/<short-name>.config.json file:
- To index system tables (balances, voters, proposals), set the relevant flags under
features.tablestotrue. - To index specific contract tables, set
features.contract_state.enabledtotrue.
3.2 Define Contracts/Tables for State Indexing¶
Use the hyp-config contracts commands to specify which contract tables should have their state indexed in MongoDB.
- List current configuration:
./hyp-config contracts list <chain-name>
- Add/Update a single table: (Indices JSON defines MongoDB indexes:
1=asc,-1=desc,"text"=text, etc.)
./hyp-config contracts add-single <chainName> <account> <table> <autoIndex> [indicesJson]
# Example: Index 'accounts' table in 'eosio.token', auto-create basic indexes
./hyp-config contracts add-single wax eosio.token accounts true
# Example: Index 'mydata' in 'mycontract', disable auto-index, add custom index on 'field1'
./hyp-config contracts add-single wax mycontract mydata false '{"field1": 1}'
- Add/Update multiple tables: (Uses a JSON array string for table definitions)
./hyp-config contracts add-multiple <chainName> <account> '<tablesJsonArray>'
# Example for eosio.token:
./hyp-config contracts add-multiple wax eosio.token '[{"name":"accounts","autoIndex":true,"indices":{"balance":-1}},{"name":"stat","autoIndex":true,"indices":{}}]'
Note
Changes made using hyp-config contracts modify the features.contract_state.contracts section of your config/chains/<chain>.config.json file.
3.3 Synchronize State Data¶
- Initial Sync: If you enable state indexing after the indexer has already processed blocks containing the relevant contract data, the MongoDB state tables might be incomplete. You will need to run a manual synchronization using the
hyp-controltool after starting the indexer (See Step 4).
# After indexer is running and connected via control port
./hyp-control sync contract-state <chain-name>
./hyp-control sync accounts <chain-name> # If features.tables.accounts = true
./hyp-control sync voters <chain-name> # If features.tables.voters = true
./hyp-control sync proposals <chain-name> # If features.tables.proposals = true
- Indexing During Run: If state features are enabled before the indexer starts processing the relevant blocks, it should populate the MongoDB state tables automatically as it processes the deltas.
Step 4: Running Hyperion Services¶
Hyperion uses the PM2 process manager. The primary way to manage services is via the ecosystem configuration file.
We provide scripts to simplify the process of starting and stopping your Hyperion Indexer or API instance.
4.1 Starting Individual Components (using convenience scripts)¶
You can use the provided scripts to start specific components for a single chain:
-
To run the indexer, execute
./run.sh [chain name]-indexer -
To run the api, execute
./run.sh [chain name]-api
Examples
# Start indexer for "wax" chain:
./run.sh wax-indexer
# Start API server(s) for "wax" chain:
./run.sh wax-api
Warning
The Hyperion Indexer is configured to perform an abi scan ("abi_scan_mode": true) as default. The abi_scan_mode is required to perform full history indexing. If you are starting from a snapshot, you can disable it and use the live reader directly (live_reader: true)
4.2 Stopping Components¶
Use the stop.sh script to stop an instance or the pm2 trigger:
Examples
# Stop API for "wax" chain:
./stop.sh wax-api
# Stop indexer for "eos" chain (allows graceful queue flush):
./stop.sh eos-indexer
# OR
pm2 trigger eos-indexer stop
Indexer Stop Behavior
Stopping the indexer with ./stop.sh or pm2 trigger sends a signal allowing it to finish processing items currently in memory and queues before shutting down fully. This can take time. Use pm2 stop <app-name> for an immediate (but potentially data-lossy) stop.
Step 5: Verify Operation¶
5.1 Check Process Status¶
List running processes managed by PM2:
pm2 list
Ensure your <chain>-indexer and <chain>-api processes are online.
5.2 Monitor Logs¶
View logs for specific components:
pm2 logs <app-name>
# Example:
pm2 logs wax-indexer
pm2 logs wax-api
Look for healthy indexing progress messages in the indexer logs and successful API startup messages (Hyperion API for <chain> ready...) in the API logs.
5.3 Check API Health¶
Query the health endpoint of your running API server (default port 7000):
curl -Ss "http://127.0.0.1:7000/v2/health" | jq # Use your API server IP/port
Review the status of Elasticsearch, RabbitMQ, Redis, Nodeos, and SHIP connections.
5.4 Perform Basic Queries¶
Test fundamental history endpoints:
# Get latest action
curl -Ss "http://127.0.0.1:7000/v2/history/get_actions?limit=1" | jq
# Get latest delta
curl -Ss "http://127.0.0.1:7000/v2/history/get_deltas?limit=1" | jq
If you enabled state features, test relevant /v2/state endpoints (e.g., get_tokens, get_voters, get_table_rows).
5.5 Check Data Stores (Optional)¶
- Use Kibana (if installed) to explore Elasticsearch indices (
<chain>-action-*,<chain>-delta-*, etc.). - Use
redis-clior RedisCommander (if installed via Docker) to inspect cached data. - Use
mongoshto inspect MongoDB databases (hyperion_<chain>) and collections (accounts,voters,proposals,<contract>-<table>).
Step 6: Configure Advanced Features (Optional)¶
Once the basic setup is running and verified, you can enable advanced features by editing your config/chains/<chain>.config.json file and restarting the relevant services (pm2 restart <app-name>).
Live Streaming¶
- Enable flags under
features.streaming.
{
"features": {
"streaming": {
"enable": true,
"traces": true,
"deltas": true
}
}
}
- By default, the stream api will be available on the port 1234, this can be configured by the
api.stream_portproperty in the chain config file. - Once you're done configuring, just restart both the indexer and api.
-
A quick test using
curl 127.0.0.1:1234/stream/should result in the output{"code":0,"message":"Transport unknown"}meaning the port is ready for websocket connections. Alternatively, you can check the api logs after restart for aWebsocket manager loaded!message -
Configure your reverse proxy (like NGINX) to handle WebSocket upgrades for the
/stream/path.
NGINX
# Example NGINX location block for streaming
location /stream/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:1234/stream/; # Use configured stream_port
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
- See the Stream Client Guide for usage.
Plugins¶
- Install and manage plugins using the
./hpmtool (Refer tohpm --helpand future plugin documentation). - Enable and configure installed plugins under the
pluginssection in your chain config file.
QRY Hub Integration¶
- Enable and configure connection under the
hubsection in your chain config file. - See the Connect to QRY Guide.
Next Steps¶
With Hyperion configured and running, you can now:
- Explore the full API Reference in the Swagger UI (
/v2/docs). - Learn how to query the API effectively in the Developer Guide.
- Consult the Troubleshooting Guides if you encounter issues.