Tech/EIPs/#721
ERC 721카테고리 · ERC유형 · 표준 트랙상태 · 최종

Non-Fungible Token Standard

쉬운 설명

NFT(대체 불가능한 토큰)의 표준이에요. 각 토큰이 고유한 ID를 가지며, 소유권을 확인하고 이전하는 방법을 정의해요. CryptoPunks, Bored Apes 등이 이 표준으로 만들어졌어요.

ERC-721은 이더리움 위에서 대체 불가능한 토큰(NFT, Non-Fungible Token)을 발행하기 위한 표준 인터페이스입니다. 각 토큰은 고유한 tokenId를 가지며 나누거나 교환할 수 없습니다. CryptoPunks, Bored Ape Yacht Club, ENS 도메인 이름, 게임 아이템 등 대부분의 NFT가 이 표준으로 구현되어 있습니다.

핵심 개념: 고유한 tokenId

ERC-20 토큰은 모두 동일하여(대체 가능) 1 USDC는 어떤 1 USDC와도 교환 가능합니다. 반면 ERC-721의 각 토큰은 uint256 tokenId로 구별됩니다. 같은 컨트랙트 내에서 tokenId 1번과 2번은 완전히 다른 자산입니다. 이 고유성이 디지털 예술품, 수집품, 게임 아이템 등의 소유권을 표현하는 데 적합하게 만듭니다.

필수 함수

① balanceOf(owner) — 특정 주소가 보유한 NFT 개수를 반환합니다. ② ownerOf(tokenId) — 특정 tokenId의 소유자 주소를 반환합니다. ③ transferFrom(from, to, tokenId) — NFT를 전송합니다(승인 필요). ④ safeTransferFrom(from, to, tokenId) — 수신 컨트랙트가 ERC-721을 처리할 수 있는지 확인 후 전송합니다. ⑤ approve(to, tokenId) — 단일 토큰 전송 권한 위임. ⑥ setApprovalForAll(operator, approved) — 모든 토큰 전송 권한 일괄 위임.

Transfer와 Approval 이벤트

Transfer(address indexed from, address indexed to, uint256 indexed tokenId) — 모든 NFT 이동 시 emit. 발행 시 from = 0x0, 소각 시 to = 0x0. Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) — 단일 토큰 승인 시 emit. ApprovalForAll(address indexed owner, address indexed operator, bool approved) — 전체 승인/취소 시 emit. 이 이벤트들로 NFT 소유권 이력을 추적합니다.

tokenURI와 메타데이터

ERC-721 Metadata 확장은 tokenURI(uint256 tokenId) → string 함수를 추가합니다. 이 URI는 보통 IPFS나 HTTP URL을 가리키며, 표준 JSON 메타데이터 { name, description, image, attributes: [{trait_type, value}...] }를 반환합니다. OpenSea, Blur 등의 마켓플레이스는 이 메타데이터를 파싱하여 NFT의 이미지와 속성을 표시합니다. 이미지는 보통 IPFS에 저장됩니다.

safeTransferFrom과 IERC721Receiver

safeTransferFrom은 수신 주소가 컨트랙트인 경우 onERC721Received(operator, from, tokenId, data) → bytes4 함수가 있는지 확인합니다. 이 함수가 없거나 올바른 selector(0x150b7a02)를 반환하지 않으면 전송이 revert됩니다. 이는 NFT가 처리할 수 없는 컨트랙트에 전송되어 영구적으로 잠기는 사고를 방지합니다. 일반 EOA 주소는 이 검사를 생략합니다.

공식 ERC 문서open_in_new