ops: pre-fork baseline and check for the Zero8 (v0.8.0) upgrade - #101
Draft
gnanam1990 wants to merge 3 commits into
Draft
ops: pre-fork baseline and check for the Zero8 (v0.8.0) upgrade#101gnanam1990 wants to merge 3 commits into
gnanam1990 wants to merge 3 commits into
Conversation
Arc testnet forks to arc-node v0.8.0 today at 15:00 UTC. This adds a read-only fingerprint of the live deployment, the baseline taken before the fork, and the analysis of what the upgrade can actually reach. scripts/hardfork-check submits nothing and needs no key. Run it before and after and diff: gasPrice and the timestamp move, everything else moving is a finding, because no Snapfall transaction is submitted in between. Calls are paced — the public RPC rate-limits a tight loop with -32011 (docs/RUNBOOK.md). Of v0.8.0's six breaking changes, five are node-operator only and we run no node. The sixth changes JSON-RPC error text on insufficient balance and asks clients to update their error parsers. We have none: the only strings.Contains against an error in the daemon is a SQLite UNIQUE constraint match in approval/lifecycle.go, and no RPC error text drives control flow. v0.7.2's EIP-155 requirement and 30M gas cap were re-checked and both hold. The exposure worth watching is not on that list. Zero8 changes gas accounting and state-clearing semantics, and settlement clears storage when an advance closes. Estimation plus 20% headroom should absorb it; no gas limit is hardcoded. Also records a finding that predates the fork: the public RPC no longer serves transactions or receipts by hash. Every hash in docs/addresses.md returns null, while blocks and logs are still served — the tx-hash index is pruned, the chain is intact. Since that page names the RPC as the primary verification path precisely because ArcScan's hash lookups are broken, both of a reader's routes are currently dead. The evidence survives by block: eth_getLogs over the settlement block still shows the pool repaid at logIndex 12 and the operator paid at 15. The check now asserts that ordering and those amounts on every run instead of counting logs. The pool is not quiescent across the upgrade — an 0.60 advance is open, and the chain has moved past what docs/addresses.md records (rate 7000 not 6500, four accepted jobs not three). Verified before committing, at 103f0be: forge build clean, forge test 119 passed / 0 failed go build ./... clean, go test ./... exit 0, 33 packages ok
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueWarning Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
tsc clean and all five unit suites pass (47 assertions). With contracts and the daemon already recorded, every layer is green on the pre-fork network, so a red result afterwards is attributable to the fork rather than to drift.
The fingerprint records which commit it was taken at, derived from the script's own location. A copy kept outside the checkout — which is how the post-fork run is armed, so that it does not depend on which branch happens to be checked out at 15:05 — reported 'not a git checkout' and showed up as noise in the diff. SNAPFALL_REPO overrides the location; unset, behaviour is unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Arc testnet forks to arc-node v0.8.0 today at 15:00 UTC. This lands the pre-fork baseline, a read-only check to diff against afterwards, and the analysis of what the upgrade can actually reach.
What to run after the fork
./scripts/hardfork-check > docs/hardfork/zero8-post.txt diff docs/hardfork/zero8-pre.txt docs/hardfork/zero8-post.txtgasPriceand the timestamp move. Everything else moving is a finding — no Snapfall transaction is submitted in between. The script submits nothing and needs no key.v0.8.0 impact: near zero
Five of six breaking changes are node-operator only (
--rpc.admin, mandatory denylist, stricterARC_*validation, snapshot--chain, pruning interval). We run no node.The sixth changes JSON-RPC error text on insufficient balance and asks clients to update their error parsers. We have none — the only
strings.Containsagainst an error in the daemon is a SQLiteUNIQUE constraintmatch inapproval/lifecycle.go, and no RPC error text drives control flow. v0.7.2's EIP-155 requirement and 30M gas cap were re-checked; both hold.The exposure worth watching isn't on that list: Zero8 changes gas accounting and state-clearing semantics, and settlement clears storage when an advance closes. Estimation plus 20% headroom should absorb it, and no gas limit is hardcoded — but if anything fails after the fork, compare
gasUsedfirst.Separate finding, predating the fork
The public RPC no longer serves transactions or receipts by hash. Every hash in
docs/addresses.mdreturnsnull; blocks and logs are still served, so the tx-hash index is pruned and the chain is intact.That page names the RPC as "the primary verification path" precisely because ArcScan's hash lookups are broken — so both of a reader's routes are currently dead, and the settlement proof can't be checked as written.
The evidence survives.
eth_getLogsover the settlement block still shows the pool repaid atlogIndex 12(561000) and the operator paid at15(439000) — pool first, exactly as §4 claims. The check now asserts that ordering and those amounts every run instead of counting logs. An archive endpoint (ARC_ARCHIVE_RPC) still resolves the hash directly.docs/addresses.mdstill needs its verification commands reworked before submission. The numbers are right; the way it tells a reader to check them is not. Not done in this PR.Chain state has moved past the docs
An 0.60 advance is open across the upgrade. Rate is 7000 (docs say 6500), four accepted jobs (docs say three), reserve 8240 (docs say 5640) — a fourth job settled after 8 Aug.
Verified before committing, at
103f0beforge buildforge testgo build ./...go test ./...Summary by cubic
Lands the pre-fork baseline and a read-only fingerprint script for the Zero8 (v0.8.0) hardfork on Arc testnet, along with an analysis of what the upgrade can and cannot affect. All three layers (contracts, daemon, sidecar) are green pre-fork;
scripts/hardfork-checksubmits nothing, needs no key, and is diffed before and after —gasPriceand the timestamp are expected to differ, anything else moving is a finding.SNAPFALL_REPOoverrides the location when it's run from a copy outside the checkout, so the post-fork run doesn't depend on which branch is checked out.v0.8.0 impact
Pre-existing RPC finding
nullby hash, but blocks and logs still work.eth_getLogs; the script asserts the waterfall's ordering and amounts on every run.docs/addresses.md(rate 7000 vs 6500, four accepted jobs vs three); that doc's verification commands still need reworking.Written for commit 2282a97. Summary will update on new commits.