deploy Universal Router 2.1.1 to Robinhood Chain (replaces #141)#143
Merged
david-uniswap merged 3 commits intoMay 28, 2026
Merged
Conversation
2 tasks
023196a to
435490f
Compare
5 tasks
c2818c4 to
0a58956
Compare
Redeploys UniversalRouter using the regenerated briefcase (stacked on briefcase initcode in that PR was frozen at a submodule pin that predated the v2.1.1 commit upstream. Deployed: - UniversalRouter (v2.1.1): 0x8876789976decbfcbbbe364623c63652db8c0904 Tx: 0x422569c99e80a452d45680fbf16cf04cd4ae79cd2b0d7a6a89cf6603009ed1fa Initcode hash: 0x6dba80c0116a490d48657845492bb38374489ed49c296ac50614265f97221510 Bytecode size: 26,404 bytes (vs 23,587 for v2.1.0) UnsupportedProtocol (0x7332D11BD10d18A04B119Cd4671a96f3148002c4) is unchanged — same source, same initcode hash, still deployed at the same address. Reused as the `acrossSpokePool` placeholder. Old v2.1.0 UR at 0x248a454ac3584c2a48d1fcb28d3910a6b6ea00af is moved to .history in deployments/json/4663.json and labeled as orphaned. The contract still exists onchain but nothing integrates with it. What v2.1.1 brings over v2.1.0: - PAY_PORTION_FULL_PRECISION command (slot 0x07) with 1e18 precision - Per-hop slippage on v2/v3 swaps (minHopPriceX36) - minHopPriceX36 field added to V4 ExactInputSingleParams struct - Expanded command space mask: 0x3f -> 0x7f - v2 fee-on-transfer slippage fix (uses actual balance change) - OZ audit fixes m01, l03, n05, n08 Verification: - Onchain immutables match expected wiring (SPOKE_POOL = UnsupportedProtocol, V3/V4 position managers, PoolManager). - Bytecode dispatcher contains command 0x07 dispatch (4 instances of PUSH1 0x07 in the deployed bytecode). - Deployed bytecode length matches compiled artifact length (49,095 chars; differences are immutable bake-in only). - V4 smoke test simulation passes against the new UR after updating ExactInputSingleParams struct to include minHopPriceX36 (smoke test update will land separately on david-nick/robinhood-smoke-tests). - Blockscout verification passed on first attempt — no submodule alignment dance needed since briefcase now matches the current submodule pin. Cost: 0.000555 ETH (5.55M gas at 0.1 gwei chain base fee).
forge-chronicles' index regen overwrites named chain labels with "Chain N" fallbacks for chains not in its bundled chains.json. Restore "Tempo Mainnet" (4217) and set "Robinhood Mainnet" (4663) explicitly.
0a58956 to
4c4e1b9
Compare
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.
Summary
Redeploys UniversalRouter on Robinhood Chain (4663) shipping v2.1.1 instead of the v2.1.0 that #141 unintentionally deployed.
0x8876789976decbfcbbbe364623c63652db8c09040x422569c99e80a452d45680fbf16cf04cd4ae79cd2b0d7a6a89cf6603009ed1fa0x6dba80c0116a490d48657845492bb38374489ed49c296ac50614265f972215100x7332D11BD10d18A04B119Cd4671a96f3148002c4— UNCHANGED, reused asacrossSpokePoolplaceholder.Old v2.1.0 UR (
0x248a454ac3584c2a48d1fcb28d3910a6b6ea00af) moved to.historyindeployments/json/4663.json. Contract still exists onchain but nothing integrates with it.Dependency
This PR's chronicles entries reference the v2.1.1 initcode hash, which only matches the bytecode produced by the regenerated briefcase. Requires #142 (briefcase initcode update) to land for the build to reproduce v2.1.1 bytecode locally. The deploy itself already happened onchain — the chronicles are recording what's there.
What v2.1.1 brings over v2.1.0
PAY_PORTION_FULL_PRECISIONcommand (slot0x07) — 1e18 precision fee paymentsminHopPriceX36minHopPriceX36field added to V4ExactInputSingleParamsstruct (smoke tests need a corresponding struct update ondavid-nick/robinhood-smoke-tests, pushed separately)0x3f→0x7fVerification
SPOKE_POOL= UnsupportedProtocol, V3/V4 position managers, PoolManager)0x07(4 instances ofPUSH1 0x07in deployed bytecode)minHopPriceX36added to local struct)deployments/index.mdlabels:4217 → Tempo Mainnet,4663 → Robinhood MainnetCost
5,547,662 gas × 0.10 gwei = 0.000555 ETH.
Migration
spokePoolis immutable in UR — when Across deploys a SpokePool on Robinhood, a new UR will need to be deployed pointing at that SpokePool. Old UR stays at its address.Closes / supersedes
Supersedes #141 (UR v2.1.0 — closed). Should land after #139 (base deploy) and #142 (briefcase initcode); merge order doesn't matter between #139 and #142 since they're independent.
Test plan
SPOKE_POOL/V3_POSITION_MANAGER/V4_POSITION_MANAGER/poolManagerviacast callagainst the new UR address.🤖 Generated with Claude Code