ERC-721은 계약과 tokenId의 조합으로 NFT 하나하나를 식별하고, ownerOf가 소유자 한 명을 돌려줍니다. ERC-1155는 계약 하나에서 여러 id를 관리하며 주소마다 id별 수량을 기록하므로, 대체 가능한 항목과 대체 불가능한 항목을 함께 표현할 수 있습니다. 두 표준 모두 안전 전송 때 수신자를 확인하는 장치(수신 훅)와 운영자(operator) 승인을 제공하지만 함수, 이벤트, 일괄 처리 방식은 서로 다릅니다.
ERC-721은 tokenId마다 소유자 한 명을 기록합니다
ERC-721 계약에서 NFT는 계약 주소와 tokenId의 조합으로 구분됩니다. ownerOf(tokenId)는 현재 소유자를 돌려주고, balanceOf(owner)는 그 주소가 해당 계약에서 보유한 NFT 개수를 돌려줍니다. 같은 tokenId를 두 주소가 0.5개씩 나눠 소유하는 장부는 표준이 아닙니다.
tokenId 숫자 자체가 이미지나 희소성을 뜻하지는 않습니다. 선택 기능인 tokenURI가 메타데이터 위치를 가리킬 수 있지만, 이미지와 속성의 저장 방식, 변경 가능성, 서버가 계속 살아 있을지는 별개 문제입니다. 소유권 장부와 콘텐츠 보존을 나눠 평가해야 합니다.
| 항목 | ERC-721 | ERC-1155 |
|---|---|---|
| 잔액 조회 | balanceOf(owner) 개수 | balanceOf(account,id) 수량 |
| 개별 식별 | 계약+tokenId | 계약+id, 수량 포함 |
| 일괄 전송 | 기본 표준에 없음 | safeBatchTransferFrom |
| 대표 이벤트 | Transfer | TransferSingle·TransferBatch |

