From cb44a69895321a94bc498a06bdaa2143115cf926 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:08:09 +0400 Subject: [PATCH 01/20] fix: update slither --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5531e1bc..19baefc6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -161,7 +161,7 @@ jobs: uses: crytic/slither-action@v0.4.0 id: slither with: - slither-version: "0.10.0" + slither-version: "0.10.1" node-version: "22" fail-on: "none" slither-args: '--solc-args="--evm-version cancun" --exclude "assembly|solc-version|low-level-calls|naming-convention|controlled-delegatecall|write-after-write|divide-before-multiply|incorrect-shift" --exclude-informational --exclude-low --filter-paths "contracts/mock|node_modules" --checklist --markdown-root ${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/contracts/' From a5276e0993ac7fa13a8a23e18e3800386ae7978b Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 3 Oct 2024 13:39:30 +0400 Subject: [PATCH 02/20] refactor: openzeppelin dep --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 6faf4dd7..7baf9ad2 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/bcnmy" }, "dependencies": { - "@openzeppelin": "https://github.com/OpenZeppelin/openzeppelin-contracts/", + "@openzeppelin": "https://github.com/OpenZeppelin/openzeppelin-contracts", "dotenv": "^16.4.5", "solarray": "github:sablier-labs/solarray", "viem": "2.7.13" diff --git a/yarn.lock b/yarn.lock index c63e6327..69a234fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -752,9 +752,9 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.2.tgz#b1d03075e49290d06570b2fd42154d76c2a5d210" integrity sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA== -"@openzeppelin@https://github.com/OpenZeppelin/openzeppelin-contracts/": +"@openzeppelin@https://github.com/OpenZeppelin/openzeppelin-contracts": version "5.0.2" - resolved "https://github.com/OpenZeppelin/openzeppelin-contracts/#cceac54953ccda8a9a028d0b9bf4378605fdf67e" + resolved "https://github.com/OpenZeppelin/openzeppelin-contracts#49cd64565aafa5b8f6863bf60a30ef015861614c" "@pnpm/config.env-replace@^1.1.0": version "1.1.0" From 84a2b59ed25cb9eea67537ce7793c84c557c8b17 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 4 Oct 2024 15:55:51 +0400 Subject: [PATCH 03/20] fix: small remediations --- contracts/base/ExecutionHelper.sol | 4 +- contracts/base/ModuleManager.sol | 2 +- contracts/modules/validators/K1Validator.sol | 20 ++----- .../Nexus.Module.K1Validator.specs.ts | 60 ++++++++++--------- 4 files changed, 39 insertions(+), 47 deletions(-) diff --git a/contracts/base/ExecutionHelper.sol b/contracts/base/ExecutionHelper.sol index 74cc605e..0b9dc72e 100644 --- a/contracts/base/ExecutionHelper.sol +++ b/contracts/base/ExecutionHelper.sol @@ -31,7 +31,7 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { using ExecLib for bytes; /// @notice Executes a call to a target address with specified value and data. - /// @dev calls to an EOA should be counted as successful. + /// @notice calls to an EOA should be counted as successful. /// @param target The address to execute the call on. /// @param value The amount of wei to send with the call. /// @param callData The calldata to send. @@ -55,7 +55,7 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { /// @notice Tries to execute a call and captures if it was successful or not. /// @dev Similar to _execute but returns a success boolean and catches reverts instead of propagating them. - /// @dev calls to an EOA should be counted as successful. + /// @notice calls to an EOA should be counted as successful. /// @param target The address to execute the call on. /// @param value The amount of wei to send with the call. /// @param callData The calldata to send. diff --git a/contracts/base/ModuleManager.sol b/contracts/base/ModuleManager.sol index 1ed672df..a59ca9b3 100644 --- a/contracts/base/ModuleManager.sol +++ b/contracts/base/ModuleManager.sol @@ -179,7 +179,7 @@ abstract contract ModuleManager is Storage, EIP712, IModuleManagerEventsAndError // Perform the removal first validators.pop(prev, validator); - // Sentinel pointing to itself means the list is empty, so check this after removal + // Sentinel pointing to itself / zero means the list is empty / uninitialized, so check this after removal // Below error is very specific to uninstalling validators. require(_hasValidators(), CanNotRemoveLastValidator()); validator.excessivelySafeCall(gasleft(), 0, 0, abi.encodeWithSelector(IModule.onUninstall.selector, disableModuleData)); diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index c393f67d..d29f733c 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -12,7 +12,7 @@ pragma solidity ^0.8.27; // Nexus: A suite of contracts for Modular Smart Accounts compliant with ERC-7579 and ERC-4337, developed by Biconomy. // Learn more at https://biconomy.io. To report security issues, please contact us at: security@biconomy.io -import { SignatureCheckerLib } from "solady/utils/SignatureCheckerLib.sol"; +import { ECDSA } from "solady/utils/ECDSA.sol"; import { PackedUserOperation } from "account-abstraction/interfaces/PackedUserOperation.sol"; import { ERC7739Validator } from "../../base/ERC7739Validator.sol"; import { IValidator } from "../../interfaces/modules/IValidator.sol"; @@ -33,7 +33,7 @@ import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/Mes /// @author @zeroknots | Rhinestone.wtf | zeroknots.eth /// Special thanks to the Solady team for foundational contributions: https://github.com/Vectorized/solady contract K1Validator is IValidator, ERC7739Validator { - using SignatureCheckerLib for address; + using ECDSA for bytes32; using EnumerableSet for EnumerableSet.AddressSet; /*////////////////////////////////////////////////////////////////////////// @@ -226,22 +226,12 @@ contract K1Validator is IValidator, ERC7739Validator { /// @param hash The hash of the data to validate /// @param signature The signature data function _validateSignatureForOwner(address owner, bytes32 hash, bytes calldata signature) internal view returns (bool) { - // Check if the 's' value is valid - bytes32 s; - assembly { - // same as `s := mload(add(signature, 0x40))` but for calldata - s := calldataload(add(signature.offset, 0x20)) - } - if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { - return false; - } - - if (SignatureCheckerLib.isValidSignatureNowCalldata(owner, hash, signature)) { + if (hash.recover(signature) == owner) { return true; } - if (SignatureCheckerLib.isValidSignatureNowCalldata(owner, MessageHashUtils.toEthSignedMessageHash(hash), signature)) { + if (hash.toEthSignedMessageHash().recover(signature) == owner) { return true; - } + } return false; } diff --git a/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts b/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts index 7ab3b059..198982d5 100644 --- a/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts +++ b/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts @@ -236,45 +236,47 @@ describe("K1Validator module tests", () => { expect(isValid).to.equal(1); }); - it("should sign with eth_sign", async () => { - const isModuleInstalled = await deployedNexus.isModuleInstalled( - ModuleType.Validation, - k1ModuleAddress, - ethers.hexlify("0x"), - ); + // Review: below test started failing. + // it("should sign with eth_sign", async () => { + // const isModuleInstalled = await deployedNexus.isModuleInstalled( + // ModuleType.Validation, + // k1ModuleAddress, + // ethers.hexlify("0x"), + // ); - expect(isModuleInstalled).to.equal(true); + // expect(isModuleInstalled).to.equal(true); - const callData = await generateUseropCallData({ - executionMethod: ExecutionMethod.Execute, - targetContract: counter, - functionName: "incrementNumber", - }); + // const callData = await generateUseropCallData({ + // executionMethod: ExecutionMethod.Execute, + // targetContract: counter, + // functionName: "incrementNumber", + // }); - const validatorModuleAddress = await k1Validator.getAddress(); + // const validatorModuleAddress = await k1Validator.getAddress(); - // Build the userOp with the generated callData. - const userOp = buildPackedUserOp({ - sender: await deployedNexus.getAddress(), - callData, - }); - userOp.callData = callData; + // // Build the userOp with the generated callData. + // const userOp = buildPackedUserOp({ + // sender: await deployedNexus.getAddress(), + // callData, + // }); + // userOp.callData = callData; - const nonce = await entryPoint.getNonce( - userOp.sender, - ethers.zeroPadBytes(validatorModuleAddress.toString(), 24), - ); + // const nonce = await entryPoint.getNonce( + // userOp.sender, + // ethers.zeroPadBytes(validatorModuleAddress.toString(), 24), + // ); - userOp.nonce = nonce; + // userOp.nonce = nonce; - const userOpHash = await entryPoint.getUserOpHash(userOp); + // const userOpHash = await entryPoint.getUserOpHash(userOp); - const isValid = await k1Validator.validateUserOp(userOp, userOpHash); + // const isValid = await k1Validator.validateUserOp(userOp, userOpHash); - // 0 - valid, 1 - invalid - expect(isValid).to.equal(1); - }); + // // 0 - valid, 1 - invalid + // expect(isValid).to.equal(1); + // }); + // Review it("Should check signature using isValidSignatureWithSender", async () => { const message = "Some Message"; // const isValid = await k1Validator.isValidSignatureWithSender(await deployedNexus.getAddress(), , ); From 986529162daa66b6f814f32b8056f7a768bc8db2 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 4 Oct 2024 16:02:38 +0400 Subject: [PATCH 04/20] fix: lint --- contracts/modules/validators/K1Validator.sol | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index d29f733c..8045538e 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -18,7 +18,6 @@ import { ERC7739Validator } from "../../base/ERC7739Validator.sol"; import { IValidator } from "../../interfaces/modules/IValidator.sol"; import { EnumerableSet } from "../../lib/EnumerableSet4337.sol"; import { MODULE_TYPE_VALIDATOR, VALIDATION_SUCCESS, VALIDATION_FAILED } from "../../types/Constants.sol"; -import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; /// @title Nexus - K1Validator (ECDSA) /// @notice Validator module for smart accounts, verifying user operation signatures @@ -231,7 +230,7 @@ contract K1Validator is IValidator, ERC7739Validator { } if (hash.toEthSignedMessageHash().recover(signature) == owner) { return true; - } + } return false; } From 070d83cdd45c8547379203c768050f4bf32eb69d Mon Sep 17 00:00:00 2001 From: Filipp Makarov Date: Fri, 4 Oct 2024 16:47:56 +0300 Subject: [PATCH 05/20] no return data methods, tests fail --- contracts/Nexus.sol | 2 + contracts/base/ExecutionHelper.sol | 38 +++++++++++++++++-- contracts/base/ModuleManager.sol | 2 +- .../gas/TestGas_ExecutionHelper.t.sol | 5 ++- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/contracts/Nexus.sol b/contracts/Nexus.sol index df41b654..8232e4d2 100644 --- a/contracts/Nexus.sol +++ b/contracts/Nexus.sol @@ -27,6 +27,8 @@ import { ModeLib, ExecutionMode, ExecType, CallType, CALLTYPE_BATCH, CALLTYPE_SI import { NonceLib } from "./lib/NonceLib.sol"; import { SentinelListLib, SENTINEL, ZERO_ADDRESS } from "sentinellist/SentinelList.sol"; +import { console2 } from "forge-std/console2.sol"; + /// @title Nexus - Smart Account /// @notice This contract integrates various functionalities to handle modular smart accounts compliant with ERC-7579 and ERC-4337 standards. /// @dev Comprehensive suite of methods for managing smart accounts, integrating module management, execution management, and upgradability via UUPS. diff --git a/contracts/base/ExecutionHelper.sol b/contracts/base/ExecutionHelper.sol index 74cc605e..3f8f4485 100644 --- a/contracts/base/ExecutionHelper.sol +++ b/contracts/base/ExecutionHelper.sol @@ -53,6 +53,17 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { } } + /// @notice Executes a call to a target address with specified value and data. + /// Same as _execute but without return data for gas optimization. + function _executeNoReturndata(address target, uint256 value, bytes calldata callData) internal virtual { + assembly { + let result := mload(0x40) + calldatacopy(result, callData.offset, callData.length) + pop(call(gas(), target, value, result, callData.length, 0, 0)) + mstore(0x40, add(result, callData.length)) + } + } + /// @notice Tries to execute a call and captures if it was successful or not. /// @dev Similar to _execute but returns a success boolean and catches reverts instead of propagating them. /// @dev calls to an EOA should be counted as successful. @@ -87,6 +98,16 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { } } + /// @notice Executes a batch of calls without returning the result. + /// @param executions An array of Execution structs each containing target, value, and calldata. + function _executeBatchNoReturndata(Execution[] calldata executions) internal { + Execution calldata exec; + for (uint256 i; i < executions.length; i++) { + exec = executions[i]; + _executeNoReturndata(exec.target, exec.value, exec.callData); + } + } + /// @notice Tries to execute a batch of calls and emits an event for each unsuccessful call. /// @param executions An array of Execution structs. /// @return result An array of bytes returned from each executed call, with unsuccessful calls marked by events. @@ -122,6 +143,17 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { } } + /// @dev Execute a delegatecall with `delegate` on this account. + /// Same as _executeDelegatecall but without return data for gas optimization. + function _executeDelegatecallNoReturndata(address delegate, bytes calldata callData) internal { + assembly { + let result := mload(0x40) + calldatacopy(result, callData.offset, callData.length) + pop(delegatecall(gas(), delegate, result, callData.length, codesize(), 0x00)) + mstore(0x40, add(result, callData.length)) + } + } + /// @dev Execute a delegatecall with `delegate` on this account and catch reverts. /// @return success True if the delegatecall was successful, false otherwise. /// @return result The bytes returned from the delegatecall, which contains the returned data from the delegate contract. @@ -144,7 +176,7 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { /// @param execType The execution type, which can be DEFAULT (revert on failure) or TRY (return on failure). function _handleSingleExecution(bytes calldata executionCalldata, ExecType execType) internal { (address target, uint256 value, bytes calldata callData) = executionCalldata.decodeSingle(); - if (execType == EXECTYPE_DEFAULT) _execute(target, value, callData); + if (execType == EXECTYPE_DEFAULT) _executeNoReturndata(target, value, callData); else if (execType == EXECTYPE_TRY) { (bool success, bytes memory result) = _tryExecute(target, value, callData); if (!success) emit TryExecuteUnsuccessful(callData, result); @@ -156,7 +188,7 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { /// @param execType The execution type, which can be DEFAULT (revert on failure) or TRY (return on failure). function _handleBatchExecution(bytes calldata executionCalldata, ExecType execType) internal { Execution[] calldata executions = executionCalldata.decodeBatch(); - if (execType == EXECTYPE_DEFAULT) _executeBatch(executions); + if (execType == EXECTYPE_DEFAULT) _executeBatchNoReturndata(executions); else if (execType == EXECTYPE_TRY) _tryExecuteBatch(executions); else revert UnsupportedExecType(execType); } @@ -166,7 +198,7 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { /// @param execType The execution type, which can be DEFAULT (revert on failure) or TRY (return on failure). function _handleDelegateCallExecution(bytes calldata executionCalldata, ExecType execType) internal { (address delegate, bytes calldata callData) = executionCalldata.decodeDelegateCall(); - if (execType == EXECTYPE_DEFAULT) _executeDelegatecall(delegate, callData); + if (execType == EXECTYPE_DEFAULT) _executeDelegatecallNoReturndata(delegate, callData); else if (execType == EXECTYPE_TRY) { (bool success, bytes memory result) = _tryExecuteDelegatecall(delegate, callData); if (!success) emit TryDelegateCallUnsuccessful(callData, result); diff --git a/contracts/base/ModuleManager.sol b/contracts/base/ModuleManager.sol index 1ed672df..a7e8fd2e 100644 --- a/contracts/base/ModuleManager.sol +++ b/contracts/base/ModuleManager.sol @@ -27,7 +27,7 @@ import { MODULE_TYPE_VALIDATOR, MODULE_TYPE_EXECUTOR, MODULE_TYPE_FALLBACK, MODU import { EIP712 } from "solady/utils/EIP712.sol"; import { ExcessivelySafeCall } from "excessively-safe-call/ExcessivelySafeCall.sol"; import { RegistryAdapter } from "./RegistryAdapter.sol"; - +import { console2 } from "forge-std/console2.sol"; /// @title Nexus - ModuleManager /// @notice Manages Validator, Executor, Hook, and Fallback modules within the Nexus suite, supporting /// @dev Implements SentinelList for managing modules via a linked list structure, adhering to ERC-7579. diff --git a/test/foundry/unit/concrete/gas/TestGas_ExecutionHelper.t.sol b/test/foundry/unit/concrete/gas/TestGas_ExecutionHelper.t.sol index 366280d0..a4309694 100644 --- a/test/foundry/unit/concrete/gas/TestGas_ExecutionHelper.t.sol +++ b/test/foundry/unit/concrete/gas/TestGas_ExecutionHelper.t.sol @@ -26,6 +26,7 @@ contract TestGas_ExecutionHelper is TestAccountExecution_Base { 0 ); ENTRYPOINT.handleOps(userOpsInstall, payable(address(BOB.addr))); + assertTrue(BOB_ACCOUNT.isModuleInstalled(MODULE_TYPE_EXECUTOR, address(mockExecutor), ""), "MockExecutor should be installed"); } // Execute Tests @@ -83,11 +84,11 @@ contract TestGas_ExecutionHelper is TestAccountExecution_Base { // ExecuteFromExecutor Tests function test_Gas_ExecuteFromExecutor_Single() public { - prank(address(mockExecutor)); - + vm.startPrank(address(mockExecutor)); uint256 initialGas = gasleft(); BOB_ACCOUNT.executeFromExecutor(ModeLib.encodeSimpleSingle(), ExecLib.encodeSingle(address(0), 0, "")); uint256 gasUsed = initialGas - gasleft(); + vm.stopPrank(); console.log("Gas used for single empty execution from executor: ", gasUsed); } From eb6db4a937a1bc97905cff63ec5953ed06e17799 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 4 Oct 2024 18:23:12 +0400 Subject: [PATCH 06/20] fix: test and update validate sig with try catch --- contracts/modules/validators/K1Validator.sol | 34 +++++++- .../Nexus.Module.K1Validator.specs.ts | 77 ++++++++++--------- 2 files changed, 71 insertions(+), 40 deletions(-) diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index 8045538e..793f4957 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -225,15 +225,41 @@ contract K1Validator is IValidator, ERC7739Validator { /// @param hash The hash of the data to validate /// @param signature The signature data function _validateSignatureForOwner(address owner, bytes32 hash, bytes calldata signature) internal view returns (bool) { - if (hash.recover(signature) == owner) { - return true; + try this.recoverSigner(hash, signature) returns (address recoveredSigner) { + if (recoveredSigner == owner) { + return true; + } + } catch { + // If recovery fails, we'll continue to the next check } - if (hash.toEthSignedMessageHash().recover(signature) == owner) { - return true; + + try this.recoverSignerFromEthSignedMessage(hash, signature) returns (address recoveredSigner) { + if (recoveredSigner == owner) { + return true; + } + } catch { + // If recovery fails, we'll return false } + return false; } + /// @notice Recovers the signer from a signature + /// @param hash The hash of the data to validate + /// @param signature The signature data + /// @return The recovered signer address + function recoverSigner(bytes32 hash, bytes calldata signature) external view returns (address) { + return hash.recover(signature); + } + + /// @notice Recovers the signer from an Ethereum signed message + /// @param hash The hash of the data to validate + /// @param signature The signature data + /// @return The recovered signer address + function recoverSignerFromEthSignedMessage(bytes32 hash, bytes calldata signature) external view returns (address) { + return hash.toEthSignedMessageHash().recover(signature); + } + // @notice Fills the _safeSenders list from the given data function _fillSafeSenders(bytes calldata data) private { for (uint256 i; i < data.length / 20; i++) { diff --git a/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts b/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts index 198982d5..0a6887c0 100644 --- a/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts +++ b/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts @@ -25,6 +25,7 @@ describe("K1Validator module tests", () => { let k1ModuleAddress: AddressLike; let mockExecutor: MockExecutor; let accountOwner: Signer; + let aliceAccountOwner: Signer; let entryPoint: EntryPoint; let bundler: Signer; let counter: Counter; @@ -35,6 +36,7 @@ describe("K1Validator module tests", () => { ecdsaValidator: k1Validator, mockExecutor, accountOwner, + aliceAccountOwner, entryPoint, mockValidator, counter, @@ -43,6 +45,7 @@ describe("K1Validator module tests", () => { k1ModuleAddress = await k1Validator.getAddress(); mockExecutor = mockExecutor; accountOwner = accountOwner; + aliceAccountOwner = aliceAccountOwner; entryPoint = entryPoint; bundler = ethers.Wallet.createRandom(); @@ -236,52 +239,54 @@ describe("K1Validator module tests", () => { expect(isValid).to.equal(1); }); - // Review: below test started failing. - // it("should sign with eth_sign", async () => { - // const isModuleInstalled = await deployedNexus.isModuleInstalled( - // ModuleType.Validation, - // k1ModuleAddress, - // ethers.hexlify("0x"), - // ); + it("should sign with eth_sign", async () => { + const isModuleInstalled = await deployedNexus.isModuleInstalled( + ModuleType.Validation, + k1ModuleAddress, + ethers.hexlify("0x"), + ); - // expect(isModuleInstalled).to.equal(true); + expect(isModuleInstalled).to.equal(true); - // const callData = await generateUseropCallData({ - // executionMethod: ExecutionMethod.Execute, - // targetContract: counter, - // functionName: "incrementNumber", - // }); + const callData = await generateUseropCallData({ + executionMethod: ExecutionMethod.Execute, + targetContract: counter, + functionName: "incrementNumber", + }); - // const validatorModuleAddress = await k1Validator.getAddress(); + const validatorModuleAddress = await k1Validator.getAddress(); - // // Build the userOp with the generated callData. - // const userOp = buildPackedUserOp({ - // sender: await deployedNexus.getAddress(), - // callData, - // }); - // userOp.callData = callData; + // Build the userOp with the generated callData. + const userOp = buildPackedUserOp({ + sender: await deployedNexus.getAddress(), + callData, + }); + userOp.callData = callData; - // const nonce = await entryPoint.getNonce( - // userOp.sender, - // ethers.zeroPadBytes(validatorModuleAddress.toString(), 24), - // ); + const nonce = await entryPoint.getNonce( + userOp.sender, + ethers.zeroPadBytes(validatorModuleAddress.toString(), 24), + ); + userOp.nonce = nonce; + + const userOpHash = await entryPoint.getUserOpHash(userOp); - // userOp.nonce = nonce; + const connectedSigner = await ethers.provider.getSigner(await accountOwner.getAddress()); + const signerProvider = connectedSigner.provider; - // const userOpHash = await entryPoint.getUserOpHash(userOp); + // Review: the signer + const eth_sign = await signerProvider.send("eth_sign", [ + await accountOwner.getAddress(), + userOpHash, + ]); + console.log("eth_sign", eth_sign); - // const isValid = await k1Validator.validateUserOp(userOp, userOpHash); + userOp.signature = eth_sign; - // // 0 - valid, 1 - invalid - // expect(isValid).to.equal(1); - // }); + const isValid = await k1Validator.validateUserOp(userOp, userOpHash); - // Review - it("Should check signature using isValidSignatureWithSender", async () => { - const message = "Some Message"; - // const isValid = await k1Validator.isValidSignatureWithSender(await deployedNexus.getAddress(), , ); - // 0x1626ba7e - valid - // 0xffffffff - invalid + // 0 - valid, 1 - invalid + expect(isValid).to.equal(0); }); }); }); From 852c9471af17a21e7dc2fbb51d0c7070d1b9ae2e Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 4 Oct 2024 18:34:34 +0400 Subject: [PATCH 07/20] fix: lint --- contracts/modules/validators/K1Validator.sol | 32 +++++++++---------- .../Nexus.Module.K1Validator.specs.ts | 4 ++- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index 793f4957..02c471cb 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -171,6 +171,22 @@ contract K1Validator is IValidator, ERC7739Validator { return _validateSignatureForOwner(owner, hash, sig); } + /// @notice Recovers the signer from a signature + /// @param hash The hash of the data to validate + /// @param signature The signature data + /// @return The recovered signer address + function recoverSigner(bytes32 hash, bytes calldata signature) external view returns (address) { + return hash.recover(signature); + } + + /// @notice Recovers the signer from an Ethereum signed message + /// @param hash The hash of the data to validate + /// @param signature The signature data + /// @return The recovered signer address + function recoverSignerFromEthSignedMessage(bytes32 hash, bytes calldata signature) external view returns (address) { + return hash.toEthSignedMessageHash().recover(signature); + } + /*////////////////////////////////////////////////////////////////////////// METADATA //////////////////////////////////////////////////////////////////////////*/ @@ -244,22 +260,6 @@ contract K1Validator is IValidator, ERC7739Validator { return false; } - /// @notice Recovers the signer from a signature - /// @param hash The hash of the data to validate - /// @param signature The signature data - /// @return The recovered signer address - function recoverSigner(bytes32 hash, bytes calldata signature) external view returns (address) { - return hash.recover(signature); - } - - /// @notice Recovers the signer from an Ethereum signed message - /// @param hash The hash of the data to validate - /// @param signature The signature data - /// @return The recovered signer address - function recoverSignerFromEthSignedMessage(bytes32 hash, bytes calldata signature) external view returns (address) { - return hash.toEthSignedMessageHash().recover(signature); - } - // @notice Fills the _safeSenders list from the given data function _fillSafeSenders(bytes calldata data) private { for (uint256 i; i < data.length / 20; i++) { diff --git a/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts b/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts index 0a6887c0..28a524ae 100644 --- a/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts +++ b/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts @@ -271,7 +271,9 @@ describe("K1Validator module tests", () => { const userOpHash = await entryPoint.getUserOpHash(userOp); - const connectedSigner = await ethers.provider.getSigner(await accountOwner.getAddress()); + const connectedSigner = await ethers.provider.getSigner( + await accountOwner.getAddress(), + ); const signerProvider = connectedSigner.provider; // Review: the signer From 9d3452f6c0a4186bb77cdd20e40c8f35909caf75 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 4 Oct 2024 18:50:17 +0400 Subject: [PATCH 08/20] fix: respond to PR comments --- contracts/modules/validators/K1Validator.sol | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index 02c471cb..562bc49d 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -241,6 +241,17 @@ contract K1Validator is IValidator, ERC7739Validator { /// @param hash The hash of the data to validate /// @param signature The signature data function _validateSignatureForOwner(address owner, bytes32 hash, bytes calldata signature) internal view returns (bool) { + // Check if the 's' value is valid + bytes32 s; + assembly { + // same as `s := mload(add(signature, 0x40))` but for calldata + s := calldataload(add(signature.offset, 0x20)) + } + if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { + return false; + } + + // verify signer try this.recoverSigner(hash, signature) returns (address recoveredSigner) { if (recoveredSigner == owner) { return true; From daf7460e57578960e9abbfb8d02daeca134db792 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 4 Oct 2024 18:57:25 +0400 Subject: [PATCH 09/20] refactor: remove unnecessary prank --- .../concrete/modules/TestK1Validator.t.sol | 32 ------------------- 1 file changed, 32 deletions(-) diff --git a/test/foundry/unit/concrete/modules/TestK1Validator.t.sol b/test/foundry/unit/concrete/modules/TestK1Validator.t.sol index 062e16a3..b918eb2a 100644 --- a/test/foundry/unit/concrete/modules/TestK1Validator.t.sol +++ b/test/foundry/unit/concrete/modules/TestK1Validator.t.sol @@ -102,8 +102,6 @@ contract TestK1Validator is NexusTest_Base { /// @notice Tests the validateUserOp function with a valid signature function test_ValidateUserOp_toEthSignedMessageHash_Success() public { - prank(address(BOB_ACCOUNT)); - userOp.signature = signature; uint256 validationResult = validator.validateUserOp(userOp, userOpHash); @@ -113,8 +111,6 @@ contract TestK1Validator is NexusTest_Base { /// @notice Tests the validateUserOp function with an invalid signature function test_ValidateUserOp_Failure() public { - prank(address(BOB_ACCOUNT)); - userOp.signature = abi.encodePacked(signMessage(BOB, keccak256(abi.encodePacked("invalid")))); uint256 validationResult = validator.validateUserOp(userOp, userOpHash); @@ -124,8 +120,6 @@ contract TestK1Validator is NexusTest_Base { /// @notice Tests the isValidSignatureWithSender function with a valid signature function test_IsValidSignatureWithSender_Success() public { - startPrank(address(BOB_ACCOUNT)); - bytes32 originalHash = keccak256(abi.encodePacked("valid message")); (uint8 v, bytes32 r, bytes32 s) = vm.sign(BOB.privateKey, toERC1271HashPersonalSign(originalHash)); bytes memory signedMessage = abi.encodePacked(r, s, v); @@ -133,15 +127,11 @@ contract TestK1Validator is NexusTest_Base { bytes4 result = BOB_ACCOUNT.isValidSignature(originalHash, completeSignature); - stopPrank(); - assertEq(result, ERC1271_MAGICVALUE, "Signature should be valid"); } /// @notice Tests the validateUserOp function with a valid signature function test_ValidateUserOp_Success() public { - startPrank(address(BOB_ACCOUNT)); - bytes32 originalHash = keccak256(abi.encodePacked("123")); (uint8 v, bytes32 r, bytes32 s) = vm.sign(BOB.privateKey, originalHash); @@ -150,15 +140,12 @@ contract TestK1Validator is NexusTest_Base { uint256 res = validator.validateUserOp(userOp, originalHash); - stopPrank(); - assertEq(res, VALIDATION_SUCCESS, "Signature should be valid"); } /// @notice Tests the isValidSignatureWithSender function with an invalid signature function test_IsValidSignatureWithSender_Failure() public { prank(address(BOB_ACCOUNT)); - vm.expectRevert(); //it should revert as last try to check if it's an RPC call which reverts if called on-chain validator.isValidSignatureWithSender(address(BOB_ACCOUNT), userOpHash, abi.encodePacked(signMessage(BOB, keccak256(abi.encodePacked("invalid"))))); } @@ -232,8 +219,6 @@ contract TestK1Validator is NexusTest_Base { /// @notice Tests that a valid signature with a valid 's' value is accepted function test_ValidateUserOp_ValidSignature() public { - startPrank(address(BOB_ACCOUNT)); - bytes32 originalHash = keccak256(abi.encodePacked("valid message")); (uint8 v, bytes32 r, bytes32 s) = vm.sign(BOB.privateKey, originalHash); @@ -244,15 +229,11 @@ contract TestK1Validator is NexusTest_Base { uint256 res = validator.validateUserOp(userOp, originalHash); - stopPrank(); - assertEq(res, VALIDATION_SUCCESS, "Valid signature should be accepted"); } /// @notice Tests that a signature with an invalid 's' value is rejected function test_ValidateUserOp_InvalidSValue() public { - startPrank(address(BOB_ACCOUNT)); - bytes32 originalHash = keccak256(abi.encodePacked("invalid message")); (uint8 v, bytes32 r, bytes32 s) = vm.sign(BOB.privateKey, originalHash); @@ -265,15 +246,12 @@ contract TestK1Validator is NexusTest_Base { uint256 res = validator.validateUserOp(userOp, originalHash); - stopPrank(); - assertEq(res, VALIDATION_FAILED, "Signature with invalid 's' value should be rejected"); } /// @notice Tests that a valid signature with a valid 's' value is accepted for isValidSignatureWithSender function test_IsValidSignatureWithSender_ValidSignature() public { startPrank(address(BOB_ACCOUNT)); - // Generate a valid message hash bytes32 originalHash = keccak256(abi.encodePacked("valid message")); @@ -288,17 +266,13 @@ contract TestK1Validator is NexusTest_Base { // Call isValidSignatureWithSender on the validator contract with the correct parameters bytes4 result = validator.isValidSignatureWithSender(address(BOB_ACCOUNT), originalHash, signedMessage); - stopPrank(); - // Ensure the result is the expected ERC1271_MAGICVALUE assertEq(result, ERC1271_MAGICVALUE, "Valid signature should be accepted"); } /// @notice Tests that a signature with an invalid 's' value is rejected for isValidSignatureWithSender function test_IsValidSignatureWithSender_InvalidSValue() public { - startPrank(address(BOB_ACCOUNT)); - bytes32 originalHash = keccak256(abi.encodePacked("invalid message")); (uint8 v, bytes32 r, bytes32 s) = vm.sign(BOB.privateKey, originalHash); @@ -312,15 +286,11 @@ contract TestK1Validator is NexusTest_Base { bytes4 result = BOB_ACCOUNT.isValidSignature(originalHash, completeSignature); - stopPrank(); - assertEq(result, ERC1271_INVALID, "Signature with invalid 's' value should be rejected"); } function test_IsValidSignatureWithSender_SafeCaller_Success() public { assertEq(mockSafe1271Caller.balanceOf(address(BOB_ACCOUNT)), 0); - - vm.startPrank(address(BOB_ACCOUNT)); // alternative way of setting mockSafe1271Caller as safe sender in k1 validator // commented out as it was already set at setup @@ -348,8 +318,6 @@ contract TestK1Validator is NexusTest_Base { uint256 res = mockSafe1271Caller.validateUserOp(userOp, mockUserOpHash); - stopPrank(); - assertEq(res, VALIDATION_SUCCESS, "Signature should be valid"); assertEq(mockSafe1271Caller.balanceOf(address(BOB_ACCOUNT)), 1); } From 2694a4fe4ef7b64d4deaf2079495d26acb91cc2e Mon Sep 17 00:00:00 2001 From: Filipp Makarov Date: Mon, 7 Oct 2024 10:36:10 +0300 Subject: [PATCH 10/20] revert on no success --- contracts/base/ExecutionHelper.sol | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/contracts/base/ExecutionHelper.sol b/contracts/base/ExecutionHelper.sol index 3f8f4485..14146f50 100644 --- a/contracts/base/ExecutionHelper.sol +++ b/contracts/base/ExecutionHelper.sol @@ -59,8 +59,12 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { assembly { let result := mload(0x40) calldatacopy(result, callData.offset, callData.length) - pop(call(gas(), target, value, result, callData.length, 0, 0)) - mstore(0x40, add(result, callData.length)) + if iszero(call(gas(), target, value, result, callData.length, 0, 0)) { + // Bubble up the revert if the call reverts. + returndatacopy(result, 0x00, returndatasize()) + revert(result, returndatasize()) + } + mstore(0x40, add(result, callData.length)) //allocate memory } } @@ -149,8 +153,12 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { assembly { let result := mload(0x40) calldatacopy(result, callData.offset, callData.length) - pop(delegatecall(gas(), delegate, result, callData.length, codesize(), 0x00)) - mstore(0x40, add(result, callData.length)) + if iszero(delegatecall(gas(), delegate, result, callData.length, codesize(), 0x00)) { + // Bubble up the revert if the call reverts. + returndatacopy(result, 0x00, returndatasize()) + revert(result, returndatasize()) + } + mstore(0x40, add(result, callData.length)) //allocate memory } } From f160477a45a6cb2f1e3c210db46817da3ed06fbf Mon Sep 17 00:00:00 2001 From: Filipp Makarov Date: Mon, 7 Oct 2024 10:39:04 +0300 Subject: [PATCH 11/20] clean --- contracts/base/ModuleManager.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/base/ModuleManager.sol b/contracts/base/ModuleManager.sol index a7e8fd2e..78234011 100644 --- a/contracts/base/ModuleManager.sol +++ b/contracts/base/ModuleManager.sol @@ -27,7 +27,6 @@ import { MODULE_TYPE_VALIDATOR, MODULE_TYPE_EXECUTOR, MODULE_TYPE_FALLBACK, MODU import { EIP712 } from "solady/utils/EIP712.sol"; import { ExcessivelySafeCall } from "excessively-safe-call/ExcessivelySafeCall.sol"; import { RegistryAdapter } from "./RegistryAdapter.sol"; -import { console2 } from "forge-std/console2.sol"; /// @title Nexus - ModuleManager /// @notice Manages Validator, Executor, Hook, and Fallback modules within the Nexus suite, supporting /// @dev Implements SentinelList for managing modules via a linked list structure, adhering to ERC-7579. From fbeb6e1e707d9bc136ec0c1d22514d18806ded3f Mon Sep 17 00:00:00 2001 From: Filipp Makarov Date: Mon, 7 Oct 2024 10:39:56 +0300 Subject: [PATCH 12/20] clean --- contracts/Nexus.sol | 2 -- 1 file changed, 2 deletions(-) diff --git a/contracts/Nexus.sol b/contracts/Nexus.sol index 8232e4d2..df41b654 100644 --- a/contracts/Nexus.sol +++ b/contracts/Nexus.sol @@ -27,8 +27,6 @@ import { ModeLib, ExecutionMode, ExecType, CallType, CALLTYPE_BATCH, CALLTYPE_SI import { NonceLib } from "./lib/NonceLib.sol"; import { SentinelListLib, SENTINEL, ZERO_ADDRESS } from "sentinellist/SentinelList.sol"; -import { console2 } from "forge-std/console2.sol"; - /// @title Nexus - Smart Account /// @notice This contract integrates various functionalities to handle modular smart accounts compliant with ERC-7579 and ERC-4337 standards. /// @dev Comprehensive suite of methods for managing smart accounts, integrating module management, execution management, and upgradability via UUPS. From 980947e4942b791e22fcc1187b3cfc5542d383d6 Mon Sep 17 00:00:00 2001 From: Filipp Makarov Date: Mon, 7 Oct 2024 10:40:16 +0300 Subject: [PATCH 13/20] clean --- contracts/base/ModuleManager.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/base/ModuleManager.sol b/contracts/base/ModuleManager.sol index 78234011..1ed672df 100644 --- a/contracts/base/ModuleManager.sol +++ b/contracts/base/ModuleManager.sol @@ -27,6 +27,7 @@ import { MODULE_TYPE_VALIDATOR, MODULE_TYPE_EXECUTOR, MODULE_TYPE_FALLBACK, MODU import { EIP712 } from "solady/utils/EIP712.sol"; import { ExcessivelySafeCall } from "excessively-safe-call/ExcessivelySafeCall.sol"; import { RegistryAdapter } from "./RegistryAdapter.sol"; + /// @title Nexus - ModuleManager /// @notice Manages Validator, Executor, Hook, and Fallback modules within the Nexus suite, supporting /// @dev Implements SentinelList for managing modules via a linked list structure, adhering to ERC-7579. From df21c17354da6e2a66132ec67fb92a7d0a4921be Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:40:10 +0400 Subject: [PATCH 14/20] refactor: respond to PR comment by 0xbok --- contracts/modules/validators/K1Validator.sol | 53 ++++++++------------ 1 file changed, 21 insertions(+), 32 deletions(-) diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index 562bc49d..85e9db2a 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -171,22 +171,6 @@ contract K1Validator is IValidator, ERC7739Validator { return _validateSignatureForOwner(owner, hash, sig); } - /// @notice Recovers the signer from a signature - /// @param hash The hash of the data to validate - /// @param signature The signature data - /// @return The recovered signer address - function recoverSigner(bytes32 hash, bytes calldata signature) external view returns (address) { - return hash.recover(signature); - } - - /// @notice Recovers the signer from an Ethereum signed message - /// @param hash The hash of the data to validate - /// @param signature The signature data - /// @return The recovered signer address - function recoverSignerFromEthSignedMessage(bytes32 hash, bytes calldata signature) external view returns (address) { - return hash.toEthSignedMessageHash().recover(signature); - } - /*////////////////////////////////////////////////////////////////////////// METADATA //////////////////////////////////////////////////////////////////////////*/ @@ -214,6 +198,24 @@ contract K1Validator is IValidator, ERC7739Validator { INTERNAL //////////////////////////////////////////////////////////////////////////*/ + /// @notice Recovers the signer from a signature + /// @param hash The hash of the data to validate + /// @param signature The signature data + /// @return The recovered signer address + /// @notice tryRecover returns address(0) on invalid signature + function _recoverSigner(bytes32 hash, bytes calldata signature) internal view returns (address) { + return hash.tryRecover(signature); + } + + /// @notice Recovers the signer from an Ethereum signed message + /// @param hash The hash of the data to validate + /// @param signature The signature data + /// @return The recovered signer address + /// @notice tryRecover returns address(0) on invalid signature + function _recoverSignerFromEthSignedMessage(bytes32 hash, bytes calldata signature) internal view returns (address) { + return hash.toEthSignedMessageHash().tryRecover(signature); + } + /// @dev Returns whether the `hash` and `signature` are valid. /// Obtains the authorized signer's credentials and calls some /// module's specific internal function to validate the signature @@ -252,22 +254,9 @@ contract K1Validator is IValidator, ERC7739Validator { } // verify signer - try this.recoverSigner(hash, signature) returns (address recoveredSigner) { - if (recoveredSigner == owner) { - return true; - } - } catch { - // If recovery fails, we'll continue to the next check - } - - try this.recoverSignerFromEthSignedMessage(hash, signature) returns (address recoveredSigner) { - if (recoveredSigner == owner) { - return true; - } - } catch { - // If recovery fails, we'll return false - } - + // owner can not be zero address in this contract + if (_recoverSigner(hash, signature) == owner) return true; + if (_recoverSignerFromEthSignedMessage(hash, signature) == owner) return true; return false; } From dfabf86e51fd408c7c07664cad14e349d6e0a702 Mon Sep 17 00:00:00 2001 From: Filipp Makarov Date: Mon, 7 Oct 2024 12:56:36 +0300 Subject: [PATCH 15/20] styling --- contracts/base/ExecutionHelper.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/base/ExecutionHelper.sol b/contracts/base/ExecutionHelper.sol index 14146f50..5b4775e3 100644 --- a/contracts/base/ExecutionHelper.sol +++ b/contracts/base/ExecutionHelper.sol @@ -56,10 +56,11 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { /// @notice Executes a call to a target address with specified value and data. /// Same as _execute but without return data for gas optimization. function _executeNoReturndata(address target, uint256 value, bytes calldata callData) internal virtual { + /// @solidity memory-safe-assembly assembly { let result := mload(0x40) calldatacopy(result, callData.offset, callData.length) - if iszero(call(gas(), target, value, result, callData.length, 0, 0)) { + if iszero(call(gas(), target, value, result, callData.length, codesize(), 0x00)) { // Bubble up the revert if the call reverts. returndatacopy(result, 0x00, returndatasize()) revert(result, returndatasize()) @@ -150,6 +151,7 @@ contract ExecutionHelper is IExecutionHelperEventsAndErrors { /// @dev Execute a delegatecall with `delegate` on this account. /// Same as _executeDelegatecall but without return data for gas optimization. function _executeDelegatecallNoReturndata(address delegate, bytes calldata callData) internal { + /// @solidity memory-safe-assembly assembly { let result := mload(0x40) calldatacopy(result, callData.offset, callData.length) From d312888d36c38e88820152d162af5a26d233425e Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:05:16 +0400 Subject: [PATCH 16/20] refactor: respond to current PR comment --- contracts/modules/validators/K1Validator.sol | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index 85e9db2a..2320907e 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -207,15 +207,6 @@ contract K1Validator is IValidator, ERC7739Validator { return hash.tryRecover(signature); } - /// @notice Recovers the signer from an Ethereum signed message - /// @param hash The hash of the data to validate - /// @param signature The signature data - /// @return The recovered signer address - /// @notice tryRecover returns address(0) on invalid signature - function _recoverSignerFromEthSignedMessage(bytes32 hash, bytes calldata signature) internal view returns (address) { - return hash.toEthSignedMessageHash().tryRecover(signature); - } - /// @dev Returns whether the `hash` and `signature` are valid. /// Obtains the authorized signer's credentials and calls some /// module's specific internal function to validate the signature @@ -256,7 +247,7 @@ contract K1Validator is IValidator, ERC7739Validator { // verify signer // owner can not be zero address in this contract if (_recoverSigner(hash, signature) == owner) return true; - if (_recoverSignerFromEthSignedMessage(hash, signature) == owner) return true; + if (_recoverSigner(hash.toEthSignedMessageHash(), signature) == owner) return true; return false; } From 452bf0c07a1f96ad687a2f2fc4a55cf326fb31aa Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 7 Oct 2024 20:26:27 +0400 Subject: [PATCH 17/20] fix: k1 validator 0 address check --- contracts/modules/validators/K1Validator.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index 2320907e..0ca6f3cc 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -56,6 +56,9 @@ contract K1Validator is IValidator, ERC7739Validator { /// @notice Error to indicate that the new owner cannot be a contract address error NewOwnerIsContract(); + /// @notice Error to indicate that the owner cannot be the zero address + error OwnerCannotBeZeroAddress(); + /// @notice Error to indicate that the data length is invalid error InvalidDataLength(); @@ -72,6 +75,7 @@ contract K1Validator is IValidator, ERC7739Validator { require(data.length != 0, NoOwnerProvided()); require(!_isInitialized(msg.sender), ModuleAlreadyInitialized()); address newOwner = address(bytes20(data[:20])); + require(newOwner != address(0), OwnerCannotBeZeroAddress()); require(!_isContract(newOwner), NewOwnerIsContract()); smartAccountOwners[msg.sender] = newOwner; if (data.length > 20) { From 01fbf8d43f37463c107d46d91e933e825cc15a9a Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:16:45 +0400 Subject: [PATCH 18/20] feat:spearbit final report --- .../report-cantinacode-biconomy-0708-final.pdf | Bin 0 -> 218944 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 audits/report-cantinacode-biconomy-0708-final.pdf diff --git a/audits/report-cantinacode-biconomy-0708-final.pdf b/audits/report-cantinacode-biconomy-0708-final.pdf new file mode 100644 index 0000000000000000000000000000000000000000..efaf1c932c6b20a63ca4b2546c84e77c30a36094 GIT binary patch literal 218944 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

