> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sophon.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# zkVM vs EVM Differences

> Core differences between Sophon's native zkVM and Ethereum's EVM

# zkVM vs EVM Differences

Sophon's native zkVM is fundamentally different from Ethereum's EVM as it's designed to generate zero-knowledge proofs while executing smart contracts. While the EVM Bytecode Interpreter enables EVM compatibility (see [limitations](/build/evm-compatibility/evm-interpreter#limitations)), here are the core differences between zkVM and EVM:

## Execution Model

* **Proof Generation**: zkVM operations must be ZK-proof friendly, affecting how certain operations work
* **Gas Model**: Uses "ergs" instead of gas, with different cost calculations for operations
* **State Management**: Different approach to handling state changes due to ZK-proof requirements

## EVM Instruction Differences

To check what opcodes differ in behavior between Sophon and Ethereum, see the official [EVM Instructions](https://docs.zksync.io/zksync-protocol/differences/evm-instructions) page.

## Native Features

### Account Abstraction

Unlike EVM which requires EIP-4337 for AA, Sophon's zkVM:

* Has native account abstraction built into the VM
* Provides better performance for AA operations
* Handles nonces differently for AA accounts

[Learn more about AA differences](https://docs.zksync.io/zksync-protocol/differences/native-vs-eip4337)

### Paymasters

zkVM has native support for paymasters:

* Built-in paymaster functionality
* More efficient fee abstraction
* Different gas accounting for sponsored transactions

### System Contracts

* Additional precompiled contracts specific to zkVM
* Different handling of system-level operations
* Native multi-transaction support

[Learn more about precompile differences](https://docs.zksync.io/zksync-protocol/differences/pre-compiles)

## State and Storage

### Nonce Handling

* Separate nonces for deployments and transactions
* Different nonce management for smart contract accounts
* Unique nonce behavior for batched transactions

[Learn more about nonce differences](https://docs.zksync.io/zksync-protocol/differences/nonces)

### Storage Layout

* Different storage slot calculation
* Unique handling of immutable references
* Modified library linking process

[Learn more about storage differences](https://docs.zksync.io/zksync-protocol/differences/libraries)

## Contract Lifecycle

### Deployment

* Different bytecode format for native zkVM contracts
* Unique contract creation flow
* Modified CREATE/CREATE2 behavior for zkVM contracts

[Learn more about deployment differences](https://docs.zksync.io/zksync-protocol/differences/contract-deployment)

### Code Execution

* Different handling of contract calls
* Modified return data handling
* Unique error propagation model

[Learn more about execution differences](https://docs.zksync.io/zksync-protocol/differences/evm-instructions)
