Skip to content
Published on

스마트 컨트랙트 언어 2026 완벽 가이드 - Solidity 0.8 · Vyper · Move (Aptos/Sui) · Cairo · Stylus (Arbitrum) · Fuel/Sway 심층 분석

Authors

프롤로그 — 2026년, 스마트 컨트랙트는 어디서 도는가

블록체인은 분산 데이터베이스다. 스마트 컨트랙트는 그 데이터베이스 위에서 도는 결정론적 프로그램이다. 모든 노드가 같은 입력으로 같은 출력을 내야 하므로, 언어 선택은 곧 합의 모델·가스 모델·검증 모델을 같이 고른다는 뜻이다.

2026년 5월 현재, 전 세계 스마트 컨트랙트 TVL의 약 60%가 여전히 Ethereum 메인넷에 있고, L2를 합치면 EVM 패밀리가 **약 80%**다. 그러나 비-EVM의 점유율이 빠르게 늘었다. Solana가 약 7%, Aptos·Sui가 합쳐 약 4%, Cosmos가 약 3%, StarkNet과 Fuel이 신생으로 합쳐 약 2%다.

그래서 2026년의 신입 컨트랙트 엔지니어는 보통 세 갈래 중 하나를 고른다.

  • EVM 길 — Solidity 0.8.28을 배우고 Foundry로 테스트한다. 가장 큰 시장, 가장 많은 감사회사, 가장 깊은 라이브러리.
  • Move 길 — Aptos Move 또는 Sui Move로 리소스 타입을 배운다. 객체 중심 모델, 병렬 실행.
  • Rust 길 — Solana Anchor, Stylus, CosmWasm, Sway, NEAR 모두 Rust 계열. 한 언어로 여러 체인을 쓸 수 있다.

이 글은 그 모든 갈래를 한 호흡으로 정리한다. 언어의 특이점, 도구 체인, 보안 모델, 그리고 한국·일본 Web3의 현실까지.


1장 · EVM 패권 — Ethereum과 L2의 풍경

먼저 숫자부터. 2026년 5월 기준 EVM 체인 TVL을 정리하면 다음과 같다.

  • Ethereum 메인넷: 약 800억 달러
  • Arbitrum One: 약 180억 달러
  • Base (Coinbase L2): 약 150억 달러
  • OP Mainnet: 약 90억 달러
  • Polygon PoS + zkEVM: 약 60억 달러
  • BNB Chain: 약 50억 달러
  • Linea, Scroll, zkSync Era 등: 각 10억 달러대

evm-version을 Cancun 또는 Prague로 맞춰 컴파일하면 거의 모든 L2에서 그대로 돌아간다. 한 번 짠 Solidity 코드는 Ethereum, Arbitrum, Base, OP, Polygon, BNB Chain, Linea, Scroll, zkSync, Mantle, Blast, Mode, Zora, Avalanche C-Chain, Fantom Sonic, Celo L2, Hedera EVM, Astar zkEVM에서 거의 그대로 동작한다.

이 게 EVM의 진짜 힘이다. 하나를 잘 짜면 17개 체인에서 돈다.


2장 · Solidity 0.8.28 — 사실상 표준, 그러나 변하고 있다

Solidity는 2014년 Gavin Wood가 발표한 이후 12년째 Ethereum의 기본 언어다. 2026년 5월의 최신은 0.8.28. 그 사이의 굵직한 변화를 잠깐 정리하자.

  • 0.8.0 (2020) — 산술 오버플로우가 기본으로 revert. SafeMath 시대 종료.
  • 0.8.4 (2021) — Custom errors. require(cond, "string")보다 가스 절약.
  • 0.8.18 (2023) — 컴파일러 옵션으로 named arguments 활성화.
  • 0.8.24 (2024) — EIP-1153 Transient storage 정식 지원. tload·tstore.
  • 0.8.27 — Yul 최적화 개선, evm-version 기본 Cancun.
  • 0.8.28 — Prague EVM 일부 명령어 지원, 컴파일 속도 개선.

가장 짧은 Solidity 계약은 이렇게 생겼다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

contract Counter {
    uint256 public count;

    error CountTooLarge(uint256 attempted, uint256 max);

    function increment() external {
        if (count >= 1_000_000) revert CountTooLarge(count + 1, 1_000_000);
        count += 1;
    }
}

세 가지 포인트.

  1. pragma solidity ^0.8.28 — 0.8.x 라인은 산술 오버플로우 보호가 기본.
  2. error CountTooLarge(...) — string 대신 selector 4바이트 + 인자만 저장. 가스 절약 약 200-400.
  3. if (cond) revert 패턴이 require(!cond)보다 가스 적고 디버깅이 명확하다.

저장소 매핑은 백틱으로 감싼 mapping(address => uint256) 처럼 쓴다. 이 글 안에서도 마찬가지로 백틱 안에서만 쓸 것이다.


3장 · Transient Storage (EIP-1153) — 2024년 이후의 진짜 패러다임 시프트

