Skip to content

Disassemble EVM bytecode into opcodes with offsets, push data and Solidity metadata.

Loading tool

About Bytecode to Opcode

Disassemble EVM runtime or creation bytecode into opcodes with byte offsets and push data. It highlights JUMPDESTs, annotates PUSH+JUMP pairs with their target, lists the function selectors found in the dispatcher, counts opcode frequencies, and decodes the CBOR metadata trailer appended by Solidity or Vyper (compiler version and IPFS or Swarm hash).

Common uses

  • Inspect the bytecode of an unverified contract
  • Find which function selectors a deployed contract dispatches
  • Read the compiler version and metadata hash embedded in deployed code
  • Recognise minimal proxies (EIP-1167) and other hand-written bytecode

FAQ

What is the difference between creation and runtime bytecode?
Creation (init) code runs once during deployment and returns the runtime code, which is what is stored at the contract address and executed on every call. Constructor arguments are appended after the creation code.
What is the metadata at the end of Solidity bytecode?
Solidity appends a CBOR-encoded map, by default containing an IPFS hash of the contract metadata and the compiler version, followed by a 2-byte length. It is data, not executable code.
Can bytecode be turned back into Solidity source?
Not exactly. A disassembler only shows opcodes; recovering readable source needs a decompiler and still loses names and structure. Use verified source when it exists.