ERC-2981: NFT 로열티는 어떻게 정의되고 구현되는가

주요 결과
• ERC-2981은 NFT 로열티를 정의하는 이더리움 표준입니다.
• 마켓플레이스는 'royaltyInfo' 함수를 통해 로열티를 계산합니다.
• 로열티 강제 집행은 마켓플레이스의 정책에 따라 달라집니다.
• 2023년부터 로열티 강제 집행이 선택 사항으로 전환되고 있습니다.
• 제작자는 하드웨어 지갑을 사용하여 로열티 설정을 안전하게 관리해야 합니다.
NFT 로열티는 제작자와 마켓플레이스 간의 사회적 계약으로 시작되었습니다. 거래가 성숙하고 수수료 모델이 발전함에 따라 업계는 모든 마켓플레이스가 읽을 수 있는 일관된 온체인 방식의 로열티 정보 설명이 필요하게 되었습니다. ERC-2981은 바로 이를 제공합니다. 특정 NFT 판매에 대해 얼마의 로열티가 누구에게 지급되어야 하는지 쿼리하기 위한 최소한의 상호 운용 가능한 인터페이스입니다. 이 글에서는 ERC-2981이 무엇인지, 작동 방식, 구현 시 고려 사항, 그리고 마켓플레이스의 강제 집행 및 제작자 수익화 현황에 대해 설명합니다.
ERC-2981이 실제로 표준화하는 것
ERC-2981은 대체 불가능한 토큰에 대한 단일 함수를 정의하는 이더리움 표준입니다.
royaltyInfo(tokenId, salePrice)
→(receiver, royaltyAmount)
로열티를 존중하는 마켓플레이스는 판매 시점에 royaltyInfo
를 호출하여 지급액을 계산합니다. 이 표준은 지급을 강제하지 않으며, 인터페이스만 설명합니다. 강제 집행은 마켓플레이스의 정책 문제에 달려 있습니다.
주요 설계 선택 사항:
- 비율 기반: 로열티는 판매 가격에 대한 함수로 계산되며, 일반적으로 기십점(예: 500 = 5%)과 같은 분수를 사용합니다.
- 수신자 유연성: 로열티 수신자는 제작자의 주소, 멀티시그, 분할 계약 또는 업그레이드 가능한 지급 주소가 될 수 있습니다.
- ERC-721 및 ERC-1155와 호환: ERC-2981은 일반적인 NFT 표준과 호환되며, 인터페이스 감지를 위해 ERC-165를 사용합니다.
운영 준비가 된 구현을 위해 많은 팀이 OpenZeppelin의 ERC2981을 기반으로 구축합니다.
왜 지금 중요한가
2023년부터 몇몇 선도적인 마켓플레이스는 로열티 강제 집행을 선택 사항으로 전환했습니다. 가장 주목할 만한 변화는 OpenSea가 로열티를 강제하는 장소로 거래를 제한할 수 있었던 Operator Filter를 종료하기로 결정한 것입니다. 자세한 내용은 OpenSea 발표를 참조하십시오. 결과적으로 ERC-2981과 같은 온체인 표준은 강제 집행 방식이 다양함에도 불구하고 플랫폼 전반에 걸쳐 로열티 데이터를 표시하는 기본 방식이 되었습니다.
그 이후로 생태계는 다음과 같은 대응을 했습니다.
- 마켓플레이스가 로열티 로직을 통일된 방식으로 확인하여 로열티 로직을 해결할 수 있도록 하는 레지스트리 인프라스트럭처, 예: Royalty Registry 및 관련 명세.
- 온체인 강제 집행 또는 제한을 위한 프로그래밍 가능한 표준, 특히 ERC-721C (Creator Token Standards).
- 프로토콜 수준 보상 및 제작자 인센티브와 같은 대안적 수익 모델, 예: Zora의 Creator Rewards.
2024-2025년에는 L1 및 L2 네트워크 전반에 걸쳐 ERC-2981 채택이 계속 확산될 것이며, 로열티를 존중하기로 선택한 마켓플레이스는 일반적으로 거래를 정산할 때 이 인터페이스를 쿼리할 것입니다.
인터페이스 작동 방식 (예상치 못한 문제 없이)
판매 시점에 규정을 준수하는 마켓플레이스는 다음을 수행합니다.
- ERC-165 (인터페이스 ID
0x2a55205a
)를 통해 토큰이IERC2981
을 지원하는지 확인합니다. royaltyInfo(tokenId, salePrice)
를 호출하여 다음을 가져옵니다.receiver
: 지급금을 받을 주소.royaltyAmount
:salePrice
에서 계산된 지급액.
제작자 또는 컬렉션 소유자는 일반적으로 "기본 로열티"를 설정하고 선택적으로 "토큰별 로열티"를 설정합니다. 많은 구현에서 기십점(basis points)에 대한 분모로 10,000을 사용합니다. 마켓플레이스 회계는 판매 수익을 판매자, 프로토콜 수수료 및 로열티 수신자에게 분배합니다.
구현 팁:
royaltyInfo
에서 되돌리기(revert)를 피하세요. 마켓플레이스는 호출이 실패할 경우 지급을 건너뛸 수 있습니다.- 로열티 수신자를 업그레이드 가능하게 유지하세요(예: Ownable 또는 관리자 제어를 통해) 키를 교체하거나 분할 계약으로 마이그레이션할 수 있습니다.
- 합리적인 최대치로 로열티를 제한하세요(많은 프로젝트가 ≤10% 유지). 이는 2차 시장 유동성을 장려합니다.
간단한 Solidity 예제
아래는 OpenZeppelin을 사용한 간소화된 패턴입니다. 기본 로열티를 설정하고 ERC-165 지원을 재정의하는 방법을 보여줍니다. 프로덕션에서는 접근 제어, 초기화 가드 및 강력한 민팅 논리를 추가해야 합니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC721/ERC721.[sol](https://onekey.so/blog/ko/ecosystem/best-sol-wallets-in-2025-ultimate-guide-to-software-hardware-options/)";
import "@openzeppelin/contracts/token/common/ERC2981.[sol](https://onekey.so/blog/ko/ecosystem/best-sol-wallets-in-2025-ultimate-guide-to-software-hardware-options/)";
import "@openzeppelin/contracts/access/Ownable.[sol](https://onekey.so/blog/ko/ecosystem/best-sol-wallets-in-2025-ultimate-guide-to-software-hardware-options/)";
[contract](https://onekey.so/blog/ko/ecosystem/what-is-a-smart-contract/) MyNFT is ERC721, ERC2981, Ownable {
uint256 private _nextTokenId;
constructor([address](https://onekey.so/blog/ko/ecosystem/what-is-a-crypto-wallet-address/) defaultReceiver, uint96 defaultBps)
ERC721("MyNFT", "MYN")
{
// 기본 로열티 설정 (예: 500 = 5%)
_setDefaultRoyalty(defaultReceiver, defaultBps);
}
function mint([address](https://onekey.so/blog/ko/ecosystem/what-is-a-crypto-wallet-address/) to) external onlyOwner {
_safeMint(to, _nextTokenId);
_nextTokenId++;
}
// 선택 사항: 특별 아이템에 대한 토큰별 로열티 설정
function setTokenRoyalty(uint256 tokenId, [address](https://onekey.so/blog/ko/ecosystem/what-is-a-crypto-wallet-address/) receiver, uint96 bps)
external
onlyOwner
{
_setTokenRoyalty(tokenId, receiver, bps);
}
// 필수: ERC-165 supportsInterface
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, ERC2981)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}
더 자세한 내용은 OpenZeppelin의 ERC2981 가이드를 참조하십시오.
분할, 업그레이드 및 엣지 케이스 처리
실제 로열티 흐름은 단일 수신자인 경우가 드뭅니다. 고려 사항:
- 분할 계약: 잘 테스트된 인프라스트럭처인 0xSplits를 사용하여 고정된 비율로 여러 당사자에게 수익을 라우팅합니다.
- 레지스트리 조회: 일부 마켓플레이스는 최신 로열티 데이터를 위해 레지스트리를 참조합니다(Royalty Registry).
- 업그레이드 가능한 수신자: 키 교체 또는 조직 변경 시 수신 주소를 업데이트할 수 있는 기능을 유지합니다.
- 토큰별 재정의: 특별 에디션은 기본값에 비해 고유한 로열티율을 가질 수 있습니다.
기술적 참고 사항:
- 일관된 분모: 오프체인 통합에서 명확성을 위해 기십점(10,000)을 사용합니다.
- 토큰 유형 인식: ERC-1155 구현은 번들 가격이 아닌 토큰별 판매 가격에 대한 로열티를 계산해야 합니다.
- 우아한 폴백: 로열티 수신자가 설정되지 않은 경우 0을 반환하여 마켓플레이스 호출 실패를 방지합니다.
마켓플레이스 현실: 신호 대 강제 집행
ERC-2981은 제작자의 의도를 신호합니다. 지급을 강제하지는 않습니다. 각기 다른 장소에서는 다음과 같은 조치를 취할 수 있습니다.
- ERC-2981을 완전히 존중합니다.
- 특정 조건 하에서 로열티를 제한하거나 줄입니다.
- 로열티를 완전히 무시합니다.
이러한 변동성을 고려하여 많은 제작자는 하이브리드 모델을 실험합니다.
- ERC-721C를 통한 온체인 제한으로 로열티를 존중하는 운영자에게만 전송을 제한합니다.
- Zora의 Creator Rewards와 같은 프로토콜 수준 보상.
- 제작자 수익 존중에 대한 커뮤니티 규범 및 사회적 압력.
OpenSea의 2023년 운영자 필터링 종료 결정은 프로토콜 수준 강제 집행보다는 시장 선택으로의 더 넓은 추세를 반영합니다. 자세한 내용은 발표를 참조하십시오. 2024-2025년에는 이러한 균형이 계속될 것입니다. ERC-2981은 로열티 메타데이터에 대한 표준 인터페이스로 남아 있지만, 강제 집행은 분산되어 있습니다.
테스트, 검증 및 모니터링
안정적인 로열티 동작을 보장하려면 다음을 수행하십시오.
- 인터페이스 지원 확인: 계약이 ERC-165에 따라
supportsInterface(0x2a55205a) == true
를 보고하는지 확인합니다. - 호출 시뮬레이션: 엣지 판매 가격 및 토큰에 걸쳐
royaltyInfo
를 테스트합니다. - 인덱싱 호환성: 마켓플레이스 파트너가 의존하는 경우 Royalty Registry와 같은 관련 레지스트리에 계약을 등록합니다.
- 명확하게 문서화: 구매자와 마켓플레이스의 예기치 않은 상황을 최소화하기 위해 로열티 정책, 제한 및 수신자 로직을 게시합니다.
- 표준 학습: ERC-2981이 처음이라면 Alchemy의 이 개요가 유용한 입문서가 될 것입니다: ERC-2981이란 무엇인가?.
제작자를 위한 보안 및 키 관리
로열티 구성은 관리자 제어 하에 있습니다. 공격자가 배포자 또는 관리자 키에 액세스할 수 있게 되면 로열티를 다른 곳으로 전환하거나 비활성화할 수 있습니다. 모범 사례:
- 기본 로열티 설정, 수신자 업데이트 또는 분할 계약 배포와 같은 높은 권한 작업에는 하드웨어 지갑을 사용합니다.
- 팀 관리 컬렉션에는 멀티시그 설정을 선호합니다.
- 서명 흐름을 투명하고 감사 가능하게 유지합니다.
보안 및 UX를 저해하지 않으면서 안전하고 이식 가능한 서명을 원하는 제작자와 스튜디오의 경우 OneKey 하드웨어 지갑은 다음을 제공합니다.
- 오픈 소스 펌웨어 및 투명한 보안 관행을 갖춘 오프라인 개인 키 저장.
- 계약 배포 및 관리 작업을 위한 일반적인 이더리움 도구와의 원활한 통합.
- NFT가 L2 또는 여러 EVM 네트워크에서 민팅되는 경우 유용한 크로스체인 지원.
하드웨어 지갑을 사용하여 로열티 설정을 관리하면 손상된 장치나 핫 월렛으로 인해 온체인 수익 신호가 변조되지 않도록 할 수 있습니다.
결론
ERC-2981은 NFT 로열티의 기반 계층입니다. 마켓플레이스가 제작자 지급액을 결정하기 위해 읽을 수 있는 간단하고 보편적인 인터페이스입니다. 이는 강제 집행을 보장하지는 않지만(마켓 정책이 합니다), 신호를 표준화합니다. 강제 집행이 선택 사항이고 진화하는 세상에서 ERC-2981을 레지스트리, 분할 계약 및 ERC-721C와 같은 프로그래밍 가능한 제한과 결합하면 제작자에게 작업을 지속하기 위한 실용적인 도구를 제공합니다.
NFT 컬렉션 또는 제작자 인프라를 관리하는 경우 ERC-2981을 깔끔하게 구현하고 철저히 테스트하며 하드웨어 지갑으로 관리자 키를 안전하게 보호하십시오. 이 조합은 프로젝트가 의존하는 수익 흐름을 보호하면서 마켓플레이스 전반의 상호 운용성을 극대화합니다.