EIP-1153은 2024년 3월 Dencun 하드포크와 함께 들어왔다. 한 트랜잭션 동안만 살아 있는 저장소다. sstore가 약 20,000 가스라면 tstore는 약 100 가스다.

전형적인 활용은 재진입 락이다. 옛 방식.

// 옛 방식 — SLOAD/SSTORE로 락 관리. 매 호출 약 5000 가스.
contract OldReentrancyGuard {
    uint256 private _locked = 1;

    modifier nonReentrant() {
        require(_locked == 1, "REENTRANT");
        _locked = 2;
        _;
        _locked = 1;
    }
}

새 방식.

// 새 방식 — TLOAD/TSTORE. 매 호출 약 200 가스.
contract NewReentrancyGuard {
    bytes32 private constant LOCKED_SLOT = keccak256("reentrancy.lock");

    modifier nonReentrant() {
        assembly {
            if tload(LOCKED_SLOT) { revert(0, 0) }
            tstore(LOCKED_SLOT, 1)
        }
        _;
        assembly {
            tstore(LOCKED_SLOT, 0)
        }
    }
}

가스 절약은 한 호출당 약 4800 가스. 일 100만 호출하는 컨트랙트라면 하루 약 0.5 ETH 절약이다. 2026년 5월의 ETH 가격 약 4000달러로 환산하면 일 2000달러.

OpenZeppelin 5.1부터 ReentrancyGuardTransient가 기본 제공된다.


4장 · Foundry — Paradigm이 만든 진짜 표준 도구

스마트 컨트랙트 개발 도구는 2020-2024년 사이 완전히 재편됐다. 2020년대 초반은 Hardhat(Nomic Foundation)과 Truffle(ConsenSys)이 양강이었다. 2024년 기준으로 보면 Foundry가 사실상 표준이 됐고, Truffle은 ConsenSys가 2023년 공식 종료를 선언했다. Brownie도 같은 해 사실상 유지 중단.

Foundry의 구성.

  • forge — 빌드·테스트 러너. Solidity로 테스트를 쓴다가 핵심.
  • cast — 명령행 RPC 클라이언트. ABI 인코딩, 트랜잭션 디버깅.
  • anvil — 로컬 EVM 노드. Hardhat Network의 대안.
  • chisel — Solidity REPL.

Foundry로 쓰는 테스트는 이렇게 생겼다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import "forge-std/Test.sol";
import "../src/Counter.sol";

contract CounterTest is Test {
    Counter counter;

    function setUp() public {
        counter = new Counter();
    }

    function test_Increment() public {
        counter.increment();
        assertEq(counter.count(), 1);
    }

    function testFuzz_IncrementNeverExceedsMax(uint8 n) public {
        for (uint256 i = 0; i < n; i++) {
            counter.increment();
        }
        assertLe(counter.count(), 1_000_000);
    }
}

testFuzz_ 접두사로 시작하면 자동 퍼징이 돈다. 기본 256회 시도. 명시적 입력 없이 무작위 값으로 invariant를 깨려 든다.

벤치마크. Solidity 컨트랙트 200개 빌드 + 1000 테스트 실행 시간.

  • Foundry: 약 12초 (Rust로 작성)
  • Hardhat 2: 약 90초 (Node.js + ts-node)
  • Hardhat 3: 약 25초 (viem + Rust EDR)

5장 · Hardhat 3 — Nomic Foundation의 반격

2024년 말 발표된 Hardhat 3은 두 가지가 결정적으로 다르다. 첫째, viem 기반. ethers.js 의존을 끊었다. 둘째, Rust EDR — Ethereum Development Runtime을 Rust로 다시 썼다. anvil에 비빌 만하다.

Hardhat 3의 hardhat.config.ts는 이렇게 생겼다.

import type { HardhatUserConfig } from "hardhat/config";
import HardhatViem from "@nomicfoundation/hardhat-viem";

const config: HardhatUserConfig = {
  plugins: [HardhatViem],
  solidity: {
    version: "0.8.28",
    settings: {
      optimizer: { enabled: true, runs: 200 },
      evmVersion: "cancun"
    }
  },
  networks: {
    sepolia: {
      type: "http",
      url: process.env.SEPOLIA_RPC_URL ?? "",
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : []
    }
  }
};

export default config;

선택 기준 한 줄. Solidity 단일 언어 + 속도가 중요하면 Foundry, TypeScript와 프론트엔드 통합이 중요하면 Hardhat 3.


6장 · Vyper 0.4 — Pythonic 보안 우선 언어

Vyper는 2017년 Vitalik Buterin이 직접 시드한 프로젝트로 시작했다. 철학이 명확하다. 상속 없음, 변경자 없음, 인라인 어셈블리 없음, 함수 오버로딩 없음, 무한 루프 없음. "쓰기 쉬운 코드"가 아니라 **"감사하기 쉬운 코드"**를 목표로 한다.

2026년 5월의 최신은 0.4.0. 1.0 직전이다.

# @version ^0.4.0

