ERC-5489 NFT 하이퍼링크 확장 (NFT Hyperlink Extension)

Final · NFT·멀티토큰 · 2022-08-16 작성

NFT에 하이퍼링크를 붙일 수 있게 하는 확장 표준입니다. NFT 소유자가 링크 자리(슬롯)를 특정 주소에 맡기고 그 주소가 링크 주소(URI)를 관리하며 소유자는 언제든 권한을 거둘 수 있습니다.

왜 필요한가

NFT는 Web3의 주요 매체가 될 잠재력이 있지만 지금은 일반 사용자가 NFT에 풍부한 텍스트나 영상, 이미지 같은 콘텐츠를 덧붙일 방법이 없고 덧붙인다 해도 이를 화면에 보여 줄 표준화된 방식이 없습니다. 많은 산업이 이런 풍부한 콘텐츠를 붙이는 기능을 기다리고 있는데, 붙이고 고치고 보여 주는 방식이 제각각이면 지갑이나 앱마다 따로 구현해야 해서 호환이 어렵습니다. 이 표준은 하이퍼링크를 그 매개로 삼아 NFT에 링크를 붙이고 수정하고 표시하는 방법을 하나의 규칙으로 정리합니다. 소유자가 링크 자리를 다른 주소에 맡기는 권한 위임과 회수까지 포함해 고도로 맞춤화된 정보를 NFT에 다는 과정을 표준화합니다.

구현해야 하는 것

심층 설명

슬롯은 주소를 키로 하는 맵 항목

슬롯은 slotManagerAddr 주소를 키로 하는 맵의 항목이고 값은 URI입니다. 슬롯의 키로 주소를 쓰는 것은 모든 사용 사례를 다룰 유연성을 확보하기 위한 선택이며 값으로 URI를 쓰는 것도 다양한 사용 사례에 대응하려는 것입니다. 승인 대상 주소는 외부 소유 계정(EOA)과 컨트랙트 주소 모두 가능합니다. authorizeSlotTo, revokeAuthorization, revokeAllAuthorizations, setSlotUri는 public 또는 external로, getSlotUri는 pure 또는 view로 구현할 수 있습니다(MAY).

권한 검사 규칙

authorizeSlotTo, revokeAuthorization, revokeAllAuthorizations는 메시지 발신자가 해당 토큰의 소유자일 때, 그리고 그때만 인증됩니다. 반면 setSlotUri는 authorizeSlotTo로 승인받은 주소만 호출할 수 있어 호출자 자신의 주소가 가리키는 슬롯만 조작합니다. 즉 소유자는 누가 어느 슬롯을 쓸지 정하고 승인받은 주소는 그 슬롯의 내용만 바꿀 수 있습니다.

이벤트 발생 요건

슬롯이 주소에 승인되면 SlotAuthorizationCreated를, 승인이 회수되면 SlotAuthorizationRevoked를, 슬롯의 URI가 바뀌면 SlotUriUpdated를 반드시(MUST) 발생시켜야 합니다. revokeAllAuthorizations는 슬롯마다 SlotAuthorizationRevoked를 발생시킵니다. 승인 회수 이벤트는 해당 디앱이 진행 중인 보상이나 권리를 중단 처리하는 신호로 쓸 수 있습니다.

메타데이터 JSON 스키마

getSlotUri가 돌려주는 URI는 RFC 3986을 따르고 "EIP5489 Metadata JSON schema"를 따르는 JSON 파일을 가리켜야 합니다(MUST). 스키마의 제목은 "AD Metadata"이고 속성은 세 가지입니다. icon은 슬롯 점유자를 나타내는 image/* 타입 리소스의 URI로, 너비 48~1080픽셀, 가로세로 비율 1.91:1에서 4:5 사이를 권하며 대상 리소스의 섬네일로 쓰도록 제안합니다. description은 대상 리소스를 짧게 소개하는 문단입니다. target은 대상 리소스를 가리키는 URI로, 더 많은 리디렉션을 지원하도록 30X 상태 코드를 따르기를 제안하며 MIME 타입과 내용은 사용자 설정에 따릅니다.

인터페이스 식별자

supportInterface 메서드는 0x8f65987b로 호출될 때 반드시(MUST) true를 돌려줘야 합니다. 이 표준은 EIP-165와 EIP-721을 전제로 하는(requires) 확장입니다.

EIP-721과의 호환성

이 표준은 확장 함수 집합을 더하는 방식이어서 EIP-721과 완전히 호환될 수 있습니다. 또한 새로 도입된 함수들이 EIP-721의 기존 함수들과 비슷한 점이 많아 개발자가 빠르게 채택하기 쉽습니다. 참조 구현은 ERC5489.sol로 제공됩니다. 이 제안의 상태는 Final로 확정되었습니다.

ERC 원문 · ← ERCs