핵심 인사이트 (3줄 요약)
- 본질: 스마트 컨트랙트(Smart Contract)는 EVM(Ethereum Virtual Machine, 이더리움 가상 머신)에서 실행되는 자율 프로그램으로, 코드가 곧 계약서이자 집행자다.
- 가치: 가스(Gas) 시스템은 튜링 완전(Turing Complete) 언어의 무한루프 문제를 경제적으로 해결하며, EIP-1559의 기본 수수료(Base Fee) 소각 메커니즘은 ETH 디플레이션 효과를 만든다.
- 판단 포인트: Solidity → Bytecode → EVM Opcode 변환 흐름을 이해하면 재진입 공격(Reentrancy)·정수 오버플로우 등 스마트 컨트랙트 취약점의 발생 원인을 논리적으로 추론할 수 있다.
Ⅰ. 개요 및 필요성
스마트 컨트랙트의 등장
Nick Szabo가 1994년 제안한 스마트 컨트랙트 개념은 "조건 충족 시 자동 실행되는 계약 코드"다. 이더리움은 이를 탈중앙화 월드 컴퓨터로 구현했다.
전통 계약의 문제: 중개자 필요, 이행 강제 비용, 불투명성 → 스마트 컨트랙트는 코드가 자동 집행되므로 신뢰 비용을 제거한다.
- 📢 섹션 요약 비유: — "자판기가 가장 단순한 스마트 컨트랙트다 — 동전 넣으면(조건 충족), 음료 나온다(자동 실행), 중간에 사람 필요 없다.
Ⅱ. 아키텍처 및 핵심 원리
컴파일·실행 흐름
┌─────────────────────────────────────────────────────────┐
│ 스마트 컨트랙트 실행 파이프라인 │
│ │
│ Solidity (.sol) │
│ │ solc 컴파일러 │
│ ▼ │
│ Bytecode (0x606060...) ABI (인터페이스 정의) │
│ │ │ │
│ ▼ ▼ │
│ EVM(Ethereum Virtual Machine) │
│ ┌───────────────────────────────────────────┐ │
│ │ Stack (256bit × 1024) │ Memory (바이트배열) │ │
│ │ Storage (영구 키-값) │ Opcode 실행 엔진 │ │
│ └───────────────────────────────────────────┘ │
│ │ 가스(Gas) 차감 │
│ ▼ │
│ 상태 변경(State Change) → 블록체인 기록 │
└─────────────────────────────────────────────────────────┘
가스(Gas) 구조
| 구성 요소 | 설명 | EIP-1559 이후 |
|---|---|---|
| Gas Limit | 트랜잭션 최대 허용 연산량 | 동일 |
| Gas Price | 단위 가스당 지불 ETH(Gwei) | 폐지 |
| Base Fee | 네트워크 혼잡도 기반 소각 수수료 | ✅ 도입 |
| Priority Fee(Tip) | 채굴자/검증자 팁 | ✅ 도입 |
| 실제 비용 | Gas Used × (Base Fee + Tip) | 예측 가능 |
주요 Opcode 가스 비용 예시
SSTORE (스토리지 쓰기): 20,000 gas
SLOAD (스토리지 읽기): 2,100 gas
ADD (덧셈 연산): 3 gas
CALL (외부 호출): 2,600 gas
- 📢 섹션 요약 비유: — "EVM은 미터기 달린 택시다 — 이동 거리(연산량)마다 요금(Gas)이 나오고, 잔액 떨어지면 멈춘다.
Ⅲ. 비교 및 연결
EVM 호환 체인 비교
| 체인 | EVM 호환 | 특징 |
|---|---|---|
| Ethereum | 기준 | 원조 EVM, 최고 보안 |
| Polygon | ✅ | 낮은 가스비, 이더리움 L2 |
| BNB Chain | ✅ | 빠른 블록, 중앙화 우려 |
| Arbitrum | ✅ | 옵티미스틱 롤업 L2 |
| Solana | ❌ | SVM, Rust 기반 |
재진입 공격(Reentrancy) 원리
// 취약한 패턴
function withdraw() {
uint amount = balances[msg.sender];
(bool sent,) = msg.sender.call{value: amount}(""); // ← 외부 호출
balances[msg.sender] = 0; // ← 업데이트가 호출 이후 → 위험!
}
EVM의 CALL Opcode가 외부 컨트랙트 실행을 허용하기 때문에, 상태 업데이트 전 외부 호출은 재진입 취약점을 만든다.
- 📢 섹션 요약 비유: — "ATM에서 '잔액 차감' 전에 '현금 지급'을 먼저 하면, 현금 받는 즉시 다시 출금 요청할 수 있다 — 이것이 재진입 공격이다.
Ⅳ. 실무 적용 및 기술사 판단
가스 최적화 실무 기법
- 스토리지 읽기 최소화: SLOAD는 비싸므로 로컬 변수에 캐싱
- 이벤트 로그 활용: 히스토리 데이터는 Storage 대신 Event(로그) 사용
- 배치 처리: 여러 작업을 단일 트랜잭션에 묶어 기본 비용 절감
- Solidity 버전 최신화: 컴파일러 최적화 개선
EIP-1559 의미
- Base Fee 소각 → ETH 공급량 감소 → 인플레이션 방어
- 가스비 예측 가능 → UX 개선
- 검증자 팁(Priority Fee)만 수령 → 기존 수익 감소, 장기 보안 모델 변화
기술사 핵심 판단
-
튜링 완전성과 무한루프 방지: 가스 한도가 Halting Problem의 실용적 해결책
-
형식 검증(Formal Verification) 도구(Certora, Mythril) 필요성
-
업그레이드 패턴: 불변 컨트랙트의 한계 → 프록시 패턴(Proxy Pattern)으로 우회
-
📢 섹션 요약 비유: — "스마트 컨트랙트 버그는 '배포 후 수정 불가'가 원칙 — 은행 ATM 코드를 배포 전에 완벽히 검증해야 하는 것과 같다.
Ⅴ. 기대효과 및 결론
| 효과 항목 | 내용 |
|---|---|
| 중개 비용 제거 | 계약 집행 자동화로 법적 비용 절감 |
| 투명성 | 모든 실행 결과가 온체인 공개 |
| 프로그래머블 화폐 | 조건부 지불, 탈중앙 금융(DeFi) 기반 |
| 새 취약점 등장 | 재진입·오라클 조작·플래시론 공격 등 |
EVM과 가스 시스템은 이더리움 생태계의 실행 엔진이다. 튜링 완전성을 경제적 가스 메커니즘으로 안전하게 제공함으로써 DeFi, NFT, DAO 등 모든 Web3 서비스의 근간을 형성한다.
- 📢 섹션 요약 비유: — "EVM은 전 세계가 공유하는 단 하나의 컴퓨터 — 연산 자원을 가스로 경매하여 공정 배분한다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
|---|---|
| 연결 개념 | 관계 설명 |
| Solidity | EVM 스마트 컨트랙트 주요 언어 |
| EIP-1559 | 가스 수수료 개혁 제안 |
| 재진입 공격 | EVM CALL 순서 오류 취약점 |
| ABI | 스마트 컨트랙트 외부 인터페이스 정의 |
📈 관련 키워드 및 발전 흐름도
[관계 설명] → [스마트 컨트랙트 EVM과 가스 실행 구조] → [스마트 컨트랙트 외부 인터페이스 정의]
👶 어린이를 위한 3줄 비유 설명
- 스마트 컨트랙트는 조건을 만족하면 자동으로 실행되는 로봇 계약서예요.
- 가스(Gas)는 이 로봇이 작동하는 데 필요한 연료인데, 연료가 떨어지면 작동을 멈춰 무한 루프를 막아요.
- 자판기처럼 동전 넣으면 음료가 나오듯, 스마트 컨트랙트는 조건이 맞으면 자동으로 돈이나 토큰을 보냅니다.