EOA (Externally Owned Account)
A blockchain account controlled by a private key held by a person or entity, as opposed to a contract account controlled by code.
An Externally Owned Account (EOA) is one of the two types of accounts on Ethereum. Unlike contract accounts (which are controlled by their deployed code), an EOA is controlled by a private key and can initiate transactions. Every transaction on Ethereum must originate from an EOA — contract accounts cannot start transactions on their own.
EOA vs Contract Account
| Property | EOA | Contract Account |
|---|---|---|
| Controlled by | Private key | Smart contract code |
| Can initiate transactions | Yes | No (must be called) |
| Has code | No | Yes |
| Has ETH balance | Yes | Yes |
| Creation | Generated from private key | Deployed via transaction |
How EOAs Relate to tx.origin and msg.sender
In Solidity, the distinction between EOAs and contract accounts is critical for security:
1// tx.origin always returns the EOA that started the transaction2// msg.sender returns the immediate caller (could be EOA or contract)34// If: EOA -> ContractA -> ContractB5// Inside ContractB:6// tx.origin == EOA address7// msg.sender == ContractA address
This is why using tx.origin for authorization is dangerous — a malicious contract in the call chain can inherit the EOA's identity.
Account Abstraction (ERC-4337)
Account abstraction blurs the line between EOAs and contract accounts by allowing smart contract wallets to initiate transactions. This enables features like:
- Social recovery (recover access without seed phrases)
- Gas sponsorship (someone else pays gas fees)
- Batched transactions (multiple actions in one transaction)
- Custom validation logic (multisig, spending limits)
With account abstraction, tx.origin becomes even less reliable as an identity check since the initiator may be a smart contract wallet rather than a traditional EOA.
Articles Using This Term
Learn more about EOA (Externally Owned Account) in these articles:
Related Terms
tx.origin
A Solidity global variable that returns the address of the externally owned account (EOA) that originally initiated the transaction.
msg.sender
A Solidity global variable that returns the address of the account or contract that directly called the current function.
Access Control
Security mechanisms that restrict which addresses can call specific functions in a smart contract, preventing unauthorized actions.
Blind Signing
The practice of approving blockchain transactions based on UI display without verifying the underlying transaction data.
Need expert guidance on EOA (Externally Owned Account)?
Our team at Zealynx has deep expertise in blockchain security and DeFi protocols. Whether you need an audit or consultation, we're here to help.
Get a Quote

