필사 모드: 스마트 컨트랙트 언어 2026 완벽 가이드 - Solidity 0.8 · Vyper · Move (Aptos/Sui) · Cairo · Stylus (Arbitrum) · Fuel/Sway 심층 분석
한국어프롤로그 — 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;
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는 이렇게 생겼다.
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 사용 예.
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줄 미만)** 약 $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)로 전환.
- **Soneium** — **Sony 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 중 하나는 입문 정도는 알아야 한다.
참고 자료
- Solidity 공식 문서: https://docs.soliditylang.org/
- Solidity GitHub: https://github.com/ethereum/solidity
- Vyper 공식 문서: https://docs.vyperlang.org/
- Foundry Book: https://book.getfoundry.sh/
- Hardhat 공식 문서: https://hardhat.org/docs
- OpenZeppelin Contracts: https://github.com/OpenZeppelin/openzeppelin-contracts
- Solady: https://github.com/Vectorized/solady
- Solmate: https://github.com/transmissions11/solmate
- Aptos Move 문서: https://aptos.dev/move/move-on-aptos
- Sui Move 문서: https://docs.sui.io/concepts/sui-move-concepts
- Cairo Book: https://book.cairo-lang.org/
- StarkNet 문서: https://docs.starknet.io/
- Arbitrum Stylus 문서: https://docs.arbitrum.io/stylus/stylus-gentle-introduction
- Fuel Sway Book: https://docs.fuel.network/docs/sway/
- Solana Anchor: https://www.anchor-lang.com/
- NEAR SDK Rust: https://github.com/near/near-sdk-rs
- CosmWasm Book: https://book.cosmwasm.com/
- ink! 공식 문서: https://use.ink/
- Aiken: https://aiken-lang.org/
- EIP-1153 (Transient Storage): https://eips.ethereum.org/EIPS/eip-1153
- EIP-4337 (Account Abstraction): https://eips.ethereum.org/EIPS/eip-4337
- EIP-7702 (EOA Code): https://eips.ethereum.org/EIPS/eip-7702
- Flashbots Docs: https://docs.flashbots.net/
- Certora Prover: https://www.certora.com/
- Halmos: https://github.com/a16z/halmos
- Echidna: https://github.com/crytic/echidna
- The Graph: https://thegraph.com/docs/
- Goldsky: https://docs.goldsky.com/
- Ponder: https://ponder.sh/
- DefiLlama TVL Rankings: https://defillama.com/
- Kaia 공식 문서: https://docs.kaia.io/
- Soneium 공식 사이트: https://soneium.org/
- Astar Network: https://docs.astar.network/
현재 단락 (1/495)
블록체인은 분산 데이터베이스다. 스마트 컨트랙트는 그 데이터베이스 위에서 도는 **결정론적 프로그램**이다. 모든 노드가 같은 입력으로 같은 출력을 내야 하므로, 언어 선택은 곧 ...