Keys & Addresses Published Updated

EVM Address Format Explained: Structure & Usage

#ethereum#wallet#private key#security#cryptocurrency
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:

  1. 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.
  2. 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 04 prefix that marks an uncompressed key.
  3. Hash. The 64 bytes of the public key (without the 04 prefix) are hashed with Keccak-256.
  4. 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.

StepValue
Private key0000000000000000000000000000000000000000000000000000000000000001
Public key (uncompressed)0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
Keccak-256 of x‖yc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf
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 keyPublic keyAddress
Size32 bytes64 bytes (65 with 04), or 33 bytes compressed20 bytes
Written as64 hex characters128 hex characters; 66 when compressed (starts with 02 or 03)0x + 40 hex characters
SecretYesNoNo
Used forSigning transactionsVerifying signaturesReceiving 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.