그림은 이 주제의 공통 개념을 단순화한 설명입니다. 아래 항목에서 이 글의 구체적인 조건과 예외를 함께 읽어보세요.
- ERC-721은 tokenId마다 소유자 한 명을 기록합니다
ERC-721 계약에서 NFT는 계약 주소와 tokenId의 조합으로 구분됩니다.
- ERC-1155는 계약 하나에 여러 id와 수량을 둡니다
ERC-1155는 다중 토큰 표준(Multi Token Standard)으로, 계약 하나에서 여러 토큰 id를 관리합니다.
- 안전 전송은 계약 수신자의 응답을 확인합니다
ERC-721의 safeTransferFrom은 받는 쪽이 계약이면 onERC721Received를 호출하고, 정해진 값이 돌아오지 않으면 거래를 되돌립니다.
설명을 위한 개념도 · 실제 가격·거래 내역·통계가 아닙니다.
ERC-1155는 계약 하나에 여러 id와 수량을 둡니다
ERC-1155는 다중 토큰 표준(Multi Token Standard)으로, 계약 하나에서 여러 토큰 id를 관리합니다. 특정 id의 발행량이 1이면 대체 불가능한 항목처럼, 여러 개면 게임 아이템이나 이용권 같은 수량형 자산으로 표현할 수 있습니다. 주소별 잔액은 소유자와 id 두 축으로 조회합니다.
여러 id와 수량 배열을 safeBatchTransferFrom으로 한 번에 보내고, balanceOfBatch로 묶어 조회할 수 있습니다. 아이템을 대량으로 옮길 때 호출 수를 줄일 수 있지만 배열 길이와 각 수량을 모두 검증해야 합니다. 일괄 거래 하나에 다양한 가치와 권한이 담길 수 있습니다.
표준 이름보다 계약 주소·id·수량이라는 세 값을 함께 읽어야 합니다.
JOBCOIN 해설
안전 전송은 계약 수신자의 응답을 확인합니다
ERC-721의 safeTransferFrom은 받는 쪽이 계약이면 onERC721Received를 호출하고, 정해진 값이 돌아오지 않으면 거래를 되돌립니다. 일반 transferFrom에는 이 수신 확인이 없어서 NFT를 다룰 줄 모르는 계약에 토큰이 갇힐 수 있습니다. 안전 전송이라고 해도 받는 계약이 이후 회계까지 제대로 처리한다는 경제적 보증은 아닙니다.
ERC-1155의 safeTransferFrom과 safeBatchTransferFrom도 받는 계약의 onERC1155Received 또는 onERC1155BatchReceived 응답을 확인합니다. 개인 주소로 보내는지 계약으로 보내는지, 그 계약이 표준 수신 인터페이스를 구현했는지 살핍니다. 브리지나 마켓 계약은 공식 입금 함수를 쓰라고 요구할 수 있습니다.
- 계약 주소와 tokenId 또는 id를 함께 확인합니다.
- ERC-1155는 수량 배열의 순서와 값을 모두 읽습니다.
- 받는 쪽이 계약이면 표준 수신 훅을 구현했는지 확인합니다.
- 메타데이터 주소와 소유권 장부를 따로 검증합니다.
개별 승인과 전체 운영자 승인을 구분합니다
ERC-721의 approve는 특정 tokenId를 움직일 수 있는 주소를 지정하며, 전송이 일어나면 그 개별 승인은 초기화됩니다. setApprovalForAll은 운영자가 해당 ERC-721 계약 안에 있는 소유자의 모든 NFT를 관리하도록 허용합니다. 컬렉션에서 하나만 거래하려고 서명했더라도 실제로는 전체 운영자 권한일 수 있습니다.
ERC-1155는 표준적으로 setApprovalForAll을 써서 운영자에게 소유자의 모든 id를 옮길 권한을 줍니다. 특정 id 한 개의 전송 승인이라고 가정하면 안 됩니다. 승인 화면에서 운영자 주소, 토큰 계약, 전체 승인 여부(참·거짓 값)를 확인하고, 다 쓴 뒤 해제할지 정합니다.
이벤트 형식이 인덱싱과 공급량 해석을 바꿉니다
ERC-721은 Transfer 이벤트의 tokenId가 색인(indexed) 항목이라 개별 소유권 이동을 추적하기 쉽습니다. 발행(민팅)은 보통 보낸 주소가 제로 주소인 이동으로, 소각은 받는 주소가 제로 주소인 이동으로 나타납니다. 생성자 단계에서는 예외가 있을 수 있으니, 이벤트만으로 공급량을 재구성할 때는 표준이 밝혀 둔 주의 사항을 확인합니다.
ERC-1155는 TransferSingle과 TransferBatch에 operator, from, to, id, value를 기록합니다. 제로 주소 규칙으로 발행량과 소각량을 계산할 수 있지만 일괄 배열을 정확히 펼쳐서 읽어야 합니다. URI 이벤트는 메타데이터 위치가 바뀌었음을 알릴 수 있을 뿐, 모든 id의 콘텐츠가 고정돼 있다고 보증하지 않습니다.
마켓 화면보다 인터페이스와 실제 호출을 확인합니다
같은 이미지가 여러 플랫폼에 보여도 계약 주소가 다르면 다른 토큰입니다. ERC-165의 supportsInterface로 표준 지원 여부를 조회하고, 검증된 소스에서 구현을 확인합니다. 프록시 계약이라면 현재 구현 계약과 업그레이드 권한도 살핍니다.
서명 전에는 safeTransferFrom인지 setApprovalForAll인지, 단일 id인지 일괄인지 확인합니다. 거래 뒤에는 표준 이벤트와 잔액·ownerOf 변화를 대조합니다. 체인 밖에서 서명한 주문은 당장 전송되지 않더라도 나중에 마켓 계약이 실행할 수 있으므로 논스, 만료, 취소 상태를 따로 관리합니다.
자주 묻는 질문
ERC-1155는 모두 대량 발행 NFT인가요?
아닙니다. id별 수량을 1로 두면 대체 불가능한 항목처럼 쓸 수 있고, 수량이 여럿이면 반대체 자산도 표현할 수 있습니다.
safeTransferFrom이면 자산이 절대 잠기지 않나요?
표준 수신 응답을 확인해 단순한 잘못 보내기를 줄여 주지만, 받는 계약의 업무 로직과 인출 가능 여부까지 보증하지는 않습니다.
ApprovalForAll은 NFT 한 개 승인인가요?
아닙니다. 지정한 운영자가 해당 토큰 계약에서 소유자의 여러 자산을 관리할 수 있는 넓은 권한입니다.
더 깊이 읽기
본문에서 다룬 개념과 확인 절차를 다음 글에서 이어서 살펴보세요.



