Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[profile.default]
solc_version = "0.8.23"
solc_version = "0.8.25"
evm_version = "cancun"
src = "src"
out = "out"
Expand Down
11 changes: 3 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,24 +29,19 @@
"dependencies": {
"@ERC4337/account-abstraction": "github:kopy-kat/account-abstraction#develop",
"@ERC4337/account-abstraction-v0.6": "github:eth-infinitism/account-abstraction#v0.6.0",
"@prb/math": "^4.0.2",
"@prb/math": "^4.1.0",
"@rhinestone/erc4337-validation": "^0.0.4",
"@rhinestone/module-bases": "github:rhinestonewtf/module-bases#1ea072eb328dd4bb1a540a52432ef98562314121",
"@rhinestone/safe7579": "github:rhinestonewtf/safe7579#v1.0.0",
"@rhinestone/sentinellist": "github:rhinestonewtf/sentinellist",
"@rhinestone/registry": "github:rhinestonewtf/registry#v1.0",
"@safe-global/safe-contracts": "^1.4.1",
"@zerodev/kernel": "github:kopy-kat/kernel#patch",
"ds-test": "github:dapphub/ds-test",
"erc7579": "github:erc7579/erc7579-implementation",
"excessively-safe-call": "github:nomad-xyz/ExcessivelySafeCall",
"forge-std": "github:foundry-rs/forge-std",
"solady": "github:vectorized/solady",
"solarray": "github:sablier-labs/solarray"
},
"devDependencies": {
"@changesets/cli": "^2.27.2",
"solhint": "^5.0.1"
"@changesets/cli": "^2.27.9",
"solhint": "^5.0.3"
},
"files": [
"src",
Expand Down
282 changes: 18 additions & 264 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

11 changes: 1 addition & 10 deletions remappings.txt
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
@rhinestone/=node_modules/@rhinestone/
sentinellist/=node_modules/@rhinestone/sentinellist/src/
erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/
safe7579/=node_modules/@rhinestone/safe7579/src/
modulekit/=node_modules/@rhinestone/modulekit/src/
module-bases/=node_modules/@rhinestone/module-bases/src/
registry/=node_modules/@rhinestone/registry/src/

@ERC4337/=node_modules/@ERC4337/
account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/
account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/

modulekit/=node_modules/@rhinestone/modulekit/src/
@openzeppelin/=node_modules/@openzeppelin/
@safe-global/=node_modules/@safe-global/
ds-test/=node_modules/ds-test/src/
erc7579/=node_modules/erc7579/src/
forge-std/=node_modules/forge-std/src/
solady/=node_modules/solady/src/
solarray/=node_modules/solarray/src/
@prb/math/=node_modules/@prb/math/src/
kernel/=node_modules/@zerodev/kernel/src/
ExcessivelySafeCall/=node_modules/excessively-safe-call/src/
5 changes: 3 additions & 2 deletions src/Accounts.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma solidity >=0.8.23 <0.9.0;

/* solhint-disable no-unused-import */
import { Execution, IERC7579Account } from "./external/ERC7579.sol";
import { Execution } from "src/accounts/erc7579/lib/ExecutionLib.sol";
import { IERC7579Account } from "src/accounts/common/interfaces/IERC7579Account.sol";
2 changes: 1 addition & 1 deletion src/Core.sol
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma solidity >=0.8.23 <0.9.0;
2 changes: 1 addition & 1 deletion src/Helpers.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma solidity >=0.8.23 <0.9.0;

/* solhint-disable no-unused-import */
import { ERC4337Helpers } from "./test/utils/ERC4337Helpers.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/Integrations.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma solidity >=0.8.23 <0.9.0;

/* solhint-disable no-unused-import */
import { ERC20Integration } from "./integrations/ERC20.sol";
Expand Down
10 changes: 5 additions & 5 deletions src/Interfaces.sol
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma solidity >=0.8.23 <0.9.0;

/* solhint-disable no-unused-import */
/*//////////////////////////////////////////////////////////////
ERCs
//////////////////////////////////////////////////////////////*/
import { IERC1271, EIP1271_MAGIC_VALUE } from "module-bases/interfaces/IERC1271.sol";
import { IERC7484 } from "module-bases/interfaces/IERC7484.sol";
import { IERC1271, EIP1271_MAGIC_VALUE } from "src/module-bases/interfaces/IERC1271.sol";
import { IERC7484 } from "src/module-bases/interfaces/IERC7484.sol";

/*//////////////////////////////////////////////////////////////
Modules
//////////////////////////////////////////////////////////////*/
import { IStatelessValidator } from "module-bases/interfaces/IStatelessValidator.sol";
import { IStatelessValidator } from "src/module-bases/interfaces/IStatelessValidator.sol";

/*//////////////////////////////////////////////////////////////
Misc
Expand All @@ -21,4 +21,4 @@ import {
IERC6682,
IERC3156FlashLender,
IERC3156FlashBorrower
} from "module-bases/interfaces/Flashloan.sol";
} from "src/module-bases/interfaces/Flashloan.sol";
19 changes: 10 additions & 9 deletions src/Mocks.sol
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma solidity >=0.8.23 <0.9.0;

/* solhint-disable no-unused-import */
/*//////////////////////////////////////////////////////////////
Aux
//////////////////////////////////////////////////////////////*/

import { MockRegistry } from "module-bases/mocks/MockRegistry.sol";
import { MockTarget } from "module-bases/mocks/MockTarget.sol";
import { MockHookMultiPlexer } from "module-bases/mocks/MockHookMultiPlexer.sol";
import { MockPolicy } from "module-bases/mocks/MockPolicy.sol";
import { MockRegistry } from "src/module-bases/mocks/MockRegistry.sol";
import { MockTarget } from "src/module-bases/mocks/MockTarget.sol";
import { MockHookMultiPlexer } from "src/module-bases/mocks/MockHookMultiPlexer.sol";
import { MockPolicy } from "src/module-bases/mocks/MockPolicy.sol";

/*//////////////////////////////////////////////////////////////
Modules
//////////////////////////////////////////////////////////////*/

import { MockValidator } from "module-bases/mocks/MockValidator.sol";
import { MockExecutor } from "module-bases/mocks/MockExecutor.sol";
import { MockHook } from "module-bases/mocks/MockHook.sol";
import { MockFallback } from "module-bases/mocks/MockFallback.sol";
import { MockValidator } from "src/module-bases/mocks/MockValidator.sol";
import { MockStatelessValidator } from "src/module-bases/mocks/MockStatelessValidator.sol";
import { MockExecutor } from "src/module-bases/mocks/MockExecutor.sol";
import { MockHook } from "src/module-bases/mocks/MockHook.sol";
import { MockFallback } from "src/module-bases/mocks/MockFallback.sol";

/*//////////////////////////////////////////////////////////////
Tokens
Expand Down
2 changes: 1 addition & 1 deletion src/ModuleKit.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma solidity >=0.8.23 <0.9.0;

/* solhint-disable no-unused-import */
import {
Expand Down
39 changes: 20 additions & 19 deletions src/Modules.sol
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
pragma solidity >=0.8.23 <0.9.0;

/* solhint-disable no-unused-import */
import { ERC7579ValidatorBase } from "module-bases/ERC7579ValidatorBase.sol";
import { ERC7579ExecutorBase } from "module-bases/ERC7579ExecutorBase.sol";
import { ERC7579HookBase } from "module-bases/ERC7579HookBase.sol";
import { ERC7579HookDestruct } from "module-bases/ERC7579HookDestruct.sol";
import { ERC7579FallbackBase } from "module-bases/ERC7579FallbackBase.sol";
import { SchedulingBase } from "module-bases/SchedulingBase.sol";
import { ERC7579ValidatorBase } from "src/module-bases/ERC7579ValidatorBase.sol";
import { ERC7579StatelessValidatorBase } from "src/module-bases/ERC7579StatelessValidatorBase.sol";
import { ERC7579ExecutorBase } from "src/module-bases/ERC7579ExecutorBase.sol";
import { ERC7579HookBase } from "src/module-bases/ERC7579HookBase.sol";
import { ERC7579HookDestruct } from "src/module-bases/ERC7579HookDestruct.sol";
import { ERC7579FallbackBase } from "src/module-bases/ERC7579FallbackBase.sol";
import { SchedulingBase } from "src/module-bases/SchedulingBase.sol";
import {
IERC7579Validator,
IERC7579Executor,
IERC7579Fallback,
IERC7579Hook
} from "./external/ERC7579.sol";
import { ERC7484RegistryAdapter } from "module-bases/ERC7484RegistryAdapter.sol";
import { ERC7579ModuleBase } from "module-bases/ERC7579ModuleBase.sol";
import { TrustedForwarder } from "module-bases/utils/TrustedForwarder.sol";
import { ERC1271Policy } from "module-bases/ERC1271Policy.sol";
import { ERC7579ActionPolicy } from "module-bases/ERC7579ActionPolicy.sol";
import { ERC7579PolicyBase } from "module-bases/ERC7579PolicyBase.sol";
import { ERC7579UserOpPolicy } from "module-bases/ERC7579UserOpPolicy.sol";
IValidator as IERC7579Validator,
IExecutor as IERC7579Executor,
IFallback as IERC7579Fallback,
IHook as IERC7579Hook
} from "src/accounts/common/interfaces/IERC7579Modules.sol";
import { ERC7484RegistryAdapter } from "src/module-bases/ERC7484RegistryAdapter.sol";
import { ERC7579ModuleBase } from "src/module-bases/ERC7579ModuleBase.sol";
import { TrustedForwarder } from "src/module-bases/utils/TrustedForwarder.sol";
import { ERC1271Policy } from "src/module-bases/ERC1271Policy.sol";
import { ERC7579ActionPolicy } from "src/module-bases/ERC7579ActionPolicy.sol";
import { ERC7579PolicyBase } from "src/module-bases/ERC7579PolicyBase.sol";
import { ERC7579UserOpPolicy } from "src/module-bases/ERC7579UserOpPolicy.sol";
74 changes: 74 additions & 0 deletions src/accounts/common/interfaces/IERC4337Account.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.23 <0.9.0;

import { PackedUserOperation } from
"@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol";

interface IERC4337Account {
/**
* Validate user's signature and nonce
* the entryPoint will make the call to the recipient only if this validation call returns
* successfully.
* signature failure should be reported by returning SIG_VALIDATION_FAILED (1).
* This allows making a "simulation call" without a valid signature
* Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to
* signal failure.
*
* @dev Must validate caller is the entryPoint.
* Must validate the signature and nonce
* @param userOp - The operation that is about to be executed.
* @param userOpHash - Hash of the user's request data. can be used as the basis for
* signature.
* @param missingAccountFunds - Missing funds on the account's deposit in the entrypoint.
* This is the minimum amount to transfer to the sender(entryPoint)
* to be
* able to make the call. The excess is left as a deposit in the
* entrypoint
* for future calls. Can be withdrawn anytime using
* "entryPoint.withdrawTo()".
* In case there is a paymaster in the request (or the current
* deposit is high
* enough), this value will be zero.
* @return validationData - Packaged ValidationData structure. use `_packValidationData`
* and
* `_unpackValidationData` to encode and decode.
* <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark
* signature failure,
* otherwise, an address of an "authorizer" contract.
* <6-byte> validUntil - Last timestamp this operation is valid. 0
* for "indefinite"
* <6-byte> validAfter - First timestamp this operation is valid
* If an account doesn't use time-range, it
* is enough to
* return SIG_VALIDATION_FAILED value (1) for
* signature failure.
* Note that the validation code cannot use block.timestamp (or
* block.number) directly.
*/
function validateUserOp(
PackedUserOperation calldata userOp,
bytes32 userOpHash,
uint256 missingAccountFunds
)
external
payable
returns (uint256 validationData);

/**
* Account may implement this execute method.
* passing this methodSig at the beginning of callData will cause the entryPoint to pass the
* full UserOp (and hash)
* to the account.
* The account should skip the methodSig, and use the callData (and optionally, other UserOp
* fields)
*
* @param userOp - The operation that was just validated.
* @param userOpHash - Hash of the user's request data.
*/
function executeUserOp(
PackedUserOperation calldata userOp,
bytes32 userOpHash
)
external
payable;
}
Loading