zkEVM (Community Edition) Documentation
For opcode fetching, we might have 3 sources in different situation: When contract interaction, we lookup bytecode_table to read bytecode. When contract creation in root call, we lookup tx_table to read transaction's calldata. When contract creation in internal call, we lookup rw_table to read caller's memory.
https://privacy-scaling-explorations.github.io/zkevm-docs/architecture/evm-circuit/opcode-fetching.html