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

# EVM Compatibility

> StableNet runs the Anzeon EVM instruction set — London + Shanghai opcodes with one key exclusion and one addition.

> StableNet is fully EVM-compatible with one exclusion (blob opcodes) and one addition (Anzeon BLS precompile).

## Supported instruction set

StableNet uses the **Anzeon** EVM instruction set, which equals `London + Shanghai` with partial Cancun support:

| Fork                | Status    | Notes                             |
| ------------------- | --------- | --------------------------------- |
| Frontier – Istanbul | Supported | All base opcodes                  |
| Berlin              | Supported | EIP-2929 access lists             |
| London              | Supported | `BASEFEE` opcode                  |
| Shanghai            | Supported | `PUSH0` opcode                    |
| Cancun (partial)    | Partial   | Blob opcodes excluded — see below |

## Tool configuration

Set `evmVersion` to `shanghai` in all your tooling. Using `cancun` causes compilation errors or runtime failures.

**Hardhat (`hardhat.config.js`):**

```javascript theme={null}
solidity: {
  version: "0.8.20",
  settings: {
    evmVersion: "shanghai",
  },
},
```

**Foundry (`foundry.toml`):**

Foundry defaults to `shanghai` for Solidity 0.8.20+. No change needed unless you explicitly set `evm_version` in your profile.

## Excluded: blob opcodes

The following Cancun opcodes are **not supported**:

| Opcode        | EIP      | Status        |
| ------------- | -------- | ------------- |
| `BLOBHASH`    | EIP-4844 | Not supported |
| `BLOBBASEFEE` | EIP-7516 | Not supported |

Contracts that use these opcodes will revert at runtime. Do not set `evmVersion: "cancun"` in Solidity compiler settings.

## Added: Anzeon precompile

StableNet adds one custom precompile:

| Address                                      | Name   | Purpose                                     |
| -------------------------------------------- | ------ | ------------------------------------------- |
| `0x00000000000000000000000000000000000b0001` | blsPoP | Anzeon BLS Proof-of-Possession verification |

This precompile is used internally by the consensus layer. Application contracts do not need to call it directly.

## Standard precompiles

All standard EVM precompiles are available at their canonical addresses:

| Address | Name                |
| ------- | ------------------- |
| `0x01`  | ecRecover           |
| `0x02`  | SHA-256             |
| `0x03`  | RIPEMD-160          |
| `0x04`  | Identity            |
| `0x05`  | ModExp (EIP-198)    |
| `0x06`  | ecAdd (EIP-196)     |
| `0x07`  | ecMul (EIP-196)     |
| `0x08`  | ecPairing (EIP-197) |
| `0x09`  | Blake2f (EIP-152)   |

## Native system contracts

StableNet also includes Go-implemented system contracts that participate in the normal CALL flow:

| Address                                      | Name              | Purpose                                                        |
| -------------------------------------------- | ----------------- | -------------------------------------------------------------- |
| `0x00000000000000000000000000000000000b0002` | NativeCoinManager | Direct native balance manipulation (used by NativeCoinAdapter) |
| `0x00000000000000000000000000000000000b0003` | AccountManager    | Account extra-data management (blacklist, authorized flag)     |

These are internal system contracts. Application contracts interact with them indirectly through NativeCoinAdapter.

## StableNet-specific behavior

The following behaviors differ from standard Ethereum EVM execution:

| Behavior                    | Details                                                                                                                                        |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| Maximum call stack depth    | 1024 (same as Ethereum)                                                                                                                        |
| Value transfer restrictions | Anzeon enforces additional destination restrictions on value transfers during CALL execution                                                   |
| Blacklist checks            | Every CALL checks the blacklist flag in the sender's and recipient's `Extra` account field — transfers to or from blacklisted addresses revert |

Blacklist status is managed by the **GovCouncil** contract (`0x…1004`) and is stored in each account's `Extra` field. These checks occur at the EVM level, not the RPC level — a transaction to a blacklisted address will revert even if it passes `eth_estimateGas` at the time of estimation.

## Developer benefits

* All existing Solidity libraries and patterns work without modification
* EIP-2930 access lists and EIP-1559 fees are supported
* Multicall3, OpenZeppelin contracts, and standard tooling work out of the box

## Related

* [What is StableNet](/en/v0.3/learn/what-is-stablenet) — architecture overview
* [Contract Addresses](/en/v0.3/reference/contract-addresses) — full address reference
* [Deploy with Hardhat](/en/v0.3/build/tutorials/deploy-with-hardhat) — `evmVersion` in practice
