Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: deploy and address prediction scripts #321

Merged
merged 7 commits into from
Dec 12, 2024
Merged

Conversation

adamegyed
Copy link
Contributor

Motivation

We need the ability to deploy and predict addresses of our deployments

Solution

Add scripts to deploy all top-level contracts needed by our account implementation.

Add scripts to predict the deployment addresses of those contracts.

Add tests for each of these scripts.

Copy link

octane-security-app bot commented Dec 11, 2024

Summary by Octane

New Contracts

  • DeployAccounts.s.sol: The smart contract deploys modular account implementations and an execution install delegate using pre-determined salts and addresses.
  • DeployFactory.s.sol: The smart contract deploys an account factory using environment variables for configuration and ensures non-zero args; integrates modular accounts.
  • DeployModules.s.sol: Smart contract DeployModulesScript deploys various standalone modules with address verification and uses salts for deterministic deployment.
  • PredictAddresses.s.sol: The contract computes and logs expected addresses of modules and accounts using environment-provided salts with Create2.
  • ScriptBase.sol: The smart contract provides utilities for environment-based configurations, ensures profile checks, and facilitates secure contract deployment using Create2.

Updated Contracts

  • Artifacts.sol: The smart contract modifications change deployment functions to return addresses instead of contract instances.
  • GetInitcodeHash.s.sol: The smart contract integrates ScriptBase, adds helper methods to fetch configurations, and simplifies profile checks.

🔗 Commit Hash: 42a60b3

Copy link

octane-security-app bot commented Dec 11, 2024

Overview

Octane AI analysis has finished. No vulnerabilities were found. Cheers! 🎉🎉🎉


🔗 Commit Hash: 42a60b3

Copy link

github-actions bot commented Dec 11, 2024

Contract sizes:

 | Contract                      | Runtime Size (B) | Initcode Size (B) | Runtime Margin (B) | Initcode Margin (B) |
 | AccountFactory                | 6,121            | 6,595             | 18,455             | 42,557              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | Address                       | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | AllowlistModule               | 9,602            | 9,629             | 14,974             | 39,523              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | Base64                        | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | Create2                       | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
-| DeployScriptBase              | 17               | 42                | 24,559             | 49,110              |
-|-------------------------------+------------------+-------------------+--------------------+---------------------|
 | ECDSA                         | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | ERC165Checker                 | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | ERC1967Utils                  | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | ExecutionInstallDelegate      | 5,947            | 5,993             | 18,629             | 43,159              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | FCL_Elliptic_ZZ               | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | FCL_ecdsa                     | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | Math                          | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | MessageHashUtils              | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | ModularAccount                | 21,923           | 22,322            | 2,653              | 26,830              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | NativeTokenLimitModule        | 4,583            | 4,610             | 19,993             | 44,542              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | PaymasterGuardModule          | 1,827            | 1,854             | 22,749             | 47,298              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | SafeERC20                     | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | SemiModularAccount7702        | 23,153           | 23,545            | 1,423              | 25,607              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | SemiModularAccountBytecode    | 23,635           | 24,034            | 941                | 25,118              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | SemiModularAccountStorageOnly | 24,168           | 24,567            | 408                | 24,585              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | SignatureChecker              | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | SignedMath                    | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | SingleSignerValidationModule  | 3,646            | 3,673             | 20,930             | 45,479              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | StorageSlot                   | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | Strings                       | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | TimeRangeModule               | 2,204            | 2,231             | 22,372             | 46,921              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | WebAuthn                      | 17               | 46                | 24,559             | 49,106              |
 |-------------------------------+------------------+-------------------+--------------------+---------------------|
 | WebAuthnValidationModule      | 7,854            | 7,881             | 16,722             | 41,271              |

