영화와 음식과 여행

[블록체인] ERC-721 본문

개발

[블록체인] ERC-721

돌고래꽃 2021. 1. 6. 09:45
ERC-721 문서는 NFT(Non Fungible Token) 토큰에 대한 표준을 제공한다.

코드 명세

A. 해당 주소가 보유하고 있는 NFT 토큰의 개수 : ERC-20에서는 토큰의 총량 이었음

function balanceOf(address owner) public view returns (uint256 balance); 

B. 해당 NFT 토큰을 소유하고 있는 주소를 보여준다.

function ownerOf(uint256 tokenId) public view returns (address owner); 

 

C. 해당 주소에 NFT 토큰 전송 권한을 부여한다.

function approve(address to, uint256 tokenId) public;

 

C-1. 해당 토큰의 전송 권한을 갖고 있는 주소를 보여준다.

function getApproved(uint256 tokenId) public view returns (address operator);

 

D. 해당 주소의 모든 NFT 토큰에 대한 전송 권한을 부여/해제 한다.

function setApprovalForAll(address operator, bool _approved) public;

 

D-1. D에 대한 권한이 있는지 참 거짓을 보여준다.

function isApprovedForAll(address owner, address operator) public view returns (bool);

 

E. NFT 토큰 소유자로부터 해당 NFT토큰을 다른 주소로 전송한다.

function transferFrom(address from, address to, uint256 tokenId) public {
    // require 안의 내용이 거짓이면 throw 됨. 
    require(_isApprovedOrOwner(msg.sender, tokenId)); // sender가 owner 거나 operator(approval을 받았는지)인지 확인 
    require(to != address(0)); 
    
    _clearApproval(from, tokenId); // 토큰이 이전되므로 from의 토큰에 대한 권한을 없앤다. 
    _removeTokenFrom(from, tokenId); // from에게서 token을 없앤다. 
    _addTokenTo(to, tokenId); // to에 token을 더한다. 
    
    emit Transfer(from, to, tokenId); 
};

F. 전송받는 주소가 ERC 721 토큰을 받을 수 있는지 체크하고 보낸다.
    전송받는 주소가 실제 지갑주소가 아니라 스마트컨트랙트 주소일 수도 있는데 그걸 확인하고 보내는 것임. 그래서 E에는 to 주소가 스마트컨트랙트면 토큰이 소실될 수 있다고 명시되어 있음.

function safetransferFrom(address from, address to, uint256 tokenId) public; 
{ // byte 부분에 그냥 "" 넣고 보내면 됨  }
function safetransferFrom(address from, address to, uint256 tokenId, bytes data) public;

G. ERC-721 토큰을 받으려는 스마트컨트랙트 주소가 구현해야하는 인터페이스.

    해당 스마트컨트랙트 주소가 ERC-721 토큰을 받을 수 있는지 ERC-165(keccak256을 사용해 해당 코드가 ERC-20, ERC-721 표준을 따르는지 검사하기 위한 표준)를 통해서 체크함.

interface ERC721TokenReceiver { 
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes)
}

 

 참고자료

 

'개발' 카테고리의 다른 글

[블록체인] DeFi  (0) 2021.01.06
[블록체인] Ethereum 2  (0) 2021.01.06
[블록체인] UDC 2020  (0) 2021.01.04
[블록체인] 옴니원  (0) 2021.01.04
Comments