Enterprise-grade monitoring, synchronization, and deployment toolkit for HyperBEAM node operators on the Arweave/AO network
Caution
This repository is permanently archived and no longer maintained.
- ❌ No new features will be added
- ❌ No bug fixes will be provided
- ❌ No security updates will be issued
- ❌ Issues and pull requests are disabled
The code is provided "AS IS" for historical reference and educational purposes only. Use at your own risk.
Overview • Features • Architecture • Quick Start • Tools • Deployment • Attribution
hb-status is a comprehensive command-line toolkit designed for operating HyperBEAM nodes at scale on the Arweave / AO network. It provides deep observability into node synchronization state, automates the "hydration" process for AMM pools, and includes battle-tested scripts for deploying and managing node clusters.
┌─────────────────────────────────────────────────────────────────────────────┐
│ │
│ 🚀 MONITOR → 📊 SYNC → ✅ VERIFY → 🔄 AUTOMATE → 📈 SCALE │
│ │
│ Real-time Intelligent Cross-network Daemon-based Multi-node │
│ slot tracking hydration verification scheduling management │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
|
|
flowchart TB
subgraph Control["🎛️ hb-status Control Plane"]
direction TB
CLI["📊 index.ts<br/><i>Status Reporter</i>"]
SYNC["🔄 sync-daemon.ts<br/><i>Orchestrator</i>"]
HYDRATE["💧 hydrate-daemon.ts<br/><i>Advanced Sync</i>"]
VERIFY["✅ compare-reserves.ts<br/><i>Verifier</i>"]
UTIL["🔧 Utilities<br/><i>convert, filter, fetch</i>"]
end
subgraph Infra["☁️ HyperBEAM Infrastructure"]
direction TB
GW["🌐 Gateway / Load Balancer"]
HB1["📦 HB Node 1"]
HB2["📦 HB Node N"]
CU["⚙️ Compute Unit"]
end
subgraph Arweave["🔗 Arweave Network"]
AO["🌍 AO Network"]
end
CLI -- "GET /slot/current<br/>GET /compute/at-slot" --> GW
SYNC -- "POST /~cron@1.0/once<br/>GET /now" --> GW
HYDRATE -- "Batch sync<br/>Auto-schedule" --> GW
VERIFY -- "GET /now/reserves" --> GW
VERIFY -- "POST /dry-run" --> AO
GW --> HB1
GW --> HB2
HB1 <--> CU
HB2 <--> CU
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Config │────▶│ Monitor │────▶│ Sync │────▶│ Verify │
│ (JSON) │ │ Status │ │ Pools │ │ Reserves │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
│ │ │ │
│ ▼ ▼ ▼
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ │ Reports │ │ State │ │ Comparison │
│ │ (MD/CSV) │ │ (JSON) │ │ Reports │
│ └──────────────┘ └──────────────┘ └──────────────┘
│
└─────────────────────────────────────────────────────────────────────┐
│
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────▼
│ Deploy │────▶│ Setup │────▶│ Services │────▶│ Fleet │
│ Scripts │ │ Nodes │ │ (systemd) │ │ Management │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
| Requirement | Version | Notes |
|---|---|---|
| Bun | 1.0+ | Primary runtime |
| Git | 2.0+ | For cloning |
| HyperBEAM Node | — | Target endpoint |
# Clone the repository
git clone https://github.com/autonomous-research/hb-status.git
cd hb-status
# Install dependencies
bun install
# Create your configuration
cp example-config.json config.json# Check status of your configured processes
bun run index.ts config.json📸 Example Output
🚀 Starting to query 2 processes...
📊 Process Status Report
════════════════════════════════════════════════════════════════════════════════
🔄 Example AMM Pool
📍 Process ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
🌐 Base URL: http://localhost:8734/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX~process@1.0
📊 Slots: Computed=156432, Current=156432
⏱️ Slot Query Time: 45ms
📡 Endpoints (2):
✅ now/reserves
Response: {"token_a":"1000000000","token_b":"500000000"...
Time: 120ms
✅ compute/cache/serialize~json@1.0
Response: {"state":"active"}
Time: 85ms
⏰ Total Process Time: 250ms
════════════════════════════════════════════════════════════════════════════════
📈 Overall Summary:
Processes: 2
Successful Slot Queries: 2/2
Total Endpoints: 3
Successful Endpoints: 3/3
⏱️ Performance Metrics:
Total Execution Time: 330ms
Average Process Time: 165ms
════════════════════════════════════════════════════════════════════════════════
📄 Reports exported:
- Markdown: exports/status-report-2024-01-15T10-30-00.md
- CLI Output: exports/status-report-2024-01-15T10-30-00.txt
All tools read from a JSON configuration file that defines your HyperBEAM processes.
| Field | Type | Required | Description |
|---|---|---|---|
baseUrl |
string |
○ | Default gateway URL (defaults to http://localhost:8080) |
processes |
array |
● | Array of process definitions |
processes[].name |
string |
● | Display name for reports |
processes[].processId |
string |
● | 43-character Arweave Process ID |
processes[].endpoints |
string[] |
○ | Custom endpoints to query |
processes[].baseUrl |
string |
○ | Per-process URL override |
{
"baseUrl": "http://localhost:8734",
"processes": [
{
"name": "Token Liquidity Pool",
"processId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1",
"endpoints": ["now/reserves", "compute/cache/serialize~json@1.0"]
},
{
"name": "Price Oracle",
"processId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2",
"endpoints": ["compute/cache/price"]
}
]
}| Tool | Purpose | Use Case |
|---|---|---|
index.ts |
Status monitoring | Dashboard & health checks |
sync.ts |
One-time sync | Manual hydration |
sync-daemon.ts |
Continuous sync | Background hydration |
hydrate-daemon.ts |
Advanced sync | Intelligent scheduling |
compare-reserves.ts |
Verification | Data integrity checks |
convert-pools.ts |
Data conversion | Config generation |
filter-big-pools.ts |
Filtering | Prioritize active pools |
fetch-current-slots.ts |
Bulk queries | Slot analysis |
syncing-pools-report.ts |
Reporting | Progress tracking |
The primary dashboard for node health monitoring.
# From config file
bun run index.ts config.json
# From inline JSON
bun run index.ts '{"processes":[{"name":"Test","processId":"...","endpoints":["info"]}]}'
# From stdin (useful in pipelines)
cat config.json | bun run index.tsWhat it does:
- Queries
compute/at-slot→ Returns computed (synced) slot - Queries
slot/current→ Returns current (network tip) slot - Calls each custom endpoint in
endpoints[] - Measures latency for all requests
- Exports reports to
exports/
Continuous synchronization wrapper for long-running hydration.
bun run sync-daemon.ts <config.json> [timeout_seconds] [delay_seconds]| Argument | Default | Description |
|---|---|---|
config.json |
— | Path to configuration file |
timeout_seconds |
300 |
Max time per sync pass |
delay_seconds |
60 |
Delay between runs |
Advanced synchronization with intelligent scheduling and state persistence.
bun run hydrate-daemon.ts <config.json> [options]| Option | Description |
|---|---|
--no-schedule |
Disable auto cron scheduling |
--deficit-only |
Only process pools with deficit |
--force-reinit |
Force re-init for deficit processes |
--batch-size N |
Processes per batch (default: 20) |
--batch-delay N |
Ms between batches (default: 2000) |
Generated files:
hydrate-daemon-state.json— Persistent statehydrate-daemon-state.md— Human-readable statushydrate-daemon-metrics.json— Historical metricshydrate-daemon-errors.txt— Error report
📸 Live Dashboard Output
🚀 Hydrate Daemon Status - 1/15/2024, 10:30:00 AM
🕒 Runtime: 45 minutes | 🎯 Synced: 142/200 | 🔄 Behind: 58 | ❌ Errors: 0
📈 Total Deficit: 125,430 slots | Avg Rate: 85.2 slots/min | ETA: 11:55 AM
════════════════════════════════════════════════════════════════════════════════
Process Process ID Init Sched Status
────────────────────────────────────────────────────────────────────────────────
Pool Alpha XXXXXXXXX... ✅ ✅ ✅ Synced
Pool Beta YYYYYYYYY... ✅ ⏳ 🔄 Syncing
Pool Gamma ZZZZZZZZZ... ✅ ⏳ 🔄 Syncing
Cross-validate token reserves between HyperBEAM and AO network.
# Check first 25 pools
bun run compare-reserves.ts --limit 25
# Custom output file
bun run compare-reserves.ts --limit 100 --output audit-report.md| Tool | Command | Purpose |
|---|---|---|
| convert-pools.ts | bun run convert-pools.ts pools.json -o config.json |
Convert AO pools dump to config |
| filter-big-pools.ts | bun run filter-big-pools.ts config.json --threshold 50000 |
Filter active pools |
| fetch-current-slots.ts | bun run fetch-current-slots.ts config.json --format csv |
Bulk slot queries |
| syncing-pools-report.ts | bun run syncing-pools-report.ts --format csv |
Sync progress report |
| Endpoint | Method | Description |
|---|---|---|
/{processId}/slot/current |
GET | Current network slot height |
/{processId}/compute/at-slot |
GET | Locally computed slot height |
/{processId}/now |
GET | Trigger sync to current slot |
/{processId}/now/reserves |
GET | Token reserves (AMM pools) |
/~cron@1.0/once |
GET | One-time cron execution |
/~cron@1.0/every |
GET | Schedule recurring cron |
| Endpoint | Method | Description |
|---|---|---|
/dry-run?process-id={id} |
POST | Read-only message execution |
The hb-starter/ directory contains production-ready scripts for server management.
hb-starter/
├── setup-hb-node.sh # Provision fresh server
├── deploy-hb-node.sh # Deploy to single server
├── deploy-multiple.sh # Parallel multi-server deploy
├── manage-hb-nodes.sh # Fleet management
├── hb-services.sh # Systemd service management
├── run-node.sh # Manual node runner
├── run-cu.sh # Manual CU runner
└── config.flat # Example configuration
# 1. Create hosts file
cat > hosts.txt <<EOF
192.168.1.100
192.168.1.101
192.168.1.102
EOF
# 2. Deploy to all hosts
./hb-starter/deploy-multiple.sh -f hosts.txt -u ubuntu -k ~/.ssh/key.pem -w wallet.json
# 3. Check status across fleet
./hb-starter/manage-hb-nodes.sh -f hosts.txt status
# 4. View logs from all nodes
./hb-starter/manage-hb-nodes.sh -f hosts.txt logs cu📖 See hb-starter/README-DEPLOYMENT.md for complete documentation.
hb-status/
├── index.ts # Main status reporter
├── sync.ts # One-time sync script
├── sync-daemon.ts # Continuous sync wrapper
├── hydrate-daemon.ts # Advanced hydration daemon
├── compare-reserves.ts # Reserve verification
├── convert-pools.ts # Config converter
├── filter-big-pools.ts # Pool filter utility
├── fetch-current-slots.ts # Bulk slot fetcher
├── syncing-pools-report.ts # Progress reporter
├── lib/
│ └── runner.ts # Process runner class
├── hb-starter/ # Deployment scripts
│ ├── *.sh # Shell scripts
│ └── README-*.md # Documentation
├── example-config.json # Example configuration
├── package.json # Dependencies
├── tsconfig.json # TypeScript config
└── LICENSE # MIT License
Developed by
Supporting the HyperBEAM operator community
MIT License
Copyright (c) 2024 Autonomous Research
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Built with ❤️ for the Arweave ecosystem
Arweave •
AO •
HyperBEAM

{ "baseUrl": "http://your-hb-gateway:8734", "processes": [ { "name": "Human-Readable Name", "processId": "<43-character-arweave-process-id>", "endpoints": ["info", "metrics", "custom/path"], "baseUrl": "http://override-per-process:8734" // optional } ] }