Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

AccountERC7579Hooked

Inherits: AccountERC7579

Extension of {AccountERC7579} with support for a single hook module (type 4). If installed, this extension will call the hook module's {IERC7579Hook-preCheck} before executing any operation with {_execute} (including {execute} and {executeFromExecutor} by default) and {IERC7579Hook-postCheck} thereafter. NOTE: Hook modules break the check-effect-interaction pattern. In particular, the {IERC7579Hook-preCheck} hook can lead to potentially dangerous reentrancy. Using the withHook() modifier is safe if no effect is performed before the preHook or after the postHook. That is the case on all functions here, but it may not be the case if functions that have this modifier are overridden. Developers should be extremely careful when implementing hook modules or further overriding functions that involve hooks.

State Variables

_hook

address private _hook;

Functions

withHook

Calls IERC7579Hook-preCheck before executing the modified function and {IERC7579Hook-postCheck} thereafter.

modifier withHook();

accountId

function accountId() public view virtual override returns (string memory);

hook

Returns the hook module address if installed, or address(0) otherwise.

function hook() public view virtual returns (address);

supportsModule

Supports hook modules. See AccountERC7579-supportsModule

function supportsModule(uint256 moduleTypeId) public view virtual override returns (bool);

isModuleInstalled

function isModuleInstalled(uint256 moduleTypeId, address module, bytes calldata data)
    public
    view
    virtual
    override
    returns (bool);

_installModule

Installs a module with support for hook modules. See {AccountERC7579-_installModule}

function _installModule(uint256 moduleTypeId, address module, bytes memory initData)
    internal
    virtual
    override
    withHook;

_uninstallModule

Uninstalls a module with support for hook modules. See {AccountERC7579-_uninstallModule}

function _uninstallModule(uint256 moduleTypeId, address module, bytes memory deInitData)
    internal
    virtual
    override
    withHook;

_execute

Hooked version of AccountERC7579-_execute.

function _execute(Mode mode, bytes calldata executionCalldata)
    internal
    virtual
    override
    withHook
    returns (bytes[] memory);

_fallback

Hooked version of AccountERC7579-_fallback.

function _fallback() internal virtual override withHook returns (bytes memory);

Errors

ERC7579HookModuleAlreadyPresent

A hook module is already present. This contract only supports one hook module.

error ERC7579HookModuleAlreadyPresent(address hook);