count: public(uint256)
MAX_COUNT: constant(uint256) = 1_000_000

@external
def increment():
    assert self.count < MAX_COUNT, "Count exceeded"
    self.count += 1

Pythonic하다. 들여쓰기로 블록을 구분한다. 그러나 진짜 Python은 아니다. 모든 타입이 정적이고, gas 비용이 컴파일 타임에 결정된다.

진짜로 쓰는 곳은 어디인가. Curve Finance — 전체 컨트랙트 대부분이 Vyper. Yearn Finance — 핵심 vault. Lido의 일부. TVL로 환산하면 Vyper 컨트랙트가 관리하는 자산이 2026년 5월 기준 약 250억 달러다.

Vyper의 비극은 2023년 7월에 있었다. 컴파일러 버그로 Curve의 일부 풀에서 재진입 락이 우회됐고, 약 7000만 달러가 도난당했다. 이후 Vyper 팀은 컴파일러 자체에 Fuzz 캠페인차등 테스트(EVM 결과와 비교)를 도입했다.


7장 · Huff와 Yul — 어셈블리 레벨 가스 최적화

Solidity가 가스 면에서 부족할 때 두 갈래로 내려간다.

Yul — Solidity의 중간 표현. inline assembly 블록 안에서 직접 쓴다.

function gasOptimized() external pure returns (uint256 result) {
    assembly {
        let x := 0x42
        result := mul(x, 2)
    }
}

Huff — 완전히 어셈블리 수준 DSL. ERC20을 약 200 가스 차이로 짤 수 있다.

#define function transfer(address,uint256) nonpayable returns (bool)

#define macro TRANSFER() = takes(0) returns(0) {
    0x04 calldataload
    0x24 calldataload
    [BALANCE_LOCATION] sload
    sub
    [BALANCE_LOCATION] sstore
    0x01 0x00 mstore
    0x20 0x00 return
}

쓰지 말자, 라는 게 일반적인 권고다. 99%의 컨트랙트는 Solidity로 충분하고, Huff가 절약하는 가스보다 감사 비용이 더 든다. 예외는 Uniswap V4 Hooks 같은 핫패스다.


8장 · Solady와 Solmate — 가스 최적화 라이브러리

OpenZeppelin Contracts가 표준이지만 가스를 따지면 너무 무겁다. 대안 두 개.

Solmate — Rari Capital의 t11s(Transmissions11)가 만든 미니멀 ERC20·ERC721·ERC1155. Rari가 망한 뒤 사실상 유지 중단.

Solady — Solmate의 정신적 후계자. Vectorized(트위터의 가스 최적화 전설)가 유지. 현재 가장 활발한 가스 최적화 라이브러리다.

Solady의 ERC20 사용 예.

import {ERC20} from "solady/tokens/ERC20.sol";

contract MyToken is ERC20 {
    function name() public pure override returns (string memory) {
        return "MyToken";
    }
    function symbol() public pure override returns (string memory) {
        return "MTK";
    }
}

OpenZeppelin의 ERC20과 비교하면 transfer 한 번에 약 300-500 가스 절약. 토큰이라면 한 번의 차이지만 DeFi 프로토콜이면 누적 차이가 크다.


9장 · 정형 검증 — SMTChecker, Certora, Halmos, Echidna

Solidity의 보안 도구는 네 층위로 정리된다.

1. 컴파일러 내장 — SMTChecker

/// @custom:invariant count <= MAX_COUNT
contract Counter {
    uint256 public count;
    // ...
}

solc --model-checker-engine chc 한 줄로 돌린다. 무료, 빠름, 그러나 표현력 제한적.

2. Foundry Invariant Testing

contract CounterInvariantTest is Test {
    Counter counter;

    function setUp() public {
        counter = new Counter();
        targetContract(address(counter));
    }

    function invariant_countNeverExceedsMax() public view {
        assertLe(counter.count(), 1_000_000);
    }
}

무작위로 함수를 호출해서 invariant가 깨지는지 본다. Foundry 표준.

3. Halmos — a16z crypto가 후원하는 심볼릭 실행기. Foundry 테스트를 그대로 받아 심볼릭으로 검증한다. 작은 컨트랙트에 강력.

4. Certora Prover — 상용. Aave, Compound, MakerDAO가 쓴다. 비싸지만 가장 강력한 정형 검증. 연 라이선스가 약 10-30만 달러대.

5. Echidna — Trail of Bits의 퍼저. 속성 기반 테스트. Crytic-properties 라이브러리와 같이 쓴다.

6. KEVM — Runtime Verification의 K Framework 기반 EVM 모델. 가장 무거운 정형 검증.

실무에서는 보통 SMTChecker + Foundry invariant + Echidna까지가 표준이다. Certora는 100억 달러 이상 다루는 프로토콜에서 추가로 쓴다.


10장 · Move 언어 — Diem의 유산, Aptos와 Sui의 현재

