ERC-8034 참조형 NFT 로열티 분배 (Referable NFT Royalties)

Final · NFT·멀티토큰 · 2025-10-02 작성

서로 참조 관계로 연결된 NFT(rNFT)가 팔릴 때, 로열티를 여러 수령인과 참조된 원작 NFT들에게까지 나눠 주는 방법을 정한 표준입니다.

왜 필요한가

ERC-5521은 NFT가 다른 NFT를 참조하는 관계를 방향성 비순환 그래프(DAG)로 기록하는 참조형 NFT(rNFT)를 도입했습니다. 예를 들어 2차 창작물 NFT가 원작 NFT를 참조하는 식입니다. 그런데 기존 로열티 표준인 ERC-2981은 이런 참조 구조를 전혀 고려하지 않고 한 단계에서 여러 수령인을 지정하는 것도 지원하지 않습니다. 그래서 창작자와 협업자가 함께 만든 작품이라도 로열티를 한 주소로만 보낼 수 있고 2차 창작물이 팔려도 참조된 원작 쪽으로 보상이 흘러갈 방법이 없었습니다. 이 표준은 한 작품에 여러 수령인을 두고 참조 그래프를 따라 정해진 깊이까지 로열티를 나눠 보내며 판매가 없이도 고정 비율을 조회할 수 있게 해 마켓플레이스와 사용자에게 투명한 보상 구조를 제공합니다.

구현해야 하는 것

심층 설명

두 가지 조회 함수: wei와 베이시스 포인트

getReferenceRoyaltyInfo는 두 가지로 오버로드됩니다. salePrice를 받는 버전은 판매가에서 계산한 wei 단위 금액을 돌려주며 로열티가 설정되지 않았거나 salePrice가 0이면 금액 0을 반환해야 합니다(MUST). salePrice가 없는 버전은 설정된 비율을 베이시스 포인트(100 = 1%) 그대로 돌려줘야 하며 판매가 계산 없이 고정 비율을 투명하게 조회하는 용도입니다. 두 버전 모두 주 수령인(primary) 몫과 referenceDepth까지의 참조 NFT 몫을 함께 담은 ReferenceRoyalty 구조체를 반환합니다.

설정 함수와 10% 상한

setReferenceRoyalty는 recipients와 royaltyFractions(베이시스 포인트) 배열로 주 수령인 몫을 정하고 referenceDepth로 참조 전파 범위를 제한합니다. 호출은 권한 있는 주체(예: rNFT 컨트랙트 소유자)로 제한되어야 하고(MUST), 주 수령인 비율의 합계는 1000 베이시스 포인트(10%)를 넘지 못하게 강제해야 합니다(MUST). 이 10% 상한은 주 수령인 단계에만 적용되며 참조 단계로 흘러가는 몫은 REFERRED_ROYALTY_FRACTION과 referenceDepth가 따로 관리합니다.

EIP-712 서명 기반 설정

서명 오버로드에서 복구된 서명자는 CONFIGURATOR_ROLE을 갖거나 검증 시점의 IERC721(rNFTContract).ownerOf(tokenId)여야 합니다(MUST). 메시지에는 논스가 포함되어야 하고 컨트랙트는 논스를 추적·검증·증가시켜 재사용(replay)을 막아야 합니다. deadline은 block.timestamp와 비교해 block.timestamp > deadline인 서명은 거부해야 합니다. 권장 도메인은 name "RNFTRoyalty", version "2"이고 서명 구조체에는 recipients와 royaltyFractions의 keccak256 해시가 들어갑니다. signer 파라미터를 명시하므로 실제 트랜잭션은 중계자(relayer)가 보낼 수 있습니다.

분배 모델: 2% 전달과 깊이 제한

주 수령인 몫은 royaltyInfos 배열의 비율대로 나눕니다(예: 5%를 3%와 2%로 분할). 참조 단계에서는 각 홉(hop)마다 REFERRED_ROYALTY_FRACTION(예: 200bps, 2%)에 해당하는 몫을 떼어 그 깊이의 참조된 NFT들에 설정된 가중치 비례로 나누고 가중치가 모두 0이면 균등 분배합니다. referenceDepth는 반드시 상한을 두어야 하며(MUST), 참조 구현은 3 이하를 강제합니다(권장). 예시에서 depth 2, 주 로열티 5%(3%+2%), 깊이 1에 참조 NFT 2개가 있으면 2%가 전달되어 1%씩 나뉘고 100 ETH 판매 시 창작자 3 ether, 협업자 2 ether, 참조 NFT 소유자 각 1 ether가 됩니다.

ERC-165 발견과 독립 설계

구현체는 supportsInterface(type(IRNFTRoyalty).interfaceId)에 true를 반환해야 하고(MUST), 상속을 쓸 때는 다른 인터페이스를 super.supportsInterface로 전달해야 합니다(SHOULD). supportsReferenceRoyalties() 함수도 있지만 탐지는 ERC-165에 의존해야 합니다. 이 표준은 ERC-2981과 독립적이고 토큰 표준에 매이지 않는 별도 컨트랙트로 설계되었으며 ERC-5521 rNFT를 대상으로 하고 실질적으로는 ERC-721 소유권 의미론 위에서 동작합니다. 마켓플레이스는 ERC-165 확인, 조회 함수 호출, 선택적 서명 설정만으로 통합할 수 있습니다.

쓸 때 주의할 점

ERC 원문 · ← ERCs