01Web3
2026년 5월게이미피케이션 NFT 컬렉션 구조 분석 문서
이름·레벨·토큰 커런시 모듈을 가진 게이미피케이션 NFT 컬렉션의 컨트랙트 패턴과 함정을 정리한 관찰자 시점 기술 문서
이 프로젝트에서의 operator-filter-registry 활용
OpenSea royalty 강제 정책 대응을 위한 transferFrom 필터링 통합
nft-utility-collection-docs프로젝트 자세히 보기 →
프로젝트 1개에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.
NFT 전송 시 로열티를 지불하지 않는 마켓플레이스와의 거래를 온체인에서 차단하는 필터링 레지스트리
OperatorFilterRegistry는 OpenSea가 만든 온체인 레지스트리 컨트랙트로, NFT 컬렉션이 특정 마켓플레이스나 컨트랙트(오퍼레이터)를 통한 transferFrom·approve 호출을 선택적으로 차단할 수 있게 해준다. 일부 마켓플레이스가 크리에이터 로열티를 지불하지 않고 NFT 거래를 중개하는 문제에 대응하기 위해 만들어졌다. NFT 컨트랙트는 레지스트리를 참조하는 베이스 컨트랙트를 상속해 전송 관련 함수에 필터링 검사를 추가하고, 레지스트리에 등록된 차단 목록에 해당하는 오퍼레이터의 요청을 거부한다.
컨트랙트 배포 시 기본 필터 목록을 구독하고, transferFrom·approve 호출 시 오퍼레이터가 차단 목록에 없는지 검사한다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "operator-filter-registry/src/DefaultOperatorFilterer.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyNFT is ERC721, DefaultOperatorFilterer {
constructor() ERC721("MyNFT", "MNFT") {}
function transferFrom(address from, address to, uint256 tokenId)
public
override
onlyAllowedOperator(from)
{
super.transferFrom(from, to, tokenId);
}
function approve(address operator, uint256 tokenId)
public
override
onlyAllowedOperator(msg.sender)
{
super.approve(operator, tokenId);
}
}위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.
위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.
이름·레벨·토큰 커런시 모듈을 가진 게이미피케이션 NFT 컬렉션의 컨트랙트 패턴과 함정을 정리한 관찰자 시점 기술 문서
이 프로젝트에서의 operator-filter-registry 활용
OpenSea royalty 강제 정책 대응을 위한 transferFrom 필터링 통합
위 프로젝트들에서 같이 쓰인 다른 기술입니다.