From 8cb0eb9a2dbd1609059e6a166fa99917f1aa2fe5 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 11:19:59 +0000 Subject: [PATCH 1/2] docs: name `implementation` in the `NewClone` determinant set The address is `keccak256(0xff ++ factory ++ effectiveOpenSalt(salt, keccak256(data)) ++ keccak256(cloneCreationCode(implementation)))`, so `salt` and `data` are the whole of the effective salt, not of the derivation. The event carries `implementation` as well, which is what makes the conclusion hold. Closes #135 Co-Authored-By: Claude Opus 5 (1M context) --- src/interface/ICloneableFactoryV4.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/interface/ICloneableFactoryV4.sol b/src/interface/ICloneableFactoryV4.sol index c6a43ff..38db017 100644 --- a/src/interface/ICloneableFactoryV4.sol +++ b/src/interface/ICloneableFactoryV4.sol @@ -196,9 +196,9 @@ interface ICloneableFactoryV4 is ICloneableFactoryV3 { /// `NewClone` is shared with `cloneDeterministic` and is emitted /// identically, with the caller-supplied `salt` — NOT the effective salt. /// Its `sender` field is only whoever paid for this deploy and is not part - /// of the address derivation, but `salt` and `data` together are the whole - /// of it, so the event still carries the full deterministic deploy that - /// `ICloneableFactoryV3.NewClone` promises. An indexer that wants to verify + /// of the address derivation, but `implementation`, `salt` and `data` — all + /// on the event — are the whole of it, so it still carries the full + /// deterministic deploy that `ICloneableFactoryV3.NewClone` promises. An indexer that wants to verify /// the address rather than take the emitted one MUST pick the derivation: /// the two cannot both produce the emitted `clone`, so trying both and /// keeping the match is well defined. From ab7ad0754e893dd4610d73370a0f7155b6c96533 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 11:21:32 +0000 Subject: [PATCH 2/2] docs: rewrap the Events note Co-Authored-By: Claude Opus 5 (1M context) --- src/interface/ICloneableFactoryV4.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/interface/ICloneableFactoryV4.sol b/src/interface/ICloneableFactoryV4.sol index 38db017..02373ed 100644 --- a/src/interface/ICloneableFactoryV4.sol +++ b/src/interface/ICloneableFactoryV4.sol @@ -198,10 +198,10 @@ interface ICloneableFactoryV4 is ICloneableFactoryV3 { /// Its `sender` field is only whoever paid for this deploy and is not part /// of the address derivation, but `implementation`, `salt` and `data` — all /// on the event — are the whole of it, so it still carries the full - /// deterministic deploy that `ICloneableFactoryV3.NewClone` promises. An indexer that wants to verify - /// the address rather than take the emitted one MUST pick the derivation: - /// the two cannot both produce the emitted `clone`, so trying both and - /// keeping the match is well defined. + /// deterministic deploy that `ICloneableFactoryV3.NewClone` promises. An + /// indexer that wants to verify the address rather than take the emitted + /// one MUST pick the derivation: the two cannot both produce the emitted + /// `clone`, so trying both and keeping the match is well defined. /// /// @param implementation The contract to clone. /// @param data As per `ICloneableV2`, and part of the address derivation.