프로그래밍 언어
SoliditySolidity
Solidity는 이더리움(Ethereum) 및 EVM(Ethereum Virtual Machine) 호환 블록체인에서 스마트 컨트랙트를 작성하기 위한 정적 타입 프로그래밍 언어다. 2014년 Gavin Wood가 제안하고 이더리움 팀이 개발했으며, JavaScript·Python·C++의 영향을 받았다.
특징
| 항목 | 내용 |
|---|---|
| 패러다임 | 객체 지향, 정적 타입 |
| 대상 플랫폼 | EVM (Ethereum, Polygon, BNB Chain 등) |
| 파일 확장자 | .sol |
| 컴파일 결과 | EVM 바이트코드 + ABI |
| DeFi 점유율 | TVL 기준 약 87% |
기본 구조
핵심 개념
데이터 타입
| 타입 | 설명 | 예시 |
|---|---|---|
uint256 | 256비트 부호 없는 정수 | 토큰 잔액, 가격 |
address | 이더리움 주소 (20바이트) | 지갑 주소, 컨트랙트 주소 |
bool | 참/거짓 | 플래그 상태 |
mapping(K=>V) | 해시맵 구조 | 주소별 잔액 |
struct | 사용자 정의 복합 타입 | 주문 정보 |
transient | 일시적 스토리지 (EIP-1153, 0.8.24+) | 재진입 가드 |
상태 변수와 가시성
- •
public/private/internal/external - •
view: 상태 읽기만,pure: 상태 접근 없음,payable: ETH 수신 가능 - •상태 변수는 블록체인 스토리지에 영구 저장
수식어(Modifier)
재사용 가능한 조건 검사. onlyOwner, nonReentrant 등.
에러 처리
| 키워드 | 용도 | 가스 환불 |
|---|---|---|
require() | 입력·조건 검증, 실패 시 revert | O |
revert() | 명시적 실행 취소 | O |
assert() | 내부 불변 조건 검증, 실패 시 패닉 | X |
이벤트(Event)
블록체인 로그에 기록되어 프론트엔드·오프체인에서 감지 가능.
ABI (Application Binary Interface)
컨트랙트 함수 호출 규약. 외부 프로그램이 컨트랙트와 상호작용하는 인터페이스.
버전 발전사 (0.8.x)
| 버전 | 주요 변경사항 |
|---|---|
| 0.8.0 | 정수 오버플로우 기본 방어 내장 |
| 0.8.24 | EIP-4844 (blob), EIP-1153 일시적 스토리지(transient) 지원 |
| 0.8.25 | mcopy() 옵코드로 메모리 복사 최적화 |
| 0.8.29 | 커스텀 스토리지 레이아웃, EVM Object Format 실험적 지원 |
| 0.8.31 | Fusaka 네트워크 업그레이드 지원 |
주요 취약점
| 취약점 | 방어 방법 |
|---|---|
| 재진입 공격 | Checks-Effects-Interactions 패턴, ReentrancyGuard |
| 정수 오버플로우 | Solidity 0.8+ 기본 방어, SafeMath |
| 접근 제어 | onlyOwner modifier, OpenZeppelin Ownable |
| 프론트러닝 | 커밋-공개 패턴, 슬리피지 제한 |
| tx.origin 사용 | msg.sender 사용 권장 |
2016년 The DAO 해킹은 재진입 공격으로 $6,000만 상당의 ETH가 탈취된 사건으로, Solidity 보안 패턴이 크게 발전하는 계기가 됐다.
Solidity vs Vyper
| 측면 | Solidity | Vyper |
|---|---|---|
| 문법 | C++·JS 영향, 풍부한 기능 | Python 유사, 최소주의 |
| DeFi TVL | ~87% | ~8% |
| 가스 효율 | 풍부한 추상화로 약간 높음 | 컴파일 타임 메모리 할당으로 낮음 |
| 보안 철학 | 다양한 안전 검사 내장 | 감사 용이성 우선 |
| 적합한 사용 | 복잡한 DeFi, 범용 컨트랙트 | 단순·명확한 금융 로직 |
개발 도구
- •Hardhat / Foundry: 테스트·배포 프레임워크
- •OpenZeppelin: 감사된 표준 컨트랙트 라이브러리 (ERC-20, Ownable 등)
- •Remix IDE: 브라우저 기반 Solidity IDE
- •Slither / MythX: 정적 분석·보안 감사 도구

