💰 현금과 신세계백화점 상품권 중 뭘 가질까? (ERC-20, ERC-721, ERC-1155)
지난 포스팅에서 주소 만드는 법, 그 주소가 트리 어디에 박히는지, 그리고 EVM이 그걸 어떻게 바꾸는지까지 파헤쳐봤다. 근데 그건 전부 "인프라" 얘기고, 정작 우리가 눈뜨면 확인하는 관심사이자 '돈'에 해당하는 것은 대부분 토큰이다. USDT, NFT, 게임 아이템 뭐 이런 것들 말이다.
이번 포스팅에서는 코인은 뭐고 토큰은 뭔지, 그리고 토큰은 왜 그리 종류가 다양한지 쉽고 깊게 알아본다! 🚀
📜 0. 먼저 ERC랑 EIP 헷갈리는 거 정리하고 가자!
ERC? EIP?
이거 은근 헷갈려(모르는)하는 사람이 많다. EIP (Ethereum Improvement Proposal)는 이더리움 프로토콜 자체를 바꾸자는 제안서 전체를 아우르는 상위 개념이다. 그 안에는 여러 가지 트랙이 존재한다.
🔧 Core: 프로토콜/컨센서스 레벨 변경 (EIP-1559 같은 거)
🌐 Networking: 노드 간 통신 프로토콜 규격
🔌 Interface: 클라이언트 API 규격
📦 ERC (Ethereum Request for Comment): 스마트컨트랙트/애플리케이션 레벨 표준 (토큰, 지갑 인터페이스 등)
💡 한 줄 요약! 즉, ERC는 EIP의 하위 카테고리 중 하나다. 유명한 ERC-20이라는 이름도 "20번째로 제출된 EIP인데 그게 ERC 트랙으로 채택된 것"이라 붙은 번호다.
EIP는 프로토콜 자체를 만지는"체인 개조 제안서"고,ERC는 그 체인 위에서"다들 이렇게 짜면 서로 잘 호환되니까 이렇게 약속하자"는 애플리케이션 레벨의 약속이다.
이번 편은 그 "ERC" 이야기다. EIP는 다음 포스팅에서 제대로 다룰 예정이다! 🚀
🪙 (네이티브) 코인 vs 토큰, 대체 뭐가 다를까?
백화점(체인)마다 상품권이 존재한다
결국 ERC(토큰) 하고 (네이티브) 코인 은 뭐가 다른 걸까? 일단 이것(ERC)은 블록체인 2.0 (흔히 비트코인을 블록체인 1.0, 이더리움부터 블록체인 2.0이라 부르는데) 이상의 규격에서 스마트 컨트랙트나 솔라나처럼 프로그램이 있는 경우에만 해당한다. 근데 깊게 설명하고 싶어도 경험상 서버맨이 2021년부터 블록체인 계에 발을 들이면서 사람들에게 토큰과 코인을 나눠서 어려운 용어로 설명하면 귀를 닫거나 대화방을 나가버린다... 😂
그래서 서버맨이 누구나 한 번에 이해할 수 있게 만든 꿀 비유법이 있다!
👑 (네이티브) 코인 = 그 나라의 국가 화폐
예: 비트코인 제국의 BTC, 이더리움 공화국의 ETH
이더리움을 대한민국으로 비유해보자. 한국에서 신세계 백화점 상품권은 거의 사실상 현금과 동일한 수준의 가치로 받아들여진다. 발행 주체도 명확하고, 신세계나 이마트가 아닌 곳에서도 범용성이 꽤 좋다.
하지만 어쨌든 신세계 상품권은 현금(원화)이 아니다.
그래서 나는 이렇게 비유한다:
💵 현금 == ETH (네이티브 코인)
🎟️ 상품권 == 토큰 (ERC)
📱 업비트 & CMC(CoinMarketCap)에서 토큰 확인하기
옛날 발표자료에서 겨우 찾았네
이 블로그를 보는 분이라면 스마트폰에 업비트 같은 거래소 앱 하나쯤은 설치되어 있을 것이다.
업비트에 들어가서 [입출금] 탭을 누르고 아무 코인이나 눌러보라. OO체인(네트워크) 이렇게 표기되어 있지 않고 Ethereum 이라고 표기되어 있다면, 그건 이더리움 체인 위에 배포된 토큰이라는 뜻이다.
(2021년에는 ERC20이라고 아예 프로토콜 이름을 적어줬는데, 요새는 그냥 Ethereum이라고 써있다.)
모바일에선 메뉴가 없지만, 데스크톱 브라우저로 업비트에 접속해서 해당 토큰을 클릭해 보면 웹사이트 / 블록조회(컨트랙트 조회 포함) / 국문백서 / 영문백서까지 다 제공한다.
CMC에서 조회한 테더
사실 서버맨은 업비트에서 보는 것보다 그냥 CMC (CoinMarketCap)에서 확인하는 걸 훨씬 추천한다. CMC에서는 백서는 물론 해당 토큰이 어떤 체인에 배포되었는지 모두 기록되어 있고, 어느 거래소에 상장되어 있는지까지 한눈에 다 보여주기 때문이다. 👍
🛡️ 오픈제플린(OpenZeppelin) : 스마트 컨트랙트의 안전지대
OpenZeppelin
오픈제플린(OpenZeppelin)은 솔리디티(Solidity) 기반 스마트 컨트랙트의 품질을 관리하고 개발하는 표준 프레임워크이자 블록체인 보안 회사다.
이더리움 극초창기에는 ERC-20 코드 안에 자폭 함수 같은, EVM에 위협을 가할 만한 불순하고(?) 온전하지 않은 컨트랙트들이 널려있었다. 하지만 오픈제플린의 표준 프레임워크가 도입된 이후 코인 판이 사실상 훨씬 안전해졌다.
🔑 핵심! ERC-20에 커스텀 함수를 추가하는 건 개발자 마음이다. 하지만 어쨌든 오픈제플린이 제시하는 ERC-20 표준을 따르는 것이 안전한 ERC-20을 만드는 가장 빠르고 확실한 길이다.
라떼(2021~2022)만 하더라도 웹 IDE인 Remix에서 개발할 때 오픈제플린 깃허브에 직접 들어가 ERC-20 표준을 복사해서 리믹스에 붙여넣고 개발했어야 했는데... 요즘은 Remix IDE에서 클릭 한 번 '딸깍' 하면 오픈제플린의 ERC-20 및 각종 토큰 표준이 자동으로 로드된다. (진짜 개편해졌다! 👏)
⚠️ [번외] 코인은 스캠이다? 위X스 사태로 보는 토큰의 위험성
Verify 된 컨트랙트는 누구나 소스코드를 볼 수 있다
번외로 다른 이야기를 잠깐 하자면... 블록체인을 전공한 사람으로서 마음 아픈 것 중 하나가 바로 "코인 == 사기 == 스캠" 으로 인식되어 있는 현실이다. 참 개탄스럽다.
코인으로 사기 치는 사람 자체를 내가 통제할 수는 없어도, 적어도 그 코인이 사기인지 아닌지 유저(매수자)가 스스로 판단할 수 있다면 사기가 줄어들지 않을까? 하는 게 서버맨의 생각이다.
연예인이나 인플루언서들이 코인 사기에 연루되는 사건이 많은데, 대표적으로 위X스 코인 사건을 한 번쯤 들어봤을 것이다. 당시 MEXC에 상장되었던 위X스 코인은 예나 지금이나 같은 컨트랙트로 이더리움에 배포되어 있고, 지금도 CMC에서 컨트랙트를 찾아서 이더스캔에서 조회가 가능하다. 심지어 그 사건이 발생했을 때도 이미 컨트랙트 Verification(검증)이 된 상태라 누구나 코인 내부 코드 전체를 볼 수 있었다. (Etherscan 컨트랙트 링크) 지금은 솔리디티 코드를 볼 줄 모른다 해도, 그냥 전체 코드를 복사해서 ChatGPT 같은 LLM에 넣고 물어보면 다 분석해 준다.
🚨 ERC-20 토큰 분석 시 반드시 체크해야 할 3대 위험 요소
강제 락업 (Lock-up) 기능이 독소 조항으로 숨어있는가?
특정 계정 동결 (Freezable) 권한이 관리자에게 있는가?
전체 거래 일시 중지 (Pausable) 스위치가 존재하는가?
이 위X스 코인은 저 3개가 다 들어있었다.
🔷 1. ERC-20 - 토큰 세계의 국룰 (Fungible Token)
FT의 대표 ERC20
ERC-20은 대체 가능 토큰 (Fungible Token)의 표준이다. "대체 가능"이라는 게 무슨 소리냐면, 내가 가진 1 USDT랑 니가 가진 1 USDT가 완전히 동일해서 서로 바꿔 써도 아무 차이가 없다는 뜻이다. 우리가 주머니에 넣고 다니는 지폐랑 똑같은 개념이다.
이 표준이 정의하는 건 사실 별 거 없다. 스마트 컨트랙트가 아래의 6개 함수 + 2개 이벤트만 구현하면 *"나 ERC-20 자격증 땄어!"* 라고 선언할 수 있다.
// 필수 함수 6개
function totalSupply() view returns (uint256)
function balanceOf(address account) view returns (uint256)
function transfer(address to, uint256 amount) returns (bool)
function allowance(address owner, address spender) view returns (uint256)
function approve(address spender, uint256 amount) returns (bool)
function transferFrom(address from, address to, uint256 amount) returns (bool)
// 필수 이벤트 2개
event Transfer(address indexed from, address indexed to, uint256 value)
event Approval(address indexed owner, address indexed spender, uint256 value)
이게 왜 '국룰'이 되었을까? 너무 단순해서 개발자가 30분만 공부해도 구현할 수 있고, 지갑 / 거래소 / 디파이(DeFi) 프로토콜이 이 인터페이스 규격 하나만 보고 *"아, 이건 잔고가 있고 전송이 되는 토큰이구나!"* 하고 100% 신뢰하고 곧바로 시스템에 붙일 수 있기 때문이다.
❓ 초보자들이 가장 많이 헷갈려하는 포인트! "왜 굳이 그냥 transfer 말고 approve랑 transferFrom을 따로 뒀을까?"
유니스왑 같은 디파이 프로토콜에게 "내 토큰 100개까지는 네가 알아서 꺼내가도 돼"라고 미리 권한을 위임(approve)해놓고, 그 프로토콜이 필요한 시점에 transferFrom으로 가져가는 구조가 필요하기 때문이다. 스왑 한 번 할 때 approve 서명 한 번, swap 서명 한 번... 총 두 번 서명해야 하는 그 짜증 나는 UX가 바로 여기서 탄생한 것이다! 😅
🖼️ 2. ERC-721 - "이 세상에 하나뿐인" NFT의 표준 (Non-Fungible Token)
NFT
ERC-20이 지폐라면, ERC-721은 부동산 등기부등본이다. 바로 대체 불가능 토큰 (Non-Fungible Token), 우리가 흔히 아는 NFT다! 핵심 차이는 딱 하나다.
ERC-20은 잔고(balance)라는 숫자 하나로 관리된다.
ERC-721은 각 토큰마다 고유한 tokenId가 붙어서 개별로 관리된다.
내가 가진 1번 토큰과 니가 가진 2번 토큰은, 비록 같은 컨트랙트에서 나왔더라도 서로 완전히 다른 개체다.
function ownerOf(uint256 tokenId) view returns (address)
function safeTransferFrom(address from, address to, uint256 tokenId)
function approve(address to, uint256 tokenId)
function tokenURI(uint256 tokenId) view returns (string)
여기서 tokenURI가 아주 흥미로운 부분이다.
저기에 실제 이미지 파일이나 데이터가 통째로 들어가는 게 아니다! 대부분 저 URI는 IPFS 링크나 일반 웹 서버 URL 하나일 뿐이라, 실제 그림 파일은 체인 밖(Off-chain)에 저장되어 있는 경우가 대부분이다. (보통은 탈중앙화 저장소인 IPFS에 올리지만, 요새는 그냥 아무 데나(?) 올리고 메타데이터 주소만 적기도 한다.)
그래서 *"NFT 샀는데 서버 닫히면 내 그림 어떻게 됨?"* 이라는 밈이 괜히 나온 게 아니다! 🖼️💀 (이미지까지 블록체인에 전부 박아넣는 Fully On-chain NFT도 존재하긴 하지만, 가스비 폭탄 때문에 극소수에 불과하다.)
🕹️ P2E & M2E 시절의 추억 (무돌삼 & 스테픈)
쌀먹 그립다..
이 시절에는 P2E (Play to Earn)가 엄청난 유행이었다. 게임만 해도 토큰이 쏟아지고, 그걸 팔아서 현금화하던 시절! 당시 미르4 같은 게임은 제3세계 국가에서는 *"하루 노가다 일하는 것보다 이 게임해서 토큰 버는 게 돈을 훨씬 더 많이 번다"* 고 할 정도였다. 우리나라에서도 '무한돌파삼국지(무돌삼)'라는 게임이 나와서, 출석 체크 + 하루 5분 플레이만 해도 약 7~8천 원을 즉시 현금화할 수 있었다. 당시 학생이었던 나에게 7천 원은 학교 가는 지하철 왕복비 + 편의점 끼니 1개를 충족해 주는 엄청난 단비였다! 🍱 하지만 그 기쁨도 잠시... 출시 3개월 만에 무돌삼은 당국의 철퇴를 맞고 섭종되었고, 이후 쌀먹이 불가능한 '무한돌파삼국지 리버스'로 재탄생했지만 이미 국내에서 P2E는 법적으로 불법 판정을 받게 되었다.
운동해서(?) 돈을 버시오
그러다가 약간 변형되어 나온 것이 M2E (Move to Earn), 바로 운동하면서 돈을 번다는 스테픈(StepN)이었다. 쌀먹에 굶주린(?) 사람이 어찌나 많았는지, 스테픈을 하려면 무조건 초대권이 필요했다. 어렵사리 가입해도 초기 신발 NFT 구입비가 대충 3 SOL(솔라나) 정도 들었는데, 당시 1 SOL이 약 21만 원이었으니 이것저것 다해서 대략 초기 비용만 무려 80만 원 수준이었다! 💸 *"이 앱으로 회사를 그만뒀네"* 하는 소문까지 무성했지만... 결국 초반 유저를 제외하고 막차 탄 대다수의 사람들은 스테픈의 폰지 구조적 한계와 GST 토큰 인플레이션, 패닉셀 폭탄을 맞고 본전도 못 건진 채 쓰라린 결말을 맞이했다. 😭
🎨 2022년 NFT 미친 호황기와 광란의 현장
지루한 원숭이 요트 클럽
2022년은 코로나 시국과 제로 금리, 그리고 코인과 NFT의 말도 안 되는 광란의 호황기였다. 오픈씨(OpenSea) 같은 NFT 마켓플레이스는 트래픽으로 사이트가 터지거나 해킹당하는 일이 비일비재했고, 대 NFT의 시대를 연 전설적인 프로젝트들이 쏟아져 나왔다.
👾 CryptoPunks (크립토펑크): 24x24 픽셀 아트로 제작된 1만 개의 고유한 캐릭터 NFT로, 이더리움 NFT 프로젝트의 조상님이자 현대 PFP(프로필 사진) NFT 광풍을 일으킨 원조 표준!
🖼️ Beeple - Everydays: The First 5000 Days: 디지털 아티스트 비플이 13년간 매일 그린 5,000개의 작품을 하나로 합친 모자이크 NFT. 크리스티 경매에서 무려 약 6,930만 달러 (당시 환율 약 780억 원)에 낙찰되며 전통 미술계를 경악시켰던 역사적 사건!
🐵 BAYC (Bored Ape Yacht Club): 지루한 원숭이 NFT 보유자만 들어갈 수 있는 디스코드 프라이빗 커뮤니티/클럽 라운지를 운영하여, 너도나도 멤버십 자격을 얻기 위해 미친 듯이 비싼 가격에 사모으던 최고액 PFP NFT!
해외 유명 래퍼나 연예인들도 투자 목적으로 샀다가, 코로나가 끝나고 제로 금리 시대가 막을 내리면서 -99%의 떡락을 온몸으로 감당해야 했다... 📉 (당시엔 이두희 씨를 포함해 온갖 NFT 사업이 쏟아져 나왔다.)
🎓 서버맨의 TMI: 참고로 서버맨은 이 NFT를 활용해서 무선 네트워크의 WPA2 보안을 강화하는 주제로 졸업 논문을 작성했었다 👨💻
🎮 3. ERC-1155 - 20이랑 721을 합친 멀티 토큰 (Multi-Token Standard)
ERC20 + ERC721 = ERC1155
ERC-1155는 이름 그대로 하나의 컨트랙트 안에서 대체 가능 토큰(ERC-20)과 대체 불가능 토큰(ERC-721)을 동시에 관리할 수 있도록 만든 멀티 토큰 표준이다. 원래 게임 회사인 엔진(Enjin) 코인 측에서 제안한 규격인데, 게임 인벤토리를 생각하면 이해가 제일 쉽다.
골드 (ERC-20): 무한정 찍어낼 수 있는 대체 가능 재화
전설의 검 1자루 (ERC-721): 세상에 딱 하나뿐인 고유 아이템
체력 포션 100개 (Semi-Fungible): 개수는 여러 개지만 같은 종류로 묶이는 아이템
이걸 원래대로라면 ERC-20 컨트랙트, ERC-721 컨트랙트 따로따로 배포해야 했지만, ERC-1155는 컨트랙트 딱 1개로 전부 처리한다!
// 배치 전송 (Batch Transfer) 핵심 함수
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata amounts,
bytes calldata data
)
가장 뛰어난 실용적 장점은 바로 배치 전송 (Batch Transfer)이다. 유저에게 아이템 10종류를 한꺼번에 지급해야 한다고 해보자. ERC-721이었다면 트랜잭션을 10번 날려야 해서 가스비가 10배로 깨지지만, ERC-1155는 위 함수 딱 1번으로 10종류를 묶어서 샷! 날릴 수 있다. 게임처럼 아이템 이동이 빈번한 서비스에서는 가스비를 아끼기 위한 필수 표준이다.
⛽ 4. 토큰은 있는데 왜 전송을 못 하지? (가스비 잔혹사)
광물이 부족합니다
자, 여기서부터가 이번 포스팅에서 가장 하고 싶었던 핵심 이야기다! 바로 ERC-20 토큰 구조의 치명적인 약점 이야기다. 서버맨도 예전에 시바이누(SHIB) 토큰을 개인지갑에 모아뒀다가, 거래소로 되팔려고 전송하려는데 보내지지 않아서 순간 엄청 당황했던 적이 있다. 알고 보니 수수료로 낼 ETH(이더리움)가 지갑에 없었던 것이었다! 😂 (거래소에서도 외부 전송은 보통 수수료를 시바이누 토큰 자체에서 차감하니까 순간 착각했었는데, 개인 지갑 온체인 전송은 수수료를 반드시 ETH로 내야 한다. 당연한건데 거래소 때문에 헷갈렸엇다. 이 사건 이후로 EVM 계열 토큰은 개인 지갑에 잘 보관 안 한다...)
😱 코린이 멘붕 유형 1위! 누가 나한테 100 USDT를 보내줘서 지갑 잔고에 100 USDT가 찍혀있다. 기쁜 마음으로 나의 거래소 지갑에 보낸 뒤 transfer 버튼을 누르면? 가스비로 낼 ETH가 0.00001개도 없다면 트랜잭션 자체가 아예 안 나간다! 😤
왜 이럴까? transfer 함수를 호출한다는 것 자체가 결국 이더리움 블록체인 네트워크에 트랜잭션을 제출하는 행위이고, 이더리움의 모든 트랜잭션은 예외 없이 가스비를 네이티브 코인(ETH)으로 내야 한다는 철칙 때문이다.
토큰 잔고(USDT)와 가스비 지불 자격(ETH 잔고)이 분리되어 있다 보니, USDT가 아무리 몇억 원어치 쌓여있어도 ETH가 없으면 단 1원도 못 옮기는 기이한 상황이 발생한다.
🛠️ 그럼 개발자들은 이걸 어떻게 해결했을까?
이 문제점을 해결하기 위해 두 가지 주요 접근 방식이 등장했다.
1️⃣ EIP-3009 (Transfer With Authorization)
USDC 토큰 등에서 실제로 사용하는 아이디어다. 토큰 보유자는 "나 이 사람한테 이만큼 보낼게" 라는 서명(EIP-712 Typed Signature)을 오프체인에서 서명만 하고, 그 서명을 전달받은 제3자(릴레이어)가 대리인으로서 트랜잭션을 만들고 가스비를 대신 내며 제출해 준다. 사용자는 ETH가 한 푼도 없어도 서명 1번으로 토큰을 보낼 수 있다! (참고로 내가 저번에 분석했던 x402 결제 프로토콜도 이 EIP-3009/EIP-712 구조를 핵심적으로 활용한다.)
2️⃣ ERC-4337 (Account Abstraction - 계정 추상화)
이건 훨씬 더 거대한 패러다임 전환이다! EIP-3009가 특정 토큰 전송 기능 1개만을 위한 패치라면, ERC-4337은 지갑 자체를 스마트 컨트랙트(스마트 계정)로 만들어서 트랜잭션 실행 구조 전체를 혁신한다. 페이마스터(Paymaster)라는 컨트랙트가 "유저의 가스비는 내가 대신 ETH로 내주고, 대가로 유저의 USDT 잔고에서 수수료를 차감하겠다" 는 것을 프로토콜 레벨에서 지원한다. 덕분에 유저는 ETH 잔고를 전혀 신경 쓰지 않고 USDT만 가지고 모든 앱을 이용할 수 있게 된다!
💡 요약하자면! EIP-3009는 "특정 토큰의 전송 기능 하나를 가스리스(Gasless)로 만드는 원포인트 패치"이고, ERC-4337은 "지갑 체계 자체를 개조해서 모든 블록체인 상호작용을 가스리스로 만드는 매크로 인프라"다.
요즘 웹3 지갑들이"가스비 필요 없이 바로 시작하는 온보딩!"이라고 홍보하는 건 99% 이 두 표준 위에서 작동하는 것이다!
🏁 마무리 & 다음 편 예고
오늘 내용을 핵심만 빠르게 요약해 보자!
코인 vs 토큰: 코인은 국가 화폐(ETH), 토큰은 스마트 컨트랙트로 발행한 상품권(ERC)!
ERC-20: 지폐처럼 똑같이 대체 가능한 표준 토큰 (Fungible)
ERC-721: 등기부등본처럼 고유한 NFT 표준 (Non-Fungible)
ERC-1155: 게임 아이템처럼 20과 721을 짬뽕하여 가스비를 획기적으로 줄인 멀티 토큰
가스비 문제의 진화: 토큰만 있고 ETH가 없어서 전송 못 하던 시절을 지나, EIP-3009와 ERC-4337(계정 추상화)로 '가스비 없는 Web3 UX' 시대가 열리고 있다!
다음 포스팅에서는 토큰 레벨(ERC)을 넘어, 이더리움 프로토콜 자체를 개조하고 발전시키는 체인 레벨의 제안서! EIP-1559가 왜 수수료를 소각시키는지, 체인이 어떻게 업그레이드되는지 EIP (Ethereum Improvement Proposal)에 대해 제대로 파헤쳐보겠다.