0wapurqKju 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

EaM4MjN@Hhg^p_L9Aiw$bu>l`je^{FQ6@~wnO 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

BrB7Jq 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 HdA$Ds9nqct literal 0 HcmV?d00001 From 5b8723c0f4d858b32114ee81197b84ca6542dae1 Mon Sep 17 00:00:00 2001 From: VGabriel45 Date: Sun, 13 Oct 2024 14:59:42 +0300 Subject: [PATCH 19/20] feat: helper config for deployment and cleanup --- scripts/foundry/Deploy.s.sol | 32 +++++++++++++++---- scripts/foundry/HelperConfig.s.sol | 31 ++++++++++++++++++ test/foundry/utils/TestHelper.t.sol | 6 ++-- .../smart-account/Nexus.Factory.specs.ts | 7 ++-- 4 files changed, 61 insertions(+), 15 deletions(-) create mode 100644 scripts/foundry/HelperConfig.s.sol diff --git a/scripts/foundry/Deploy.s.sol b/scripts/foundry/Deploy.s.sol index c5316bba..9388d437 100644 --- a/scripts/foundry/Deploy.s.sol +++ b/scripts/foundry/Deploy.s.sol @@ -5,15 +5,33 @@ pragma solidity >=0.8.0 <0.9.0; import { Nexus } from "../../contracts/Nexus.sol"; import { BaseScript } from "./Base.s.sol"; +import { K1ValidatorFactory } from "../../contracts/factory/K1ValidatorFactory.sol"; +import { K1Validator } from "../../contracts/modules/validators/K1Validator.sol"; +import { BootstrapLib } from "../../contracts/lib/BootstrapLib.sol"; +import { NexusBootstrap } from "../../contracts/utils/NexusBootstrap.sol"; +import { MockRegistry } from "../../contracts/mocks/MockRegistry.sol"; +import { HelperConfig } from "./HelperConfig.s.sol"; -/// @dev See the Solidity Scripting tutorial: https://book.getfoundry.sh/tutorials/solidity-scripting contract Deploy is BaseScript { - address private constant _ENTRYPOINT = 0x0000000071727De22E5E9d8BAf0edAc6f37da032; - function run() public broadcast returns (Nexus smartAccount) { - smartAccount = new Nexus(_ENTRYPOINT); - } + K1ValidatorFactory private k1ValidatorFactory; + K1Validator private k1Validator; + NexusBootstrap private bootstrapper; + MockRegistry private registry; + HelperConfig private helperConfig; - function test() public { - // This is a test function to exclude this script from the coverage report. + function run() public broadcast returns (Nexus smartAccount) { + helperConfig = new HelperConfig(); + require(address(helperConfig.ENTRYPOINT()) != address(0), "ENTRYPOINT is not set"); + smartAccount = new Nexus(address(helperConfig.ENTRYPOINT())); + k1Validator = new K1Validator(); + bootstrapper = new NexusBootstrap(); + registry = new MockRegistry(); + k1ValidatorFactory = new K1ValidatorFactory( + address(smartAccount), + msg.sender, + address(k1Validator), + bootstrapper, + registry + ); } } diff --git a/scripts/foundry/HelperConfig.s.sol b/scripts/foundry/HelperConfig.s.sol new file mode 100644 index 00000000..7ed3d999 --- /dev/null +++ b/scripts/foundry/HelperConfig.s.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.8.0 <0.9.0; +pragma solidity >=0.8.0 <0.9.0; + +import { EntryPoint } from "account-abstraction/core/EntryPoint.sol"; +import { IEntryPoint } from "account-abstraction/interfaces/IEntryPoint.sol"; + +import {Script} from "forge-std/Script.sol"; + +contract HelperConfig is Script { + IEntryPoint public ENTRYPOINT; + address private constant MAINNET_ENTRYPOINT_ADDRESS = 0x0000000071727De22E5E9d8BAf0edAc6f37da032; + + constructor() { + if (block.chainid == 31337) { + setupAnvilConfig(); + } else { + ENTRYPOINT = IEntryPoint(MAINNET_ENTRYPOINT_ADDRESS); + } + } + + function setupAnvilConfig() public { + if(address(ENTRYPOINT) != address(0)){ + return; + } + ENTRYPOINT = new EntryPoint(); + vm.etch(address(MAINNET_ENTRYPOINT_ADDRESS), address(ENTRYPOINT).code); + ENTRYPOINT = IEntryPoint(MAINNET_ENTRYPOINT_ADDRESS); + } + +} \ No newline at end of file diff --git a/test/foundry/utils/TestHelper.t.sol b/test/foundry/utils/TestHelper.t.sol index 694a7e95..5419eb08 100644 --- a/test/foundry/utils/TestHelper.t.sol +++ b/test/foundry/utils/TestHelper.t.sol @@ -25,6 +25,7 @@ import { NexusAccountFactory } from "../../../contracts/factory/NexusAccountFact import { BootstrapLib } from "../../../contracts/lib/BootstrapLib.sol"; import { MODE_VALIDATION } from "../../../contracts/types/Constants.sol"; import { MockRegistry } from "../../../contracts/mocks/MockRegistry.sol"; +import { HelperConfig } from "../../../scripts/foundry/HelperConfig.s.sol"; contract TestHelper is CheatCodes, EventsAndErrors { // ----------------------------------------- @@ -103,9 +104,8 @@ contract TestHelper is CheatCodes, EventsAndErrors { } function deployTestContracts() internal { - ENTRYPOINT = new EntryPoint(); - vm.etch(address(0x0000000071727De22E5E9d8BAf0edAc6f37da032), address(ENTRYPOINT).code); - ENTRYPOINT = IEntryPoint(0x0000000071727De22E5E9d8BAf0edAc6f37da032); + HelperConfig helperConfig = new HelperConfig(); + ENTRYPOINT = helperConfig.ENTRYPOINT(); ACCOUNT_IMPLEMENTATION = new Nexus(address(ENTRYPOINT)); FACTORY = new NexusAccountFactory(address(ACCOUNT_IMPLEMENTATION), address(FACTORY_OWNER.addr)); META_FACTORY = new BiconomyMetaFactory(address(FACTORY_OWNER.addr)); diff --git a/test/hardhat/smart-account/Nexus.Factory.specs.ts b/test/hardhat/smart-account/Nexus.Factory.specs.ts index a7f79fd5..6774fab2 100644 --- a/test/hardhat/smart-account/Nexus.Factory.specs.ts +++ b/test/hardhat/smart-account/Nexus.Factory.specs.ts @@ -4,10 +4,8 @@ import { AddressLike, Signer, ZeroAddress, - ZeroHash, keccak256, solidityPacked, - zeroPadBytes, } from "ethers"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { @@ -28,7 +26,7 @@ import { deployContractsAndSAFixture, deployContractsFixture, } from "../utils/deployment"; -import { encodeData, to18 } from "../utils/encoding"; +import { to18 } from "../utils/encoding"; import { MODE_VALIDATION, buildPackedUserOp, @@ -36,7 +34,6 @@ import { numberTo3Bytes, } from "../utils/operationHelpers"; import { BootstrapConfigStruct } from "../../../typechain-types/contracts/lib/BootstrapLib"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; describe("Nexus Factory Tests", function () { let factory: K1ValidatorFactory; @@ -470,7 +467,7 @@ describe("Nexus Factory Tests", function () { let smartAccount: Nexus; let entryPoint: EntryPoint; let factory: RegistryFactory; - let bootstrap: Bootstrap; + let bootstrap: NexusBootstrap; let validatorModule: MockValidator; let executorModule: MockExecutor; let BootstrapLib: BootstrapLib; From 9e13b5da72cad00336ba96213d70cedda1a638bc Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:51:57 +0400 Subject: [PATCH 20/20] feat:release 1.0.0 --- CHANGELOG.md | 3 +++ contracts/Nexus.sol | 2 +- contracts/base/BaseAccount.sol | 2 +- contracts/modules/validators/K1Validator.sol | 2 +- contracts/utils/NexusBootstrap.sol | 2 +- package.json | 2 +- .../fork/arbitrum/ArbitrumSmartAccountUpgradeTest.t.sol | 2 +- .../concrete/accountconfig/TestAccountConfig_AccountId.t.sol | 2 +- .../concrete/factory/TestAccountFactory_Deployments.t.sol | 2 +- .../factory/TestNexusAccountFactory_Deployments.t.sol | 2 +- .../unit/concrete/gas/TestGas_NexusAccountFactory.t.sol | 2 +- test/foundry/unit/concrete/modules/TestK1Validator.t.sol | 4 ++-- test/hardhat/smart-account/Nexus.Basics.specs.ts | 2 +- test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts | 2 +- 14 files changed, 17 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index faa1dd20..8d1cc373 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [1.0.0] - 2024-10-14 +Code Freeze post audit remediations. + ## [1.0.0-beta.1] - 2024-09-30 ## [1.0.0-beta] - 2024-06-04 diff --git a/contracts/Nexus.sol b/contracts/Nexus.sol index df41b654..c6e83e75 100644 --- a/contracts/Nexus.sol +++ b/contracts/Nexus.sol @@ -343,6 +343,6 @@ contract Nexus is INexus, BaseAccount, ExecutionHelper, ModuleManager, UUPSUpgra /// @dev EIP712 domain name and version. function _domainNameAndVersion() internal pure override returns (string memory name, string memory version) { name = "Nexus"; - version = "1.0.0-beta.1"; + version = "1.0.0"; } } diff --git a/contracts/base/BaseAccount.sol b/contracts/base/BaseAccount.sol index b93828f8..1f15e989 100644 --- a/contracts/base/BaseAccount.sol +++ b/contracts/base/BaseAccount.sol @@ -25,7 +25,7 @@ import { IBaseAccount } from "../interfaces/base/IBaseAccount.sol"; /// Special thanks to the Solady team for foundational contributions: https://github.com/Vectorized/solady contract BaseAccount is IBaseAccount { /// @notice Identifier for this implementation on the network - string internal constant _ACCOUNT_IMPLEMENTATION_ID = "biconomy.nexus.1.0.0-beta.1"; + string internal constant _ACCOUNT_IMPLEMENTATION_ID = "biconomy.nexus.1.0.0"; /// @notice The canonical address for the ERC4337 EntryPoint contract, version 0.7. /// This address is consistent across all supported networks. diff --git a/contracts/modules/validators/K1Validator.sol b/contracts/modules/validators/K1Validator.sol index 0ca6f3cc..2d5dbf76 100644 --- a/contracts/modules/validators/K1Validator.sol +++ b/contracts/modules/validators/K1Validator.sol @@ -188,7 +188,7 @@ contract K1Validator is IValidator, ERC7739Validator { /// @notice Returns the version of the module /// @return The version of the module function version() external pure returns (string memory) { - return "1.0.0-beta.1"; + return "1.0.0"; } /// @notice Checks if the module is of the specified type diff --git a/contracts/utils/NexusBootstrap.sol b/contracts/utils/NexusBootstrap.sol index 7d3c28ac..3cebd3b2 100644 --- a/contracts/utils/NexusBootstrap.sol +++ b/contracts/utils/NexusBootstrap.sol @@ -160,6 +160,6 @@ contract NexusBootstrap is ModuleManager { /// @dev EIP712 domain name and version. function _domainNameAndVersion() internal pure override returns (string memory name, string memory version) { name = "NexusBootstrap"; - version = "1.0.0-beta.1"; + version = "1.0.0"; } } diff --git a/package.json b/package.json index 7baf9ad2..d8298c72 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nexus", "description": "Nexus - ERC7579 Modular Smart Account", - "version": "1.0.0-beta.1", + "version": "1.0.0", "author": { "name": "Biconomy", "url": "https://github.com/bcnmy" diff --git a/test/foundry/fork/arbitrum/ArbitrumSmartAccountUpgradeTest.t.sol b/test/foundry/fork/arbitrum/ArbitrumSmartAccountUpgradeTest.t.sol index 7725d1ca..06b9584f 100644 --- a/test/foundry/fork/arbitrum/ArbitrumSmartAccountUpgradeTest.t.sol +++ b/test/foundry/fork/arbitrum/ArbitrumSmartAccountUpgradeTest.t.sol @@ -45,7 +45,7 @@ contract ArbitrumSmartAccountUpgradeTest is NexusTest_Base, ArbitrumSettings { /// @notice Validates the account ID after the upgrade process. function test_AccountIdValidationAfterUpgrade() public { test_UpgradeV2ToV3AndInitialize(); - string memory expectedAccountId = "biconomy.nexus.1.0.0-beta.1"; + string memory expectedAccountId = "biconomy.nexus.1.0.0"; string memory actualAccountId = IAccountConfig(payable(address(smartAccountV2))).accountId(); assertEq(actualAccountId, expectedAccountId, "Account ID does not match after upgrade."); } diff --git a/test/foundry/unit/concrete/accountconfig/TestAccountConfig_AccountId.t.sol b/test/foundry/unit/concrete/accountconfig/TestAccountConfig_AccountId.t.sol index f59811f9..c8e13797 100644 --- a/test/foundry/unit/concrete/accountconfig/TestAccountConfig_AccountId.t.sol +++ b/test/foundry/unit/concrete/accountconfig/TestAccountConfig_AccountId.t.sol @@ -19,7 +19,7 @@ contract TestAccountConfig_AccountId is Test { /// @notice Tests if the account ID returns the expected value function test_WhenCheckingTheAccountID() external givenTheAccountConfiguration { - string memory expected = "biconomy.nexus.1.0.0-beta.1"; + string memory expected = "biconomy.nexus.1.0.0"; assertEq(accountConfig.accountId(), expected, "AccountConfig should return the expected account ID."); } } diff --git a/test/foundry/unit/concrete/factory/TestAccountFactory_Deployments.t.sol b/test/foundry/unit/concrete/factory/TestAccountFactory_Deployments.t.sol index 9270cd12..6b97f1e4 100644 --- a/test/foundry/unit/concrete/factory/TestAccountFactory_Deployments.t.sol +++ b/test/foundry/unit/concrete/factory/TestAccountFactory_Deployments.t.sol @@ -72,7 +72,7 @@ contract TestAccountFactory_Deployments is NexusTest_Base { userOps[0] = buildUserOpWithInitAndCalldata(user, initCode, "", address(VALIDATOR_MODULE)); ENTRYPOINT.depositTo{ value: 1 ether }(address(accountAddress)); ENTRYPOINT.handleOps(userOps, payable(user.addr)); - assertEq(IAccountConfig(accountAddress).accountId(), "biconomy.nexus.1.0.0-beta.1", "Not deployed properly"); + assertEq(IAccountConfig(accountAddress).accountId(), "biconomy.nexus.1.0.0", "Not deployed properly"); } /// @notice Tests that deploying an account fails if it already exists. diff --git a/test/foundry/unit/concrete/factory/TestNexusAccountFactory_Deployments.t.sol b/test/foundry/unit/concrete/factory/TestNexusAccountFactory_Deployments.t.sol index 73d0db7a..ce4146d9 100644 --- a/test/foundry/unit/concrete/factory/TestNexusAccountFactory_Deployments.t.sol +++ b/test/foundry/unit/concrete/factory/TestNexusAccountFactory_Deployments.t.sol @@ -83,7 +83,7 @@ contract TestNexusAccountFactory_Deployments is NexusTest_Base { userOps[0] = buildUserOpWithInitAndCalldata(user, initCode, "", address(VALIDATOR_MODULE)); ENTRYPOINT.depositTo{ value: 1 ether }(address(accountAddress)); ENTRYPOINT.handleOps(userOps, payable(user.addr)); - assertEq(IAccountConfig(accountAddress).accountId(), "biconomy.nexus.1.0.0-beta.1", "Not deployed properly"); + assertEq(IAccountConfig(accountAddress).accountId(), "biconomy.nexus.1.0.0", "Not deployed properly"); } /// @notice Tests that deploying an account fails if it already exists. diff --git a/test/foundry/unit/concrete/gas/TestGas_NexusAccountFactory.t.sol b/test/foundry/unit/concrete/gas/TestGas_NexusAccountFactory.t.sol index 8bc22fd4..628adbd5 100644 --- a/test/foundry/unit/concrete/gas/TestGas_NexusAccountFactory.t.sol +++ b/test/foundry/unit/concrete/gas/TestGas_NexusAccountFactory.t.sol @@ -71,7 +71,7 @@ contract TestGas_NexusAccountFactory is TestModuleManagement_Base { /// @notice Validates the creation of a new account. /// @param _account The new account address. function assertValidCreation(Nexus _account) internal { - string memory expected = "biconomy.nexus.1.0.0-beta.1"; + string memory expected = "biconomy.nexus.1.0.0"; assertEq(_account.accountId(), expected, "AccountConfig should return the expected account ID."); assertTrue( _account.isModuleInstalled(MODULE_TYPE_VALIDATOR, address(VALIDATOR_MODULE), ""), "Account should have the validation module installed" diff --git a/test/foundry/unit/concrete/modules/TestK1Validator.t.sol b/test/foundry/unit/concrete/modules/TestK1Validator.t.sol index b918eb2a..f99ba7a5 100644 --- a/test/foundry/unit/concrete/modules/TestK1Validator.t.sol +++ b/test/foundry/unit/concrete/modules/TestK1Validator.t.sol @@ -187,7 +187,7 @@ contract TestK1Validator is NexusTest_Base { function test_Version() public { string memory contractVersion = validator.version(); - assertEq(contractVersion, "1.0.0-beta.1", "Contract version should be '1.0.0-beta.1'"); + assertEq(contractVersion, "1.0.0", "Contract version should be '1.0.0'"); } /// @notice Tests the isModuleType function to return the correct module type @@ -330,7 +330,7 @@ contract TestK1Validator is NexusTest_Base { abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256("Nexus"), - keccak256("1.0.0-beta.1"), + keccak256("1.0.0"), block.chainid, address(BOB_ACCOUNT) ) diff --git a/test/hardhat/smart-account/Nexus.Basics.specs.ts b/test/hardhat/smart-account/Nexus.Basics.specs.ts index fa36699f..3735ea07 100644 --- a/test/hardhat/smart-account/Nexus.Basics.specs.ts +++ b/test/hardhat/smart-account/Nexus.Basics.specs.ts @@ -134,7 +134,7 @@ describe("Nexus Basic Specs", function () { describe("Smart Account Basics", function () { it("Should correctly return the Nexus's ID", async function () { expect(await smartAccount.accountId()).to.equal( - "biconomy.nexus.1.0.0-beta.1", + "biconomy.nexus.1.0.0", ); }); diff --git a/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts b/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts index 28a524ae..993238e2 100644 --- a/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts +++ b/test/hardhat/smart-account/Nexus.Module.K1Validator.specs.ts @@ -79,7 +79,7 @@ describe("K1Validator module tests", () => { it("should get module version", async () => { const version = await k1Validator.version(); - expect(version).to.equal("1.0.0-beta.1"); + expect(version).to.equal("1.0.0"); }); it("should check module type", async () => {