콘텐츠로 이동

2022 07 01

2022-07-01

IPFS

  • 참고: http://wiki.hash.kr/index.php/IPFS
  • 참고: https://www.lgcns.com/blog/it-trend/31193/
  • InterPlanetary File System
    • 분산형 파일 시스템에 데이터를 저장하고 인터넷으로 공유하기 위한 프로토콜
    • P2P 방식으로 대용량 파일과 데이터를 공유하기 위해 사용함
    • HTTP 방식은 데이터 위치한 주소로 가서 받아오는 방식
    • IPFS는 데이터의 내용을 변환한 해시값을 이용해 전 세계 여러 컴퓨터에 분산 저장되어 있는 컨텐츠를 찾아 데이터를 조가으로 잘게 나눠 빠른 속도로 가져온 후 합치는 방식
  • vs HTTP
    • 위치 기반의 중앙화 구조
    • 데이터는 특정 기업이나 주체가 관리
    • 중앙화 방식의 구조적 단점과 검열 문제를 극복하고자 ipfs 등장
  • IPFS
    • 데이터를 수많은 노드에 호스팅하고 백업할 수 있는 P2P 분산 네트워크
    • 수많은 공간에 데이터가 분산/복제/저장
    • HTTP를 대체할 수 있는 아이디어
    • IPFS에 저장된 데이터 작게 분할되어 여러 컴퓨터와 저장 공간 등에 분산됨
    • IPFS에서 시스템이 요청 받으면 노드가 응답을 시작하는 네트워크로 해당 요청 보냄
      • 네트워크 전체에서 사용 가능한 데이터를 전달할 수 있는 노드의 응답 받음
      • "SHA-256" 해시를 사용해 데이터 보호
    • IPFS에서 저장 공간은 완전히 분산되어 있고 높은 확장성과 효율성을 보여줄 수 있음 => 기존 구조의 단점을 보완할 수 있다
      • 항상 데이터에 접근해 불러올 수 있고, 보안 관련 공격에도 강함
  • Questions
    • 얼마나 많은 사용자가 노드를 다운로드하고 운영하려고 할런지?
    • 친숙하고 표준적인 기존의 웹 URL 대신 투박한 식별자 링크가 선호가 될런지?

NFT at Klaytn

  • 참고: https://www.youtube.com/watch?v=_9EyLqGmQYw
  • NFT 발행의 과정
    1. JSON, image 조합을 통해 nft 메타데이터를 제작한다
    2. 해당 정보를 ipfs에 저장
    3. smart contract KIP-17 (ERC-721)에 배포
      • 여기에 화이트리스트, 민팅, 에어드랍 등의 기능을 커스텀 코드로 제작할 수 있음
    4. Klaytn에 배포
    5. Minting 하기
    6. Opensea 규격에 맞게 NFT가 블록체인에 올라와있다면, 이를 Opensea에서 판매/구경 가능
  • NFT 민팅?
    • "발행"
    • NFT가 먼저 민팅 된 후에 판매되던 초창기... => 현재는 NFT 민팅 과정에 구매자가 참여하여 민팅 가격 지불하고 개인지갑으로 NFT 받음
    • "발매 당시 NFT 구매"
    • 요즘
      • ①: NFT 민팅(발행)에 구매자가 비용을 지불하며 참여 ②: NFT 민팅(발행)과 동시에 민팅 참여자에게 NFT 전송
    • 초창기
      • ①: 판매자가 NFT를 우선 민팅(발행) ②: 민팅된 NFT를 판매 등록 ③: 구매자가 해당 NFT 구매

NFT 메타데이터

  • token URI
    • HTTP 혹은 IPFS URL을 가질 것
    • 해당 URL은 JSON blob을 반환할 것
      function tokenURI(uint256 _tokenId) public view returns (string) {
        return Strings.strConcat(
            baseTokenURI(),
            Strings.uint2str(_tokenId)
        );
      }
      
  • Metadata 구조
    • 오픈씨에서 지원하는 메타데이터의 정보들
    • image: 이미지 URL
    • image_data: Raw SVG 이미지 데이터
    • external_url: 자산의 이미지를 오픈씨를 통해 볼 수 있도록 하는 URL
    • description: 아이템 설명
    • name: 아이템 이름
    • attributes: 아이템 속성 (오픈씨에서 나타남)
    • background_color: 오픈씨의 배경색
    • animation_url: GLTF, GLB, WEBM, MP4, M4V, OGV, OGG, MP3, WAV, OGA 등등
    • youtube_url: youtube 비디오에 대함
  • Attributes
    {
      "attributes": [
        {
          "trait_type": "Base", 
          "value": "Starfish"
        },
        {
          "trait_type": "Eyes",
          "value": "Big"
        },
        {
          "trait_type": "Mouth",
          "value": "Surprised"
        }
      ]
    }