Skip to content

deploy Universal Router 2.1.1 to Robinhood Chain (replaces #141)#143

Merged
david-uniswap merged 3 commits into
david-nick/robinhood-chainfrom
david-nick/robinhood-ur-2.1.1
May 28, 2026
Merged

deploy Universal Router 2.1.1 to Robinhood Chain (replaces #141)#143
david-uniswap merged 3 commits into
david-nick/robinhood-chainfrom
david-nick/robinhood-ur-2.1.1

Conversation

@david-uniswap

@david-uniswap david-uniswap commented May 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Redeploys UniversalRouter on Robinhood Chain (4663) shipping v2.1.1 instead of the v2.1.0 that #141 unintentionally deployed.

  • UniversalRouter (v2.1.1): 0x8876789976decbfcbbbe364623c63652db8c0904
    • Tx: 0x422569c99e80a452d45680fbf16cf04cd4ae79cd2b0d7a6a89cf6603009ed1fa
    • Initcode hash: 0x6dba80c0116a490d48657845492bb38374489ed49c296ac50614265f97221510
  • UnsupportedProtocol: 0x7332D11BD10d18A04B119Cd4671a96f3148002c4 — UNCHANGED, reused as acrossSpokePool placeholder.

Old v2.1.0 UR (0x248a454ac3584c2a48d1fcb28d3910a6b6ea00af) moved to .history in deployments/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_PRECISION command (slot 0x07) — 1e18 precision fee payments
  • Per-hop slippage on v2/v3 swaps via minHopPriceX36
  • minHopPriceX36 field added to V4 ExactInputSingleParams struct (smoke tests need a corresponding struct update on david-nick/robinhood-smoke-tests, pushed separately)
  • Expanded command space mask: 0x3f0x7f
  • v2 fee-on-transfer slippage fix
  • 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 (4 instances of PUSH1 0x07 in deployed bytecode)
  • V4 smoke test passes in simulation against new UR (with minHopPriceX36 added to local struct)
  • Verified on Blockscout: https://8crv4vmq6tiu1yqr.blockscout.com/address/0x8876789976decbfcbbbe364623c63652db8c0904
  • deployments/index.md labels: 4217 → Tempo Mainnet, 4663 → Robinhood Mainnet

Cost

5,547,662 gas × 0.10 gwei = 0.000555 ETH.

Migration

spokePool is 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

  • Reviewer can verify by reading SPOKE_POOL / V3_POSITION_MANAGER / V4_POSITION_MANAGER / poolManager via cast call against the new UR address.
  • V4 smoke broadcast onchain — deferred to after update UR briefcase initcode to v2.1.1 #142 lands.

🤖 Generated with Claude Code

@david-uniswap david-uniswap force-pushed the david-nick/regenerate-briefcase-ur-2.1.1 branch from 023196a to 435490f Compare May 26, 2026 22:51
@david-uniswap david-uniswap force-pushed the david-nick/robinhood-ur-2.1.1 branch from c2818c4 to 0a58956 Compare May 26, 2026 23:03
@david-uniswap david-uniswap changed the base branch from david-nick/regenerate-briefcase-ur-2.1.1 to david-nick/robinhood-chain May 26, 2026 23:03
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.
@david-uniswap david-uniswap force-pushed the david-nick/robinhood-ur-2.1.1 branch from 0a58956 to 4c4e1b9 Compare May 27, 2026 22:53
@david-uniswap david-uniswap merged commit 556c6a8 into david-nick/robinhood-chain May 28, 2026
3 checks passed
@david-uniswap david-uniswap deleted the david-nick/robinhood-ur-2.1.1 branch May 28, 2026 20:27
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.

3 participants