메인 콘텐츠로 건너뛰기

x/nft

목차

개요

x/nftADR 043에 따른 Cosmos SDK 모듈 구현으로, nft 분류 생성, nft 생성, nft 전송, nft 업데이트 및 모듈을 통합하여 다양한 쿼리를 지원합니다. ERC721 사양과 완전히 호환됩니다.

Concepts

Class

x/nft 모듈은 nft 클래스의 공통 특성을 설명하는 Class 구조체를 정의합니다. 이 클래스 아래에서 다양한 nft를 생성할 수 있으며, 이는 Ethereum의 erc721 컨트랙트와 동일합니다. 설계는 ADR 043에 정의되어 있습니다.

NFT

NFT의 전체 이름은 Non-Fungible Tokens입니다. NFT의 대체 불가능한 특성으로 인해 고유한 것을 나타내는 데 사용될 수 있습니다. 이 모듈이 구현한 nft는 Ethereum ERC721 표준과 완전히 호환됩니다.

State

Class

Class는 주로 id, name, symbol, description, uri, uri_hash, data로 구성되며, id는 클래스의 고유 식별자로 Ethereum ERC721 컨트랙트 주소와 유사합니다. 나머지는 선택 사항입니다.
  • Class: 0x01 | classID | -> ProtocolBuffer(Class)

NFT

NFT는 주로 class_id, id, uri, uri_hash, data로 구성됩니다. 이 중 class_idid는 nft의 고유성을 식별하는 두 가지 튜플입니다. uriuri_hash는 선택 사항으로, nft의 오프체인 저장 위치를 식별하며, data는 Any 타입입니다. x/nft 모듈을 사용하는 모든 체인은 이 필드를 확장하여 커스터마이즈할 수 있습니다.
  • NFT: 0x02 | classID | 0x00 | nftID |-> ProtocolBuffer(NFT)

NFTOfClassByOwner

NFTOfClassByOwner는 주로 classID와 owner를 사용하여 모든 nft를 쿼리하는 기능을 구현하며, 다른 불필요한 기능은 없습니다.
  • NFTOfClassByOwner: 0x03 | owner | 0x00 | classID | 0x00 | nftID |-> 0x01

Owner

NFT에 nft의 소유자를 나타내는 추가 필드가 없으므로 nft의 소유권을 저장하기 위해 추가 키-값 쌍이 사용됩니다. nft의 전송과 함께 키-값 쌍이 동기적으로 업데이트됩니다.
  • OwnerKey: 0x04 | classID | 0x00 | nftID |-> owner

TotalSupply

TotalSupply는 특정 클래스 아래의 모든 nft 수를 추적합니다. 해당 클래스에서 Mint 작업이 수행되면 supply가 1 증가하고, burn 작업 시 supply가 1 감소합니다.
  • OwnerKey: 0x05 | classID |-> totalSupply

Messages

이 섹션에서는 NFT 모듈의 메시지 처리를 설명합니다. :::warning ClassIDNftID의 유효성 검사는 앱 개발자에게 맡겨집니다. SDK는 이러한 필드에 대한 유효성 검사를 제공하지 않습니다. :::

MsgSend

MsgSend 메시지를 사용하여 nft의 소유권을 전송할 수 있습니다. 이것은 x/nft 모듈이 제공하는 기능입니다. 물론 Transfer 메서드를 사용하여 자체 전송 로직을 구현할 수 있지만, 전송 권한에 추가적인 주의가 필요합니다. 메시지 처리는 다음과 같은 경우에 실패합니다:
  • 제공된 ClassID가 존재하지 않는 경우
  • 제공된 Id가 존재하지 않는 경우
  • 제공된 Sender가 nft의 소유자가 아닌 경우

Events

nft 모듈은 Protobuf 참조에 정의된 proto 이벤트를 발생시킵니다.