x/nft
목차
개요
x/nft는 ADR 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_id와 id는 nft의 고유성을 식별하는 두 가지 튜플입니다. uri와 uri_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 모듈의 메시지 처리를 설명합니다. :::warningClassID와 NftID의 유효성 검사는 앱 개발자에게 맡겨집니다.
SDK는 이러한 필드에 대한 유효성 검사를 제공하지 않습니다.
:::
MsgSend
MsgSend 메시지를 사용하여 nft의 소유권을 전송할 수 있습니다. 이것은 x/nft 모듈이 제공하는 기능입니다. 물론 Transfer 메서드를 사용하여 자체 전송 로직을 구현할 수 있지만, 전송 권한에 추가적인 주의가 필요합니다.
메시지 처리는 다음과 같은 경우에 실패합니다:
- 제공된
ClassID가 존재하지 않는 경우 - 제공된
Id가 존재하지 않는 경우 - 제공된
Sender가 nft의 소유자가 아닌 경우
