ERC-721 = NFT
721번째 토론인 EIP-721 토론
은 하나하나의 구분 가능한 토큰에 대한 토론이 이뤄졌습니다.
동전이 100원이 두개가 모이면 200원이 되는 것이 아니라 동전 하나하나의 구분 가능한 특징을 넣어서 100원 두개가 모여도, 동전 100원 1, 100원 2로 구분하듯이요.
ERC-20 토큰과 ERC-721의 차이점
ERC-20 토큰: 2017년 당시 가장 많이 쓰이고 있던 토큰
ERC-20 토큰
은 일반적으로 발행하고 있는 토큰 발행 기준입니다. 주로 화폐를 대체 가능한
암호화폐(토큰)을 지원하고 있기 떄문입니다.
대체 가능한이란?, 누군가가 가지고 있는 100원은 내가 가지고 있는 100원가 동일한 가치를
가지고 있다.
ERC-721 토큰
은 대체 불가능한 토큰을 지원합니다. ERC-721에서 발행하는 토큰들은 하나하나,
각자의 특징을 가지고 있습니다.
ERC-721 함수의 기능
ERC712
을 사용해서, 각각의 고유한 속성을 넣을 수 있씁니다. 그래서, 다양한 컨탠츠를 만들
수 있습니다. 각각의 ERC-721의 함수를 살펴보도록 하겠습니다.
공식 문서에 있는 게임 아이탬 속성을 확인해보세요!
ApprovalForAll(address owner, address operator, bool approved)
컨트랙트 오너(Owner)
가 오퍼레이터(operator)에게 모든 자산을 관리할 수 있는 권한을 부여하거나 없앨 수 있다.
ownerOf(uint256 tokenId) -> address owner
tokenId
가 존재해야하고, tokenId 에 해당하는 NFT 소유자를 알려줍니다.
function owner(uint256, tokenId) public view virtual override returns (address) {
// 소유자 변수
address owner = _owner[tokenId];
// 오류처리, address가 없을 경우
require(owner != address(0), "ERC721: owner query for nonexistent token")
// return owner;
}
setApprovalForAll(arress operator, bool _approved)
operator
의 권한(모든 자산을 관리)을 부여 혹은 없앨 수 있는 함수입니다.
function setApprovalForAll(arress operator, bool _approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved)
}
function _setApprovalForAll( address owner, address operator, bool approve) internal virtual {
// 오류 확인
require(owner != operator, "ERC721: approve to caller");
// 승인 후, 이밴트 발생
_operatorApproval[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approve);
}
)
getApproved(uint256 tokenId) -> address operator
tokenId
를 매개변수로 받으며, 승인된 계정의 주소를 다시 돌려줍니다.
function getApproved(uint256 tokenId) public view virtual override returns (address) {
// 에러 처리, tokenId가 존재하는지
require(_exists(tokenId), "ERC721: approved query for nonexistent token")
return _tokenApprovals[tokenId];
}
isApprovedForAll(address owner, address operator) -> bool
operator
가 owner의 주소를 관리할 수 있는지 확인하여 bool 값을 돌려줍니다.
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApproval[owner][operator];]
}
ERC-165
ERC165
는 ERC-721의 스마트컨트랙트가 생성될 때, 구현해야하는 인터페이스 검사 및 사용하는지 검사를 진행하는
역할을 하게됩니다.
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
// ERC165는 supportsInterface의 return bool만 가지고 있습니다.
// 아 함수의 매개변수로 ERC-721의 인터페이스 ID를 입력해야만, ERC-721
// 스마트 컨트랙트가 정상적으로 동작합니다.
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
ERC-721에 대해서 알아보았습니다.
'etc > solidity' 카테고리의 다른 글
백신 did smart contract 만들어보기 (비교적 간단하게 - solidity) (0) | 2022.02.09 |
---|---|
solidity - 테스트넷 simple token 배포하기 - 2 / 2 편 (0) | 2022.01.20 |
solidity - 테스트넷 simple token 배포하기 - 1 / 2 편 (0) | 2022.01.19 |
솔리디티(solidity) 문법 (간단 정리) (0) | 2022.01.17 |
ERC-721 = NFT
721번째 토론인 EIP-721 토론
은 하나하나의 구분 가능한 토큰에 대한 토론이 이뤄졌습니다.
동전이 100원이 두개가 모이면 200원이 되는 것이 아니라 동전 하나하나의 구분 가능한 특징을 넣어서 100원 두개가 모여도, 동전 100원 1, 100원 2로 구분하듯이요.
ERC-20 토큰과 ERC-721의 차이점
ERC-20 토큰: 2017년 당시 가장 많이 쓰이고 있던 토큰
ERC-20 토큰
은 일반적으로 발행하고 있는 토큰 발행 기준입니다. 주로 화폐를 대체 가능한
암호화폐(토큰)을 지원하고 있기 떄문입니다.
대체 가능한이란?, 누군가가 가지고 있는 100원은 내가 가지고 있는 100원가 동일한 가치를
가지고 있다.
ERC-721 토큰
은 대체 불가능한 토큰을 지원합니다. ERC-721에서 발행하는 토큰들은 하나하나,
각자의 특징을 가지고 있습니다.
ERC-721 함수의 기능
ERC712
을 사용해서, 각각의 고유한 속성을 넣을 수 있씁니다. 그래서, 다양한 컨탠츠를 만들
수 있습니다. 각각의 ERC-721의 함수를 살펴보도록 하겠습니다.
공식 문서에 있는 게임 아이탬 속성을 확인해보세요!
ApprovalForAll(address owner, address operator, bool approved)
컨트랙트 오너(Owner)
가 오퍼레이터(operator)에게 모든 자산을 관리할 수 있는 권한을 부여하거나 없앨 수 있다.
ownerOf(uint256 tokenId) -> address owner
tokenId
가 존재해야하고, tokenId 에 해당하는 NFT 소유자를 알려줍니다.
function owner(uint256, tokenId) public view virtual override returns (address) {
// 소유자 변수
address owner = _owner[tokenId];
// 오류처리, address가 없을 경우
require(owner != address(0), "ERC721: owner query for nonexistent token")
// return owner;
}
setApprovalForAll(arress operator, bool _approved)
operator
의 권한(모든 자산을 관리)을 부여 혹은 없앨 수 있는 함수입니다.
function setApprovalForAll(arress operator, bool _approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved)
}
function _setApprovalForAll( address owner, address operator, bool approve) internal virtual {
// 오류 확인
require(owner != operator, "ERC721: approve to caller");
// 승인 후, 이밴트 발생
_operatorApproval[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approve);
}
)
getApproved(uint256 tokenId) -> address operator
tokenId
를 매개변수로 받으며, 승인된 계정의 주소를 다시 돌려줍니다.
function getApproved(uint256 tokenId) public view virtual override returns (address) {
// 에러 처리, tokenId가 존재하는지
require(_exists(tokenId), "ERC721: approved query for nonexistent token")
return _tokenApprovals[tokenId];
}
isApprovedForAll(address owner, address operator) -> bool
operator
가 owner의 주소를 관리할 수 있는지 확인하여 bool 값을 돌려줍니다.
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApproval[owner][operator];]
}
ERC-165
ERC165
는 ERC-721의 스마트컨트랙트가 생성될 때, 구현해야하는 인터페이스 검사 및 사용하는지 검사를 진행하는
역할을 하게됩니다.
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
// ERC165는 supportsInterface의 return bool만 가지고 있습니다.
// 아 함수의 매개변수로 ERC-721의 인터페이스 ID를 입력해야만, ERC-721
// 스마트 컨트랙트가 정상적으로 동작합니다.
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
ERC-721에 대해서 알아보았습니다.
'etc > solidity' 카테고리의 다른 글
백신 did smart contract 만들어보기 (비교적 간단하게 - solidity) (0) | 2022.02.09 |
---|---|
solidity - 테스트넷 simple token 배포하기 - 2 / 2 편 (0) | 2022.01.20 |
solidity - 테스트넷 simple token 배포하기 - 1 / 2 편 (0) | 2022.01.19 |
솔리디티(solidity) 문법 (간단 정리) (0) | 2022.01.17 |