Differences from Ethereum
Overview
The Seismic EVM is approximately a superset of the EVM
What's the same
Transaction construction and serialization identical to Ethereum (with one new transaction type)
Address generation, gas estimation, and signing work the same as Ethereum
Almost all RPC methods are identical to reth
Standard Solidity bytecode will behave identically on Seismic
Seismic supports all of Ethereum's opcodes & precompiles
Transaction priority & fees follow EIP-1559 rules
Seismic will produce empty blocks when there are no pending transactions
Key differences
Shielded storage: Solidity contracts can store private data on-chain
Runs in a TEE: Seismic nodes must run in Trusted Execution Environments
Seismic transaction: We added a new transaction type that allows you to encrypt your calldata
EVM Compatibility
Opcodes
CLOAD– load shielded data from storageCSTORE– write shielded data to storageTIMESTAMP_MS– get the block timestamp in milliseconds
Seismic transaction
The transaction with type 0x4a allows users to encrypt their calldata. These otherwise work just like legacy transactions. We also support the other standard Ethereum transaction types (Legacy, EIP-1559, EIP-2930, EIP-4844, EIP-7702)
Precompiles
All standard Ethereum precompiles are still available. Seismic added 6 new precompiles to our EVM:
RNG:
0x64securely generate a random numberECDH
0x65: Elliptic Curve Diffie-Hellman, for generating a shared secret given a public key and secret keyAES-GCM cryptography
Encryption
0x66Decryption
0x67
HKDF
0x68: generate a cryptographic keys from a parent keySecp256k1
0x69: Sign a message given a secret key
Staking
Seismic uses the same staking contract as Ethereum, which is hardcoded into our Genesis block at address 0x00000000219ab540356cbb839cbe05303d7705fa
Block times
We will often produce multiple blocks in the same second, yet Ethereum's block timestamps are expressed in terms of unix seconds. Our solution to this:
Block headers and the EVM see timestamps in milliseconds
All RPC endpoints will format block timestamps in seconds for Ethereum compatibility (not ms)
In Seismic Solidity,
block.timestampreturns unix seconds, just like in standard solidity. We addedblock.timestamp_mswhich returns unix milliseconds
RPC compatibility
We support almost every RPC endpoint in Reth, and have added a few more of our own
These methods are in Reth, but will behave differently on Seismic:
Calls to tracing endpoints will remove shielded data from the trace
Calls to
getStorageAtwill fail if the requested storage slot holds shielded data
Last updated

