CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-openzeppelin--contracts-upgradeable

Secure Smart Contract library for Solidity with upgradeable implementations of standards like ERC20 and ERC721, flexible role-based permissioning schemes, and reusable components for building custom contracts and complex decentralized systems.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

account-abstraction.mddocs/

Account Abstraction

Draft ERC-7579 account abstraction implementations enabling modular smart contract accounts with validator, executor, and hook support.

Capabilities

ERC-7579 Account

Modular smart contract account supporting validators, executors, fallbacks, and hooks.

/**
 * @dev Implementation of ERC-7579 account abstraction
 */
abstract contract AccountERC7579Upgradeable {
    function __AccountERC7579_init(
        bytes[] calldata validators,
        bytes[] calldata executors
    ) internal onlyInitializing;
    
    /**
     * @dev Install a module on the account
     */
    function installModule(
        uint256 moduleTypeId,
        address module,
        bytes calldata initData
    ) external;
    
    /**
     * @dev Uninstall a module from the account
     */
    function uninstallModule(
        uint256 moduleTypeId,
        address module,
        bytes calldata deinitData
    ) external;
    
    /**
     * @dev Check if a module is installed
     */
    function isModuleInstalled(
        uint256 moduleTypeId,
        address module,
        bytes calldata additionalContext
    ) external view returns (bool);
    
    /**
     * @dev Returns true if this contract implements the interface
     */
    function supportsExecutionMode(bytes32 encodedMode) external pure returns (bool);
    
    /**
     * @dev Returns true if the module is supported
     */
    function supportsModule(uint256 moduleTypeId) external pure returns (bool);
    
    /**
     * @dev Execute a single call
     */
    function execute(
        bytes32 mode,
        bytes calldata executionCalldata
    ) external;
    
    /**
     * @dev Execute from an executor module
     */
    function executeFromExecutor(
        bytes32 mode,
        bytes calldata executionCalldata
    ) external returns (bytes[] memory returnData);
}

// Module type constants
uint256 constant MODULE_TYPE_VALIDATOR = 1;
uint256 constant MODULE_TYPE_EXECUTOR = 2;
uint256 constant MODULE_TYPE_FALLBACK = 3;
uint256 constant MODULE_TYPE_HOOK = 4;

ERC-7579 Account with Hooks

Extended account abstraction implementation with hook support for transaction lifecycle management.

/**
 * @dev Extension with hooks support
 */
abstract contract AccountERC7579HookedUpgradeable {
    function __AccountERC7579Hooked_init(
        bytes[] calldata validators,
        bytes[] calldata executors,
        bytes[] calldata hooks
    ) internal onlyInitializing;
    
    /**
     * @dev Install a hook module
     */
    function installHook(
        address hook,
        bytes calldata initData
    ) external;
    
    /**
     * @dev Uninstall a hook module
     */
    function uninstallHook(
        address hook,
        bytes calldata deinitData
    ) external;
    
    // Inherits all AccountERC7579Upgradeable functions
}

Usage Examples

Basic Smart Account

import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";

contract MySmartAccount is AccountERC7579Upgradeable, OwnableUpgradeable {
    function initialize(
        address initialOwner,
        bytes[] calldata validators,
        bytes[] calldata executors
    ) initializer public {
        __AccountERC7579_init(validators, executors);
        __Ownable_init(initialOwner);
    }
    
    function executeTransaction(
        address to,
        uint256 value,
        bytes calldata data
    ) external onlyOwner {
        bytes32 mode = bytes32(0); // Single execution mode
        bytes memory executionCalldata = abi.encode(to, value, data);
        execute(mode, executionCalldata);
    }
}

Account with Hooks

import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";

contract HookedSmartAccount is AccountERC7579HookedUpgradeable {
    function initialize(
        bytes[] calldata validators,
        bytes[] calldata executors,
        bytes[] calldata hooks
    ) initializer public {
        __AccountERC7579Hooked_init(validators, executors, hooks);
    }
    
    function addSecurityHook(address hook, bytes calldata initData) external {
        installHook(hook, initData);
    }
}

Install with Tessl CLI

npx tessl i tessl/npm-openzeppelin--contracts-upgradeable

docs

access-control.md

account-abstraction.md

finance.md

governance.md

index.md

meta-transactions.md

proxy-upgradeability.md

security-utilities.md

token-standards.md

tile.json