fix(jwk): preserve certification on duplicate observations - #78
Conversation
d163fa6 to
c7cb7f1
Compare
|
CI triage update:
I will also exercise this exact PR commit in an isolated four-validator Wave 7 multi-restart live regression while review proceeds. The formal 24-hour run will use the final merged |
|
Additional live evidence for this fix: PASS. The exact head commit was used in a coordinated 4-validator Oracle build. A 1,204.657-second live run consumed real Binance testnet NVDAUSDT/BTCUSDT/ETHUSDT index klines plus a finalized Polygon/Polymarket settlement, and restarted node4 three times. Recovery durations were 13.169s / 13.171s / 13.168s. After every restart all three price feeds returned to 4/4 quorum and continued advancing; final advances were 21 / 22 / 21 with callback counts matching final nonces exactly. No duplicate-observation certifier stall reproduced. The previously reported CI failures remain unrelated hosted-runner disk/license-policy failures; local aptos-jwk-consensus tests and this cross-repo live regression both pass. |
24-hour integration evidenceThis PR head (
The only end-of-run failure was an SDK report query exceeding the RPC |
Summary
InProgressorFinishedproposal as an idempotent no-opRoot cause
Observers periodically replay cached results. The manager previously compared each result only with on-chain state, then unconditionally replaced its local consensus state. Replaying an identical proposal could therefore drop the existing reliable-broadcast guard while certification was in progress, or drop the validator-transaction guard after certification and remove the transaction from the pool. A quorum certificate from a replaced session could also finish the newer session because it was not bound to the active proposal.
Live reproduction
A four-validator Wave 7 live soak using real Binance testnet closed one-minute index klines reproduced the failure on the current
aptos-nodebase:This is direct production-like evidence for Galxe/gravity-audit#910. A post-fix live soak remains the merge-follow-up verification.
Compatibility
This is a local JWK manager state-machine fix. It does not change serialized types, validator messages, on-chain storage, quorum thresholds, or execution payloads. Different observations can still replace an in-progress proposal; only exact proposal replays are suppressed.
Testing
cargo test -p aptos-jwk-consensus(2 passed)git diff origin/aptos-node...HEAD --checkaptos-nodecommita64f8adc27Closes Galxe/gravity-audit#910