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, with minor exceptions (e.g.,
SSTOREreverts on shielded slots)Seismic supports all of Ethereum's opcodes & precompiles
EIP-1559 transactions follow standard EIP-1559 fee rules. Seismic transactions (type
0x4A) use legacy fee pricingSeismic 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. Note thatblock.timestampstill returns seconds, matching standard Solidity. Useblock.timestamp_msfor millisecond precision
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
0x64— securely generate a random numberECDH
0x65— Elliptic Curve Diffie-Hellman, for generating a shared secret given a public key and secret keyAES-GCM Encrypt
0x66— encrypt data with AES-GCMAES-GCM Decrypt
0x67— decrypt data with AES-GCMHKDF
0x68— derive cryptographic keys from a parent keysecp256k1 Sign
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 use timestamps in milliseconds internally
In Seismic Solidity,
block.timestampreturns unix seconds, just like in standard Solidity. We addedblock.timestamp_mswhich returns unix milliseconds.block.timestamp_secondsis an alias forblock.timestamp
RPC compatibility
We support almost every RPC endpoint in Reth, and have added a few more of our own. See the full RPC Methods reference for details.
Seismic-specific methods:
seismic_getTeePublicKey— returns the TEE's encryption public key for ECDH key exchange
Modified Ethereum methods:
eth_call— zeroes thefromfield on unsigned calls; supports "signed reads" via type0x4Aeth_sendRawTransaction— accepts Seismic transaction type0x4Awith encrypted calldataeth_getStorageAt— returns zero for shielded slots, making them indistinguishable from uninitialized storageTracing endpoints are currently disabled. We plan to re-enable them with shielded data redacted from traces
Last updated

