ERC-7409 공개 NFT 이모지 반응 저장소 (Public Non-Fungible Tokens Emote Repository)

Final · NFT·멀티토큰 · 2023-07-26 작성

누구나 어떤 NFT에든 유니코드 이모지로 반응을 남기고 취소할 수 있게 하는 공용 저장소 컨트랙트 표준입니다. 반응 기록이 온체인에 남아 모두가 같은 주소에서 조회할 수 있습니다.

왜 필요한가

NFT는 이더리움에서 널리 쓰이는 토큰이지만, 특정 토큰이 지금 얼마나 사랑받는지 보여 주는 표준화된 방법이 없습니다. 기존의 반응·좋아요 기능은 특정 서비스에 묶여 있거나 블록체인 밖(오프체인)에서 처리되어 조작될 수 있고 신뢰하기 어렵습니다. 가치 평가도 과거 판매 가격, 최저 호가, 마켓플레이스가 제공하는 희소성 자료에 의존할 뿐, 실시간으로 선호도를 가늠할 지표가 없습니다. 앞서 나온 ERC-6381이 같은 기능을 제안했지만 이모지를 4바이트(bytes4) 값으로 표현해 변형 플래그나 피부색이 붙은 긴 이모지를 담을 수 없는 호환성 문제가 있었습니다. 이 표준은 이모지를 문자열(string)로 받도록 고쳐 그 문제를 해결하고 모든 네트워크에서 같은 주소로 접근할 수 있는 공용 저장소를 정의합니다.

심층 설명

ERC-6381을 대체하는 string 기반 설계

이 표준은 ERC-6381을 대체합니다(supersede). ERC-6381은 모든 이모지가 4바이트라는 가정 아래 bytes4로 이모지를 표현했지만, 실제 이모지는 보통 8바이트까지 쓰고 피부색이 붙은 개인화 이모지는 그보다 훨씬 깁니다. 그래서 이 표준은 이모지를 string으로 받아 유니코드 표준에 앞으로 추가될 이모지와도 호환되게 했습니다. 이 수정을 빼면 기능은 ERC-6381과 동일합니다. 유니코드에 없는 값도 string으로 넣을 수 있어 커스텀 이모트가 가능하지만 그 경우 어떤 이미지를 그릴지 아는 인터페이스에서만 표시된다는 한계가 있습니다.

확장이 아닌 공용 저장소, 그리고 고정 주소

처음에는 ERC-721 토큰에 붙이는 확장(extension)으로 설계했지만 공용재(common-good) 저장소로 만들면 표준 이전에 발행된 기존 NFT에도 반응할 수 있어 저장소 방식을 택했습니다. 저장소 컨트랙트는 모든 네트워크에서 같은 주소에 배포되도록 결정적 주소를 계산했으며 그 주소는 0x3110735F0b8e71455bAe1356a33e428843bCb9A1입니다. 앞부분 0x3110735는 EMOTES를 형상화한 것입니다. 이 인터페이스의 ERC-165 식별자는 0x1b3327ab입니다.

emote와 bulkEmote의 동작 규칙

emote는 collection, tokenId, emoji, state를 받아 반응을 남기거나(true) 취소합니다(false). 이미 같은 상태를 다시 설정하려 하면 아무 일도 하지 않으며 Emoted 이벤트는 상태가 실제로 바뀔 때만 발생해야 합니다(MUST). bulkEmote는 여러 건을 한 번에 처리합니다. collections, tokenIds, emojis, states 배열의 길이가 서로 다르면 되돌려야 합니다(MUST revert). 단건과 다건 작업을 모두 둔 것은 네트워크 가스 비용과 토큰 수에 따라 사용자가 더 저렴한 쪽을 고를 수 있게 하기 위해서입니다. 한 사용자가 한 토큰에 같은 이모지로 남길 수 있는 활성 반응은 하나뿐입니다.

프리사인 메시지 형식과 DOMAIN_SEPARATOR

대리 제출용 서명 메시지는 keccak256(abi.encode(DOMAIN_SEPARATOR, collection, tokenId, emoji, state, deadline))로 만듭니다. DOMAIN_SEPARATOR는 keccak256(abi.encode("ERC-7409: Public Non-Fungible Token Emote Repository", "1", block.chainid, address(this)))로 생성되어 체인 ID가 다르면 값도 달라집니다. 덕분에 한 체인에서 만든 서명을 다른 체인의 저장소에 다시 제출하는 재사용이 막힙니다. 위임자 제도를 두는 방안도 검토했지만 복잡도가 커져 ECDSA 서명으로 본인 동의를 확인하는 방식을 택했습니다.

체인 ID 파라미터를 넣지 않은 이유

반응할 때 체인 ID를 함께 받아 다른 체인의 토큰에 반응하게 하자는 제안이 있었지만 채택하지 않았습니다. 드물게 쓰일 파라미터가 거래 비용을 늘리고 마켓플레이스와 지갑이 반응을 모으려면 저장소가 배포된 모든 체인을 조회해야 하는 부담이 생기기 때문입니다. 저장소는 반응 대상 토큰이 실제로 존재하는지 검증하지 않으므로, 아직 없는 토큰이나 존재하지 않는 토큰에도 이론상 반응할 수 있습니다. 컬렉션 제작자가 원하면 다른 체인에서 같은 컬렉션 주소로 반응을 기록하도록 안내할 수 있고 같은 주소에 다른 컬렉션이 있을 가능성은 매우 낮다고 봅니다.

활용 방향: 상호작용, 피드백 진화, 가치 평가

원문은 세 가지 활용 영역을 제시합니다. 첫째, 반응을 쌓는 상호작용 자체가 토큰의 고유성이나 가치를 높일 수 있습니다. 둘째, 반응이 온체인에 기록되므로 조작 우려 없이 집계할 수 있고 반응 수가 일정 기준을 넘으면 토큰이 진화하도록 설계해 컬렉션과의 상호작용을 유도할 수 있습니다. 셋째, 과거 판매가와 최저가, 희소성에 의존하던 가치 평가에 실시간 선호도라는 참고 지표를 더합니다. 이 표준은 Final 상태로 확정되었으며 ERC-721과 기존 ERC-721 인프라·도구와 완전히 호환됩니다.

쓸 때 주의할 점

ERC 원문 · ← ERCs