EVM Differences from Ethereum
Opcodes
Opcode | Scroll Behavior |
---|---|
BLOCKHASH | Returns keccak(chain_id || block_number) for the last 256 blocks. |
COINBASE | Returns the fee vault address (predeployed contract 0x5300000000000000000000000000000000000005 ). |
DIFFICULTY / PREVRANDAO | Always return 0. |
BASEFEE | Disabled because currently we disabled EIP-1559. If the opcode is encountered, the transaction will be reverted. |
SELFDESTRUCT | Disabled. If the opcode is encountered, the transaction will be reverted. |
Precompiled Contracts
Address | Name | Scroll behavior |
---|---|---|
0x02 | SHA2-256 | Currently not supported. |
0x03 | RIPEMD-160 | Currently not supported. |
0x05 | modexp | Restrict the input values B, E, M to unsigned integers less than . |
0x08 | ecPairing | The inputs are still multiple of 6 32-byte values, but limit the number of tuples to at most 4. |
0x09 | blake2f | Currently not supported. |
The remaining precompiled contracts have the same behavior as Ethereum. However, their maximum usage within a block is constrained by a limit tied to the zkEVM circuit capacity.
EIPs
Our sequencer was developed based on the London fork initially. We disabled some EIPs in the London fork and introduced a few EIPs from the Shanghai fork to improve the compatibility.
Disabled EIPs until the London fork:
- EIP-1559: Fee market change and EIP-1559 transaction type
- EIP-2930: Optional access lists
- EIP-3198:
BASEFEE
opcode
EIPs imported from the Shanghai fork: