ERC-1155는 하나의 스마트 컨트랙트에서 대체 가능 토큰(Fungible Token)과 대체 불가능 토큰(Non-Fungible Token)을 동시에 관리할 수 있는 멀티 토큰 표준입니다. Enjin 팀이 제안했으며, 게임 아이템처럼 수백 가지 자산 유형을 단일 컨트랙트로 효율적으로 다루는 것이 목표입니다.
핵심 인터페이스: balanceOf와 balanceOfBatch
ERC-20은 balanceOf(account)로 단일 잔액을 조회하지만, ERC-1155는 balanceOf(account, id)로 특정 토큰 ID의 잔액을 조회합니다. 더 나아가 balanceOfBatch(accounts[], ids[])를 통해 여러 계정과 여러 ID의 잔액을 한 번의 호출로 가져올 수 있어 대규모 게임 인벤토리 조회 등에 매우 효율적입니다.
배치 전송: safeBatchTransferFrom
safeTransferFrom(from, to, id, amount, data) 외에 safeBatchTransferFrom(from, to, ids[], amounts[], data)를 지원합니다. 한 번의 트랜잭션으로 여러 종류의 토큰을 동시에 전송할 수 있어, ERC-20 + ERC-721을 별도로 호출하는 것 대비 가스비를 크게 절감합니다. 수신 컨트랙트는 onERC1155BatchReceived 훅을 구현해 안전하게 수신을 처리해야 합니다.
이벤트: TransferSingle과 TransferBatch
단일 전송은 TransferSingle(operator, from, to, id, value) 이벤트를, 배치 전송은 TransferBatch(operator, from, to, ids[], values[]) 이벤트를 발행합니다. 이를 통해 인덱서와 탐색기가 모든 토큰 이동을 정확히 추적할 수 있습니다. ApprovalForAll 이벤트로 운영자 승인 내역도 관리합니다.
ERC-20 + ERC-721 대비 가스 절감
ERC-20 토큰 10종과 ERC-721 컬렉션 5종을 별도 컨트랙트로 배포하면 15번의 배포 트랜잭션이 필요합니다. ERC-1155는 이를 단 하나의 컨트랙트로 처리합니다. 배치 전송 시 각 토큰마다 별도 트랜잭션을 보내지 않아도 되므로, 수십 개 아이템을 동시에 거래하는 게임·마켓플레이스 시나리오에서 가스비가 수십 배 차이날 수 있습니다.
메타데이터 URI와 활용 사례
uri(id) 함수로 각 토큰의 JSON 메타데이터 URI를 반환합니다. {id} 치환자를 지원해 단일 URI 템플릿으로 모든 토큰 ID의 메타데이터를 커버합니다. OpenSea, Enjin, 게임 아이템 마켓 등 다양한 NFT 플랫폼이 ERC-1155를 채택하고 있으며, 반대체 가능 토큰(Semi-Fungible Token, 예: 한정판 티켓)에도 활용됩니다.