Skip to content

Deterministic authoriser clones everywhere: chain-invariant address, pinned up-front, migrate Base off the nonce-based clone #292

Description

@thedavidmeister

Goal (explicit, ruled 2026-08-04)

We hate the placeholder→backfill dance. Killing it is an explicit goal: every authoriser clone is deployed deterministically (cloneDeterministic + salt, rain-factory 0.1.5), at the same chain-invariant address on every chain, pinned up-front in generated pointers — no address(0) placeholders, no post-deploy hydration PRs.

Why the address is chain-invariant

clone = f(impl, keccak(deployer, salt), factory) — verified from 0.1.5 source: init data is NOT in the derivation (atomic initialize after CREATE2), and the salt is deployer-namespaced (unsquattable). Factory and impl are Zoltu-deployed (same address everywhere), so same deployer key + same salt ⇒ same clone address on every chain, even though per-chain init config (paymentToken, owner Safe) differs.

Two steps (the user's shape — artifacts map 1:1)

Step 1 — deploy deterministic authorisers: PR #250, complete in one PR. rain-factory 0.1.5 (+ forced rain-vats 0.1.7) bump, clone()cloneDeterministic fixture migration, nonce-factory pin (bytecode-complete per #293), AND the dated cloneDeterministic deploy script for every chain with prod config (Base + Ethereum; the HyperEVM wave — #274/#276/#278 — rescopes to deploy deterministically from the start and never needs migration), with the predicted address pinned as a migration-target constant per the #293 shape (address + EIP-1167 runtime bytecode + codehash + offline predicted==pinned and keccak asserts). Live pins (STOX_PROD_AUTHORISER_V4_CLONE, the Ethereum clone pin) stay untouched. Post-merge: broadcast via the manual dispatch with the deployer key; the deployed clones are inert (initialized, grantless, unreferenced) until step 2.

Step 2 — upgrade to them (the only follow-up):

History

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions