> ## 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 호환성

> StableNet은 Anzeon EVM 명령어 세트를 실행합니다 — London + Shanghai 옵코드에 핵심 제외 항목 하나와 추가 항목 하나가 있습니다.

> StableNet은 완전한 EVM 호환성을 제공합니다. 단 하나의 제외(blob 옵코드)와 하나의 추가(Anzeon BLS 프리컴파일)가 있습니다.

## 지원 명령어 세트

StableNet은 **Anzeon** EVM 명령어 세트를 사용하며, 이는 부분적인 Cancun 지원이 포함된 `London + Shanghai`와 동일합니다:

| 포크                  | 상태    | 비고                  |
| ------------------- | ----- | ------------------- |
| Frontier – Istanbul | 지원    | 모든 기본 옵코드           |
| Berlin              | 지원    | EIP-2929 접근 목록      |
| London              | 지원    | `BASEFEE` 옵코드       |
| Shanghai            | 지원    | `PUSH0` 옵코드         |
| Cancun (부분)         | 부분 지원 | Blob 옵코드 제외 — 아래 참조 |

## 툴 설정

모든 툴링에서 `evmVersion`을 `shanghai`로 설정하세요. `cancun`을 사용하면 컴파일 오류나 런타임 실패가 발생합니다.

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

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

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

Foundry는 Solidity 0.8.20+에 대해 기본값으로 `shanghai`를 사용합니다. 프로필에 `evm_version`을 명시적으로 설정하지 않은 경우 변경이 필요 없습니다.

## 미지원: Blob 옵코드

다음 Cancun 옵코드는 **지원되지 않습니다**:

| 옵코드           | EIP      | 상태  |
| ------------- | -------- | --- |
| `BLOBHASH`    | EIP-4844 | 미지원 |
| `BLOBBASEFEE` | EIP-7516 | 미지원 |

이 옵코드를 사용하는 컨트랙트는 런타임에서 revert됩니다. Solidity 컴파일러 설정에서 `evmVersion: "cancun"`을 사용하지 마세요.

## 추가: Anzeon 프리컴파일

StableNet은 커스텀 프리컴파일을 하나 추가합니다:

| 주소                                           | 이름     | 목적                                |
| -------------------------------------------- | ------ | --------------------------------- |
| `0x00000000000000000000000000000000000b0001` | blsPoP | Anzeon BLS Proof-of-Possession 검증 |

이 프리컴파일은 합의 레이어에서 내부적으로 사용됩니다. 애플리케이션 컨트랙트에서 직접 호출할 필요가 없습니다.

## 표준 프리컴파일

모든 표준 EVM 프리컴파일이 정규 주소에서 사용 가능합니다:

| 주소     | 이름                  |
| ------ | ------------------- |
| `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)   |

## 네이티브 시스템 컨트랙트

StableNet은 일반 CALL 흐름에 참여하는 Go 구현 시스템 컨트랙트도 포함합니다:

| 주소                                           | 이름                | 목적                                    |
| -------------------------------------------- | ----------------- | ------------------------------------- |
| `0x00000000000000000000000000000000000b0002` | NativeCoinManager | 네이티브 잔액 직접 조작 (NativeCoinAdapter가 사용) |
| `0x00000000000000000000000000000000000b0003` | AccountManager    | 계정 추가 데이터 관리 (블랙리스트, 인증 플래그)          |

이것들은 내부 시스템 컨트랙트입니다. 애플리케이션 컨트랙트는 NativeCoinAdapter를 통해 간접적으로 상호작용합니다.

## StableNet 특이 동작

다음 동작은 표준 이더리움 EVM 실행과 다릅니다:

| 동작         | 상세                                                                                               |
| ---------- | ------------------------------------------------------------------------------------------------ |
| 최대 콜 스택 깊이 | 1024 (이더리움과 동일)                                                                                  |
| 가치 전송 제한   | Anzeon은 CALL 실행 중 가치 전송에 추가 목적지 제한을 적용합니다                                                        |
| 블랙리스트 검사   | 모든 CALL은 발신자와 수신자 계정의 `Extra` 필드에서 블랙리스트 플래그를 확인합니다 — 블랙리스트 주소로의 전송 또는 블랙리스트 주소에서의 전송은 revert됩니다 |

블랙리스트 상태는 **GovCouncil** 컨트랙트(`0x…1004`)가 관리하며 각 계정의 `Extra` 필드에 저장됩니다. 이 검사는 RPC 레이어가 아닌 EVM 레이어에서 발생합니다 — 블랙리스트 주소로의 트랜잭션은 추정 시점에 `eth_estimateGas`를 통과하더라도 revert됩니다.

## 개발자 이점

* 기존 모든 Solidity 라이브러리와 패턴이 수정 없이 동작
* EIP-2930 접근 목록과 EIP-1559 수수료 지원
* Multicall3, OpenZeppelin 컨트랙트, 표준 툴링이 즉시 사용 가능

## 관련 문서

* [StableNet이란?](/ko/v0.3/learn/what-is-stablenet) — 아키텍처 개요
* [컨트랙트 주소](/ko/v0.3/reference/contract-addresses) — 전체 주소 레퍼런스
* [Hardhat으로 배포하기](/ko/v0.3/build/tutorials/deploy-with-hardhat) — 실제 `evmVersion` 적용
