동현 유
척척석사
동현 유
전체 방문자
오늘
어제
  • 분류 전체보기 (178)
    • BlockChain (48)
      • [paper] Consensus (13)
      • [paper] Execution (19)
      • [paper] Storage (5)
      • [paper] ZKP (1)
      • [paper] Oracle (1)
      • Blockchains (9)
    • Java (19)
      • Java의 정석 (13)
      • Java 파헤치기 (5)
    • Python (20)
      • Python 뜯어보기 (6)
      • 데이터 분석 기초 (5)
      • Python 기초 강의 (6)
      • Python 기초 강의 부록 (3)
    • Golang (0)
    • MySQL (3)
      • programmers (2)
      • 기본 문법 (0)
    • 웹 프로젝트 (IBAS) (36)
      • Django 레거시 (14)
      • SpringBoot api 개편 (14)
      • Infra (3)
      • 서버 장애 기록 (4)
      • 신입팀원 교육 자료 (1)
    • CS (30)
      • Operating System (22)
      • Computer Security (3)
      • Network (4)
      • DBMS (1)
    • 책 (10)
      • 도메인 주도 설계 철저 입문 (9)
      • Real MySQL 8.0 (1)
    • BOJ 문제 풀이 (3)
    • 이러쿵저러쿵 (7)
    • 회고 (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
동현 유

척척석사

BlockChain/Blockchains

EIP-721: Non-Fungible Token Standard

2022. 8. 12. 15:27

Abstract

스마트 컨트랙트 내에서 NFT의 표준 API 인터페이스를 규정. 표준 API는 NFT를 교환하고 기록하기 위한 기본적인 기능을 제공한다.

NFT는 다음과 같은 다양한 디지털 또는 물리 자산에 대한 소유권을 나타낼 수 있다.

  • 물리 자산 - 집, 예술 작품 등
  • 수집품 - 유일성이 보장되는 수집용 카드 등
  • 대출과 같은 마이너스 자산 등

NFT는 구별 가능한 디지털 토큰으로서 각 자산에 대해 개별적으로 소유권을 추적할 수 있도록 한다.

Specification

  • ERC-721를 따르는 컨트랙트를 만들기 위해서는 ERC721, ERC165 인터페이스를 반드시 구현해야한다.
  • 어플리케이션은 지갑 인터페이스를 구현해야한다.
  • (Optional) 토큰 이름과 상세 정보를 외부에 제공하도록 메타데이터 인터페이스를 구현할 수 있다.
  • (Optional) enumeration extension : 모든 NFT를 검색할 수 있도록 함.

Rationale

  • NFT Identifiers
    :
    NFT는 uint256 의 ID 값을 갖는다. 따라서 (contract address, uint256 tokenId) 는 이더리움 체인에서 유일함을 보장한다. UUID, SHA3 등의 결과값이 32bytes 이기 때문에 uint256과 호환성이 좋다.
  • Transfer Mechanism
    • 컨트랙트가 중지되었을 때 불허해야함.
    • 허가되지 않은 NFT, 컨트랙트 등이 전송에 개입할 때 불허해야함.
    • unsafe 한 전송일 때 불허해야함.
    • 거래에 참여하는 양쪽에 요금을 부과해야함.
    • 거래가 실패한 경우는 ERC-223, ERC-677, ERC-827, OpenZeppelin’s implementation of SafeERC20.sol 등 참고해서 구현하도록 할것.
    • NFT를 생성하고 없애는 것에 대한 명세는 포함되지 않음. event 관련 문서를 참고할 것.
  • ERC-165 Interface
    :
    적용된 인터페이스가 무엇인지 공개하도록 정의된 ERC-165(Standard Interface Detection) 를 구현해야한다.
  • Gas and Complexity (regarding the enumeration extension)
    : for, while 루프를 사용하지 말 것. enumeration function 에 for-loop 대신 솔리디티 배역 타입을 반환하도록 하는 것이 가스 사용량 측면에서 안전함.
  • Privacy
    : 모든 토큰id 에 대해 ownerOf 함수를 호출하면 소유자를 쉽게 알 수 있기 때문에, privacy는 보장할 수 없다.
  • Metadata Choices
    :
    metadata extension을 통해 name 과 symbol 을 정의할 수 있는데, 빈문자열도 가능하고 다른 NFT와 중복되게 설정할 수 있다. web3 컨트랙트를 통해서만 호출할 수 있다.

Backwards Compatibility

ERC-20 과의 호환성을 위해 몇 함수를 인터페이스에 포함시켰다.

Implementation

  • CryptoKitties : https://mangkyu.tistory.com/79

'BlockChain > Blockchains' 카테고리의 다른 글

비잔틴 장애 허용 문제  (0) 2022.12.14
[Klaytn] 합의알고리즘  (1) 2022.12.14
[Hyperledger Fabric] 개념 정리 및 활용 프로젝트 예시  (0) 2022.08.22
EIP-1155: Multi Token Standard  (0) 2022.08.12
비트코인이란? (Bitcoin WhitePaper 정리)  (0) 2022.08.04
    동현 유
    동현 유
    Fault Tolerant System Researcher for more Trustful World and Better Lives. (LinkedIn: https://www.linkedin.com/in/donghyeon-ryu-526b8a276/)

    티스토리툴바