Uh oh!
There was an error while loading. Please reload this page.
fix(ci): declare ethereum and hyperevm rpc endpoints - #5
Conversation
`script/Deploy.sol` iterates `LibRainDeploy.supportedNetworks()`, which is seven networks. `[rpc_endpoints]` declared five. `vm.createSelectFork` does not skip an alias it cannot resolve — it reverts with `invalid rpc url: ethereum` — so every `Manual sol artifacts` run died on the fourth network, after broadcasting to arbitrum, base and base_sepolia. Adds `ethereum` and `hyperevm` to `[rpc_endpoints]` and to `[etherscan]`, matching rain.factory.deploy and rain.extrospection.deploy. The `[etherscan]` entries carry `chain = 1` / `chain = 999` because foundry raises a config error for an alias it cannot itself resolve to a chain id. Also rewrites the two section comments, which described the old five-network shape and attributed the alias list to the prod test rather than to the deploy script.
The previous wording claimed foundry raises a config error for an alias with neither "chain" nor "url". That does not reproduce: `forge config` accepts the entry either way. What does reproduce is that foundry has no chain named `ethereum` or `hyperevm` — `forge verify-check --chain ethereum` and `--chain hyperevm` are both rejected as invalid values, the canonical names being `mainnet` and `hyperliquid`. With `chain` stated, `forge config` resolves the entries to `chain = "mainnet"` and `chain = "hyperliquid"`; the other five aliases it resolves unaided. Values are unchanged; this is the comment only.
Warning Review limit reached
Next review available in:23 minutes Limit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?Wait for the limit to reset, then comment An organization admin can change what happens after included review limits in Billing. How do review limits work?CodeRabbit enforces per-developer PR review limits within each organization. For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window. Please refer docs for additional details. 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 |
thedavidmeister
commented
Aug 21, 2026
Why the red checks here are not this PR'sThis branch is
This one is deliberately not stacked on the others: it is the change that
|
…nfig Both go stale on their own without anything updating them. "ethereum and hyperevm ... have no log tables yet, so the log-tables suite has to run there before decimal-float can" is a fact about today's chain state. It becomes false the moment those are deployed. The deploy ordering is recorded in the issue and the PR body, which is where it belongs. "Nothing is published yet, so the first release sets this to the version its sol-v* tag names" is false after the first publish, and the two lines above it already state the rule the version line follows. What is left in both places says what the setting does and what breaks without it, which stays true. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
The failure
Every
Manual sol artifactsrun on this repo dies part-way through the deploy:script/Deploy.soliteratesLibRainDeploy.supportedNetworks()— arbitrum,base, base_sepolia, ethereum, flare, hyperevm, polygon.
foundry.tomldeclared five of those seven under
[rpc_endpoints].An undeclared alias is not a skip.
vm.createSelectFork("ethereum")cannotresolve the alias, reverts, and takes the whole script down — after it has
already broadcast to arbitrum, base and base_sepolia. The network ordering is
what makes that worst: the failure lands mid-deploy, not at startup.
Foundry never maps the alias
ethereumontoETHEREUM_RPC_URLon its own; the[rpc_endpoints]entry is what creates that binding. So a green rpc-preflightstep cannot help here — the variable is exported and reachable and the alias
still does not resolve.
The fix
Declare all seven, in both sections:
[rpc_endpoints]: addethereum = "${ETHEREUM_RPC_URL}"andhyperevm = "${HYPEREVM_RPC_URL}".[etherscan]: add matching entries, becauserainix-manual-sol-artifactspasses
--verifyby default — a broadcast to a chain with no[etherscan]entry succeeds and then fails at verification.
ethereumandhyperevmcarry an explicitchain = 1/chain = 999.Foundry does not know either string as a chain name; its own names are
mainnetandhyperliquid. Withchainstated,forge configresolves theentries to
chain = "mainnet"andchain = "hyperliquid". The five existingentries need no
chainbecause foundry resolves those aliases unaided.The config values are byte-identical in shape to
rain.factory.deployandrain.extrospection.deploy.The section comments are rewritten. The
[rpc_endpoints]one described the oldfive-network shape and credited the alias list to
LibDecimalFloatDeployProdTestrather than to the deploy script, which is the thing that actually forces all
seven. The
[etherscan]one is a deliberate divergence from the wording inrain.extrospection.deploy: that comment says foundry "raises a config errorfor an unknown alias with neither chain nor url", and I could not reproduce
that —
forge configaccepts the entry withchaindropped. The replacementstates the behaviour I did reproduce. The sibling repos' values are unchanged
and still match; only this repo's prose differs, and it differs by being
checkable.
Verification
Reproduced and then re-run, both as a simulation — no
--broadcast, no--verify, nothing signed or sent — with public RPC URLs and anvil's publisheddefault test key.
Before (unmodified
main), with a workingETHEREUM_RPC_URLexported:After (this branch), same environment:
All seven aliases resolve; zero occurrences of
invalid rpc urlin the run, andthe script body reaches the same final address on every network.
The simulation then stops in foundry's post-script "Setting up 7 EVMs" phase
with
error code -32000: state ... is not available— the free public endpointsthis local reproduction was pointed at are not archive nodes. That is a property
of those endpoints, not of the config; CI's
rpc-preflightbindsarchive-capable URLs. The claim under test is alias resolution, and alias
resolution is fixed.
What this does not fix
Manual sol artifactsstill cannot complete adecimal-floatdeploy on allseven networks, because the log tables at
0xc51a14251b0dcF0ae24A96b7153991378938f5F5are not deployed on ethereum orhyperevm and
DecimalFloat's constructor asserts they are present. Thelog-tablessuite has to run on those two chains first. This PR is what letseither dispatch reach them at all.
Manual sol artifactsbroadcasts on chain, so it is not dispatched from here.That stays a human decision.
QA
foundry.tomlconfig, and thisrepo has no test that reads
[rpc_endpoints]. The discriminator isforge script script/Deploy.solrun as a simulation: it fails on base(
invalid rpc url: ethereum) and succeeds on this branch, in the same shellwith the same seven
*_RPC_URLvariables exported. Both runs captured.ethereum = "${ETHEREUM_RPC_URL}"from[rpc_endpoints]→Error: script failed: vm.createSelectFork: invalid rpc url: ethereum.KILLED.
hyperevm = "${HYPEREVM_RPC_URL}"from[rpc_endpoints]→Error: script failed: vm.createSelectFork: invalid rpc url: hyperevm.KILLED.
chain = 999from[etherscan].hyperevm→forge configstillexits 0. SURVIVED that probe. The narrower claim does hold and is what
the comment now says:
forge verify-check --chain hyperevmand--chain ethereumare both rejected as invalid--chainvalues, so neitheralias is a chain foundry can resolve on its own, and with
chainstatedforge configreportschain = "hyperliquid"/chain = "mainnet". Icould not construct a probe that fails without
chainand passes with itshort of a real
--verifybroadcast, which is not run from here.LibRainDeploy.supportedNetworks()independencies/rain-deploy-0.1.7is the listscript/Deploy.soliterates —seven names, independent of
foundry.toml. The required[rpc_endpoints]set is that list, not anything derived from the config being changed.
rain.factory.deployandrain.extrospection.deployare an independentsecond reading of the same shape.
network set — in two sections (
[rpc_endpoints]for forking,[etherscan]for the--verifythatrainix-manual-sol-artifactspasses bydefault). Both covered. The log-tables gap on ethereum/hyperevm is a
deployment fact, not a config fact, and is stated above rather than fixed.