ReserveGrid OS is a policy-driven SV2 gateway. Configure your requirements, deploy your way, observe the results.
Six pillars that make ReserveGrid OS production-ready from day one.
Every rejection is machine-readable. Operators know why work was rejected and under which policy context.
share_accepted at ACK time, share_forward_result after upstream POST. Joined by share_id with 1:1 invariant.
shadow / observe / inline. Start with audit, graduate to enforcement without code changes.
50ms verdict timeout. 5s stale work hold. Miners disconnected deterministically on expiry.
ReserveGrid OS is configured via TOML with environment variable overrides. No defaults hide pool behavior.
Prometheus metrics, structured event logs, and Grafana dashboards. See every decision in real time.
Audit templates without blocking miners
Log verdicts, forward all shares upstream
Enforce policy with fail-closed safety
ReserveGrid OS is configured via TOML with environment variable overrides. No defaults hide pool behavior.
[gateway] mode = "inline" # shadow, observe, or inline listen_addr = "0.0.0.0:3333" # Miner connection address verifier_addr = "127.0.0.1:5001" # pool-verifier TCP address upstream_url = "http://bitcoind:8332" # Block template source upstream_failure_policy = "fail_closed" # fail_closed or permit_all http_api_key = "your-secret-here" # Authentication for metrics/events
[timing] # Prevhash switching prevhash_verdict_timeout_ms = 50 # Wait time for verdict before timeout prevhash_stale_hold_ms = 5000 # Hold stale job after timeout # Polling and broadcast upstream_poll_interval_ms = 1000 # Check for new templates every 1s job_broadcast_interval_ms = 100 # Aggregate job broadcasts # Message timeouts channel_idle_timeout_ms = 3600000 # Close idle channels after 1 hour nonce_expire_secs = 60 # Expire old nonces from dedup filter
[share] share_upstream_url = "http://pool-backend:9090/shares" share_upstream_secret = "hmac-key-here" # HMAC-SHA256 signing key share_forward_queue_size = 10000 # Max pending shares in queue share_forward_max_in_flight = 100 # Max concurrent upstream requests share_batch_interval_ms = 100 # Batch shares before sending share_forward_timeout_ms = 5000 # Upstream request timeout
[auth]
mode = "prefix_map" # allowlist, prefix_map, or open
# Allowlist mode: explicit list of authorized credentials
allowlist = [
{ username = "miner1", password = "secret1" },
{ username = "miner2", password = "secret2" }
]
# Prefix map mode: pattern-based authorization
prefix_map = [
{ prefix = "farm1_", secret = "farm1-key" },
{ prefix = "farm2_", secret = "farm2-key" }
]
max_worker_id_bytes = 512 # Limit worker_name field length
max_workers_per_channel = 1000 # Limit concurrent workers per channel
Noise NX with fixed keys. No certificate infrastructure, no external dependencies.
Timeouts are deterministic. Stale work is held. Invalid templates trigger rejections with reason codes.
Every event is logged with context. Operators can reconstruct decisions offline.
Shadow mode costs nothing. Observe mode builds trust. Inline mode protects revenue.