Code coverage:
| File | % Lines | % Statements | % Branches | % Funcs |
| script/Artifacts.sol | 91.67% (44/48) | 89.66% (26/29) | 100.00% (0/0) | 91.67% (22/24) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| script/DeployAccounts.s.sol | 100.00% (25/25) | 100.00% (23/23) | 100.00% (0/0) | 100.00% (5/5) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| script/DeployFactory.s.sol | 71.43% (30/42) | 71.05% (27/38) | 45.45% (5/11) | 100.00% (4/4) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| script/DeployModules.s.sol | 100.00% (24/24) | 100.00% (22/22) | 100.00% (0/0) | 100.00% (2/2) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| script/GetInitcodeHash.s.sol | 0.00% (0/47) | 0.00% (0/50) | 0.00% (0/12) | 0.00% (0/1) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| script/PredictAddresses.s.sol | 0.00% (0/53) | 0.00% (0/55) | 0.00% (0/6) | 0.00% (0/2) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| script/ScriptBase.sol | 69.39% (34/49) | 70.59% (36/51) | 37.50% (3/8) | 100.00% (11/11) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/AccountBase.sol | 100.00% (12/12) | 100.00% (7/7) | 100.00% (2/2) | 100.00% (4/4) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/AccountStorageInitializable.sol | 100.00% (21/21) | 100.00% (26/26) | 100.00% (5/5) | 100.00% (2/2) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/ModularAccount.sol | 100.00% (6/6) | 100.00% (6/6) | 100.00% (0/0) | 100.00% (3/3) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/ModularAccountBase.sol | 99.09% (326/329) | 96.24% (358/372) | 77.59% (45/58) | 100.00% (36/36) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/ModularAccountView.sol | 100.00% (32/32) | 100.00% (31/31) | 100.00% (3/3) | 100.00% (5/5) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/ModuleManagerInternals.sol | 94.03% (63/67) | 95.06% (77/81) | 63.64% (7/11) | 100.00% (4/4) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/SemiModularAccount7702.sol | 0.00% (0/9) | 0.00% (0/6) | 0.00% (0/1) | 0.00% (0/3) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/SemiModularAccountBase.sol | 90.48% (76/84) | 91.84% (90/98) | 64.71% (11/17) | 100.00% (16/16) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/SemiModularAccountBytecode.sol | 100.00% (8/8) | 100.00% (7/7) | 100.00% (1/1) | 100.00% (2/2) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/SemiModularAccountStorageOnly.sol | 77.78% (7/9) | 60.00% (6/10) | 100.00% (0/0) | 66.67% (2/3) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/account/TokenReceiver.sol | 33.33% (2/6) | 33.33% (1/3) | 100.00% (0/0) | 33.33% (1/3) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/factory/AccountFactory.sol | 79.03% (49/62) | 87.10% (54/62) | 50.00% (3/6) | 62.50% (10/16) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/helpers/ExecutionInstallDelegate.sol | 89.39% (59/66) | 89.47% (68/76) | 25.00% (2/8) | 100.00% (7/7) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/libraries/ExecutionLib.sol | 99.66% (297/298) | 98.89% (268/271) | 90.91% (30/33) | 100.00% (24/24) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/libraries/KnownSelectorsLib.sol | 100.00% (18/18) | 100.00% (34/34) | 100.00% (0/0) | 100.00% (2/2) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/libraries/LinkedListSetLib.sol | 94.83% (55/58) | 96.25% (77/80) | 66.67% (4/6) | 100.00% (8/8) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/libraries/MemManagementLib.sol | 100.00% (66/66) | 100.00% (70/70) | 100.00% (0/0) | 100.00% (12/12) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/libraries/ModuleInstallCommonsLib.sol | 64.71% (11/17) | 42.11% (8/19) | 75.00% (3/4) | 100.00% (3/3) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/libraries/ValidationLocatorLib.sol | 70.59% (72/102) | 71.74% (66/92) | 47.83% (11/23) | 85.00% (17/20) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/modules/ModuleBase.sol | 100.00% (16/16) | 94.12% (16/17) | 100.00% (2/2) | 100.00% (3/3) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/modules/permissions/AllowlistModule.sol | 81.90% (86/105) | 86.73% (98/113) | 78.26% (18/23) | 55.56% (10/18) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/modules/permissions/NativeTokenLimitModule.sol | 88.14% (52/59) | 92.06% (58/63) | 100.00% (13/13) | 75.00% (9/12) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/modules/permissions/PaymasterGuardModule.sol | 85.71% (18/21) | 84.21% (16/19) | 33.33% (1/3) | 85.71% (6/7) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/modules/permissions/TimeRangeModule.sol | 88.89% (24/27) | 85.19% (23/27) | 100.00% (5/5) | 87.50% (7/8) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/modules/validation/SingleSignerValidationModule.sol | 87.80% (36/41) | 84.21% (32/38) | 62.50% (5/8) | 100.00% (10/10) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| src/modules/validation/WebAuthnValidationModule.sol | 69.70% (23/33) | 70.37% (19/27) | 100.00% (3/3) | 70.00% (7/10) |
|---------------------------------------------------------+--------------------+--------------------+------------------+------------------|
| Total | 85.59% (1592/1860) | 85.80% (1650/1923) | 66.91% (182/272) | 87.59% (254/290) |

@Zer0dot Zer0dot changed the title [draft] feat: deploy and address prediction scripts feat: deploy and address prediction scripts Dec 11, 2024
@Zer0dot Zer0dot force-pushed the adam/deploy-scripts branch from e79eb4c to 209ed33 Compare December 11, 2024 20:38
@Zer0dot Zer0dot marked this pull request as ready for review December 11, 2024 20:38
Copy link
Collaborator

@howydev howydev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 small nit otherwise lgtm

@Zer0dot Zer0dot merged commit d930ae7 into develop Dec 12, 2024
6 checks passed
@Zer0dot Zer0dot deleted the adam/deploy-scripts branch December 12, 2024 01:31
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