CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-openzeppelin--contracts

Secure Smart Contract library for Solidity with battle-tested implementations of token standards, access control, governance, and essential utilities for building decentralized applications.

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

ERC-4337 compliant smart contract wallets with modular authentication, transaction batching, and paymaster integration for flexible account management.

Capabilities

Account Contract

Core ERC-4337 account implementation with modular signature validation and execution.

/**
 * ERC-4337 Account implementation with ERC-1271 signature validation
 */
contract Account is Context, IERC165, IERC1271, IAccount, Ownable, UUPSUpgradeable {
    constructor(IEntryPoint anEntryPoint);
    function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds) external virtual returns (uint256 validationData);
    function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external virtual;
    function isValidSignature(bytes32 hash, bytes calldata signature) external view virtual returns (bytes4 magicValue);
    function entryPoint() public view virtual returns (IEntryPoint);
    function execute(address target, uint256 value, bytes calldata data) external virtual requireFromEntryPointOrOwner;
    function executeBatch(address[] calldata targets, uint256[] calldata values, bytes[] calldata data) external virtual requireFromEntryPointOrOwner;
    function proxiableUUID() external view virtual override notDelegated returns (bytes32);
    function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy;
}

Usage Examples:

import "@openzeppelin/contracts/account/Account.sol";

contract MyAccount is Account {
    constructor(IEntryPoint anEntryPoint, address initialOwner) 
        Account(anEntryPoint) 
        Ownable(initialOwner) 
    {}
    
    // Execute a transaction
    function executeTransaction(address target, uint256 value, bytes calldata data) external {
        execute(target, value, data);
    }
    
    // Execute multiple transactions
    function executeBatch(
        address[] calldata targets, 
        uint256[] calldata values, 
        bytes[] calldata data
    ) external {
        executeBatch(targets, values, data);
    }
}

Account Management Utilities

Utilities for account deployment, validation, and management.

/**
 * Signature validation utilities for Account contracts
 */
library AccountUtils {
    function isValidSignature(address account, bytes32 hash, bytes calldata signature) internal view returns (bool);
    function validateSignature(address account, bytes32 hash, bytes calldata signature) internal view;
}

Account Extensions

Extensions for enhanced account functionality.

AccountMultiSig Extension

Multi-signature functionality for account contracts.

/**
 * Multi-signature extension for Account contracts
 */
abstract contract AccountMultiSig is Account {
    function addOwner(address newOwner) external virtual onlyOwner;
    function removeOwner(address owner) external virtual onlyOwner;
    function changeRequirement(uint256 required) external virtual onlyOwner;
    function getOwners() external view virtual returns (address[] memory);
    function getThreshold() external view virtual returns (uint256);
    function isOwner(address owner) external view virtual returns (bool);
}

Types

/**
 * ERC-4337 User Operation structure
 */
struct PackedUserOperation {
    address sender;
    uint256 nonce;
    bytes initCode;
    bytes callData;
    bytes32 accountGasLimits;
    uint256 preVerificationGas;
    bytes32 gasFees;
    bytes paymasterAndData;
    bytes signature;
}

/**
 * Account validation result
 */
struct ValidationData {
    address aggregator;
    uint48 validAfter;
    uint48 validUntil;
}

/**
 * ERC-4337 Entry Point interface
 */
interface IEntryPoint {
    function handleOps(PackedUserOperation[] calldata ops, address payable beneficiary) external;
    function handleAggregatedOps(UserOpsPerAggregator[] calldata opsPerAggregator, address payable beneficiary) external;
    function depositTo(address account) external payable;
    function balanceOf(address account) external view returns (uint256);
    function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external;
}

/**
 * Account interface for ERC-4337 compliance
 */
interface IAccount {
    function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds) external returns (uint256 validationData);
}

/**
 * Account modifiers and validation
 */
error AccountUnauthorized();
error AccountInvalidSignature();
error AccountInvalidUserOp();

Install with Tessl CLI

npx tessl i tessl/npm-openzeppelin--contracts

docs

access-control.md

account-abstraction.md

finance.md

governance.md

index.md

mathematical-utilities.md

meta-transactions.md

proxy-patterns.md

security-utilities.md

token-standards.md

tile.json