Move는 2019년 페이스북(현 Meta)의 Diem(구 Libra) 프로젝트에서 시작됐다. Diem이 2022년 1월 좌초한 뒤, 핵심 엔지니어들이 두 회사를 세웠다.

  • Aptos Labs — Mo Shaikh + Avery Ching. Aptos 메인넷 2022년 10월 출시.
  • Mysten Labs — Evan Cheng + Sam Blackshear. Sui 메인넷 2023년 5월 출시.

두 체인 모두 Move를 쓰지만, 언어 자체가 갈라졌다. Aptos Move는 원본 Diem Move에 가깝고, Sui Move는 객체 중심 모델로 다시 설계됐다.

Move의 핵심 아이디어 한 줄. 자원은 복사·삭제될 수 없고, 오직 이동(move)된다. 코인은 변수가 아니라 자원이다. 두 곳에 동시에 존재할 수 없다.

Aptos Move의 코인 정의.

module my_addr::my_coin {
    use std::signer;

    struct MyCoin has key {
        value: u64,
    }

    public entry fun mint(account: &signer, value: u64) {
        let coin = MyCoin { value };
        move_to(account, coin);
    }

    public entry fun transfer(from: &signer, to: address, amount: u64) acquires MyCoin {
        let from_addr = signer::address_of(from);
        let from_coin = borrow_global_mut<MyCoin>(from_addr);
        assert!(from_coin.value >= amount, 1);
        from_coin.value = from_coin.value - amount;
    }
}

has key는 글로벌 저장소에 들어갈 수 있다는 뜻. acquires MyCoin은 이 함수가 어떤 자원을 빌려오는지 명시. Move의 모든 동적 자원 접근은 컴파일 타임에 검증된다.


11장 · Sui Move — 객체 중심 모델

Sui Move는 같은 Move지만 세계관이 다르다. Aptos Move가 "계정에 자원이 붙는다"라면, Sui Move는 "모든 것은 객체다". 각 객체에는 고유한 UID가 있고, 객체는 다른 객체에 소유된다.

Sui Move의 코인.

module my_pkg::my_coin {
    use sui::coin::{Self, Coin, TreasuryCap};
    use sui::transfer;
    use sui::tx_context::TxContext;

    public struct MY_COIN has drop {}

    fun init(witness: MY_COIN, ctx: &mut TxContext) {
        let (treasury, metadata) = coin::create_currency(
            witness, 9, b"MYC", b"My Coin", b"", option::none(), ctx
        );
        transfer::public_freeze_object(metadata);
        transfer::public_transfer(treasury, tx_context::sender(ctx));
    }
}

Sui Move의 진짜 강점은 병렬 실행이다. 한 트랜잭션이 건드리는 객체와 다른 트랜잭션이 건드리는 객체가 겹치지 않으면, 두 트랜잭션은 병렬로 실행된다. 핫스팟이 없는 NFT 트랜스퍼는 거의 무한 병렬화된다.

Sui 메인넷은 일평균 TPS 약 2000을 유지하고, 피크는 약 8000을 넘는다. EVM이 약 100 TPS인 것과 비교하면 한 자리 수 차이다.


12장 · Cairo 2.6 — STARK 친화 언어

Cairo는 StarkWare가 만든 언어다. 핵심은 STARK 증명 생성 비용에 친화적인 명령어 세트다. 일반 EVM에서 가스가 비싼 연산(예: 곱셈)이 Cairo에서는 거의 무료고, 그 반대도 있다.

Cairo 1.0은 2023년 7월 출시. Rust에 강하게 영감받았다. 2026년 5월의 최신은 2.6.4.

Cairo의 카운터.

#[starknet::contract]
mod Counter {
    #[storage]
    struct Storage {
        count: u128,
    }

    #[external(v0)]
    fn increment(ref self: ContractState) {
        let current = self.count.read();
        assert(current < 1_000_000, 'Count exceeded');
        self.count.write(current + 1);
    }
}

타입 시스템이 Rust와 거의 같다. ref self로 가변 참조를 받는다. 패닉은 assert로 던진다.

StarkNet 메인넷은 2024년 11월 v0.13.2부터 가스 모델을 Ethereum과 더 비슷하게 맞췄다. 2026년 5월 현재 StarkNet TVL은 약 25억 달러.

Cairo의 진짜 의미는 검증 비용이다. 1만 개 트랜잭션을 묶어서 ZK 증명 하나로 Ethereum에 올린다. 사용자 1인당 가스 비용이 EVM L2의 약 10분의 1이다.


13장 · Stylus — Arbitrum의 Rust/WASM 실험

Arbitrum Stylus는 2024년 8월 메인넷 출시됐다. 핵심은 한 줄. Arbitrum L2 위에서 Rust·C·C++·AssemblyScript를 EVM 컨트랙트와 같이 돌린다. WebAssembly를 EVM 옆에서 실행한다.

Stylus Rust 컨트랙트.

use stylus_sdk::{alloy_primitives::U256, prelude::*};

#[storage]
#[entrypoint]
pub struct Counter {
    count: StorageU256,
}

