Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- ethernaut
- chain reorganization
- hard fork
- transaction
- coin flip
- TransferFrom
- Block
- audit
- libray
- syntax
- NaughtCoin
- Coin
- approve
- web assembly
- Assembly
- soft fork
- Ethererum
- EVM
- writeup
- Smart contract
- web3
- Wargame
- tx.origin
- ethereum
- solidity
- secureum
- ethereum virtual machine
- openzepplin
- Oracle Cloud
- byte code
Archives
- Today
- Total
c0mpos3r
[Web3] Ethererum Virtual Machine (EVM) 본문
EVM 이란?
EVM : 스마트 계약을 실행하고 이더리움 블록체인 상에서의 DApps를 실행하는 가상 머신

EVM 역활
Smart Contrace(스마트 계약) 실행
분산 애플리케이션 (Dapps 구동)

EVM 작동 방식
트랜잭션 수신 → 가스 계산 → 바이트코드 해석 → 명령어 실행 → 상태 업데이트

ByteCode
ByteCode : 고수준의 언어로 작성 된 스마트 계약을 EVM이 이해 할 수 있는 명령어 집합 세트 변환 한 것

EVM 명령어 세트
연산 명령어
연산 명령어는 산술 및 논리 연산 수행
| ADD | 두 값을 더한다 |
| MUL | 두 값을 곱한다 |
| SUB | 두 값을 뺀다 |
| DIV | 두 값을 나눈다 |
| SDIV | 두 값을 부호 있는 정수로 나눈다 |
| MOD | 두 값의 나머지를 구한다 |
| SMOD | 부호 있는 정수로 나머지를 구한다 |
| ADDMOD | 두 값을 더한 후 모듈러 연산을 수행 |
| MULMOD | 두 값을 곱한 후 모듈러 연산을 수행 |
| EXP | 거듭제곱을 계산 |
Stack 조작 명령어
스택 조작 명령어는 스택의 상태를 변경
| POP | 스택의 최상단 값을 제거 |
| PUSH1 to PUSH32 | 1바이트에서 32바이트 길이의 데이터를 Stack에 PUSH |
| DUP1 to DUP16 | 스택의 최상단에서 n번째 값을 복사하여 Stack에 PUSH |
| SWAP1 to SWAP16 | 스택의 최상단 값과 n번째 값을 교환 |
Memory 및 Storage 접근 명령어
Memory 및 Storage 접근 명령어는 Memory와 Storage에 데이터를 읽고 쓴다.
| MLOAD | Memory에서 값을 읽는다 |
| MSTORE | Memory에 값을 쓴다 |
| MSTORE8 | 8bit 값을 Memory에 쓴다 |
| SLOAD | Storage에서 값을 읽는다 |
| SSTORE | Storage에 값을 쓴다 |
Flow Control 명령어
흐름 제어 명령어는 코드의 실행 흐름을 제어한다.
| JUMP | 지정된 위치로 코드 실행을 이동 |
| JUMP I | 조건이 참이면 지정된 위치로 코드 실행을 이동 |
| PC | 현재 Program Counter 값을 반환 |
| JUMPDEST | 유요한 점프 대상 위치를 표시 |
Environment Information 명령어
환경 정보 명령어는 Transaction 및 BlockChain 관련 정보를 제공한다.
| BALANCE | 특정 주소의 잔액을 반환 |
| ORIGIN | Transaction의 발신 주소를 반환 |
| CALLER | 현재 호출자의 주소를 반환 |
| CALLVALUE | Transaction의 값을 반환 |
| CALLDATALOAD | 호출 데이터의 특정 위치에서 데이터를 읽는다 |
| CALLDATASIZE | 호출 데이터의 크기를 반환 |
| CALLDATACOPY | 호출 데이터를 Memory 복사 |
| CODESIZE | 현재 코드의 크기를 반환 |
| CODECOPY | 현재 코드를 Memory에 복사 |
| GASPRICE | Transaction의 GAS 가격을 반환 |
| EXTCODESIZE | 외부 주소의 코드 크기를 반환 |
| EXTCODECOPY | 외부 주소의 코드를 Memory에 복사 |
System 명령어
시스템 명령어는 Smart Contract의 실행 환경을 관리한다.
| CREATE | 새로운 Smart Contract를 생성 |
| CALL | 다른 Smart Contract를 호출 |
| CALLCODE | 현재 컨텍스트에서 다른 Smart Contract의 코드 실행 |
| RETURN | 실행을 종료하고 출력을 반환 |
| DELEGATECALL | 호출자의 컨텍스트에서 다른 Smart Contract 호출 |
| STATICALL | 상태를 변경하지 않은 호출을 수행 |
| REVERT | 실행을 중단하고 모든 상태 변경을 되돌림 |
| SELFDESTRUCT | 현재 계약을 파기하고 잔액을 지정된 주소로 보냄 |
'Web3' 카테고리의 다른 글
| [Web3] Ethereum Block (0) | 2025.06.07 |
|---|---|
| [Web3] Ethereum 구조 (1) | 2025.06.06 |