Conversation
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.
The deploy script never deployed
Stage7702Module, so itsDEFAULT_CHECKPOINTERconstructor argument was still an open choice. This adds the deployment right afterStage1Moduleand reads the value fromERC7702_DEFAULT_CHECKPOINTER, defaulting toaddress(0). The address used is logged, and.env.sampledocuments that leaving the variable empty givesaddress(0).The default matters because
Stage7702Authcommits that address into the counterfactual 1-of-1 configuration that every fresh EIP-7702 wallet starts with. With a non-zero value, the first signature of every fresh wallet has to carry the checkpointer flag andBaseSig.recovercallssnapshotForon that contract. If the call reverts, or returns a snapshot whose image hash differs from the counterfactual one, recovery reverts withUnusedSnapshotand the wallet cannot execute, validate ERC-1271 signatures or pass ERC-4337 validation until its configuration is replaced. It can only block, never forge, since the image hash still comes from the signature. The natspec onDEFAULT_CHECKPOINTERand the constructor now spells this out, including that a checkpointer, if one is ever required, must not revert and must return an empty snapshot for wallets it does not know. No contract logic changed.forge buildpasses and the deploy script compiles.forge test --match-path test/Factory.t.solpasses, 3 tests, as a build health check; the rest of the suite needs an external RPC server so I did not run it. I checkedvm.envOrdirectly and both an empty and an unsetERC7702_DEFAULT_CHECKPOINTERresolve toaddress(0), while a real address is picked up. I did not run an actual deployment.