#[public]
impl Counter {
    pub fn count(&self) -> U256 {
        self.count.get()
    }

    pub fn increment(&mut self) -> Result<(), Vec<u8>> {
        let current = self.count.get();
        if current >= U256::from(1_000_000_u32) {
            return Err(b"Count exceeded".to_vec());
        }
        self.count.set(current + U256::from(1));
        Ok(())
    }
}

Stylus 컨트랙트는 Solidity 컨트랙트와 상호 호출 가능하다. 같은 ABI를 쓰고, 같은 가스 회계 안에서 돈다. 다만 Rust 쪽이 산술 연산에서 약 10-50배 빠르다. 암호학·압축·FFT 같은 계산 집약 코드를 Rust로 옮기고, 비즈니스 로직은 Solidity로 두는 게 일반적인 패턴.


14장 · Fuel과 Sway — UTXO Ethereum L2

Fuel은 2023년 9월 베타넷 출시, 2024년 메인넷 가동. 가장 큰 차이는 UTXO 모델이다. Ethereum이 계정 모델인 것과 정반대다.

Sway 언어는 Rust에 강하게 영감받았지만 UTXO 모델에 맞춰 설계됐다.

contract;

storage {
    count: u64 = 0,
}

abi Counter {
    #[storage(read)]
    fn count() -> u64;

    #[storage(read, write)]
    fn increment();
}

impl Counter for Contract {
    #[storage(read)]
    fn count() -> u64 {
        storage.count.read()
    }

    #[storage(read, write)]
    fn increment() {
        let current = storage.count.read();
        require(current < 1_000_000, "Count exceeded");
        storage.count.write(current + 1);
    }
}

UTXO 모델의 장점은 병렬화다. 입력 UTXO가 겹치지 않는 트랜잭션은 병렬로 검증된다. 단점은 카운터 같은 공유 상태가 자연스럽지 않다는 것. 위 예시도 사실 Fuel의 "상태 저장 계약" 확장을 쓴 것이다.

Fuel TVL은 2026년 5월 기준 약 5억 달러. 신생 L2 중에서는 빠르게 성장 중.


15장 · Solana — Rust, Anchor, Pinocchio

Solana는 EVM이 아니다. 컨트랙트가 프로그램으로 불리고, 상태는 별도 계정에 저장된다. 한 프로그램은 자기 계정을 가지지 않고, 사용자가 PDA(Program Derived Address)로 만든 계정에 쓴다.

Solana 프로그램을 짜는 세 가지 길.

1. 네이티브 Solana — 가장 낮은 레벨. solana_program 크레이트로 직접 짠다. 가장 빠르고 가장 길다.

2. Anchor 프레임워크 — Solana의 Hardhat. 매크로로 보일러플레이트를 줄인다. 사실상 표준이다.

use anchor_lang::prelude::*;

declare_id!("11111111111111111111111111111111");

#[program]
pub mod counter {
    use super::*;

    pub fn increment(ctx: Context<Increment>) -> Result<()> {
        let counter = &mut ctx.accounts.counter;
        require!(counter.count < 1_000_000, ErrorCode::CountExceeded);
        counter.count += 1;
        Ok(())
    }
}

#[derive(Accounts)]
pub struct Increment<'info> {
    #[account(mut)]
    pub counter: Account<'info, Counter>,
}

#[account]
pub struct Counter {
    pub count: u64,
}

#[error_code]
pub enum ErrorCode {
    #[msg("Count exceeded")]
    CountExceeded,
}

3. Pinocchio — 2024년 등장한 zero-copy 저레벨 라이브러리. Anchor의 매크로 비용 없이 직접 컨트랙트를 짠다. Anchor보다 약 30-50% 가스 절약. 단, Anchor만큼 자동 검증이 없어서 직접 신경 써야 할 게 많다.

Solana TVL은 2026년 5월 약 130억 달러. Anchor가 약 80%, 네이티브가 약 15%, Pinocchio가 약 5%.


16장 · NEAR — Rust, AssemblyScript

NEAR Protocol은 2020년 출시. JavaScript 친화 체인을 표방했지만, 결국 Rust가 표준이 됐다. AssemblyScript SDK는 2024년 사실상 폐기.

NEAR Rust 컨트랙트.

use near_sdk::{env, near, AccountId};

#[near(contract_state)]
#[derive(Default)]
pub struct Counter {
    count: u64,
}

#[near]
impl Counter {
    pub fn increment(&mut self) {
        assert!(self.count < 1_000_000, "Count exceeded");
        self.count += 1;
    }

    pub fn get_count(&self) -> u64 {
        self.count
    }
}

NEAR의 차별점은 샤딩이다. Nightshade 샤딩으로 처리량을 가로로 확장한다. 그러나 2026년 5월 현재 NEAR TVL은 약 3억 달러로, 한때의 기대보다 훨씬 작은 자리에 있다.


17장 · Cosmos CosmWasm — Rust on 인터체인

