Docs

Smart Account

A Smart Account is a wallet that is controlled by a smart contract following the ERC-4337 specification.

Ethereum has 2 types of accounts to transfer and receive tokens: EOAs (Externally Owned Accounts) and Contract Accounts. A smart contract wallet is a wallet managed by a contract account instead of an EOA. A smart account is a wallet type requiring no private keys or seed phrases. Smart contract wallets rely on code instead of private keys to secure and recover wallet information. Instead, you set who and under what conditions, users may access the wallet via smart contracts.

A smart contract wallet is a type of Web3 wallet powered by smart contracts.

This smart account is unlocked by a 'key' - a personal account. This key can be anything from a MetaMask wallet or even a Local Wallet and is used as a way to 'sign in' to the wallet.

Benefits of Smart Accounts:

  • Optimized transaction efficiency & batch transactions
    • Combine multiple transactions into a single transaction to save on gas fees
  • Improved Security Features
  • Social & Multi-Sig Recovery
    • Recover a wallet without seed phrases/passwords
    • Nominate a trusted person to recover your wallet in the case of an emergency

Terminology

UserOperations

This is the data structure for the transaction that the user wants to perform. It contains the following fields:

  • sender: The account making the operation.
  • nonce: Anti-replay parameter; also used as the salt for first-time account creation.
  • initCode: The initialization code needed to create the account (needed if and only if the account is not yet onchain).
  • callData: The data to pass to the sender during the operation.
  • callGasLimit: The amount of gas to allocate for the operation.
  • verificationGasLimit: The amount of gas to allocate for the verification step.
  • preVerificationGas: The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata.
  • maxFeePerGas: Maximum fee per gas (similar to EIP-1559 max_fee_per_gas).
  • maxPriorityFeePerGas: Maximum priority fee per gas (similar to EIP-1559).
  • paymasterAndData: Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster (empty for self-sponsored transaction).
  • signature: Data passed into the account along with the nonce during the verification step. Should depend on the chainid and EntryPoint address to prevent replay attacks.

EntryPoint

The EntryPoint is a singleton contract (a contract that has a predictable address that is the same on every chain). It has two methods that are used as entry points to execute bundles of UserOperations: handleOps and handleAggregatedOps.

Bundler (relayer)

A bundler is a smart contract that bundles multiple 'UserOperations' into a single bundle, a handleOps call, to the EntryPoint contract.

Paymaster

A paymaster is a smart contract that relays transactions. It provides a service that enables a third party to pay the transaction fee on behalf of the user by funding the paymaster in advance. The Paymaster acts as a gas reserve which then can be used during the call execution via EntryPoint. The thirdweb Account ABstraction paymaster is initially paid for by thirdweb. By using an API key, the usage is tracked and billed.