EVM Address Format Explained: Structure & Usage
An EVM address is the public identifier of an account on Ethereum and on every network that runs the Ethereum Virtual Machine: BNB Smart Chain, Polygon, Arbitrum, Optimism, Avalanche C-Chain and others. It is always 0x followed by 40 hexadecimal characters, for example 0x9858EfFD232B4033E47d90003D41EC34EcaEda94. Those 40 characters encode 20 bytes, and every one of them is derived from a private key in a fixed, one-way sequence.
From private key to address
An ordinary account (an externally owned account, EOA) is created in four steps:
- Private key. 32 random bytes, written as 64 hexadecimal characters. Mathematically it is a number between 1 and n − 1, where n is the order of the secp256k1 elliptic curve. This is the only secret in the chain.
- Public key. The private key is multiplied by the curve’s generator point G. The result is a point with two 32-byte coordinates, x and y: 64 bytes, or 65 bytes when written with the
04prefix that marks an uncompressed key. - Hash. The 64 bytes of the public key (without the
04prefix) are hashed with Keccak-256. - Address. The last 20 bytes of the 32-byte hash, prefixed with
0x, are the address.
Each step is easy to compute forward and infeasible to reverse: the address does not reveal the public key, and the public key does not reveal the private key. Our private key generator runs these steps in your browser and shows a new random key together with its checksummed Ethereum address.
Worked example
The private key 0x0000…0001 (the number 1) is a well-known test value. Never use it: anyone can sign with it.
| Step | Value |
|---|---|
| Private key | 0000000000000000000000000000000000000000000000000000000000000001 |
| Public key (uncompressed) | 0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 |
| Keccak-256 of x‖y | c0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf |
| Address (last 20 bytes, EIP-55) | 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf |
The EIP-55 checksum
Hexadecimal is case-insensitive, so 0x7e5f… and 0x7E5F… point to the same account. EIP-55 uses the letter case to carry a checksum: the lowercase address is hashed with Keccak-256, and each letter is capitalized when the matching hex digit of that hash is 8 or higher.
Wallets reject a mixed-case address whose capitalization does not match, which catches most typos. An all-lowercase address has no checksum at all, so a mistyped character in it goes undetected. Copy addresses in their mixed-case form whenever possible.
Private key, public key and address compared
| Private key | Public key | Address | |
|---|---|---|---|
| Size | 32 bytes | 64 bytes (65 with 04), or 33 bytes compressed | 20 bytes |
| Written as | 64 hex characters | 128 hex characters; 66 when compressed (starts with 02 or 03) | 0x + 40 hex characters |
| Secret | Yes | No | No |
| Used for | Signing transactions | Verifying signatures | Receiving funds, identifying the account |
A 66-character hex string starting with 02 or 03 is a compressed public key, not a private key. Ethereum rarely displays public keys at all: a transaction has no sender field, so nodes recover the sender’s public key from the signature and hash it to get the address.
One address on every EVM chain
The address does not contain a network identifier. Instead, each signed transaction includes a chain ID (EIP-155), so a signature made for one network cannot be replayed on another. For an ordinary account, the same private key controls the same address on Ethereum, Polygon, BNB Smart Chain and every other EVM network. Tokens sent to your address on a network you did not expect are still under your key; you only have to add that network to your wallet.
Smart-contract wallets are different. A multisig deployed on one chain does not automatically exist at the same address on another, so funds sent there may be unreachable.
Contract addresses
Smart contracts have addresses in the same format but no private key. A contract created with CREATE gets an address computed from the deployer’s address and nonce; one created with CREATE2 gets an address computed from the deployer’s address, a salt and the hash of the contract’s creation code. Nobody can sign transactions for a contract address: only the contract’s code decides what it does.
Addresses from a seed phrase
Wallets such as MetaMask do not store a single private key. They derive keys from a BIP39 seed phrase along the BIP44 path m/44'/60'/0'/0/i, where 60 is Ethereum’s coin type and i numbers the accounts. For the public test phrase abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about, account 0 has the private key 1ab42cc412b618bdea3a599e3c9bae199ebf030895b039e9db1e30dafb12b727 and the address 0x9858EfFD232B4033E47d90003D41EC34EcaEda94. You can reproduce this in the seed phrase to private key converter or read how the derivation works in BIP39 vs BIP32 vs BIP44.
Keeping the private key safe
Anyone who has the private key, or the seed phrase it was derived from, controls the address on every EVM network at once. Never paste either into a website, a chat or a cloud document, and treat the example values on this page as public: they are test keys that anyone can use. If a single key has to be kept as a file, the standard format is an encrypted JSON keystore, not plain text.