Cosmos는 단일 체인이 아니다. 하나의 SDK로 만든 수십 개 체인의 연합이다. CosmWasm은 그 SDK 위에서 도는 스마트 컨트랙트 모듈이다. Osmosis, Juno, Neutron, Stargaze 등이 CosmWasm을 쓴다.

CosmWasm Rust 컨트랙트.

use cosmwasm_std::{entry_point, DepsMut, Env, MessageInfo, Response, StdError};
use cw_storage_plus::Item;

const COUNT: Item<u64> = Item::new("count");

#[entry_point]
pub fn instantiate(deps: DepsMut, _env: Env, _info: MessageInfo, _msg: ())
    -> Result<Response, StdError> {
    COUNT.save(deps.storage, &0u64)?;
    Ok(Response::default())
}

#[entry_point]
pub fn execute(deps: DepsMut, _env: Env, _info: MessageInfo, _msg: ())
    -> Result<Response, StdError> {
    let current = COUNT.load(deps.storage)?;
    if current >= 1_000_000 {
        return Err(StdError::generic_err("Count exceeded"));
    }
    COUNT.save(deps.storage, &(current + 1))?;
    Ok(Response::default())
}

CosmWasm의 강점은 IBC. 한 체인의 컨트랙트가 다른 체인의 컨트랙트를 호출할 수 있다. 인터체인 자산 이동이 네이티브로 들어 있다.

전체 Cosmos 생태계 TVL은 2026년 5월 약 35억 달러.


18장 · Polkadot ink! — Substrate 위의 Rust

ink!는 Parity Technologies가 만든 Polkadot/Substrate용 Rust DSL이다.

#[ink::contract]
mod counter {
    #[ink(storage)]
    pub struct Counter {
        count: u64,
    }

    impl Counter {
        #[ink(constructor)]
        pub fn new() -> Self {
            Self { count: 0 }
        }

        #[ink(message)]
        pub fn increment(&mut self) {
            assert!(self.count < 1_000_000, "Count exceeded");
            self.count += 1;
        }

        #[ink(message)]
        pub fn get(&self) -> u64 {
            self.count
        }
    }
}

ink!의 진짜 특이점은 WebAssembly 컨트랙트라는 것. EVM이 아닌 Wasm을 네이티브로 실행한다. Polkadot 메인넷에서 직접 쓰는 곳은 거의 없고, 주로 파라체인(Astar, Aleph Zero 등)에서 쓴다.


19장 · Cardano — Plutus와 Aiken

Cardano는 Haskell 기반 스마트 컨트랙트 언어 Plutus로 시작했다. Haskell이라는 진입 장벽이 너무 높았다. 그래서 2023년 등장한 게 Aiken이다.

Aiken은 Plutus와 호환되지만 Rust 같은 문법을 가진다.

use aiken/transaction.{ScriptContext}

validator {
  fn counter(_redeemer: Data, _datum: Data, _ctx: ScriptContext) -> Bool {
    True
  }
}

Cardano는 UTXO 확장(eUTxO) 모델이다. 컨트랙트가 직접 상태를 가지지 않고, UTXO의 datum에 상태를 박는다. 이게 사고 방식의 전환이 크다.

Cardano TVL은 2026년 5월 약 4억 달러. 한때의 약속에 비하면 작은 자리.


20장 · Tezos, Algorand, Hedera — 각자의 길

Tezos — Michelson(저레벨 어셈블리), LIGO(JavaScript/Pascal-like), SmartPy(Python-like), Archetype(formal verification 우선). 자체 거버넌스로 자가 업그레이드. TVL 약 1억 달러.

Algorand — TEAL(저레벨), PyTeal(Python), Algorand Smart Contract, Reach(컴파일러 기반). Pure Proof of Stake. TVL 약 2억 달러.

Hedera — Solidity. Hedera Smart Contract Service가 EVM과 호환. 엔터프라이즈 시장(IBM, Google, Boeing 등 거버넌스 위원). TVL 약 1.5억 달러.

Bitcoin Layer 2 — Liquid Network(Elements Script), RGB(client-side validation), Simplicity(formal-verifiable 어셈블리). Bitcoin 위 스마트 컨트랙트의 세 갈래 시도. 아직 초기 단계.


21장 · Account Abstraction — EIP-4337, EIP-7702

스마트 컨트랙트 자체보다 더 큰 변화가 일어난 영역. 2026년 5월 현재 Ethereum 트랜잭션의 약 18%가 스마트 계정에서 출발한다.

EIP-4337 — 2023년 3월 메인넷에 들어갔다. 컨트랙트 변경 없이 메모리풀 레벨에서 스마트 계정을 지원한다. 핵심 컴포넌트: UserOperation, Bundler, EntryPoint, Paymaster.

EIP-7702 — 2024년 5월 Pectra 하드포크와 함께 들어갔다. EOA(외부 소유 계정)에 임시로 코드를 붙일 수 있다. 사용자가 메타마스크 그대로 쓰면서도, 한 트랜잭션 동안 스마트 계정처럼 동작한다.

