블록체인Mar 28, 2026
Deep EVM #8: 순수 Yul로 토큰 스왑 구축하기
OS
Open Soft Team
Engineering Team
이론에서 실천으로
지난 7개 기사에서 우리는 EVM에 대한 포괄적 이해를 구축했습니다: 옵코드와 스택 머신, 메모리 모델, 가스 메커니즘, 보안 기본 요소, Yul 구문, 메모리 관리, 루프 최적화. 이제 모든 것을 합칩니다.
컨트랙트: SimpleSwap
컨트랙트는 한 가지 일을 합니다: Uniswap V2 쌍을 통해 토큰 A의 정확한 양을 토큰 B로 스왑합니다.
Solidity 버전 (참조)
contract SimpleSwapSolidity {
address public immutable owner;
function swap(
address pair, address tokenIn,
uint256 amountIn, uint256 amountOutMin, address to
) external {
require(msg.sender == owner, "Not owner");
IERC20(tokenIn).transfer(pair, amountIn);
// ... 리저브 가져오기, 출력 계산, 스왑 실행
}
}
라인별 가스 비교
| 카테고리 | Solidity | Yul | 절감 |
|---|---|---|---|
| 함수 디스패치 | ~30 가스 | ~13 가스 | 17 |
| 접근 제어 | ~2220 가스 | ~2115 가스 | 105 |
| ERC-20 전송 | ~350 가스 | ~110 가스 | 240 |
| getReserves 호출 | ~280 가스 | ~91 가스 | 189 |
| 산술 | ~180 가스 | ~38 가스 | 142 |
| 스왑 호출 | ~370 가스 | ~95 가스 | 275 |
| 총 런타임 절감 | ~1,110 가스 |
일반적인 Uniswap V2 스왑의 총 ~110,000 가스에서 1,110 가스 절감은 약 1%입니다. 하루 수천 건의 스왑을 실행하는 MEV 봇에게:
1,110 가스 * 30 gwei * $3,000/ETH = 스왑당 $0.0999
$0.0999 * 1,000 스왑/일 = $99.90/일
$99.90 * 365 = $36,463/년
배포 비용
| 지표 | Solidity | Yul |
|---|---|---|
| 런타임 바이트코드 | ~1,200 바이트 | ~480 바이트 |
| 배포 가스 | ~240,000 | ~96,000 |
| 절감 | — | 60% 더 작고, 60% 더 저렴 |
순수 Yul 컨트랙트의 보안 고려사항
- 모든 콜데이터 검증 — 주소를 20바이트로 마스킹
- 모든 반환 값 확인
- 비표준 토큰 처리 — USDT는 transfer에서 아무것도 반환하지 않음
- 재진입 — 수동으로 가드 구현 필요
- 산술 오버플로우 — Yul은 검사하지 않음
결론
이 시리즈는 EVM 기초에서 프로덕션급 Yul 코드 작성까지 안내했습니다. 핵심 요약:
- EVM은 256비트 워드, ~140 옵코드, 가스 미터링을 가진 스택 머신.
- 스토리지는 비용이 높다 — 새 항목에 20000 가스.
- 가스 최적화는 아키텍처적이다.
- 보안은 실행 흐름 이해에서 나온다.
- Yul은 읽기 쉬운 구문으로 옵코드 수준 제어를 제공한다.
- 순수 Yul은 최적화된 Solidity 대비 1-5% 가스를 절약한다.