test(oracle): add manual live soak suite - #807
Conversation
Add one opt-in four-validator suite that discovers live Binance Futures testnet index-price buckets and a finalized Polygon Polymarket settlement before deployment, activates both tasks through governance at an epoch boundary, and verifies JWK quorum through execution-layer callbacks. The suite monitors replica convergence, monotonic source progress, exact Binance closed-bucket prices, relayer quorum, immutable Polymarket settlement, callback counts, and node4 restart recovery. Generated source mappings and metadata are ignored and removed on teardown, including deployed relayer configs. Validated with: - 3-minute live smoke: 5 bucket advances, 6 price callbacks, 1 settlement callback - 30-minute burn-in: 1,802.6s, 119 samples, 32 advances (24 required), 76.11s max price gap, 33 price callbacks, 1 settlement callback - 3-minute restart probe: node4 recovered in 11.17s, 4 bucket advances, 5 price callbacks, 1 settlement callback The documented 24-hour run restarts node4 halfway and requires at least 80% of expected minute advances.
|
Wave 7 live validation update:
Post-fix live smoke PASS:
The PR remains draft until a fresh 24-hour run passes. |
|
Wave 7 soak update (second formal-run diagnosis and harness fix):
Live regression proof using Binance Futures testnet plus finalized Polygon data:
A fresh formal 24-hour run is starting from this commit. The PR remains draft until that run completes successfully. |
|
Wave 7 burn-in update The previous formal soak stopped after 4,615 seconds when numeric historical `eth_call` requests returned different state snapshots even though every replica first reported the same block hash. The suite now binds every NativeOracle/resolver read to the exact canonical hash with EIP-1898 (`blockHash` plus `requireCanonical`) in commit `c079007a4e`. Validation after the fix:
The PR remains draft while the fresh 24-hour run is pending. |
|
Multi-feed update pushed in `d259517172`. The live suite now runs independent NVDAUSDT (1001), BTCUSDT (1002), and ETHUSDT (1003) index-kline tasks through the same feedId-namespaced resolver. The prior single-feed 24-hour attempt was intentionally stopped after 8,349.273 healthy seconds to add this requested coverage. Post-change gates are PASS: a 305.971s high-frequency run with node4 restart (all feeds 6 advances; BTC/ETH 6 observed price changes each; recovery 11.136s), followed by a 1,803.466s burn-in (all feeds 31 advances; BTC/ETH 31 changes each; 4/4 relayer quorum; callback counts 33/33/33 and Polymarket 1). The first smoke exposed a cross-contract RPC view transition after restart. The final implementation preserves the strict nonce-to-bucket invariant and uses a progress/resolver/progress seqlock around EIP-1898 hash-bound calls. The rerun and burn-in both passed. A fresh three-feed 24-hour run is starting; the PR remains draft. |
Three-feed 24h attempt: 12h epoch/restart collision foundThe first formal three-feed run stayed healthy for 43,185.741 seconds (about 12h):
The run then failed at the scheduled node4 restart because the restart was aligned to the two-hour epoch boundary. This was not an Oracle-value divergence. During the epoch-8 reconfiguration, node3 timed out and received execution responses out of order: it learned the suffix-block timestamp before the actual reconfiguration-block timestamp, then panicked in Commit |
Epoch-guard live regression: PASSCommit
The repeated formal 24-hour run can now start from this head. The PR remains draft pending that gate. |
Summary
Add one opt-in, non-gating Wave 7 live soak suite for the complete Gravity Oracle path:
The suite is excluded from the runner default test set and must be named explicitly.
Architecture exercised
Generated mappings and metadata are removed on teardown, including copies deployed into node config directories.
Acceptance checks
Validation
Static
Three-feed high-frequency live regression
Required three-feed 30-minute burn-in
24-hour soak
A previous single-feed run stayed healthy for 8,349.273s and was intentionally stopped, not failed, to add the requested BTC and ETH coverage. The first formal three-feed attempt stayed healthy for 43,185.741s: every feed reached nonce 722 with 4/4 replica and relayer agreement. It then exposed an Aptos epoch-reconfiguration race because the scheduled node4 restart coincided exactly with the two-hour epoch boundary. Commit 5c56e1f adds a chain-derived five-minute guard around epoch transitions; a fresh formal run is required.
It requires every feed to complete at least 80% of expected minute advances. Node4 becomes eligible to restart at 12 hours and is deferred only while the chain is within five minutes of an epoch boundary. This PR remains draft until the repeated run completes and its summary is posted.
Dependencies
Operations and safety
Tracks Galxe/gravity-audit#1038.