{"id":"EIP-155","name":"Simple Replay Protection","status":"Final","chain":"both","category":{"id":"security","name":"Security & Trust","description":"Helping users verify, control, and protect their assets"},"journeyStages":[{"id":"status","name":"Status & Confirmation","description":"Waiting for and confirming outcomes"}],"uxImpact":"Transactions include chain ID preventing replay across networks — signing on Ethereum won't accidentally work on Polygon. Design implications: show network badge prominently during signing, warn if signing for unexpected chain, auto-detect chain mismatches between wallet and dApp. Design decisions: whether to block cross-chain mistakes entirely or allow with confirmation — power users want flexibility, novices need protection.","hasDetailedContent":true,"content":{"id":"EIP-155","summary":"EIP-155 prevents replay attacks by including the chain ID in transaction signatures. Before this, a transaction signed on Ethereum mainnet could be \"replayed\" on Ethereum Classic (or any fork) to steal funds. Now every signature is bound to a specific chain, protecting users when networks fork or when using multiple chains.","applicability":{"whenToUse":["Your product addresses: transactions could be replayed across chains.","Your product addresses: network forks created security risks.","The flow should deliver: signature includes chain ID, invalid on other chains.","You are designing a network indicator in transaction experience with visible states and recovery paths."],"whenToAvoid":["Always show network name AND chain ID in transaction confirmations.","Always confirm network switches before signing.","Show both name and numeric chain ID.","Wrong-address or approval mistakes are not recoverable in your product context."]},"designerTakeaways":["You can design UI that delivers signature includes chain ID, invalid on other chains.","You can each chain has unique ID, signatures are chain-specific in the interface.","You can design UI that delivers same address."],"problemsSolved":[{"problem":"Transactions could be replayed across chains","oldWay":"Sign a transaction on mainnet, attacker replays it on Classic to drain the same address","newWay":"Signature includes chain ID, invalid on other chains","impact":"critical"},{"problem":"Network forks created security risks","oldWay":"Every fork meant potential replay attacks on both chains","newWay":"Each chain has unique ID, signatures are chain-specific","impact":"critical"},{"problem":"Users couldn't safely use multiple EVM chains","oldWay":"Using same address on multiple chains was risky","newWay":"Same address, different chain IDs, transactions isolated","impact":"high"},{"problem":"No way to verify which chain a transaction was meant for","oldWay":"Wallet showed transaction but not target network","newWay":"Chain ID in signature proves intended network","impact":"medium"}],"uxPatterns":[{"name":"Network Indicator in Transaction","description":"Always show which network a transaction is being signed for","mockup":"concept/verify-safety","userFlow":["User initiates transaction","Wallet shows network prominently","Chain ID displayed for verification","User confirms on correct network","Transaction signed with chain ID embedded"]},{"name":"Wrong Network Warning","description":"Alert when user tries to sign for unexpected chain","mockup":"concept/verify-safety","userFlow":["DApp requests transaction for specific chain","Wallet detects mismatch with connected chain","Warning modal shown before signing","User can switch networks or cancel","Prevents accidental wrong-chain transactions"]},{"name":"Multi-Chain Transaction History","description":"Show chain context for all historical transactions","mockup":"concept/verify-safety","userFlow":["User opens transaction history","Each transaction shows its chain","Chain ID visible for verification","Clear which network each tx occurred on"]}],"uiComponents":[{"name":"ChainIdBadge","description":"Visual indicator of chain ID with network name","states":["mainnet","testnet","l2","unknown"],"props":["chainId","chainName","icon","color"]},{"name":"NetworkMismatchAlert","description":"Warning when requested chain differs from connected","states":["mismatch","matched","switching"],"props":["requestedChain","connectedChain","onSwitch","onCancel"]},{"name":"TransactionChainContext","description":"Shows chain context for a transaction","states":["pending","confirmed","failed"],"props":["chainId","txHash","explorerUrl"]}],"antiPatterns":[{"pattern":"Hiding chain ID from users","why":"Users can't verify they're signing for the right network","instead":"Always show network name AND chain ID in transaction confirmations","severity":"critical"},{"pattern":"Auto-switching networks without confirmation","why":"User might accidentally transact on wrong chain","instead":"Always confirm network switches before signing","severity":"high"},{"pattern":"Using only chain name without ID","why":"Fake networks could use same name as real ones","instead":"Show both name and numeric chain ID","severity":"high"},{"pattern":"No indication of replay protection","why":"Users don't know their transaction is protected","instead":"Show \"Protected on [Network]\" badge","severity":"medium"}],"onMonad":[{"aspect":"Monad Chain ID","ethereum":"Chain ID 1 for mainnet","monad":"Monad has its own unique chain ID","designImplication":"Display \"Monad\" name with chain ID in all transaction confirmations"},{"aspect":"Cross-Chain Operations","ethereum":"Each chain requires separate transactions","monad":"Same requirement, but faster confirmation","designImplication":"Show chain context even more prominently in fast-finality environment"}],"relatedStandards":[{"id":"EIP-695","relationship":"EIP-695 provides the RPC method to query chain ID that EIP-155 introduced"},{"id":"EIP-1344","relationship":"EIP-1344 adds chain ID opcode so smart contracts can also verify chain"},{"id":"EIP-1191","relationship":"EIP-1191 extends checksums to include chain ID for address validation"},{"id":"EIP-2718","relationship":"Typed transactions include chain ID in the envelope structure"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-155","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=EIP-155","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-155","markdown":"https://www.eipsfordesigners.com/standards/EIP-155/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-155/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-155","official":"https://eips.ethereum.org/EIPS/eip-155","discussion":"https://ethereum-magicians.org/search?q=EIP-155"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}