EIP-3855: PUSH0 Opcode
Before EIP-3855, pushing zero onto the EVM stack required PUSH1 0x00 (2 bytes, 3 gas). EIP-3855 added PUSH0 (0x5f) — 1 byte, 2 gas. A trivial-looking change that saves significant bytecode size and gas across the entire ecosystem because zero is the most-pushed value.
Status
Activated in the Shanghai hard fork (April 2023). Solidity 0.8.20+ emits PUSH0 by default for chains that support it.
Neo Equivalent
NeoVM has had PUSH0 (opcode 0x10) since launch, plus PUSH1 through PUSH16 as direct integer constants. There was no need for a retrofit because the design included it from day one.
Live on Neo TestNet
Both implementations are deployed on Neo N3 TestNet (network magic 894710606).
| Implementation | Contract Hash | Deploy Tx |
|---|---|---|
Solidity (neo-solc) | 0x52b860448a5d1ff537160a0bee8c83cdfe72fe4d | 0xba96b7c4…1c0a8d |
Neo C# (nccs) | 0x6704d604997959ce4e098bd96ecbacef358e9ff6 | 0x92572481…a6c00c |
Cross-implementation invocations match on zero, falseBool. Source pairs under docs/standards-mirror/deployments/eip-3855/.