주요 스마트 계정 인프라.

  • Safe (구 Gnosis Safe) — 멀티시그 표준. 약 1500억 달러 자산이 Safe로 관리.
  • Pimlico — Bundler/Paymaster 서비스. permissionless.js SDK.
  • Alchemy Account Kit — Account Abstraction SDK + 인프라.
  • Biconomy — 가스리스 트랜잭션 + 스마트 계정.
  • ZeroDev — Kernel 스마트 계정.
  • Stackup — Bundler 인프라.

22장 · MEV와 보호 — Flashbots, SUAVE

MEV(Maximal Extractable Value)는 블록 빌더가 트랜잭션 순서를 조작해 추출하는 가치다. Sandwich attack, frontrunning, backrunning이 전형.

Flashbots — 2020년 등장. MEV를 투명하게 만든다. MEV-Boost가 Ethereum 메인넷의 약 92% 블록을 통해 검증인-빌더 분리(PBS)를 구현.

SUAVE (Single Unifying Auction for Value Expression) — Flashbots가 2023년 발표한 분산 메모리풀. 사용자가 어떤 빌더에 트랜잭션을 보낼지 선택하지 않아도 된다.

MEV 보호 RPC — Flashbots Protect, MEV Blocker, BloxRoute Protect. 메타마스크에 RPC를 바꾸면 그날부터 sandwich attack을 거의 안 당한다.


23장 · 감사회사들 — 누가 누구를 감사하는가

2026년 기준 주요 스마트 컨트랙트 감사회사.

  • OpenZeppelin — 가장 큰 회사. Aave, Compound, MakerDAO 감사 경험.
  • Trail of Bits — Echidna, Slither 개발. 정형 검증 강점.
  • ConsenSys Diligence — MythX, Scribble 개발사. Ethereum 재단과 가까움.
  • Quantstamp — 토론토 기반. 자동화 도구 강조.
  • Hacken — 우크라이나/유럽 기반. CertiK과 더불어 동유럽 강세.
  • Halborn — 마이애미. 멀티체인 강점.
  • CertiK — 일리노이대 출신. 자동 정형 검증.
  • Spearbit — 분산 감사 네트워크. 개인 감사인 매칭.

감사 대안:

  • Code4rena — 경쟁 감사. 약 $50K-500K 풀로 수십 명의 감사인이 경쟁.
  • Sherlock — 감사 + 해킹 보험. 발견 못한 버그는 보험으로 보상.
  • Cantina — Spearbit 후속. 경쟁 + 큐레이션.
  • Immunefi — 버그 바운티 플랫폼. 최대 약 1000만 달러 바운티.

평균 감사 비용. 소규모 (5000줄 미만)30K100K,중규모30K-100K, **중규모** 약 100K-500K, 대규모 프로토콜 약 $500K-2M. 감사 한 번이면 6주-3개월.


24장 · The Graph, Goldsky — 컨트랙트 데이터 인덱싱

블록체인 위에 짠 컨트랙트는 RPC로 직접 읽으면 느리다. 그래서 인덱서가 필요하다.

  • The Graph — 가장 오래된 표준. 서브그래프(GraphQL 스키마)로 정의. Decentralized 네트워크 + 호스티드 서비스. 2024년 호스티드 서비스 종료, 분산 네트워크로 완전 이전.
  • Goldsky — 더 빠르고 더 쉽다. SQL-like Mirror, GraphQL Subgraphs. 엔터프라이즈 고객 강세.
  • Subsquid — 오픈소스 인덱서 SDK. Postgres 직접 호스팅 가능.
  • Ponder — TypeScript 네이티브 인덱서. Hardhat/Foundry 개발자에 친화.
  • Envio — HyperSync 기반 초고속 인덱서. 인덱싱 속도 약 1000블록/초.
  • Allium — Web3 데이터웨어하우스. SQL로 모든 체인 쿼리.
  • Dune Analytics — SQL 대시보드. 분석가 표준.

선택 기준 한 줄. DApp에 GraphQL 인덱서가 필요하면 Goldsky 또는 The Graph, TypeScript 코드에 가까운 인덱서가 필요하면 Ponder, 분석/대시보드면 Dune.


25장 · 한국 Web3 — Klaytn에서 Kaia까지

한국 Web3 풍경의 굵직한 변화는 2024년 6월이다. Klaytn(카카오)과 Finschia(라인)가 합병해 Kaia가 됐다. 본사는 아부다비. 메인넷은 2024년 8월 출시.

