There're multiple commands to compile solidity code into different outputs: ``` solc -o <directory> --opcodes <code.sol> ``` > Generates all the opcodes. ``` solc -o <directory> --asm <code.sol> ``` > Generates a `.evm` file. Which is a higher-level overview with some annotations. ``` solc -o <directory> --bin <code.sol> ``` > Generates the whole deployment bytecode. ``` solc -o <directory> --bin-runtime <code.sol> ``` > Generates the runtime bytecode (part of the deployment bytecode). ### Example ``` // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; contract SimpleStorage { address contractOwner; function example() public { contractOwner = msg.sender; } } ``` SimpleStorage.opcode ``` PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xE JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0xA9 DUP1 PUSH1 0x1A PUSH0 CODECOPY PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xE JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x26 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54353F2F EQ PUSH1 0x2A JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH1 0x30 PUSH1 0x32 JUMP JUMPDEST STOP JUMPDEST CALLER PUSH0 PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA 0xEB 0xFB 0xD2 0xB8 DUP3 LOG1 DUP3 COINBASE STOP 0xEB 0x4B 0xEA 0xB4 0xC7 RETURN PUSH5 0xA0A0E834E0 0xC2 PUSH0 SWAP5 0xC5 0xB0 BLOBBASEFEE PUSH25 0xDF4EC664736F6C634300081C00330000000000000000000000 ``` SimpleStorage.evm ``` /* "Contract.sol":58:171 contract SimpleStorage {... */ mstore(0x40, 0x80) callvalue dup1 iszero tag_1 jumpi revert(0x00, 0x00) tag_1: pop dataSize(sub_0) dup1 dataOffset(sub_0) 0x00 codecopy 0x00 return stop sub_0: assembly { /* "Contract.sol":58:171 contract SimpleStorage {... */ mstore(0x40, 0x80) callvalue dup1 iszero tag_1 jumpi revert(0x00, 0x00) tag_1: pop jumpi(tag_2, lt(calldatasize, 0x04)) shr(0xe0, calldataload(0x00)) dup1 0x54353f2f eq tag_3 jumpi tag_2: revert(0x00, 0x00) /* "Contract.sol":109:169 function example() public {... */ tag_3: tag_4 tag_5 jump // in tag_4: stop tag_5: /* "Contract.sol":155:165 msg.sender */ caller /* "Contract.sol":139:152 contractOwner */ 0x00 0x00 /* "Contract.sol":139:165 contractOwner = msg.sender */ 0x0100 exp dup2 sload dup2 0xffffffffffffffffffffffffffffffffffffffff mul not and swap1 dup4 0xffffffffffffffffffffffffffffffffffffffff and mul or swap1 sstore pop /* "Contract.sol":109:169 function example() public {... */ jump // out auxdata: 0xa2646970667358221220aaebfbd2b882a1824100eb4beab4c7f364a0a0e834e0c25f94c5b04a78df4ec664736f6c634300081c0033 } ``` SimpleStorage.bin ``` 6080604052348015600e575f5ffd5b5060a980601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c806354353f2f14602a575b5f5ffd5b60306032565b005b335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555056fea2646970667358221220aaebfbd2b882a1824100eb4beab4c7f364a0a0e834e0c25f94c5b04a78df4ec664736f6c634300081c0033 ``` SimpleStorage.bin-runtime ``` 6080604052348015600e575f5ffd5b50600436106026575f3560e01c806354353f2f14602a575b5f5ffd5b60306032565b005b335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555056fea2646970667358221220aaebfbd2b882a1824100eb4beab4c7f364a0a0e834e0c25f94c5b04a78df4ec664736f6c634300081c0033 ```