pin(ethereum): hydrate the V4 authoriser clone address - #258
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ 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 |
635f084 to
6a7b8f7
Compare
421991d to
c119daa
Compare
6a7b8f7 to
2cd7aa7
Compare
2cd7aa7 to
41b3259
Compare
c119daa to
bb599b9
Compare
bb599b9 to
e772b40
Compare
41b3259 to
2f2c066
Compare
e772b40 to
7fdb5fe
Compare
2f2c066 to
7987c9a
Compare
7fdb5fe to
afe1581
Compare
3582977 to
b73c1ee
Compare
afe1581 to
be97a2a
Compare
be97a2a to
e9b5827
Compare
b73c1ee to
87037bb
Compare
fb97a2a to
3a22f73
Compare
8d3a02f to
8c5e0fb
Compare
3a22f73 to
23accea
Compare
8c5e0fb to
78c23ab
Compare
23accea to
4fc3f86
Compare
0166d03 to
fce7843
Compare
78c23ab to
e035b27
Compare
DRAFT / DO NOT MERGE. Flips STOX_PROD_AUTHORISER_V4_CLONE_ETHEREUM from address(0) to address(1) so this pin PR's diff is visible now. Replace address(1) with the deployed Ethereum clone address to hydrate. CI is RED by design until then (activates the authoriser leg + the placeholder guard test in LibProdAuthoriserClonesTest against a code-less sentinel); flips green when the real address lands. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VPs1hCTxusmaSeFKvoc4Kr
The 20260619 broadcast executed on Ethereum mainnet on 2026-07-22 (manual-broadcast run 29904077538): clone deployed at 0x66566cc91dEAf818859bD4b09B7903ac48998157 with the shared EIP-1167 codehash, all grants landed on Ethereum's token-owner Safe + the shared service signer, deployer renounced. Hydrate STOX_PROD_AUTHORISER_V4_CLONE_ETHEREUM in BuildPointers + the generated lib from the address(1) placeholder. Flip the 20260706 fork test from its stops-at-the-clone forcing-function shape to direct pin-vs-live verification: the clone is deployed at the pin with the pinned codehash and carries the full grant map for Ethereum's Safe, proven against real chain state on every CI run. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VPs1hCTxusmaSeFKvoc4Kr
fce7843 to
33f3b0a
Compare
e035b27 to
2388d84
Compare
The comment described the placeholder this commit's sibling replaced, and claimed the shared codehash follows from a shared impl without saying why that holds. It now also records that the address is not chain-unique: a different clone occupies it on Base, so finding code there proves nothing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Reviewed 364b314: approve Run 29956461864 leaves one test failure — The pin is verified end to end on Ethereum mainnet rather than taken from the deploy log:
That last row is the security contract of the whole bootstrap: the key deploys, grants, and ends up holding nothing. Both defects found in review are fixed on this head: the body claimed a sentinel One fact worth carrying forward: |

Hydrates
STOX_PROD_AUTHORISER_V4_CLONE_ETHEREUMwith the clone the Ethereumbootstrap deployed:
0x66566cc91dEAf818859bD4b09B7903ac48998157.Both the generator and its output change, so
src/generatedstill regeneratesbyte-for-byte and the
copy-artifactsgate stays satisfied.Verified on Ethereum mainnet
0x2ea0d35d…— the same authoriser impl Base's clone usesSTOX_PROD_AUTHORISER_V4_CLONE_CODEHASH0x2089950d…, matching, and identical to Base's cloneCERTIFY/CONFISCATE_RECEIPT/DEPOSIT/WITHDRAW/SCHEDULE_CORPORATE_ACTIONadmin0x3840aeDa…The address is not chain-unique
0x66566cc9…also has code on Base — a different clone, embedding0x2b4a510c…(the V3-era authoriser implementation). A nonce collision, not aredeploy.
So a consumer that reads this pin while forked to Base finds live code, passes a
code.length > 0deployment check, and is pointed at the wrong authoriser.Only a codehash comparison separates them. That is the concrete reason
activeChainClonePin()reverts for an unpinned chain instead of falling back:here a fallback resolves to a real contract rather than to nothing.