주요 한국계 Web3.

  • Kaia — Klaytn + Finschia 합병체. EVM 호환. TVL 약 5억 달러.
  • BORA — 카카오게임즈의 게임 토큰 + 플랫폼. Kaia 위에서 도는 사이드체인.
  • Klip — 카카오 지갑. 사실상 한국 Web3의 진입 지점.
  • WEMIX — 위메이드의 게임 토큰. 한때 1.5조 원 시총 → 2022년 9월 거래소 상폐 사건 → 회복 중.
  • ICON — 2017년 ICO 붐의 한국 대표. 현재 BTP(Blockchain Transmission Protocol)로 인터체인 노력.
  • Sygnum Korea — 스위스 Sygnum의 한국 진출. 기관 디지털 자산 은행.
  • 두나무 / Upbit — 한국 최대 거래소. 자체 체인 Luniverse 운영.
  • Xangle — 한국 Web3 데이터 분석 + 리서치.

한국 시장 한 줄. **개인 거래는 거대(전 세계 거래량의 약 7% 차지)**하지만 국내 DeFi/온체인 활동은 여전히 작다.


26장 · 일본 Web3 — Astar에서 Soneium까지

일본은 2017년 코인체크 해킹 이후 강한 규제로 한동안 잠잠했다. 그러나 2023-2024년 사이 자민당이 친 Web3 정책을 펴면서 풍경이 바뀌었다.

주요 일본계 Web3.

  • Astar Network — 일본 최대 자체 체인. EVM + WASM 동시 지원. Polkadot 파라체인이었다가 2024년 Polygon CDK 기반 zkEVM L2(Astar zkEVM)로 전환.
  • SoneiumSony Block Solutions Labs + Startale의 OP Stack 기반 L2. 2025년 1월 메인넷 출시. 소니의 IP(애니메이션, 게임, 음악)를 온체인으로 가져오는 게 목표.
  • Oasys — 일본 게임 컨소시엄(반다이 남코, 세가, 스퀘어 에닉스 등). Layer 1 + 게임용 Verse 레이어.
  • JPYC — 일본 엔 스테이블코인. 2024년 자금결제법 개정 이후 정식 발행.
  • Animoca Brands Japan — 홍콩 Animoca의 일본 지사. 일본 게임/IP NFT 강세.
  • HashPort — 일본 NFT/Web3 컨설팅. 가장 큰 일본 Web3 SI.
  • Double Jump.Tokyo — My Crypto Heroes로 시작한 일본 NFT 게임 회사.

일본 시장 한 줄. IP가 강하다(애니메이션, 게임, 캐릭터). 그래서 NFT 중심 Web3가 자연스럽고, DeFi는 상대적으로 약하다.


27장 · 진짜 매출 — Curve, Lido, Aave, Compound, Uniswap

스마트 컨트랙트가 만든 진짜 매출은 어디인가. 2026년 5월 기준 연환산 매출.

  • Tether (USDT 발행) — 약 70억 달러. 단연 1위. 사실상 컨트랙트라기보다 신탁 금융.
  • Circle (USDC 발행) — 약 18억 달러.
  • MakerDAO/Sky (DAI/USDS) — 약 5억 달러.
  • Aave — 약 3.5억 달러 (수수료 기준). TVL 약 250억 달러.
  • Lido — 약 1.5억 달러 (10% 수수료). 스테이킹 약 90억 달러 ETH.
  • Uniswap Labs — 정확한 매출 불공개. 추정 약 1억 달러대 (프론트엔드 수수료).
  • Curve Finance — 약 5000만 달러. veTokenomics 원조.
  • Compound — 약 3000만 달러. 한때 DeFi 황제.
  • GMX — 약 2000만 달러. 영구 선물 DEX.
  • Pendle — 약 1500만 달러. 수익률 토큰화.

Solidity 컨트랙트가 만든 매출의 합이 연 약 100억 달러. 작은 시장이 아니다.


28장 · 무엇으로 시작할까 — 2026년의 의사결정 트리

신입 컨트랙트 엔지니어가 받는 가장 많은 질문. "무엇부터 배워야 하나요?" 한 줄로 정리한다.

  • 취업/사이드프로젝트 목적, 최단 경로 → Solidity 0.8.28 + Foundry. 한 달 안에 첫 컨트랙트 배포.
  • 장기적인 인프라/L2 작업 → Rust + Solana Anchor 또는 Stylus. 2개월 학습.
  • 연구 지향 (정형 검증, ZK) → Cairo 또는 Rust + Halmos. 3개월 이상.
  • 새로운 패러다임 (객체 모델, 병렬) → Sui Move 또는 Aptos Move. 2개월.
  • 한국 게임/IP 기획 → Kaia EVM + Klip 통합. Solidity가 그대로 쓰인다.
  • 일본 게임/IP 기획 → Soneium 또는 Oasys. 둘 다 EVM이라 Solidity가 그대로 쓰인다.

보안 우선 → SMTChecker + Echidna + Foundry invariant + Slither. Certora는 큰 프로토콜에서.

가스 최적화 우선 → Solady 라이브러리 + Yul inline assembly. Huff는 정말 핫패스만.

마지막 한 문장. EVM은 죽지 않는다. 그러나 EVM만 알면 미래가 좁아진다. 2026년의 컨트랙트 엔지니어는 Solidity 하나는 깊게, Move 또는 Rust 중 하나는 입문 정도는 알아야 한다.


참고 자료