본문으로 건너뛰기
블록체인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);
        // ... 리저브 가져오기, 출력 계산, 스왑 실행
    }
}

라인별 가스 비교

카테고리SolidityYul절감
함수 디스패치~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/년

배포 비용

지표SolidityYul
런타임 바이트코드~1,200 바이트~480 바이트
배포 가스~240,000~96,000
절감60% 더 작고, 60% 더 저렴

순수 Yul 컨트랙트의 보안 고려사항

  1. 모든 콜데이터 검증 — 주소를 20바이트로 마스킹
  2. 모든 반환 값 확인
  3. 비표준 토큰 처리 — USDT는 transfer에서 아무것도 반환하지 않음
  4. 재진입 — 수동으로 가드 구현 필요
  5. 산술 오버플로우 — Yul은 검사하지 않음

결론

이 시리즈는 EVM 기초에서 프로덕션급 Yul 코드 작성까지 안내했습니다. 핵심 요약:

  1. EVM은 256비트 워드, ~140 옵코드, 가스 미터링을 가진 스택 머신.
  2. 스토리지는 비용이 높다 — 새 항목에 20000 가스.
  3. 가스 최적화는 아키텍처적이다.
  4. 보안은 실행 흐름 이해에서 나온다.
  5. Yul은 읽기 쉬운 구문으로 옵코드 수준 제어를 제공한다.
  6. 순수 Yul은 최적화된 Solidity 대비 1-5% 가스를 절약한다.