Add HyperEVM and Ethereum mainnet to the supported networks - #142
Conversation
`supportedNetworks()` goes from five to seven, and `[rpc_endpoints]` and `[etherscan]` in `foundry.toml` move with it — the three lists are one list and `testSupportedNetworksAreFullyConfigured` asserts it in both directions. The two new `[etherscan]` entries state `chain` because foundry does not resolve `ethereum` or `hyperevm` to a chain by alias, and an entry with neither `chain` nor `url` under an alias it cannot resolve fails the whole section rather than only itself. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (11)
Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review. WalkthroughAdded Ethereum and HyperEVM RPC configuration, Foundry verification settings, network constants, supported-network entries, and updates for seven-network deployment coverage. ChangesNetwork support
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: ⚪ Minimal · up to The PR adds the requested network support and updates the related configuration and tests; no actionable merge-blocking risk remains after normal checks and review. Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
Closes rainlanguage/rain.solmem#150
Removes
audit/audits.jsonand theREADME.mdlink that pointed at it.audit/mutation-test-scans.jsonandaudit/protofire/are untouched.Everything that referenced the file
Checked rather than assumed, because two of these were the ones most likely to
break on a deletion:
README.md:77audit/audits.jsonin the## AuditsectionREUSE.tomlaudit/**/as a directory glob, no per-file entrymutation-test-scans.jsonandprotofire/, andnix develop -c reuse lintis compliant at 68/68 files after the deletion.soldeerignore/auditwholesale.github/workflows/rainix.yamlandpackage-release.yamlareuses:lines into the rainix reusables; atrainlanguage/rainixHEAD no reusable workflow mentionsaudit(the onlyauditstring in that repo's workflows isnpm --no-audit).audit/scope.json30ecd99on 2026-07-25, predates the file and never listed itaudits.jsonreturns one hit inrainlanguage— theREADME.mdline above — and zero acrossgildlab,cyclofinance,S01-Issuer,ST0x-Technology,ST0x-intelligence,h20liquidity,raincommercial,rain-archiveAfter the change
git grep -In auditsover every tracked non-PDF file returnsnothing.
The one live thing that is about this file is not a code reference:
rainlanguage/rainix#321, still open, proposes a
rainix-soldrift-report job whose entire input is a consumer-sideaudit/audits.json. Nothing there executes yet, so nothing breaks, but itspremise is gone — flagged, not edited, from here.
The README section
The section stays; only the pointer to the deleted file goes. The sentence that
carried the link stated the audited scope, so it is reworded to state the same
scope without the link rather than dropped:
That claim is verified in this clone, not carried over from #137: at both
228b35c6725877e7fbcd2432b4c692357f16f510and26bce6197383f193e35326bab4d4424cf6eafde7,git ls-tree -r --name-only <c> -- src/is exactly twelve files, and both commits are ancestors ofHEAD.What #88 needs now
Nothing in this repo, and it should stay closed.
rainlanguage/rain.solmem#88 is a MEDIUM audit finding
whose hazard is "nothing in the repo records which commit was audited or that
main has moved past it". After this PR the record is still there, in the
## Auditsection ofREADME.md: it names both reviewed commits, links thereport PDF — which nothing else in the repo did before #137 — states the
audited scope, says outright that today's
src/is not that tree, and gives thecommand that measures the drift. What this PR deletes is a second, machine-only
copy of that record with no machine reading it.
The part of #88 that is genuinely unlanded is its third ask, the non-blocking CI
drift report. That was never in this repo's gift — its CI is two
uses:linesinto rainix reusables — and it lives as
rainlanguage/rainix#321. That issue is the one that
needs a decision, and it needs it independently of #88: as written it reads a
manifest that now exists nowhere, so it is either re-scoped to derive the
audited commit from something that does exist, or the manifest is reintroduced
deliberately as an org-wide convention with the reader landing in the same
change, or drift reporting is dropped. Reintroducing it here first would
recreate exactly the file #150 removes.
Not reopened or edited by this PR, per the work order.
QA
and two reflowed README lines, no Solidity, and a test asserting a path's
absence would be the same unread ceremony this PR removes. The three
discriminating checks, each failing on a mutant and passing here: A
git grep -In "audits" -- . ':!*.pdf'— 1 hit onmain(README.md:77), 0on this branch; B
git ls-files audit/— must still listmutation-test-scans.jsonand the Protofire PDF, 2 entries on thisbranch; C
nix develop -c reuse lint— compliant, 68 / 68 files(69 / 69 on
main, the difference being the deleted file itself).main'sREADME.mdandaudit/audits.json-> check A goes 0 hits -> 1 hit,README.md:77-> killed.M2 also
git rm audit/mutation-test-scans.json-> check B goes 2 entries-> 1 entry -> killed; this is the overreach Toggle big blocks from an admin-gated manual workflow #150 explicitly forbids, and it is
the mutant worth having. M3 delete the
"audit/**/"glob fromREUSE.toml, on the theory that a per-file entry was what covered the deletedfile -> check C reports not compliant, 66 / 68, the two surviving audit
files losing their licence -> killed, which is why
REUSE.tomlis unchangedhere. The three checks move independently across the mutants — 0/1 hits,
2/1 entries, 68/66 files — so they ran rather than matching nothing.
go and what must stay; the Protofire report and
gitfor the scope sentencethat replaces the link — the twelve files were re-derived here with
git ls-tree -r --name-only <commit> -- src/at both review commits, nottaken from Point the generated-lib writers at a directory they are handed #137's body.
audit/audits.json, B remove theREADME.mdline pointing at it, C leaveaudit/mutation-test-scans.jsonandaudit/protofire/alone. Covered A, B, C. Its fourth paragraph — "reopen orreplace ci: daily scheduled sol sweep so chain drift is caught without a push #88 if the drift it names is still worth tracking" — is answered in
words above and deliberately not acted on, per the work order.
QA
LibRainDeployTest.testSupportedNetworks(the rosterand its order),
LibRainDeployTest.testSupportedNetworksAreFullyConfigured(
supportedNetworks()against bothfoundry.tomlsections, bothdirections),
LibRainDeployTest.testZoltuFactoryCodehash(forks everysupported network and reads the factory on it) — the first two each fail
under a mutation that reverts one half of this diff, shown below; the third
passes on seven forks, which is the only thing that says the two new
[rpc_endpoints]aliases resolve and the Zoltu factory is live with itsexpected codehash on Ethereum and HyperEVM. Verified by running
nix develop -c forge test --match-contract LibRainDeployTest --match-test 'testSupportedNetworks|testZoltuFactoryCodehash'→ 3 passed, 0 failed.foundry.toml[etherscan] hyperevmline deleted → killed bytestSupportedNetworksAreFullyConfigured.foundry.toml[rpc_endpoints] ethereumline deleted → killed bytestSupportedNetworksAreFullyConfigured.foundry.tomlextra[etherscan] optimismkey no network names → killedby
testSupportedNetworksAreFullyConfigured(the reverse direction).networks[5] = HYPEREVM→POLYGON, keeping the length at seven → killedby
testSupportedNetworksAreFullyConfigured.networks[3]/networks[4]swapped,ETHEREUMafterFLARE→ killed bytestSupportedNetworks(assertion failed: flare != ethereum), andSURVIVED
testSupportedNetworksAreFullyConfigured, which asserts membershiprather than order — the two tests are not redundant.
ETHEREUM = "ethereum"→"mainnet"→ killed bytestSupportedNetworksAreFullyConfigured(
supported network has no [rpc_endpoints] alias: mainnet).HYPEREVM = "hyperevm"→"hyperliquid"→ killed bytestSupportedNetworksAreFullyConfigured(
supported network has no [rpc_endpoints] alias: hyperliquid).env var names are rainix's
NETWORKStable inrainix-static/src/rpc_preflight.rs—ethereumis chain 1 readingETHEREUM_RPC_URL,hyperevmis chain 999 readingHYPEREVM_RPC_URL. The--chainspellings are foundry's own parser, which rejectsethereum,hyperevmandbase_sepoliaand namesmainnet,hyperliquidandbase-sepoliain the rejection. The HyperEVM verifier is Etherscan's V2chainlistendpoint. Which chains already hold the Zoltu factory andAddressRegistryiscast codeagainst the live chains, not anything therepo records.
supportedNetworks(), (b)[rpc_endpoints]and[etherscan]in lockstep, (c) every other place theset is enumerated, (d) the secret names, by name, (e) whether HyperEVM has an
Etherscan-family verifier. Covered a, b, c, d, e. One enumeration site carries
no test: the
networksdefault inmanual-sol-verify.yaml. Nothing reads it— it is a
workflow_dispatchdefault — and asserting it would need a secondhand-written alias-to-chain-name mapping in the test, since three of the seven
differ, which is one more enumeration of the set rather than one fewer.
Summary by CodeRabbit