Skip to content

ops: pre-fork baseline and check for the Zero8 (v0.8.0) upgrade - #101

Draft
gnanam1990 wants to merge 3 commits into
mainfrom
ops/zero8-hardfork
Draft

ops: pre-fork baseline and check for the Zero8 (v0.8.0) upgrade#101
gnanam1990 wants to merge 3 commits into
mainfrom
ops/zero8-hardfork

Conversation

@gnanam1990

@gnanam1990 gnanam1990 commented Sep 3, 2026

Copy link
Copy Markdown
Owner

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.txt

gasPrice and 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, stricter ARC_* 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.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; 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 gasUsed first.

Separate finding, predating the fork

The public RPC no longer serves transactions or receipts by hash. Every hash in docs/addresses.md returns null; 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_getLogs over the settlement block still shows the pool repaid at logIndex 12 (561000) and the operator paid at 15 (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.md still 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 103f0be

forge build clean
forge test 119 passed, 0 failed
go build ./... clean
go test ./... exit 0, 33 packages ok

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-check submits nothing, needs no key, and is diffed before and after — gasPrice and the timestamp are expected to differ, anything else moving is a finding.

  • The script records the repo commit it ran at; SNAPFALL_REPO overrides 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

  • Five of six breaking changes are node-operator only; Snapfall runs no node.
  • The sixth changes JSON-RPC error text on insufficient balance; no code matches on RPC error text, so it's cosmetic.
  • Gas accounting and state-clearing changes are the real exposure; estimation plus 20% headroom should absorb them.

Pre-existing RPC finding

  • The public RPC pruned its tx-hash index; transactions and receipts return null by hash, but blocks and logs still work.
  • The settlement proof still verifies via eth_getLogs; the script asserts the waterfall's ordering and amounts on every run.
  • Chain state is ahead of 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.

Review in cubic

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
@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Warning

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant